diff --git a/.clang-format b/.clang-format index 3a0e0e33f6..e7f9329947 100644 --- a/.clang-format +++ b/.clang-format @@ -54,7 +54,7 @@ BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: BeforeColon BreakAfterJavaFieldAnnotations: false BreakStringLiterals: true -ColumnLimit: 80 +ColumnLimit: 90 CommentPragmas: '^ IWYU pragma:' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: false diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000000..c455d235f9 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,214 @@ +--- +Checks: '-*,readability-*' +WarningsAsErrors: '' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +FormatStyle: none +User: joshuam +CheckOptions: + - key: bugprone-argument-comment.CommentBoolLiterals + value: '0' + - key: bugprone-argument-comment.CommentCharacterLiterals + value: '0' + - key: bugprone-argument-comment.CommentFloatLiterals + value: '0' + - key: bugprone-argument-comment.CommentIntegerLiterals + value: '0' + - key: bugprone-argument-comment.CommentNullPtrs + value: '0' + - key: bugprone-argument-comment.CommentStringLiterals + value: '0' + - key: bugprone-argument-comment.CommentUserDefinedLiterals + value: '0' + - key: bugprone-argument-comment.IgnoreSingleArgument + value: '0' + - key: bugprone-argument-comment.StrictMode + value: '0' + - key: bugprone-assert-side-effect.AssertMacros + value: assert + - key: bugprone-assert-side-effect.CheckFunctionCalls + value: 'false' + - key: bugprone-dangling-handle.HandleClasses + value: 'std::basic_string_view;std::experimental::basic_string_view' + - key: bugprone-dynamic-static-initializers.HeaderFileExtensions + value: ';h;hh;hpp;hxx' + - key: bugprone-exception-escape.FunctionsThatShouldNotThrow + value: '' + - key: bugprone-exception-escape.IgnoredExceptions + value: '' + - key: bugprone-misplaced-widening-cast.CheckImplicitCasts + value: 'false' + - key: bugprone-narrowing-conversions.PedanticMode + value: 'false' + - key: bugprone-narrowing-conversions.WarnOnFloatingPointNarrowingConversion + value: 'true' + - key: bugprone-not-null-terminated-result.WantToUseSafeFunctions + value: 'true' + - key: bugprone-reserved-identifier.AggressiveDependentMemberLookup + value: 'false' + - key: bugprone-reserved-identifier.AllowedIdentifiers + value: '' + - key: bugprone-reserved-identifier.Invert + value: 'false' + - key: bugprone-signed-char-misuse.CharTypdefsToIgnore + value: '' + - key: bugprone-signed-char-misuse.DiagnoseSignedUnsignedCharComparisons + value: 'true' + - key: bugprone-sizeof-expression.WarnOnSizeOfCompareToConstant + value: 'true' + - key: bugprone-sizeof-expression.WarnOnSizeOfConstant + value: 'true' + - key: bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression + value: 'false' + - key: bugprone-sizeof-expression.WarnOnSizeOfThis + value: 'true' + - key: bugprone-string-constructor.LargeLengthThreshold + value: '8388608' + - key: bugprone-string-constructor.WarnOnLargeLength + value: 'true' + - key: bugprone-suspicious-enum-usage.StrictMode + value: 'false' + - key: bugprone-suspicious-include.HeaderFileExtensions + value: ';h;hh;hpp;hxx' + - key: bugprone-suspicious-include.ImplementationFileExtensions + value: 'c;cc;cpp;cxx' + - key: bugprone-suspicious-missing-comma.MaxConcatenatedTokens + value: '5' + - key: bugprone-suspicious-missing-comma.RatioThreshold + value: '0.200000' + - key: bugprone-suspicious-missing-comma.SizeThreshold + value: '5' + - key: bugprone-suspicious-string-compare.StringCompareLikeFunctions + value: '' + - key: bugprone-suspicious-string-compare.WarnOnImplicitComparison + value: 'true' + - key: bugprone-suspicious-string-compare.WarnOnLogicalNotComparison + value: 'false' + - key: bugprone-too-small-loop-variable.MagnitudeBitsUpperLimit + value: '16' + - key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField + value: 'true' + - key: bugprone-unused-return-value.CheckedFunctions + value: '::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty;::std::back_inserter;::std::distance;::std::find;::std::find_if;::std::inserter;::std::lower_bound;::std::make_pair;::std::map::count;::std::map::find;::std::map::lower_bound;::std::multimap::equal_range;::std::multimap::upper_bound;::std::set::count;::std::set::find;::std::setfill;::std::setprecision;::std::setw;::std::upper_bound;::std::vector::at;::bsearch;::ferror;::feof;::isalnum;::isalpha;::isblank;::iscntrl;::isdigit;::isgraph;::islower;::isprint;::ispunct;::isspace;::isupper;::iswalnum;::iswprint;::iswspace;::isxdigit;::memchr;::memcmp;::strcmp;::strcoll;::strncmp;::strpbrk;::strrchr;::strspn;::strstr;::wcscmp;::access;::bind;::connect;::difftime;::dlsym;::fnmatch;::getaddrinfo;::getopt;::htonl;::htons;::iconv_open;::inet_addr;::isascii;::isatty;::mmap;::newlocale;::openat;::pathconf;::pthread_equal;::pthread_getspecific;::pthread_mutex_trylock;::readdir;::readlink;::recvmsg;::regexec;::scandir;::semget;::setjmp;::shm_open;::shmget;::sigismember;::strcasecmp;::strsignal;::ttyname' + - key: cert-dcl16-c.NewSuffixes + value: 'L;LL;LU;LLU' + - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField + value: '0' + - key: cert-str34-c.DiagnoseSignedUnsignedCharComparisons + value: '0' + - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors + value: '1' + - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: '1' + - key: google-readability-braces-around-statements.ShortStatementLines + value: '1' + - key: google-readability-function-size.StatementThreshold + value: '800' + - key: google-readability-namespace-comments.ShortNamespaceLines + value: '10' + - key: google-readability-namespace-comments.SpacesBeforeComments + value: '2' + - key: llvm-else-after-return.WarnOnConditionVariables + value: '0' + - key: llvm-else-after-return.WarnOnUnfixable + value: '0' + - key: llvm-qualified-auto.AddConstToQualified + value: '0' + - key: misc-definitions-in-headers.HeaderFileExtensions + value: ';h;hh;hpp;hxx' + - key: misc-definitions-in-headers.UseHeaderFileExtension + value: 'true' + - key: misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: 'false' + - key: misc-non-private-member-variables-in-classes.IgnorePublicMemberVariables + value: 'false' + - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries + value: 'true' + - key: misc-throw-by-value-catch-by-reference.WarnOnLargeObjects + value: 'false' + - key: misc-unused-parameters.StrictMode + value: 'false' + - key: modernize-avoid-bind.PermissiveParameterList + value: 'false' + - key: modernize-loop-convert.MaxCopySize + value: '16' + - key: modernize-loop-convert.MinConfidence + value: reasonable + - key: modernize-loop-convert.NamingStyle + value: CamelCase + - key: modernize-make-shared.IgnoreMacros + value: 'true' + - key: modernize-make-shared.IncludeStyle + value: llvm + - key: modernize-make-shared.MakeSmartPtrFunction + value: 'std::make_shared' + - key: modernize-make-shared.MakeSmartPtrFunctionHeader + value: memory + - key: modernize-make-unique.IgnoreMacros + value: 'true' + - key: modernize-make-unique.IncludeStyle + value: llvm + - key: modernize-make-unique.MakeSmartPtrFunction + value: 'std::make_unique' + - key: modernize-make-unique.MakeSmartPtrFunctionHeader + value: memory + - key: modernize-pass-by-value.IncludeStyle + value: llvm + - key: modernize-pass-by-value.ValuesOnly + value: 'false' + - key: modernize-raw-string-literal.DelimiterStem + value: lit + - key: modernize-raw-string-literal.ReplaceShorterLiterals + value: 'false' + - key: modernize-replace-auto-ptr.IncludeStyle + value: llvm + - key: modernize-replace-disallow-copy-and-assign-macro.MacroName + value: DISALLOW_COPY_AND_ASSIGN + - key: modernize-replace-random-shuffle.IncludeStyle + value: llvm + - key: modernize-use-auto.MinTypeNameLength + value: '5' + - key: modernize-use-auto.RemoveStars + value: 'false' + - key: modernize-use-bool-literals.IgnoreMacros + value: 'true' + - key: modernize-use-default-member-init.IgnoreMacros + value: 'true' + - key: modernize-use-default-member-init.UseAssignment + value: 'false' + - key: modernize-use-emplace.ContainersWithPushBack + value: '::std::vector;::std::list;::std::deque' + - key: modernize-use-emplace.IgnoreImplicitConstructors + value: 'false' + - key: modernize-use-emplace.SmartPointers + value: '::std::shared_ptr;::std::unique_ptr;::std::auto_ptr;::std::weak_ptr' + - key: modernize-use-emplace.TupleMakeFunctions + value: '::std::make_pair;::std::make_tuple' + - key: modernize-use-emplace.TupleTypes + value: '::std::pair;::std::tuple' + - key: modernize-use-equals-default.IgnoreMacros + value: 'true' + - key: modernize-use-equals-delete.IgnoreMacros + value: 'true' + - key: modernize-use-nodiscard.ReplacementString + value: '[[nodiscard]]' + - key: modernize-use-noexcept.ReplacementString + value: '' + - key: modernize-use-noexcept.UseNoexceptFalse + value: 'true' + - key: modernize-use-nullptr.NullMacros + value: 'NULL' + - key: modernize-use-override.AllowOverrideAndFinal + value: 'false' + - key: modernize-use-override.FinalSpelling + value: final + - key: modernize-use-override.IgnoreDestructors + value: 'false' + - key: modernize-use-override.OverrideSpelling + value: override + - key: modernize-use-transparent-functors.SafeMode + value: 'false' + - key: modernize-use-using.IgnoreMacros + value: 'true' +... + diff --git a/log/log.c b/log/log.c new file mode 100644 index 0000000000..d113d170e9 --- /dev/null +++ b/log/log.c @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2020 rxi + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "log.h" + +#define MAX_CALLBACKS 32 + +typedef struct +{ + log_LogFn fn; + void *udata; + int level; +} Callback; + +static struct +{ + void *udata; + log_LockFn lock; + int level; + bool quiet; + Callback callbacks[MAX_CALLBACKS]; +} L; + + +static const char *level_strings[] = {"TRACE", "DEBUG", "INFO", + "WARN", "ERROR", "FATAL"}; + +#ifdef LOG_USE_COLOR +static const char *level_colors[] = {"\x1b[94m", "\x1b[36m", "\x1b[32m", + "\x1b[33m", "\x1b[31m", "\x1b[35m"}; +#endif + + +static void stdout_callback(log_Event *ev) +{ + char buf[16]; + buf[strftime(buf, sizeof(buf), "%H:%M:%S", ev->time)] = '\0'; +#ifdef LOG_USE_COLOR + fprintf(ev->udata, "%s %s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ", buf, + level_colors[ev->level], level_strings[ev->level], ev->file, + ev->line); +#else + fprintf(ev->udata, "%s %-5s %s:%d: ", buf, level_strings[ev->level], + ev->file, ev->line); +#endif + vfprintf(ev->udata, ev->fmt, ev->ap); + fprintf(ev->udata, "\n"); + fflush(ev->udata); +} + + +static void file_callback(log_Event *ev) +{ + char buf[64]; + buf[strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", ev->time)] = '\0'; + fprintf(ev->udata, "%s %-5s %s:%d: ", buf, level_strings[ev->level], + ev->file, ev->line); + vfprintf(ev->udata, ev->fmt, ev->ap); + fprintf(ev->udata, "\n"); + fflush(ev->udata); +} + + +static void lock(void) +{ + if (L.lock) + { + L.lock(true, L.udata); + } +} + + +static void unlock(void) +{ + if (L.lock) + { + L.lock(false, L.udata); + } +} + + +const char *log_level_string(int level) +{ + return level_strings[level]; +} + + +void log_set_lock(log_LockFn fn, void *udata) +{ + L.lock = fn; + L.udata = udata; +} + + +void log_set_level(int level) +{ + L.level = level; +} + + +void log_set_quiet(bool enable) +{ + L.quiet = enable; +} + + +int log_add_callback(log_LogFn fn, void *udata, int level) +{ + for (int i = 0; i < MAX_CALLBACKS; i++) + { + if (!L.callbacks[i].fn) + { + L.callbacks[i] = (Callback){fn, udata, level}; + return 0; + } + } + return -1; +} + + +int log_add_fp(FILE *fp, int level) +{ + return log_add_callback(file_callback, fp, level); +} + + +static void init_event(log_Event *ev, void *udata) +{ + if (!ev->time) + { + time_t t = time(NULL); + ev->time = localtime(&t); + } + ev->udata = udata; +} + + +void log_log(int level, const char *file, int line, const char *fmt, ...) +{ + log_Event ev = { + .fmt = fmt, + .file = file, + .line = line, + .level = level, + }; + + lock(); + + if (!L.quiet && level >= L.level) + { + init_event(&ev, stderr); + va_start(ev.ap, fmt); + stdout_callback(&ev); + va_end(ev.ap); + } + + for (int i = 0; i < MAX_CALLBACKS && L.callbacks[i].fn; i++) + { + Callback *cb = &L.callbacks[i]; + if (level >= cb->level) + { + init_event(&ev, cb->udata); + va_start(ev.ap, fmt); + cb->fn(&ev); + va_end(ev.ap); + } + } + + unlock(); +} diff --git a/src/log.h b/log/log.h similarity index 100% rename from src/log.h rename to log/log.h diff --git a/meson.build b/meson.build index d70fb6689e..d6fd8dec6c 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('mindoom', 'c', - default_options: ['default_library=static', 'buildtype=debugoptimized']) -add_project_arguments('-DDISABLE_SDL_MIXER', language: 'c') + default_options: ['default_library=static', 'buildtype=debug']) +add_project_arguments(language: 'c') sdl2 = dependency('SDL2') sdl2_net = dependency('SDL2_net') @@ -41,7 +41,6 @@ dedicated_server_source_files = files( # Source files only used by the game binary doom_source_dir = 'doom' game_source_files = files( - src_dir / 'aes_prng.c', src_dir / 'd_event.c', src_dir / 'doomtype.h', src_dir / 'd_iwad.c', @@ -96,7 +95,6 @@ game_source_files = files( src_dir / doom_source_dir / 'd_main.c', src_dir / doom_source_dir / 'd_net.c', src_dir / doom_source_dir / 'doomdef.c', - src_dir / doom_source_dir / 'doom_icon.c', src_dir / doom_source_dir / 'doomstat.c', src_dir / doom_source_dir / 'dstrings.c', src_dir / doom_source_dir / 'f_finale.c', @@ -228,3 +226,12 @@ executable('mindoom', executable('mindoom-server', common_source_files, dedicated_server_source_files, dependencies: deps) +run_target('clang-tidy', + command : 'scripts/clang-tidy.sh') + +#run_target('clang-format', +# command : 'scripts/clang-format.sh') + +run_target('cppcheck', + command : 'scripts/cppcheck.sh') + diff --git a/scripts/clang-tidy.sh b/scripts/clang-tidy.sh new file mode 100644 index 0000000000..f3f90f4609 --- /dev/null +++ b/scripts/clang-tidy.sh @@ -0,0 +1,3 @@ +#!/bin/sh +cd "${MESON_SOURCE_ROOT}"/src +clang-tidy *.c -p "${MESON_BUILD_ROOT}"/compile_commands.json diff --git a/scripts/clangformat.sh b/scripts/clangformat.sh new file mode 100644 index 0000000000..d5b2c6b2a1 --- /dev/null +++ b/scripts/clangformat.sh @@ -0,0 +1,4 @@ +#!/bin/sh +clang-format -i src/*.c +clang-format -i src/doom/*.c + diff --git a/scripts/cppcheck.sh b/scripts/cppcheck.sh new file mode 100644 index 0000000000..89da04335d --- /dev/null +++ b/scripts/cppcheck.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cppcheck --enable=all "${MESON_SOURCE_ROOT}"/src diff --git a/shell.nix b/shell.nix index c34e0e7b4f..60515dd66b 100644 --- a/shell.nix +++ b/shell.nix @@ -1,16 +1,26 @@ { pkgs ? import { } }: -pkgs.mkShell { + +pkgs.clangStdenv.mkDerivation { + name = "mindoom-dev-shell"; + nativeBuildInputs = with pkgs.buildPackages; [ + clangStdenv + clang + clang-tools + cloc + cppcheck + gcc gdb + gdbgui + glib + hotspot meson ninja - libsndfile - pcre2 - glib + linuxKernel.packages.linux_6_1.perf pkg-config - clang SDL2 SDL2_mixer SDL2_net + valgrind ]; } diff --git a/src/aes_prng.c b/src/aes_prng.c deleted file mode 100644 index aad0a38a1b..0000000000 --- a/src/aes_prng.c +++ /dev/null @@ -1,956 +0,0 @@ -// -// Copyright(C) 2005-2014 Simon Howard -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// 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. -// -// -// This implements a cryptographically secure pseudorandom number -// generator for implementing secure demos. The approach taken is to -// use the AES (Rijndael) stream cipher in "counter" mode, encrypting -// an incrementing counter. The cipher key acts as the random seed. -// Cryptanalysis of AES used in this way has shown it to be an -// effective PRNG (see: Empirical Evidence concerning AES, Hellekalek -// & Wegenkittl, 2003). -// -// AES implementation is taken from the Linux kernel's AES -// implementation, found in crypto/aes_generic.c. It has been hacked -// up to work independently. -// - -#include - -#include "aes_prng.h" -#include "doomtype.h" -#include "i_swap.h" - -/* - * Cryptographic API. - * - * AES Cipher Algorithm. - * - * Based on Brian Gladman's code. - * - * Linux developers: - * Alexander Kjeldaas - * Herbert Valerio Riedel - * Kyle McMartin - * Adam J. Richter (conversion to 2.5 API). - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * --------------------------------------------------------------------------- - * Copyright (c) 2002, Dr Brian Gladman , Worcester, UK. - * All rights reserved. - * - * LICENSE TERMS - * - * The free distribution and use of this software in both source and binary - * form is allowed (with or without changes) provided that: - * - * 1. distributions of this source code include the above copyright - * notice, this list of conditions and the following disclaimer; - * - * 2. distributions in binary form include the above copyright - * notice, this list of conditions and the following disclaimer - * in the documentation and/or other associated materials; - * - * 3. the copyright holder's name is not used to endorse products - * built using this software without specific written permission. - * - * ALTERNATIVELY, provided that this notice is retained in full, this product - * may be distributed under the terms of the GNU General Public License (GPL), - * in which case the provisions of the GPL apply INSTEAD OF those given above. - * - * DISCLAIMER - * - * This software is provided 'as is' with no explicit or implied warranties - * in respect of its properties, including, but not limited to, correctness - * and/or fitness for purpose. - * --------------------------------------------------------------------------- - */ - -#define AES_MIN_KEY_SIZE 16 -#define AES_MAX_KEY_SIZE 32 -#define AES_KEYSIZE_128 16 -#define AES_KEYSIZE_192 24 -#define AES_KEYSIZE_256 32 -#define AES_BLOCK_SIZE 16 -#define AES_MAX_KEYLENGTH (15 * 16) -#define AES_MAX_KEYLENGTH_U32 (AES_MAX_KEYLENGTH / sizeof(uint32_t)) - -/* - * Please ensure that the first two fields are 16-byte aligned - * relative to the start of the structure, i.e., don't move them! - */ -typedef struct -{ - uint32_t key_enc[AES_MAX_KEYLENGTH_U32]; - uint32_t key_dec[AES_MAX_KEYLENGTH_U32]; - uint32_t key_length; -} aes_context_t; - -static inline uint8_t get_byte(const uint32_t x, const unsigned n) -{ - return x >> (n << 3); -} - -static const uint32_t rco_tab[10] = { 1, 2, 4, 8, 16, 32, 64, 128, 27, 54 }; - -static const uint32_t crypto_ft_tab[4][256] = { - { - 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, - 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, - 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, - 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, - 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, - 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, - 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, - 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, - 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, - 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, - 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, - 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, - 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, - 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f, - 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, - 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, - 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, - 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, - 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, - 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, - 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, - 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, - 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, - 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, - 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, - 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, - 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, - 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, - 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, - 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, - 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, - 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, - 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, - 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, - 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, - 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, - 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, - 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, - 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, - 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, - 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, - 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8, - 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, - 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, - 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, - 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, - 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, - 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, - 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, - 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, - 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, - 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, - 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, - 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c, - 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, - 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, - 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, - 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, - 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, - 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, - 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, - 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, - 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, - 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c, - }, { - 0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, - 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, - 0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d, - 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a, - 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, - 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, - 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, - 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b, - 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a, - 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, - 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908, - 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f, - 0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e, - 0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5, - 0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d, - 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, - 0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e, - 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb, - 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce, - 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397, - 0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c, - 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, - 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b, - 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a, - 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, - 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194, - 0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81, - 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3, - 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a, - 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104, - 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, - 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d, - 0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f, - 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39, - 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47, - 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695, - 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f, - 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83, - 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c, - 0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76, - 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e, - 0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4, - 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6, - 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b, - 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7, - 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, - 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25, - 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018, - 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72, - 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751, - 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21, - 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, - 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa, - 0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12, - 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, - 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9, - 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233, - 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7, - 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920, - 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, - 0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17, - 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8, - 0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11, - 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a, - }, { - 0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b, - 0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5, - 0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b, - 0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76, - 0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d, - 0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0, - 0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf, - 0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0, - 0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26, - 0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc, - 0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1, - 0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15, - 0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3, - 0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a, - 0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2, - 0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75, - 0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a, - 0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0, - 0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3, - 0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784, - 0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced, - 0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b, - 0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39, - 0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf, - 0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb, - 0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485, - 0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f, - 0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8, - 0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f, - 0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5, - 0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321, - 0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2, - 0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec, - 0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917, - 0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d, - 0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573, - 0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc, - 0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388, - 0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14, - 0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db, - 0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a, - 0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c, - 0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662, - 0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79, - 0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d, - 0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9, - 0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea, - 0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808, - 0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e, - 0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6, - 0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f, - 0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a, - 0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66, - 0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e, - 0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9, - 0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e, - 0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311, - 0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794, - 0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9, - 0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf, - 0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d, - 0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868, - 0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f, - 0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16, - }, { - 0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b, - 0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5, - 0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b, - 0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676, - 0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d, - 0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0, - 0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf, - 0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0, - 0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626, - 0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc, - 0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1, - 0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515, - 0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3, - 0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a, - 0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2, - 0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575, - 0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a, - 0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0, - 0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3, - 0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484, - 0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded, - 0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b, - 0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939, - 0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf, - 0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb, - 0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585, - 0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f, - 0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8, - 0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f, - 0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5, - 0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121, - 0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2, - 0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec, - 0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717, - 0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d, - 0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373, - 0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc, - 0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888, - 0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414, - 0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb, - 0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a, - 0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c, - 0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262, - 0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979, - 0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d, - 0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9, - 0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea, - 0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808, - 0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e, - 0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6, - 0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f, - 0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a, - 0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666, - 0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e, - 0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9, - 0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e, - 0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111, - 0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494, - 0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9, - 0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf, - 0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d, - 0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868, - 0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f, - 0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616, - } -}; - -static const uint32_t crypto_fl_tab[4][256] = { - { - 0x00000063, 0x0000007c, 0x00000077, 0x0000007b, - 0x000000f2, 0x0000006b, 0x0000006f, 0x000000c5, - 0x00000030, 0x00000001, 0x00000067, 0x0000002b, - 0x000000fe, 0x000000d7, 0x000000ab, 0x00000076, - 0x000000ca, 0x00000082, 0x000000c9, 0x0000007d, - 0x000000fa, 0x00000059, 0x00000047, 0x000000f0, - 0x000000ad, 0x000000d4, 0x000000a2, 0x000000af, - 0x0000009c, 0x000000a4, 0x00000072, 0x000000c0, - 0x000000b7, 0x000000fd, 0x00000093, 0x00000026, - 0x00000036, 0x0000003f, 0x000000f7, 0x000000cc, - 0x00000034, 0x000000a5, 0x000000e5, 0x000000f1, - 0x00000071, 0x000000d8, 0x00000031, 0x00000015, - 0x00000004, 0x000000c7, 0x00000023, 0x000000c3, - 0x00000018, 0x00000096, 0x00000005, 0x0000009a, - 0x00000007, 0x00000012, 0x00000080, 0x000000e2, - 0x000000eb, 0x00000027, 0x000000b2, 0x00000075, - 0x00000009, 0x00000083, 0x0000002c, 0x0000001a, - 0x0000001b, 0x0000006e, 0x0000005a, 0x000000a0, - 0x00000052, 0x0000003b, 0x000000d6, 0x000000b3, - 0x00000029, 0x000000e3, 0x0000002f, 0x00000084, - 0x00000053, 0x000000d1, 0x00000000, 0x000000ed, - 0x00000020, 0x000000fc, 0x000000b1, 0x0000005b, - 0x0000006a, 0x000000cb, 0x000000be, 0x00000039, - 0x0000004a, 0x0000004c, 0x00000058, 0x000000cf, - 0x000000d0, 0x000000ef, 0x000000aa, 0x000000fb, - 0x00000043, 0x0000004d, 0x00000033, 0x00000085, - 0x00000045, 0x000000f9, 0x00000002, 0x0000007f, - 0x00000050, 0x0000003c, 0x0000009f, 0x000000a8, - 0x00000051, 0x000000a3, 0x00000040, 0x0000008f, - 0x00000092, 0x0000009d, 0x00000038, 0x000000f5, - 0x000000bc, 0x000000b6, 0x000000da, 0x00000021, - 0x00000010, 0x000000ff, 0x000000f3, 0x000000d2, - 0x000000cd, 0x0000000c, 0x00000013, 0x000000ec, - 0x0000005f, 0x00000097, 0x00000044, 0x00000017, - 0x000000c4, 0x000000a7, 0x0000007e, 0x0000003d, - 0x00000064, 0x0000005d, 0x00000019, 0x00000073, - 0x00000060, 0x00000081, 0x0000004f, 0x000000dc, - 0x00000022, 0x0000002a, 0x00000090, 0x00000088, - 0x00000046, 0x000000ee, 0x000000b8, 0x00000014, - 0x000000de, 0x0000005e, 0x0000000b, 0x000000db, - 0x000000e0, 0x00000032, 0x0000003a, 0x0000000a, - 0x00000049, 0x00000006, 0x00000024, 0x0000005c, - 0x000000c2, 0x000000d3, 0x000000ac, 0x00000062, - 0x00000091, 0x00000095, 0x000000e4, 0x00000079, - 0x000000e7, 0x000000c8, 0x00000037, 0x0000006d, - 0x0000008d, 0x000000d5, 0x0000004e, 0x000000a9, - 0x0000006c, 0x00000056, 0x000000f4, 0x000000ea, - 0x00000065, 0x0000007a, 0x000000ae, 0x00000008, - 0x000000ba, 0x00000078, 0x00000025, 0x0000002e, - 0x0000001c, 0x000000a6, 0x000000b4, 0x000000c6, - 0x000000e8, 0x000000dd, 0x00000074, 0x0000001f, - 0x0000004b, 0x000000bd, 0x0000008b, 0x0000008a, - 0x00000070, 0x0000003e, 0x000000b5, 0x00000066, - 0x00000048, 0x00000003, 0x000000f6, 0x0000000e, - 0x00000061, 0x00000035, 0x00000057, 0x000000b9, - 0x00000086, 0x000000c1, 0x0000001d, 0x0000009e, - 0x000000e1, 0x000000f8, 0x00000098, 0x00000011, - 0x00000069, 0x000000d9, 0x0000008e, 0x00000094, - 0x0000009b, 0x0000001e, 0x00000087, 0x000000e9, - 0x000000ce, 0x00000055, 0x00000028, 0x000000df, - 0x0000008c, 0x000000a1, 0x00000089, 0x0000000d, - 0x000000bf, 0x000000e6, 0x00000042, 0x00000068, - 0x00000041, 0x00000099, 0x0000002d, 0x0000000f, - 0x000000b0, 0x00000054, 0x000000bb, 0x00000016, - }, { - 0x00006300, 0x00007c00, 0x00007700, 0x00007b00, - 0x0000f200, 0x00006b00, 0x00006f00, 0x0000c500, - 0x00003000, 0x00000100, 0x00006700, 0x00002b00, - 0x0000fe00, 0x0000d700, 0x0000ab00, 0x00007600, - 0x0000ca00, 0x00008200, 0x0000c900, 0x00007d00, - 0x0000fa00, 0x00005900, 0x00004700, 0x0000f000, - 0x0000ad00, 0x0000d400, 0x0000a200, 0x0000af00, - 0x00009c00, 0x0000a400, 0x00007200, 0x0000c000, - 0x0000b700, 0x0000fd00, 0x00009300, 0x00002600, - 0x00003600, 0x00003f00, 0x0000f700, 0x0000cc00, - 0x00003400, 0x0000a500, 0x0000e500, 0x0000f100, - 0x00007100, 0x0000d800, 0x00003100, 0x00001500, - 0x00000400, 0x0000c700, 0x00002300, 0x0000c300, - 0x00001800, 0x00009600, 0x00000500, 0x00009a00, - 0x00000700, 0x00001200, 0x00008000, 0x0000e200, - 0x0000eb00, 0x00002700, 0x0000b200, 0x00007500, - 0x00000900, 0x00008300, 0x00002c00, 0x00001a00, - 0x00001b00, 0x00006e00, 0x00005a00, 0x0000a000, - 0x00005200, 0x00003b00, 0x0000d600, 0x0000b300, - 0x00002900, 0x0000e300, 0x00002f00, 0x00008400, - 0x00005300, 0x0000d100, 0x00000000, 0x0000ed00, - 0x00002000, 0x0000fc00, 0x0000b100, 0x00005b00, - 0x00006a00, 0x0000cb00, 0x0000be00, 0x00003900, - 0x00004a00, 0x00004c00, 0x00005800, 0x0000cf00, - 0x0000d000, 0x0000ef00, 0x0000aa00, 0x0000fb00, - 0x00004300, 0x00004d00, 0x00003300, 0x00008500, - 0x00004500, 0x0000f900, 0x00000200, 0x00007f00, - 0x00005000, 0x00003c00, 0x00009f00, 0x0000a800, - 0x00005100, 0x0000a300, 0x00004000, 0x00008f00, - 0x00009200, 0x00009d00, 0x00003800, 0x0000f500, - 0x0000bc00, 0x0000b600, 0x0000da00, 0x00002100, - 0x00001000, 0x0000ff00, 0x0000f300, 0x0000d200, - 0x0000cd00, 0x00000c00, 0x00001300, 0x0000ec00, - 0x00005f00, 0x00009700, 0x00004400, 0x00001700, - 0x0000c400, 0x0000a700, 0x00007e00, 0x00003d00, - 0x00006400, 0x00005d00, 0x00001900, 0x00007300, - 0x00006000, 0x00008100, 0x00004f00, 0x0000dc00, - 0x00002200, 0x00002a00, 0x00009000, 0x00008800, - 0x00004600, 0x0000ee00, 0x0000b800, 0x00001400, - 0x0000de00, 0x00005e00, 0x00000b00, 0x0000db00, - 0x0000e000, 0x00003200, 0x00003a00, 0x00000a00, - 0x00004900, 0x00000600, 0x00002400, 0x00005c00, - 0x0000c200, 0x0000d300, 0x0000ac00, 0x00006200, - 0x00009100, 0x00009500, 0x0000e400, 0x00007900, - 0x0000e700, 0x0000c800, 0x00003700, 0x00006d00, - 0x00008d00, 0x0000d500, 0x00004e00, 0x0000a900, - 0x00006c00, 0x00005600, 0x0000f400, 0x0000ea00, - 0x00006500, 0x00007a00, 0x0000ae00, 0x00000800, - 0x0000ba00, 0x00007800, 0x00002500, 0x00002e00, - 0x00001c00, 0x0000a600, 0x0000b400, 0x0000c600, - 0x0000e800, 0x0000dd00, 0x00007400, 0x00001f00, - 0x00004b00, 0x0000bd00, 0x00008b00, 0x00008a00, - 0x00007000, 0x00003e00, 0x0000b500, 0x00006600, - 0x00004800, 0x00000300, 0x0000f600, 0x00000e00, - 0x00006100, 0x00003500, 0x00005700, 0x0000b900, - 0x00008600, 0x0000c100, 0x00001d00, 0x00009e00, - 0x0000e100, 0x0000f800, 0x00009800, 0x00001100, - 0x00006900, 0x0000d900, 0x00008e00, 0x00009400, - 0x00009b00, 0x00001e00, 0x00008700, 0x0000e900, - 0x0000ce00, 0x00005500, 0x00002800, 0x0000df00, - 0x00008c00, 0x0000a100, 0x00008900, 0x00000d00, - 0x0000bf00, 0x0000e600, 0x00004200, 0x00006800, - 0x00004100, 0x00009900, 0x00002d00, 0x00000f00, - 0x0000b000, 0x00005400, 0x0000bb00, 0x00001600, - }, { - 0x00630000, 0x007c0000, 0x00770000, 0x007b0000, - 0x00f20000, 0x006b0000, 0x006f0000, 0x00c50000, - 0x00300000, 0x00010000, 0x00670000, 0x002b0000, - 0x00fe0000, 0x00d70000, 0x00ab0000, 0x00760000, - 0x00ca0000, 0x00820000, 0x00c90000, 0x007d0000, - 0x00fa0000, 0x00590000, 0x00470000, 0x00f00000, - 0x00ad0000, 0x00d40000, 0x00a20000, 0x00af0000, - 0x009c0000, 0x00a40000, 0x00720000, 0x00c00000, - 0x00b70000, 0x00fd0000, 0x00930000, 0x00260000, - 0x00360000, 0x003f0000, 0x00f70000, 0x00cc0000, - 0x00340000, 0x00a50000, 0x00e50000, 0x00f10000, - 0x00710000, 0x00d80000, 0x00310000, 0x00150000, - 0x00040000, 0x00c70000, 0x00230000, 0x00c30000, - 0x00180000, 0x00960000, 0x00050000, 0x009a0000, - 0x00070000, 0x00120000, 0x00800000, 0x00e20000, - 0x00eb0000, 0x00270000, 0x00b20000, 0x00750000, - 0x00090000, 0x00830000, 0x002c0000, 0x001a0000, - 0x001b0000, 0x006e0000, 0x005a0000, 0x00a00000, - 0x00520000, 0x003b0000, 0x00d60000, 0x00b30000, - 0x00290000, 0x00e30000, 0x002f0000, 0x00840000, - 0x00530000, 0x00d10000, 0x00000000, 0x00ed0000, - 0x00200000, 0x00fc0000, 0x00b10000, 0x005b0000, - 0x006a0000, 0x00cb0000, 0x00be0000, 0x00390000, - 0x004a0000, 0x004c0000, 0x00580000, 0x00cf0000, - 0x00d00000, 0x00ef0000, 0x00aa0000, 0x00fb0000, - 0x00430000, 0x004d0000, 0x00330000, 0x00850000, - 0x00450000, 0x00f90000, 0x00020000, 0x007f0000, - 0x00500000, 0x003c0000, 0x009f0000, 0x00a80000, - 0x00510000, 0x00a30000, 0x00400000, 0x008f0000, - 0x00920000, 0x009d0000, 0x00380000, 0x00f50000, - 0x00bc0000, 0x00b60000, 0x00da0000, 0x00210000, - 0x00100000, 0x00ff0000, 0x00f30000, 0x00d20000, - 0x00cd0000, 0x000c0000, 0x00130000, 0x00ec0000, - 0x005f0000, 0x00970000, 0x00440000, 0x00170000, - 0x00c40000, 0x00a70000, 0x007e0000, 0x003d0000, - 0x00640000, 0x005d0000, 0x00190000, 0x00730000, - 0x00600000, 0x00810000, 0x004f0000, 0x00dc0000, - 0x00220000, 0x002a0000, 0x00900000, 0x00880000, - 0x00460000, 0x00ee0000, 0x00b80000, 0x00140000, - 0x00de0000, 0x005e0000, 0x000b0000, 0x00db0000, - 0x00e00000, 0x00320000, 0x003a0000, 0x000a0000, - 0x00490000, 0x00060000, 0x00240000, 0x005c0000, - 0x00c20000, 0x00d30000, 0x00ac0000, 0x00620000, - 0x00910000, 0x00950000, 0x00e40000, 0x00790000, - 0x00e70000, 0x00c80000, 0x00370000, 0x006d0000, - 0x008d0000, 0x00d50000, 0x004e0000, 0x00a90000, - 0x006c0000, 0x00560000, 0x00f40000, 0x00ea0000, - 0x00650000, 0x007a0000, 0x00ae0000, 0x00080000, - 0x00ba0000, 0x00780000, 0x00250000, 0x002e0000, - 0x001c0000, 0x00a60000, 0x00b40000, 0x00c60000, - 0x00e80000, 0x00dd0000, 0x00740000, 0x001f0000, - 0x004b0000, 0x00bd0000, 0x008b0000, 0x008a0000, - 0x00700000, 0x003e0000, 0x00b50000, 0x00660000, - 0x00480000, 0x00030000, 0x00f60000, 0x000e0000, - 0x00610000, 0x00350000, 0x00570000, 0x00b90000, - 0x00860000, 0x00c10000, 0x001d0000, 0x009e0000, - 0x00e10000, 0x00f80000, 0x00980000, 0x00110000, - 0x00690000, 0x00d90000, 0x008e0000, 0x00940000, - 0x009b0000, 0x001e0000, 0x00870000, 0x00e90000, - 0x00ce0000, 0x00550000, 0x00280000, 0x00df0000, - 0x008c0000, 0x00a10000, 0x00890000, 0x000d0000, - 0x00bf0000, 0x00e60000, 0x00420000, 0x00680000, - 0x00410000, 0x00990000, 0x002d0000, 0x000f0000, - 0x00b00000, 0x00540000, 0x00bb0000, 0x00160000, - }, { - 0x63000000, 0x7c000000, 0x77000000, 0x7b000000, - 0xf2000000, 0x6b000000, 0x6f000000, 0xc5000000, - 0x30000000, 0x01000000, 0x67000000, 0x2b000000, - 0xfe000000, 0xd7000000, 0xab000000, 0x76000000, - 0xca000000, 0x82000000, 0xc9000000, 0x7d000000, - 0xfa000000, 0x59000000, 0x47000000, 0xf0000000, - 0xad000000, 0xd4000000, 0xa2000000, 0xaf000000, - 0x9c000000, 0xa4000000, 0x72000000, 0xc0000000, - 0xb7000000, 0xfd000000, 0x93000000, 0x26000000, - 0x36000000, 0x3f000000, 0xf7000000, 0xcc000000, - 0x34000000, 0xa5000000, 0xe5000000, 0xf1000000, - 0x71000000, 0xd8000000, 0x31000000, 0x15000000, - 0x04000000, 0xc7000000, 0x23000000, 0xc3000000, - 0x18000000, 0x96000000, 0x05000000, 0x9a000000, - 0x07000000, 0x12000000, 0x80000000, 0xe2000000, - 0xeb000000, 0x27000000, 0xb2000000, 0x75000000, - 0x09000000, 0x83000000, 0x2c000000, 0x1a000000, - 0x1b000000, 0x6e000000, 0x5a000000, 0xa0000000, - 0x52000000, 0x3b000000, 0xd6000000, 0xb3000000, - 0x29000000, 0xe3000000, 0x2f000000, 0x84000000, - 0x53000000, 0xd1000000, 0x00000000, 0xed000000, - 0x20000000, 0xfc000000, 0xb1000000, 0x5b000000, - 0x6a000000, 0xcb000000, 0xbe000000, 0x39000000, - 0x4a000000, 0x4c000000, 0x58000000, 0xcf000000, - 0xd0000000, 0xef000000, 0xaa000000, 0xfb000000, - 0x43000000, 0x4d000000, 0x33000000, 0x85000000, - 0x45000000, 0xf9000000, 0x02000000, 0x7f000000, - 0x50000000, 0x3c000000, 0x9f000000, 0xa8000000, - 0x51000000, 0xa3000000, 0x40000000, 0x8f000000, - 0x92000000, 0x9d000000, 0x38000000, 0xf5000000, - 0xbc000000, 0xb6000000, 0xda000000, 0x21000000, - 0x10000000, 0xff000000, 0xf3000000, 0xd2000000, - 0xcd000000, 0x0c000000, 0x13000000, 0xec000000, - 0x5f000000, 0x97000000, 0x44000000, 0x17000000, - 0xc4000000, 0xa7000000, 0x7e000000, 0x3d000000, - 0x64000000, 0x5d000000, 0x19000000, 0x73000000, - 0x60000000, 0x81000000, 0x4f000000, 0xdc000000, - 0x22000000, 0x2a000000, 0x90000000, 0x88000000, - 0x46000000, 0xee000000, 0xb8000000, 0x14000000, - 0xde000000, 0x5e000000, 0x0b000000, 0xdb000000, - 0xe0000000, 0x32000000, 0x3a000000, 0x0a000000, - 0x49000000, 0x06000000, 0x24000000, 0x5c000000, - 0xc2000000, 0xd3000000, 0xac000000, 0x62000000, - 0x91000000, 0x95000000, 0xe4000000, 0x79000000, - 0xe7000000, 0xc8000000, 0x37000000, 0x6d000000, - 0x8d000000, 0xd5000000, 0x4e000000, 0xa9000000, - 0x6c000000, 0x56000000, 0xf4000000, 0xea000000, - 0x65000000, 0x7a000000, 0xae000000, 0x08000000, - 0xba000000, 0x78000000, 0x25000000, 0x2e000000, - 0x1c000000, 0xa6000000, 0xb4000000, 0xc6000000, - 0xe8000000, 0xdd000000, 0x74000000, 0x1f000000, - 0x4b000000, 0xbd000000, 0x8b000000, 0x8a000000, - 0x70000000, 0x3e000000, 0xb5000000, 0x66000000, - 0x48000000, 0x03000000, 0xf6000000, 0x0e000000, - 0x61000000, 0x35000000, 0x57000000, 0xb9000000, - 0x86000000, 0xc1000000, 0x1d000000, 0x9e000000, - 0xe1000000, 0xf8000000, 0x98000000, 0x11000000, - 0x69000000, 0xd9000000, 0x8e000000, 0x94000000, - 0x9b000000, 0x1e000000, 0x87000000, 0xe9000000, - 0xce000000, 0x55000000, 0x28000000, 0xdf000000, - 0x8c000000, 0xa1000000, 0x89000000, 0x0d000000, - 0xbf000000, 0xe6000000, 0x42000000, 0x68000000, - 0x41000000, 0x99000000, 0x2d000000, 0x0f000000, - 0xb0000000, 0x54000000, 0xbb000000, 0x16000000, - } -}; - -/* initialise the key schedule from the user supplied key */ - -static uint32_t aes_ror32(uint32_t word, unsigned int shift) -{ - return (word >> shift) | (word << (32 - shift)); -} - -#define cpu_to_le32(x) SDL_SwapLE32(x) -#define le32_to_cpu(x) SDL_SwapLE32(x) - -#define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) - -#define imix_col(y, x) do { \ - u = star_x(x); \ - v = star_x(u); \ - w = star_x(v); \ - t = w ^ (x); \ - (y) = u ^ v ^ w; \ - (y) ^= aes_ror32(u ^ t, 8) ^ \ - aes_ror32(v ^ t, 16) ^ \ - aes_ror32(t, 24); \ -} while (0) - -#define ls_box(x) \ - crypto_fl_tab[0][get_byte(x, 0)] ^ \ - crypto_fl_tab[1][get_byte(x, 1)] ^ \ - crypto_fl_tab[2][get_byte(x, 2)] ^ \ - crypto_fl_tab[3][get_byte(x, 3)] - -#define loop4(i) do { \ - t = aes_ror32(t, 8); \ - t = ls_box(t) ^ rco_tab[i]; \ - t ^= ctx->key_enc[4 * i]; \ - ctx->key_enc[4 * i + 4] = t; \ - t ^= ctx->key_enc[4 * i + 1]; \ - ctx->key_enc[4 * i + 5] = t; \ - t ^= ctx->key_enc[4 * i + 2]; \ - ctx->key_enc[4 * i + 6] = t; \ - t ^= ctx->key_enc[4 * i + 3]; \ - ctx->key_enc[4 * i + 7] = t; \ -} while (0) - -#define loop6(i) do { \ - t = aes_ror32(t, 8); \ - t = ls_box(t) ^ rco_tab[i]; \ - t ^= ctx->key_enc[6 * i]; \ - ctx->key_enc[6 * i + 6] = t; \ - t ^= ctx->key_enc[6 * i + 1]; \ - ctx->key_enc[6 * i + 7] = t; \ - t ^= ctx->key_enc[6 * i + 2]; \ - ctx->key_enc[6 * i + 8] = t; \ - t ^= ctx->key_enc[6 * i + 3]; \ - ctx->key_enc[6 * i + 9] = t; \ - t ^= ctx->key_enc[6 * i + 4]; \ - ctx->key_enc[6 * i + 10] = t; \ - t ^= ctx->key_enc[6 * i + 5]; \ - ctx->key_enc[6 * i + 11] = t; \ -} while (0) - -#define loop8tophalf(i) do { \ - t = aes_ror32(t, 8); \ - t = ls_box(t) ^ rco_tab[i]; \ - t ^= ctx->key_enc[8 * i]; \ - ctx->key_enc[8 * i + 8] = t; \ - t ^= ctx->key_enc[8 * i + 1]; \ - ctx->key_enc[8 * i + 9] = t; \ - t ^= ctx->key_enc[8 * i + 2]; \ - ctx->key_enc[8 * i + 10] = t; \ - t ^= ctx->key_enc[8 * i + 3]; \ - ctx->key_enc[8 * i + 11] = t; \ -} while (0) - -#define loop8(i) do { \ - loop8tophalf(i); \ - t = ctx->key_enc[8 * i + 4] ^ ls_box(t); \ - ctx->key_enc[8 * i + 12] = t; \ - t ^= ctx->key_enc[8 * i + 5]; \ - ctx->key_enc[8 * i + 13] = t; \ - t ^= ctx->key_enc[8 * i + 6]; \ - ctx->key_enc[8 * i + 14] = t; \ - t ^= ctx->key_enc[8 * i + 7]; \ - ctx->key_enc[8 * i + 15] = t; \ -} while (0) - -/** - * AES_ExpandKey - Expands the AES key as described in FIPS-197 - * @ctx: The location where the computed key will be stored. - * @in_key: The supplied key. - * @key_len: The length of the supplied key. - * - * Returns 0 on success. The function fails only if an invalid key size (or - * pointer) is supplied. - * The expanded key size is 240 bytes (max of 14 rounds with a unique 16 bytes - * key schedule plus a 16 bytes key which is used before the first round). - * The decryption key is prepared for the "Equivalent Inverse Cipher" as - * described in FIPS-197. The first slot (16 bytes) of each key (enc or dec) is - * for the initial combination, the second slot for the first round and so on. - */ -static int AES_ExpandKey(aes_context_t *ctx, const uint8_t *in_key, - unsigned int key_len) -{ - const uint32_t *key = (const uint32_t *)in_key; - uint32_t i, t, u, v, w, j; - - if (key_len != AES_KEYSIZE_128 && key_len != AES_KEYSIZE_192 && - key_len != AES_KEYSIZE_256) - return -1; - - ctx->key_length = key_len; - - ctx->key_dec[key_len + 24] = ctx->key_enc[0] = le32_to_cpu(key[0]); - ctx->key_dec[key_len + 25] = ctx->key_enc[1] = le32_to_cpu(key[1]); - ctx->key_dec[key_len + 26] = ctx->key_enc[2] = le32_to_cpu(key[2]); - ctx->key_dec[key_len + 27] = ctx->key_enc[3] = le32_to_cpu(key[3]); - - switch (key_len) { - case AES_KEYSIZE_128: - t = ctx->key_enc[3]; - for (i = 0; i < 10; ++i) - loop4(i); - break; - - case AES_KEYSIZE_192: - ctx->key_enc[4] = le32_to_cpu(key[4]); - t = ctx->key_enc[5] = le32_to_cpu(key[5]); - for (i = 0; i < 8; ++i) - loop6(i); - break; - - case AES_KEYSIZE_256: - ctx->key_enc[4] = le32_to_cpu(key[4]); - ctx->key_enc[5] = le32_to_cpu(key[5]); - ctx->key_enc[6] = le32_to_cpu(key[6]); - t = ctx->key_enc[7] = le32_to_cpu(key[7]); - for (i = 0; i < 6; ++i) - loop8(i); - loop8tophalf(i); - break; - } - - ctx->key_dec[0] = ctx->key_enc[key_len + 24]; - ctx->key_dec[1] = ctx->key_enc[key_len + 25]; - ctx->key_dec[2] = ctx->key_enc[key_len + 26]; - ctx->key_dec[3] = ctx->key_enc[key_len + 27]; - - for (i = 4; i < key_len + 24; ++i) { - j = key_len + 24 - (i & ~3) + (i & 3); - imix_col(ctx->key_dec[j], ctx->key_enc[i]); - } - return 0; -} - -/** - * AES_SetKey - Set the AES key. - * @ctx: AES context struct. - * @in_key: The input key. - * @key_len: The size of the key. - * - * Returns 0 on success, on failure -1 is returned. - * The function uses AES_ExpandKey() to expand the key. - */ -static int AES_SetKey(aes_context_t *ctx, const uint8_t *in_key, - unsigned int key_len) -{ - int ret; - - ret = AES_ExpandKey(ctx, in_key, key_len); - if (!ret) - return 0; - - return -1; -} - -/* encrypt a block of text */ - -#define f_rn(bo, bi, n, k) do { \ - bo[n] = crypto_ft_tab[0][get_byte(bi[n], 0)] ^ \ - crypto_ft_tab[1][get_byte(bi[(n + 1) & 3], 1)] ^ \ - crypto_ft_tab[2][get_byte(bi[(n + 2) & 3], 2)] ^ \ - crypto_ft_tab[3][get_byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ -} while (0) - -#define f_nround(bo, bi, k) do {\ - f_rn(bo, bi, 0, k); \ - f_rn(bo, bi, 1, k); \ - f_rn(bo, bi, 2, k); \ - f_rn(bo, bi, 3, k); \ - k += 4; \ -} while (0) - -#define f_rl(bo, bi, n, k) do { \ - bo[n] = crypto_fl_tab[0][get_byte(bi[n], 0)] ^ \ - crypto_fl_tab[1][get_byte(bi[(n + 1) & 3], 1)] ^ \ - crypto_fl_tab[2][get_byte(bi[(n + 2) & 3], 2)] ^ \ - crypto_fl_tab[3][get_byte(bi[(n + 3) & 3], 3)] ^ *(k + n); \ -} while (0) - -#define f_lround(bo, bi, k) do {\ - f_rl(bo, bi, 0, k); \ - f_rl(bo, bi, 1, k); \ - f_rl(bo, bi, 2, k); \ - f_rl(bo, bi, 3, k); \ -} while (0) - -static void AES_Encrypt(aes_context_t *ctx, uint8_t *out, - const uint8_t *in) -{ - const uint32_t *src = (const uint32_t *)in; - uint32_t *dst = (uint32_t *)out; - uint32_t b0[4], b1[4]; - const uint32_t *kp = ctx->key_enc + 4; - const int key_len = ctx->key_length; - - b0[0] = le32_to_cpu(src[0]) ^ ctx->key_enc[0]; - b0[1] = le32_to_cpu(src[1]) ^ ctx->key_enc[1]; - b0[2] = le32_to_cpu(src[2]) ^ ctx->key_enc[2]; - b0[3] = le32_to_cpu(src[3]) ^ ctx->key_enc[3]; - - if (key_len > 24) { - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - } - - if (key_len > 16) { - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - } - - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - f_nround(b1, b0, kp); - f_nround(b0, b1, kp); - f_nround(b1, b0, kp); - f_lround(b0, b1, kp); - - dst[0] = cpu_to_le32(b0[0]); - dst[1] = cpu_to_le32(b0[1]); - dst[2] = cpu_to_le32(b0[2]); - dst[3] = cpu_to_le32(b0[3]); -} - -static boolean prng_enabled = false; -static aes_context_t prng_context; -static uint32_t prng_input_counter; -static uint32_t prng_values[4]; -static unsigned int prng_value_index = 0; - -// Initialize Pseudo-RNG using the specified 128-bit key. - -void PRNG_Start(prng_seed_t key) -{ - AES_SetKey(&prng_context, key, sizeof(prng_seed_t)); - prng_value_index = 4; - prng_input_counter = 0; - prng_enabled = true; -} - -void PRNG_Stop(void) -{ - prng_enabled = false; -} - -// Generate a set of new PRNG values by encrypting a new block. - -static void PRNG_Generate(void) -{ - byte input[16], output[16]; - unsigned int i; - - // Input for the cipher is a consecutively increasing 32-bit counter. - - for (i = 0; i < 4; ++i) - { - input[4*i] = prng_input_counter & 0xff; - input[4*i + 1] = (prng_input_counter >> 8) & 0xff; - input[4*i + 2] = (prng_input_counter >> 16) & 0xff; - input[4*i + 3] = (prng_input_counter >> 24) & 0xff; - ++prng_input_counter; - } - - AES_Encrypt(&prng_context, output, input); - - for (i = 0; i < 4; ++i) - { - prng_values[i] = output[4*i] - | (output[4*i + 1] << 8) - | (output[4*i + 2] << 16) - | (output[4*i + 3] << 24); - } - - prng_value_index = 0; -} - -// Read a random 32-bit integer from the PRNG. - -unsigned int PRNG_Random(void) -{ - unsigned int result; - - if (!prng_enabled) - { - return 0; - } - - if (prng_value_index >= 4) - { - PRNG_Generate(); - } - - result = prng_values[prng_value_index]; - ++prng_value_index; - - return result; -} - diff --git a/src/aes_prng.h b/src/aes_prng.h deleted file mode 100644 index f255db1756..0000000000 --- a/src/aes_prng.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// Copyright(C) 2005-2014 Simon Howard -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// 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. -// -// DESCRIPTION: -// Pseudo-random number generator for secure demos. -// - -#ifndef __AES_PRNG_H__ -#define __AES_PRNG_H__ - -#include "doomtype.h" - -// Nonce value used as random seed for secure demos. - -typedef byte prng_seed_t[16]; - -void PRNG_Start(prng_seed_t seed); -void PRNG_Stop(void); -unsigned int PRNG_Random(void); - -#endif /* #ifndef __AES_PRNG_H__ */ - diff --git a/src/d_dedicated.c b/src/d_dedicated.c index 7222004996..3919a622f1 100644 --- a/src/d_dedicated.c +++ b/src/d_dedicated.c @@ -31,7 +31,7 @@ void NET_CL_Run(void) { // No client present :-) // - // This is here because the server code sometimes runs this + // This is here because the server code sometimes runs this // to let the client do some processing if it needs to. // In a standalone dedicated server, we don't have a client. } @@ -44,4 +44,3 @@ void D_DoomMain(void) NET_DedicatedServer(); } - diff --git a/src/d_event.c b/src/d_event.c index 3eef57282a..34b9723c80 100644 --- a/src/d_event.c +++ b/src/d_event.c @@ -32,7 +32,7 @@ static int eventtail; // D_PostEvent // Called by the I/O functions when input is detected // -void D_PostEvent (event_t* ev) +void D_PostEvent(event_t *ev) { events[eventhead] = *ev; eventhead = (eventhead + 1) % MAXEVENTS; @@ -50,7 +50,7 @@ event_t *D_PopEvent(void) { return NULL; } - + result = &events[eventtail]; // Advance to the next event in the queue. @@ -59,5 +59,3 @@ event_t *D_PopEvent(void) return result; } - - diff --git a/src/d_iwad.c b/src/d_iwad.c index 0b882b195e..8abef6581a 100644 --- a/src/d_iwad.c +++ b/src/d_iwad.c @@ -30,24 +30,7 @@ #include "w_wad.h" #include "z_zone.h" -static const iwad_t iwads[] = { - {"doom.wad", doom, registered, "Doom"} -}; - -boolean D_IsIWADName(const char *name) -{ - int i; - - for (i = 0; i < arrlen(iwads); i++) - { - if (!strcasecmp(name, iwads[i].name)) - { - return true; - } - } - - return false; -} +static const iwad_t iwads[] = {{"doom.wad", doom, registered, "Doom"}}; // Array of locations to search for IWAD files // @@ -73,8 +56,7 @@ static void AddIWADDir(const char *dir) static boolean DirIsFile(const char *path, const char *filename) { - return strchr(path, DIR_SEPARATOR) != NULL && - !strcasecmp(M_BaseName(path), filename); + return strchr(path, DIR_SEPARATOR) != NULL && !strcasecmp(M_BaseName(path), filename); } // Check if the specified directory contains the specified IWAD @@ -121,8 +103,7 @@ static char *CheckDirectoryHasIWAD(const char *dir, const char *iwadname) // Search a directory to try to find an IWAD // Returns the location of the IWAD if found, otherwise NULL. -static char *SearchDirectoryForIWAD(const char *dir, int mask, - GameMission_t *mission) +static char *SearchDirectoryForIWAD(const char *dir, int mask, GameMission_t *mission) { char *filename; size_t i; @@ -322,13 +303,9 @@ static void BuildIWADDirList(void) char *D_FindWADByName(const char *name) { - char *path; - char *probe; - int i; // Absolute path? - - probe = M_FileCaseExists(name); + char *probe = M_FileCaseExists(name); if (probe != NULL) { return probe; @@ -338,7 +315,7 @@ char *D_FindWADByName(const char *name) // Search through all IWAD paths for a file with the given name. - for (i = 0; i < num_iwad_dirs; ++i) + for (int i = 0; i < num_iwad_dirs; ++i) { // As a special case, if this is in DOOMWADDIR or DOOMWADPATH, // the "directory" may actually refer directly to an IWAD @@ -352,8 +329,7 @@ char *D_FindWADByName(const char *name) free(probe); // Construct a string for the full path - - path = M_StringJoin(iwad_dirs[i], DIR_SEPARATOR_S, name, NULL); + char *path = M_StringJoin(iwad_dirs[i], DIR_SEPARATOR_S, name, NULL); probe = M_FileCaseExists(path); if (probe != NULL) @@ -401,10 +377,6 @@ char *D_TryFindWADByName(const char *filename) char *D_FindIWAD(int mask, GameMission_t *mission) { - char *result; - const char *iwadfile; - int iwadparm; - int i; // Check for the -iwad parameter @@ -413,14 +385,14 @@ char *D_FindIWAD(int mask, GameMission_t *mission) // // @arg // + int iwadparm = M_CheckParmWithArgs("-iwad", 1); - iwadparm = M_CheckParmWithArgs("-iwad", 1); + char *result; if (iwadparm) { // Search through IWAD dirs for an IWAD with the given name. - - iwadfile = myargv[iwadparm + 1]; + const char *iwadfile = myargv[iwadparm + 1]; result = D_FindWADByName(iwadfile); @@ -439,7 +411,7 @@ char *D_FindIWAD(int mask, GameMission_t *mission) BuildIWADDirList(); - for (i = 0; result == NULL && i < num_iwad_dirs; ++i) + for (int i = 0; result == NULL && i < num_iwad_dirs; ++i) { result = SearchDirectoryForIWAD(iwad_dirs[i], mask, mission); } @@ -447,71 +419,3 @@ char *D_FindIWAD(int mask, GameMission_t *mission) return result; } - -// Find all IWADs in the IWAD search path matching the given mask. - -const iwad_t **D_FindAllIWADs(int mask) -{ - const iwad_t **result; - int result_len; - char *filename; - int i; - - result = malloc(sizeof(iwad_t *) * (arrlen(iwads) + 1)); - result_len = 0; - - // Try to find all IWADs - - for (i = 0; i < arrlen(iwads); ++i) - { - if (((1 << iwads[i].mission) & mask) == 0) - { - continue; - } - - filename = D_FindWADByName(iwads[i].name); - - if (filename != NULL) - { - result[result_len] = &iwads[i]; - ++result_len; - } - } - - // End of list - - result[result_len] = NULL; - - return result; -} - -const char *D_SuggestIWADName(GameMission_t mission, GameMode_t mode) -{ - int i; - - for (i = 0; i < arrlen(iwads); ++i) - { - if (iwads[i].mission == mission && iwads[i].mode == mode) - { - return iwads[i].name; - } - } - - return "unknown.wad"; -} - -const char *D_SuggestGameName(GameMission_t mission, GameMode_t mode) -{ - int i; - - for (i = 0; i < arrlen(iwads); ++i) - { - if (iwads[i].mission == mission && - (mode == indetermined || iwads[i].mode == mode)) - { - return iwads[i].description; - } - } - - return "Unknown game?"; -} diff --git a/src/d_iwad.h b/src/d_iwad.h index 43f2e6b70c..9d2194e461 100644 --- a/src/d_iwad.h +++ b/src/d_iwad.h @@ -32,13 +32,9 @@ typedef struct const char *description; } iwad_t; -boolean D_IsIWADName(const char *name); char *D_FindWADByName(const char *filename); char *D_TryFindWADByName(const char *filename); char *D_FindIWAD(int mask, GameMission_t *mission); -const iwad_t **D_FindAllIWADs(int mask); -const char *D_SuggestIWADName(GameMission_t mission, GameMode_t mode); -const char *D_SuggestGameName(GameMission_t mission, GameMode_t mode); void D_CheckCorrectIWAD(GameMission_t mission); #endif diff --git a/src/d_loop.c b/src/d_loop.c index ad7a1ddd45..331a3d1981 100644 --- a/src/d_loop.c +++ b/src/d_loop.c @@ -50,7 +50,7 @@ typedef struct // received before we bail out and render a frame anyway. // Vanilla Doom used 20 for this value, but we use a smaller value // instead for better responsiveness of the menu when we're stuck. -#define MAX_NETGAME_STALL_TICS 5 +#define MAX_NETGAME_STALL_TICS 5 // // gametic is the tic about to (or currently being) run @@ -86,20 +86,20 @@ static int localplayer; // Used for original sync code. -static int skiptics = 0; +static int skiptics = 0; // Reduce the bandwidth needed by sampling game input less and transmitting // less. If ticdup is 2, sample half normal, 3 = one third normal, etc. -int ticdup; +int ticdup; // Amount to offset the timer for game sync. -fixed_t offsetms; +fixed_t offsetms; // Use new client syncronisation code -static boolean new_sync = true; +static boolean new_sync = true; // Callback functions for loop code. @@ -121,8 +121,8 @@ static int GetAdjustedTime(void) if (new_sync) { - // Use the adjustments from net_client.c only if we are - // using the new sync mode. + // Use the adjustments from net_client.c only if we are + // using the new sync mode. time_ms += (offsetms / FRACUNIT); } @@ -132,12 +132,12 @@ static int GetAdjustedTime(void) static boolean BuildNewTic(void) { - int gameticdiv; + int gameticdiv; ticcmd_t cmd; - gameticdiv = gametic/ticdup; + gameticdiv = gametic / ticdup; - I_StartTic (); + I_StartTic(); loop_interface->ProcessEvents(); // Always run the menu @@ -153,21 +153,21 @@ static boolean BuildNewTic(void) if (new_sync) { - // If playing single player, do not allow tics to buffer - // up very far + // If playing single player, do not allow tics to buffer + // up very far - if (!net_client_connected && maketic - gameticdiv > 2) - return false; + if (!net_client_connected && maketic - gameticdiv > 2) + return false; - // Never go more than ~200ms ahead + // Never go more than ~200ms ahead - if (maketic - gameticdiv > 8) - return false; + if (maketic - gameticdiv > 8) + return false; } else { - if (maketic - gameticdiv >= 5) - return false; + if (maketic - gameticdiv >= 5) + return false; } //printf ("mk:%i ",maketic); @@ -192,13 +192,13 @@ static boolean BuildNewTic(void) // Builds ticcmds for console player, // sends out a packet // -int lasttime; +int lasttime; -void NetUpdate (void) +void NetUpdate(void) { int nowtime; int newtics; - int i; + int i; // If we are running with singletics (timing a demo), this // is all done separately. @@ -230,7 +230,7 @@ void NetUpdate (void) // build new ticcmds for console player - for (i=0 ; i 0) - settings->extratics = atoi(myargv[i+1]); + settings->extratics = atoi(myargv[i + 1]); else settings->extratics = 1; @@ -369,7 +368,7 @@ void D_StartNetGame(net_gamesettings_t *settings, i = M_CheckParmWithArgs("-dup", 1); if (i > 0) - settings->ticdup = atoi(myargv[i+1]); + settings->ticdup = atoi(myargv[i + 1]); else settings->ticdup = 1; @@ -421,7 +420,6 @@ boolean D_InitNetGame(net_connect_data_t *connect_data) { boolean result = false; net_addr_t *addr = NULL; - int i; // Call D_QuitNetGame on exit: @@ -433,8 +431,7 @@ boolean D_InitNetGame(net_connect_data_t *connect_data) // Start a multiplayer server, listening for connections. // - if (M_CheckParm("-server") > 0 - || M_CheckParm("-privateserver") > 0) + if (M_CheckParm("-server") > 0 || M_CheckParm("-privateserver") > 0) { NET_SV_Init(); NET_SV_AddModule(&net_loop_server_module); @@ -454,7 +451,7 @@ boolean D_InitNetGame(net_connect_data_t *connect_data) // server and join it. // - i = M_CheckParm("-autojoin"); + int i = M_CheckParm("-autojoin"); if (i > 0) { @@ -479,12 +476,12 @@ boolean D_InitNetGame(net_connect_data_t *connect_data) if (i > 0) { net_sdl_module.InitClient(); - addr = net_sdl_module.ResolveAddress(myargv[i+1]); + addr = net_sdl_module.ResolveAddress(myargv[i + 1]); NET_ReferenceAddress(addr); if (addr == NULL) { - I_Error("Unable to resolve '%s'\n", myargv[i+1]); + I_Error("Unable to resolve '%s'\n", myargv[i + 1]); } } } @@ -521,7 +518,7 @@ boolean D_InitNetGame(net_connect_data_t *connect_data) // Called before quitting to leave a net game // without hanging the other players // -void D_QuitNetGame (void) +void D_QuitNetGame(void) { NET_SV_Shutdown(); NET_CL_Disconnect(); @@ -558,7 +555,7 @@ static void OldNetSync(void) // ideally maketic should be 1 - 3 tics above lowtic // if we are consistantly slower, speed up time - for (i=0 ; icmds[i]; + ticcmd_t *cmd = &set->cmds[i]; cmd->chatchar = 0; if (cmd->buttons & BT_SPECIAL) cmd->buttons = 0; @@ -663,15 +657,15 @@ static void SinglePlayerClear(ticcmd_set_t *set) // TryRunTics // -void TryRunTics (void) +void TryRunTics(void) { - int i; - int lowtic; - int entertic; + int i; + int lowtic; + int entertic; static int oldentertics; int realtics; - int availabletics; - int counts; + int availabletics; + int counts; // get real tics entertic = I_GetTime() / ticdup; @@ -687,24 +681,24 @@ void TryRunTics (void) } else { - NetUpdate (); + NetUpdate(); } lowtic = GetLowTic(); - availabletics = lowtic - gametic/ticdup; + availabletics = lowtic - gametic / ticdup; // decide how many tics to run if (new_sync) { - counts = availabletics; + counts = availabletics; } else { // decide how many tics to run - if (realtics < availabletics-1) - counts = realtics+1; + if (realtics < availabletics - 1) + counts = realtics + 1; else if (realtics < availabletics) counts = realtics; else @@ -720,20 +714,20 @@ void TryRunTics (void) } if (counts < 1) - counts = 1; + counts = 1; // wait for new tics if needed - while (!PlayersInGame() || lowtic < gametic/ticdup + counts) + while (!PlayersInGame() || lowtic < gametic / ticdup + counts) { - NetUpdate (); + NetUpdate(); lowtic = GetLowTic(); - if (lowtic < gametic/ticdup) - I_Error ("TryRunTics: lowtic < gametic"); + if (lowtic < gametic / ticdup) + I_Error("TryRunTics: lowtic < gametic"); // Still no tics to run? Sleep until some are available. - if (lowtic < gametic/ticdup + counts) + if (lowtic < gametic / ticdup + counts) { // If we're in a netgame, we might spin forever waiting for // new network data to be received. So don't stay in here @@ -764,22 +758,22 @@ void TryRunTics (void) SinglePlayerClear(set); } - for (i=0 ; i lowtic) - I_Error ("gametic>lowtic"); + for (i = 0; i < ticdup; i++) + { + if (gametic / ticdup > lowtic) + I_Error("gametic>lowtic"); memcpy(local_playeringame, set->ingame, sizeof(local_playeringame)); loop_interface->RunTic(set->cmds, set->ingame); - gametic++; + gametic++; - // modify command for duplicated tics + // modify command for duplicated tics TicdupSquash(set); - } + } - NetUpdate (); // check for new console commands + NetUpdate(); // check for new console commands } } @@ -791,81 +785,3 @@ void D_RegisterLoopCallbacks(loop_interface_t *i) // TODO: Move nonvanilla demo functions into a dedicated file. #include "m_misc.h" #include "w_wad.h" - -static boolean StrictDemos(void) -{ - //! - // @category demo - // - // When recording or playing back demos, disable any extensions - // of the vanilla demo format - record demos as vanilla would do, - // and play back demos as vanilla would do. - // - return M_ParmExists("-strictdemos"); -} - -// If the provided conditional value is true, we're trying to record -// a demo file that will include a non-vanilla extension. The function -// will return true if the conditional is true and it's allowed to use -// this extension (no extensions are allowed if -strictdemos is given -// on the command line). A warning is shown on the console using the -// provided string describing the non-vanilla expansion. -boolean D_NonVanillaRecord(boolean conditional, const char *feature) -{ - if (!conditional || StrictDemos()) - { - return false; - } - - printf("Warning: Recording a demo file with a non-vanilla extension " - "(%s). Use -strictdemos to disable this extension.\n", - feature); - - return true; -} - -// Returns true if the given lump number corresponds to data from a .lmp -// file, as opposed to a WAD. -static boolean IsDemoFile(int lumpnum) -{ - char *lower; - boolean result; - - lower = M_StringDuplicate(lumpinfo[lumpnum]->wad_file->path); - M_ForceLowercase(lower); - result = M_StringEndsWith(lower, ".lmp"); - free(lower); - - return result; -} - -// If the provided conditional value is true, we're trying to play back -// a demo that includes a non-vanilla extension. We return true if the -// conditional is true and it's allowed to use this extension, checking -// that: -// - The -strictdemos command line argument is not provided. -// - The given lumpnum identifying the demo to play back identifies a -// demo that comes from a .lmp file, not a .wad file. -// - Before proceeding, a warning is shown to the user on the console. -boolean D_NonVanillaPlayback(boolean conditional, int lumpnum, - const char *feature) -{ - if (!conditional || StrictDemos()) - { - return false; - } - - if (!IsDemoFile(lumpnum)) - { - printf("Warning: WAD contains demo with a non-vanilla extension " - "(%s)\n", feature); - return false; - } - - printf("Warning: Playing back a demo file with a non-vanilla extension " - "(%s). Use -strictdemos to disable this extension.\n", - feature); - - return true; -} - diff --git a/src/d_loop.h b/src/d_loop.h index c154be3a64..2cda922da8 100644 --- a/src/d_loop.h +++ b/src/d_loop.h @@ -79,13 +79,6 @@ void D_StartNetGame(net_gamesettings_t *settings, extern boolean singletics; extern int gametic, ticdup; -// Check if it is permitted to record a demo with a non-vanilla feature. -boolean D_NonVanillaRecord(boolean conditional, const char *feature); - -// Check if it is permitted to play back a demo with a non-vanilla feature. -boolean D_NonVanillaPlayback(boolean conditional, int lumpnum, - const char *feature); - void D_ReceiveTic(ticcmd_t *ticcmds, boolean *playeringame); diff --git a/src/d_mode.c b/src/d_mode.c index 825515d3c3..a5889ba6f9 100644 --- a/src/d_mode.c +++ b/src/d_mode.c @@ -27,11 +27,7 @@ static struct { GameMission_t mission; GameMode_t mode; - int episode; - int map; -} valid_modes[] = { - {doom, registered, 3, 9} -}; +} valid_modes[] = {{doom, registered}}; // Check that a gamemode+gamemission received over the network is valid. @@ -49,36 +45,3 @@ boolean D_ValidGameMode(GameMission_t mission, GameMode_t mode) return false; } - -boolean D_ValidEpisodeMap(GameMission_t mission, GameMode_t mode, int episode, - int map) -{ - int i; - - // Find the table entry for this mission/mode combination. - - for (i = 0; i < arrlen(valid_modes); ++i) - { - if (mission == valid_modes[i].mission && mode == valid_modes[i].mode) - { - return episode >= 1 && episode <= valid_modes[i].episode && - map >= 1 && map <= valid_modes[i].map; - } - } - - // Unknown mode/mission combination - - return false; -} - -const char *D_GameModeString(GameMode_t mode) -{ - switch (mode) - { - case registered: - return "registered"; - case indetermined: - default: - return "unknown"; - } -} diff --git a/src/d_mode.h b/src/d_mode.h index 27b474938f..dea75ddd2d 100644 --- a/src/d_mode.h +++ b/src/d_mode.h @@ -63,9 +63,6 @@ typedef enum boolean D_ValidGameMode(GameMission_t mission, GameMode_t mode); boolean D_ValidGameVersion(GameMission_t mission, GameVersion_t version); -boolean D_ValidEpisodeMap(GameMission_t mission, GameMode_t mode, int episode, - int map); boolean D_IsEpisodeMap(GameMission_t mission); -const char *D_GameModeString(GameMode_t mode); #endif /* #ifndef __D_MODE__ */ diff --git a/src/doom/am_map.c b/src/doom/am_map.c index c5126f229f..b537a837ba 100644 --- a/src/doom/am_map.c +++ b/src/doom/am_map.c @@ -181,8 +181,7 @@ mline_t triangle_guy[] = { mline_t thintriangle_guy[] = { {{(fixed_t)(-.5 * R), (fixed_t)(-.7 * R)}, {(fixed_t)(R), (fixed_t)(0)}}, {{(fixed_t)(R), (fixed_t)(0)}, {(fixed_t)(-.5 * R), (fixed_t)(.7 * R)}}, - {{(fixed_t)(-.5 * R), (fixed_t)(.7 * R)}, - {(fixed_t)(-.5 * R), (fixed_t)(-.7 * R)}}}; + {{(fixed_t)(-.5 * R), (fixed_t)(.7 * R)}, {(fixed_t)(-.5 * R), (fixed_t)(-.7 * R)}}}; #undef R @@ -207,9 +206,8 @@ static int lightlev; // used for funky strobing effect static pixel_t *fb; // pseudo-frame buffer static int amclock; -static mpoint_t m_paninc; // how far the window pans each tic (map coords) -static fixed_t - mtof_zoommul; // how far the window zooms in each tic (map coords) +static mpoint_t m_paninc; // how far the window pans each tic (map coords) +static fixed_t mtof_zoommul; // how far the window zooms in each tic (map coords) static fixed_t ftom_zoommul; // how far the window zooms in each tic (fb coords) static fixed_t m_x, m_y; // LL x,y where the window is on the map (map coords) @@ -252,7 +250,7 @@ static fixed_t scale_ftom; static player_t *plr; // the player represented by an arrow -static patch_t *marknums[10]; // numbers used for marking by the automap +static patch_t *marknums[10]; // numbers used for marking by the automap static mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are static int markpointnum = 0; // next point to be assigned @@ -262,26 +260,6 @@ cheatseq_t cheat_amap = CHEAT("iddt", 0); static boolean stopped = true; -// Calculates the slope and slope according to the x-axis of a line -// segment in map coordinates (with the upright y-axis n' all) so -// that it can be used with the brain-dead drawing stuff. - -void AM_getIslope(mline_t *ml, islope_t *is) -{ - int dx, dy; - - dy = ml->a.y - ml->b.y; - dx = ml->b.x - ml->a.x; - if (!dy) - is->islp = (dx < 0 ? -INT_MAX : INT_MAX); - else - is->islp = FixedDiv(dx, dy); - if (!dx) - is->slp = (dy < 0 ? -INT_MAX : INT_MAX); - else - is->slp = FixedDiv(dy, dx); -} - // // // @@ -418,7 +396,6 @@ void AM_changeWindowLoc(void) // void AM_initVariables(void) { - int pnum; static event_t st_notify = {ev_keyup, AM_MSGENTERED, 0, 0}; automapactive = true; @@ -444,7 +421,7 @@ void AM_initVariables(void) { plr = &players[0]; - for (pnum = 0; pnum < MAXPLAYERS; pnum++) + for (int pnum = 0; pnum < MAXPLAYERS; pnum++) { if (playeringame[pnum]) { @@ -701,8 +678,7 @@ boolean AM_Responder(event_t *ev) } else if (key == key_map_mark) { - M_snprintf(buffer, sizeof(buffer), "%s %d", - AMSTR_MARKEDSPOT, markpointnum); + M_snprintf(buffer, sizeof(buffer), "%s %d", AMSTR_MARKEDSPOT, markpointnum); plr->message = buffer; AM_addMark(); } @@ -799,27 +775,6 @@ void AM_doFollowPlayer(void) } } -// -// -// -void AM_updateLightLev(void) -{ - static int nexttic = 0; - //static int litelevels[] = { 0, 3, 5, 6, 6, 7, 7, 7 }; - static int litelevels[] = {0, 4, 7, 10, 12, 14, 15, 15}; - static int litelevelscnt = 0; - - // Change light level - if (amclock > nexttic) - { - lightlev = litelevels[litelevelscnt++]; - if (litelevelscnt == arrlen(litelevels)) - litelevelscnt = 0; - nexttic = amclock + 6 - (amclock % 6); - } -} - - // // Updates on Game Tick // @@ -882,15 +837,15 @@ boolean AM_clipMline(mline_t *ml, fline_t *fl) int dy; -#define DOOUTCODE(oc, mx, my) \ - (oc) = 0; \ - if ((my) < 0) \ - (oc) |= TOP; \ - else if ((my) >= f_h) \ - (oc) |= BOTTOM; \ - if ((mx) < 0) \ - (oc) |= LEFT; \ - else if ((mx) >= f_w) \ +#define DOOUTCODE(oc, mx, my) \ + (oc) = 0; \ + if ((my) < 0) \ + (oc) |= TOP; \ + else if ((my) >= f_h) \ + (oc) |= BOTTOM; \ + if ((mx) < 0) \ + (oc) |= LEFT; \ + else if ((mx) >= f_w) \ (oc) |= RIGHT; @@ -1012,12 +967,12 @@ void AM_drawFline(fline_t *fl, int color) register int ay; register int d; - static int fuck = 0; // For debugging only - if (fl->a.x < 0 || fl->a.x >= f_w || fl->a.y < 0 || fl->a.y >= f_h || - fl->b.x < 0 || fl->b.x >= f_w || fl->b.y < 0 || fl->b.y >= f_h) + if (fl->a.x < 0 || fl->a.x >= f_w || fl->a.y < 0 || fl->a.y >= f_h || fl->b.x < 0 || + fl->b.x >= f_w || fl->b.y < 0 || fl->b.y >= f_h) { + static int fuck = 0; fprintf(stderr, "fuck %d \r", fuck++); return; } @@ -1173,8 +1128,7 @@ void AM_drawWalls(void) else if (lines[i].backsector->ceilingheight != lines[i].frontsector->ceilingheight) { - AM_drawMline(&l, CDWALLCOLORS + - lightlev); // ceiling level change + AM_drawMline(&l, CDWALLCOLORS + lightlev); // ceiling level change } else if (cheating) { @@ -1252,8 +1206,6 @@ void AM_drawLineCharacter(mline_t *lineguy, int lineguylines, fixed_t scale, void AM_drawPlayers(void) { - int i; - player_t *p; static int their_colors[] = {GREENS, GRAYS, BROWNS, REDS}; int their_color = -1; int color; @@ -1261,19 +1213,18 @@ void AM_drawPlayers(void) if (!netgame) { if (cheating) - AM_drawLineCharacter(cheat_player_arrow, arrlen(cheat_player_arrow), - 0, plr->mo->angle, WHITE, plr->mo->x, - plr->mo->y); - else - AM_drawLineCharacter(player_arrow, arrlen(player_arrow), 0, + AM_drawLineCharacter(cheat_player_arrow, arrlen(cheat_player_arrow), 0, plr->mo->angle, WHITE, plr->mo->x, plr->mo->y); + else + AM_drawLineCharacter(player_arrow, arrlen(player_arrow), 0, plr->mo->angle, + WHITE, plr->mo->x, plr->mo->y); return; } - for (i = 0; i < MAXPLAYERS; i++) + for (int i = 0; i < MAXPLAYERS; i++) { their_color++; - p = &players[i]; + player_t *p = &players[i]; if ((deathmatch && !singledemo) && p != plr) continue; @@ -1286,8 +1237,8 @@ void AM_drawPlayers(void) else color = their_colors[their_color]; - AM_drawLineCharacter(player_arrow, arrlen(player_arrow), 0, - p->mo->angle, color, p->mo->x, p->mo->y); + AM_drawLineCharacter(player_arrow, arrlen(player_arrow), 0, p->mo->angle, color, + p->mo->x, p->mo->y); } } @@ -1302,8 +1253,7 @@ void AM_drawThings(int colors, int colorrange) while (t) { AM_drawLineCharacter(thintriangle_guy, arrlen(thintriangle_guy), - 16 << FRACBITS, t->angle, colors + lightlev, - t->x, t->y); + 16 << FRACBITS, t->angle, colors + lightlev, t->x, t->y); t = t->snext; } } diff --git a/src/doom/d_items.c b/src/doom/d_items.c index 33f310c63b..a97154cf2c 100644 --- a/src/doom/d_items.c +++ b/src/doom/d_items.c @@ -34,95 +34,23 @@ // atkstate, i.e. attack/fire/hit frame // flashstate, muzzle flash // -weaponinfo_t weaponinfo[NUMWEAPONS] = -{ - { - // fist - am_noammo, - S_PUNCHUP, - S_PUNCHDOWN, - S_PUNCH, - S_PUNCH1, - S_NULL - }, - { - // pistol - am_clip, - S_PISTOLUP, - S_PISTOLDOWN, - S_PISTOL, - S_PISTOL1, - S_PISTOLFLASH - }, - { - // shotgun - am_shell, - S_SGUNUP, - S_SGUNDOWN, - S_SGUN, - S_SGUN1, - S_SGUNFLASH1 - }, - { - // chaingun - am_clip, - S_CHAINUP, - S_CHAINDOWN, - S_CHAIN, - S_CHAIN1, - S_CHAINFLASH1 - }, - { - // missile launcher - am_misl, - S_MISSILEUP, - S_MISSILEDOWN, - S_MISSILE, - S_MISSILE1, - S_MISSILEFLASH1 - }, - { - // plasma rifle - am_cell, - S_PLASMAUP, - S_PLASMADOWN, - S_PLASMA, - S_PLASMA1, - S_PLASMAFLASH1 - }, - { - // bfg 9000 - am_cell, - S_BFGUP, - S_BFGDOWN, - S_BFG, - S_BFG1, - S_BFGFLASH1 - }, - { - // chainsaw - am_noammo, - S_SAWUP, - S_SAWDOWN, - S_SAW, - S_SAW1, - S_NULL - }, - { - // super shotgun - am_shell, - S_DSGUNUP, - S_DSGUNDOWN, - S_DSGUN, - S_DSGUN1, - S_DSGUNFLASH1 - }, +weaponinfo_t weaponinfo[NUMWEAPONS] = { + {// fist + am_noammo, S_PUNCHUP, S_PUNCHDOWN, S_PUNCH, S_PUNCH1, S_NULL}, + {// pistol + am_clip, S_PISTOLUP, S_PISTOLDOWN, S_PISTOL, S_PISTOL1, S_PISTOLFLASH}, + {// shotgun + am_shell, S_SGUNUP, S_SGUNDOWN, S_SGUN, S_SGUN1, S_SGUNFLASH1}, + {// chaingun + am_clip, S_CHAINUP, S_CHAINDOWN, S_CHAIN, S_CHAIN1, S_CHAINFLASH1}, + {// missile launcher + am_misl, S_MISSILEUP, S_MISSILEDOWN, S_MISSILE, S_MISSILE1, S_MISSILEFLASH1}, + {// plasma rifle + am_cell, S_PLASMAUP, S_PLASMADOWN, S_PLASMA, S_PLASMA1, S_PLASMAFLASH1}, + {// bfg 9000 + am_cell, S_BFGUP, S_BFGDOWN, S_BFG, S_BFG1, S_BFGFLASH1}, + {// chainsaw + am_noammo, S_SAWUP, S_SAWDOWN, S_SAW, S_SAW1, S_NULL}, + {// super shotgun + am_shell, S_DSGUNUP, S_DSGUNDOWN, S_DSGUN, S_DSGUN1, S_DSGUNFLASH1}, }; - - - - - - - - diff --git a/src/doom/d_main.c b/src/doom/d_main.c index 7942afcf3c..85f57681b1 100644 --- a/src/doom/d_main.c +++ b/src/doom/d_main.c @@ -27,7 +27,6 @@ #include "config.h" #include "doomdef.h" -#include "doom_icon.h" #include "doomstat.h" #include "dstrings.h" @@ -75,8 +74,6 @@ #include "d_main.h" -#include "doom_icon.c" - // // D-DoomLoop() // Not a globally visible function, @@ -167,7 +164,6 @@ boolean D_Display(void) static boolean fullscreen = false; static gamestate_t oldgamestate = -1; static int borderdrawcount; - int y; boolean wipe; boolean redrawsbar; @@ -244,8 +240,7 @@ boolean D_Display(void) } // see if the border needs to be updated to the screen - if (gamestate == GS_LEVEL && !automapactive && - scaledviewwidth != SCREENWIDTH) + if (gamestate == GS_LEVEL && !automapactive && scaledviewwidth != SCREENWIDTH) { if (menuactive || menuactivestate || !viewactivestate) borderdrawcount = 3; @@ -256,13 +251,6 @@ boolean D_Display(void) } } - if (testcontrols) - { - // Box showing current mouse speed - - V_DrawMouseSpeedBox(testcontrols_mousespeed); - } - menuactivestate = menuactive; viewactivestate = viewactive; inhelpscreensstate = inhelpscreens; @@ -271,6 +259,8 @@ boolean D_Display(void) // draw pause pic if (paused) { + int y; + if (automapactive) y = 4; else @@ -291,7 +281,8 @@ static void EnableLoadingDisk(void) { if (show_diskicon) { - V_EnableLoadingDisk("STDISK", SCREENWIDTH - LOADING_DISK_W, SCREENHEIGHT - LOADING_DISK_H); + V_EnableLoadingDisk("STDISK", SCREENWIDTH - LOADING_DISK_W, + SCREENHEIGHT - LOADING_DISK_H); } } @@ -357,23 +348,20 @@ boolean D_GrabMouseCallback(void) // void D_RunFrame() { - int nowtime; - int tics; static int wipestart; static boolean wipe; if (wipe) { + int nowtime = I_GetTime(); + int tics = nowtime - wipestart; do { - nowtime = I_GetTime(); - tics = nowtime - wipestart; I_Sleep(1); } while (tics <= 0); wipestart = nowtime; - wipe = - !wipe_ScreenWipe(wipe_Melt, 0, 0, SCREENWIDTH, SCREENHEIGHT, tics); + wipe = !wipe_ScreenWipe(wipe_Melt, 0, 0, SCREENWIDTH, SCREENHEIGHT, tics); I_UpdateNoBlit(); M_Drawer(); // menu is drawn even on top of wipes I_FinishUpdate(); // page flip or blit buffer @@ -418,7 +406,6 @@ void D_DoomLoop(void) I_SetWindowTitle(gamedescription); I_GraphicsCheckCommandLine(); I_SetGrabMouseCallback(D_GrabMouseCallback); - I_RegisterWindowIcon(doom_icon_data, doom_icon_w, doom_icon_h); I_InitGraphics(); EnableLoadingDisk(); @@ -896,16 +883,15 @@ void D_DoomMain(void) { // These are the lumps that will be checked in IWAD, // if any one is not present, execution will be aborted. - char name[23][8] = {"e2m1", "e2m2", "e2m3", "e2m4", "e2m5", - "e2m6", "e2m7", "e2m8", "e2m9", "e3m1", - "e3m3", "e3m3", "e3m4", "e3m5", "e3m6", - "e3m7", "e3m8", "e3m9", "dphoof", "bfgga0", - "heada1", "cybra1", "spida1d1"}; + char name[23][8] = {"e2m1", "e2m2", "e2m3", "e2m4", "e2m5", "e2m6", + "e2m7", "e2m8", "e2m9", "e3m1", "e3m3", "e3m3", + "e3m4", "e3m5", "e3m6", "e3m7", "e3m8", "e3m9", + "dphoof", "bfgga0", "heada1", "cybra1", "spida1d1"}; int i; // Check for fake IWAD with right name, // but w/o all the lumps of the registered version. - for (i = 0; i < 23; i++) + for (i = 0; i < 23; i++) { if (W_CheckNumForName(name[i]) < 0) { diff --git a/src/doom/d_net.c b/src/doom/d_net.c index ef38684d04..82cd12a4c1 100644 --- a/src/doom/d_net.c +++ b/src/doom/d_net.c @@ -48,8 +48,7 @@ static void PlayerQuitGame(player_t *player) // Do this the same way as Vanilla Doom does, to allow dehacked // replacements of this message - M_StringCopy(exitmsg, "Player 1 left the game", - sizeof(exitmsg)); + M_StringCopy(exitmsg, "Player 1 left the game", sizeof(exitmsg)); exitmsg[7] += player_num; @@ -58,9 +57,9 @@ static void PlayerQuitGame(player_t *player) // TODO: check if it is sensible to do this: - if (demorecording) + if (demorecording) { - G_CheckDemoStatus (); + G_CheckDemoStatus(); } } @@ -84,17 +83,13 @@ static void RunTic(ticcmd_t *cmds, boolean *ingame) // run a tic. if (advancedemo) - D_DoAdvanceDemo (); + D_DoAdvanceDemo(); - G_Ticker (); + G_Ticker(); } -static loop_interface_t doom_loop_interface = { - D_ProcessEvents, - G_BuildTiccmd, - RunTic, - M_Ticker -}; +static loop_interface_t doom_loop_interface = {D_ProcessEvents, G_BuildTiccmd, RunTic, + M_Ticker}; // Load game settings from the specified structure and @@ -147,9 +142,8 @@ static void SaveGameSettings(net_gamesettings_t *settings) settings->respawn_monsters = respawnparm; settings->timelimit = timelimit; - settings->lowres_turn = (M_ParmExists("-record") - && !M_ParmExists("-longtics")) - || M_ParmExists("-shorttics"); + settings->lowres_turn = (M_ParmExists("-record") && !M_ParmExists("-longtics")) || + M_ParmExists("-shorttics"); } static void InitConnectData(net_connect_data_t *connect_data) @@ -171,7 +165,7 @@ static void InitConnectData(net_connect_data_t *connect_data) connect_data->drone = true; } - //! + //! // @category net // // Run as the right screen in three screen mode. @@ -202,9 +196,8 @@ static void InitConnectData(net_connect_data_t *connect_data) // Are we recording a demo? Possibly set lowres turn mode - connect_data->lowres_turn = (M_ParmExists("-record") - && !M_ParmExists("-longtics")) - || shorttics; + connect_data->lowres_turn = + (M_ParmExists("-record") && !M_ParmExists("-longtics")) || shorttics; // Read checksums of our WAD directory W_Checksum(connect_data->wad_sha1sum); @@ -235,7 +228,7 @@ void D_ConnectNetGame(void) // D_CheckNetGame // Works out player numbers among the net participants // -void D_CheckNetGame (void) +void D_CheckNetGame(void) { net_gamesettings_t settings; @@ -250,11 +243,11 @@ void D_CheckNetGame (void) D_StartNetGame(&settings, NULL); LoadGameSettings(&settings); - printf("startskill %i deathmatch: %i startmap: %i startepisode: %i\n", - startskill, deathmatch, startmap, startepisode); + printf("startskill %i deathmatch: %i startmap: %i startepisode: %i\n", startskill, + deathmatch, startmap, startepisode); - printf("player %i of %i (%i nodes)\n", - consoleplayer+1, settings.num_players, settings.num_players); + printf("player %i of %i (%i nodes)\n", consoleplayer + 1, settings.num_players, + settings.num_players); // Show players here; the server might have specified a time limit @@ -265,7 +258,7 @@ void D_CheckNetGame (void) if (timelimit == 20 && M_CheckParm("-avg")) { printf("Austin Virtual Gaming: Levels will end " - "after 20 minutes\n"); + "after 20 minutes\n"); } else { @@ -276,4 +269,3 @@ void D_CheckNetGame (void) } } } - diff --git a/src/doom/doom_icon.c b/src/doom/doom_icon.c deleted file mode 100644 index 4fb45212e1..0000000000 --- a/src/doom/doom_icon.c +++ /dev/null @@ -1,2736 +0,0 @@ -static int doom_icon_w = 128; -static int doom_icon_h = 128; - -static const unsigned int doom_icon_data[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0001, - 0xe580463a, 0xe17e476f, 0xdf7e456f, 0xdc7d486e, 0xde7d476c, 0xdd7d466a, - 0xdd794469, 0xdc794367, 0xda7b4466, 0xdb784264, 0xd8764063, 0xda763f61, - 0xd7723d60, 0xd9753e5e, 0xd874405c, 0xd8733e5b, 0xd7703c59, 0xd46e3a58, - 0xd5713b56, 0xd26c3955, 0xd46c3753, 0xd06a3552, 0xcf663350, 0xd169344e, - 0xd167324d, 0xcf63334b, 0xcb60304a, 0xca602e48, 0xc75a2944, 0xc75a2944, - 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, - 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, - 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, - 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, 0xc75a2944, - 0xc75a2944, 0xc75a2944, 0xc8592945, 0xbc552748, 0xb951284c, 0xaf4d2350, - 0xa94a2253, 0xa4492057, 0x9e452059, 0x993e222d, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xd8804e1a, 0xeb9054e5, 0xf29b5dff, 0xf1995cff, 0xee965aff, 0xed9458ff, - 0xec9256ff, 0xea9055ff, 0xea8d53ff, 0xe88b51ff, 0xe78950ff, 0xe5874eff, - 0xe3844cff, 0xe2824aff, 0xe08049ff, 0xe07e47ff, 0xde7b45ff, 0xdd7a44ff, - 0xdc7842ff, 0xda7640ff, 0xd8733fff, 0xd7713dff, 0xd66f3bff, 0xd46d39ff, - 0xd36a38ff, 0xd26836ff, 0xd06634ff, 0xcf6433ff, 0xcd6131ff, 0xcc5f2fff, - 0xca5c2dff, 0xc8592bff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc65929ff, 0xbc5427ff, - 0xb45025ff, 0xab4b23ff, 0xa14621ff, 0x99421eff, 0x903e1dff, 0x873a1aff, - 0x873a1ad0, 0x99402614, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xe88d53d2, 0xf39d5fff, 0xf29b5dff, 0xf1995cff, - 0xee965aff, 0xed9458ff, 0xec9256ff, 0xea9055ff, 0xea8d53ff, 0xe88b51ff, - 0xe78950ff, 0xe5874eff, 0xe3844cff, 0xe2824aff, 0xe08049ff, 0xe07e47ff, - 0xde7b45ff, 0xdd7a44ff, 0xdc7842ff, 0xda7640ff, 0xd8733fff, 0xd7713dff, - 0xd66f3bff, 0xd46d39ff, 0xd36a38ff, 0xd26836ff, 0xd06634ff, 0xcf6433ff, - 0xcd6131ff, 0xcc5f2fff, 0xca5d2eff, 0xc95b2cff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc65929ff, 0xbc5427ff, 0xb45025ff, 0xab4b23ff, 0xa14621ff, 0x99421eff, - 0x903e1dff, 0x873a1aff, 0x7d3618ff, 0x86391abc, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf19a5cfc, 0xf39d5fff, - 0xf29b5dff, 0xf1995cff, 0xee965aff, 0xed9458ff, 0xec9256ff, 0xea9055ff, - 0xea8d53ff, 0xe88b51ff, 0xe78950ff, 0xe5874eff, 0xe3844cff, 0xe2824aff, - 0xe08049ff, 0xe07e47ff, 0xde7b45ff, 0xdd7a44ff, 0xdc7842ff, 0xda7640ff, - 0xd8733fff, 0xd7713dff, 0xd66f3bff, 0xd46d39ff, 0xd36a38ff, 0xd26836ff, - 0xd06634ff, 0xcf6433ff, 0xcd6131ff, 0xcc5f2fff, 0xca5d2eff, 0xca5b2cff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0xc8592aff, 0xc65929ff, 0xbc5427ff, 0xb45025ff, 0xab4b23ff, - 0xa14621ff, 0x99421eff, 0x903e1dff, 0x873a1aff, 0x7d3618ff, 0x793317f3, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf39e61ff, 0xa9643aff, 0x602d16ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x53210eff, - 0x672b12ff, 0x743015fd, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xac683dff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x622911fe, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x663219ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x52210dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x50210eff, 0x4c1e0cff, 0x4c1e0cff, 0x884322ff, 0xe78c53ff, 0xe1854dff, - 0xb5542aff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, - 0xb15127ff, 0xb15127ff, 0xaf5027ff, 0x843b1bff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x6b3118ff, 0xe2874fff, 0xe58a51ff, 0xbc5b2fff, 0xb15127ff, - 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, - 0xb15127ff, 0x94421fff, 0x4d1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0x532210ff, - 0xd97f48ff, 0xe98e54ff, 0xc56535ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, - 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xa04822ff, - 0x55230eff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0xc8713fff, 0xe99056ff, - 0xce6e3cff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xb15127ff, - 0xb15127ff, 0xb15127ff, 0xb15127ff, 0xa74c24ff, 0x602812ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4d1e0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f200eff, 0x4c1e0cff, 0x4c1e0cff, 0xe48950ff, - 0xf5a062ff, 0xf5a062ff, 0xdc7843ff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xca5e2eff, - 0x5a2610ff, 0x4c1e0cff, 0x4c1e0cff, 0xcf7543ff, 0xf5a062ff, 0xf5a062ff, - 0xe4854dff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0x733216ff, 0x4c1e0cff, - 0x4c1e0cff, 0xad5d32ff, 0xf5a062ff, 0xf5a062ff, 0xeb9156ff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0x8b3d1dff, 0x4c1e0cff, 0x4c1e0cff, 0x793a1dff, - 0xf5a062ff, 0xf5a062ff, 0xf39d60ff, 0xcc5f2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xa34a23ff, 0x4c1e0cff, 0x4c1e0cff, 0x4e1e0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0xdc7f48ff, 0xf5a062ff, 0xf5a062ff, 0xd56f3bff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xc2592cff, 0x52210dff, 0x4c1e0cff, 0x4c1e0cff, 0xc2693aff, - 0xf5a062ff, 0xf5a062ff, 0xde7c45ff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xca5d2dff, - 0x632a12ff, 0x4c1e0cff, 0x4c1e0cff, 0x9e4e28ff, 0xf49f62ff, 0xf5a062ff, - 0xe6884fff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0x793418ff, 0x4c1e0cff, - 0x4c1e0cff, 0x6f3217ff, 0xf29b5eff, 0xf5a062ff, 0xee9459ff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, 0xcb5e2eff, - 0xcb5e2eff, 0xcb5e2eff, 0x91411fff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xab4d24ff, 0xd8723eff, 0xd46c38ff, - 0xa34922ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, - 0x7f3819ff, 0x7f3819ff, 0x7e3719ff, 0x5c2610ff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x93401dff, 0xd56e3aff, 0xd7703cff, 0xb05025ff, 0x7f3819ff, - 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, - 0x7f3819ff, 0x652a13ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, - 0xd26836ff, 0xd8743fff, 0xc0582bff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, - 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x6f3016ff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, 0xce6331ff, 0xda7541ff, - 0xcc612fff, 0x823a1aff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, - 0x7f3819ff, 0x7f3819ff, 0x7f3819ff, 0x773317ff, 0x4e1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, - 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, - 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, - 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, - 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, - 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, - 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, - 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, - 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, - 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, - 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, - 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, - 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, - 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, - 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, - 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, - 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, 0xc8592aff, 0xc8592aff, - 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, 0x9e4520ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7c3417ff, - 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, 0xc8592aff, 0xc8592aff, - 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0xaa4b23ff, - 0xc8592aff, 0xc8592aff, 0x883b1aff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x93401dff, 0xc8592aff, 0xc8592aff, - 0x9e4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x7c3417ff, 0xc8592aff, 0xc8592aff, 0xb65026ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x632912ff, - 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51210dff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0xa94a23ff, 0xc8592aff, 0xc8592aff, 0x863a1aff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x923f1dff, - 0xc8592aff, 0xc8592aff, 0x9f4520ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x7a3517ff, 0xc8592aff, 0xc8592aff, - 0xb55026ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x632812ff, 0xc8592aff, 0xc8592aff, 0xc8592aff, 0x51200eff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0x8d3d1cff, 0xc8592aff, 0xc7582aff, - 0x6a2c13ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x763216ff, 0xc8592aff, 0xc8592aff, 0x813719ff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x602811ff, - 0xc55829ff, 0xc8592aff, 0x98431fff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x52210dff, 0xbd5427ff, 0xc8592aff, - 0xb04e24ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0x4d1f0cff, - 0x712f14ff, 0x632912ff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x682b13ff, 0x6d2d14ff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x602811ff, 0x723115ff, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x58240fff, 0x753116ff, 0x54220eff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4f1f0dff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4f1f0dff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x4f1f0dff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, 0x4c1e0cff, - 0x4c1e0cff, 0x4f1f0dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x93756aff, 0x917569ff, 0xa8836eff, 0xb68b70ff, - 0xb68b70ff, 0xb68b70ff, 0xb68b70ff, 0xb68b70ff, 0xb68b70ff, 0xbc967eff, - 0xc7ad9dff, 0xc6ac9cff, 0xc6ac9cff, 0xc5ab9bff, 0xc5ab9bff, 0xc4a99aff, - 0xc3a899ff, 0xc3a899ff, 0xc2a798ff, 0xba9581ff, 0xb58870ff, 0xb58870ff, - 0xb58770ff, 0xb58670ff, 0xb4856fff, 0xb2836dff, 0xb0816bff, 0xae7e69ff, - 0xad7f6aff, 0xb29183ff, 0xb29589ff, 0xb19387ff, 0xb09286ff, 0xad8f83ff, - 0xab8d81ff, 0xaa8c80ff, 0xa88a7eff, 0xa6877cff, 0xa28175ff, 0x986553ff, - 0x966351ff, 0x956150ff, 0x935f4eff, 0x915d4cff, 0x8f5a4aff, 0x8e5949ff, - 0x8c5647ff, 0x895445ff, 0x8d6154ff, 0x917169ff, 0x8f6f66ff, 0x8e6d65ff, - 0x8c6b63ff, 0x8a6961ff, 0x896860ff, 0x87655eff, 0x85635cff, 0x84625bff, - 0x7a473dff, 0x743b30ff, 0x72382fff, 0x753c34ff, 0x773f3aff, 0x7a4040ff, - 0x7c4345ff, 0x724549ff, 0x5f454bff, 0x674e55ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xf9f9f9ff, 0xedededff, 0xf3f3f3ff, 0xdfdfdfff, 0xdededeff, 0xdcdcdcff, - 0xdbdbdbff, 0xd9d9d9ff, 0xd7d7d7ff, 0xd6d6d6ff, 0xd4d4d4ff, 0xecececff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfcfcfcff, 0xf7f7f7ff, - 0xf2f2f2ff, 0xedededff, 0xcfcfcfff, 0xdcdcdcff, 0xc6c6c6ff, 0xbfbfbfff, - 0xbdbdbdff, 0xbcbcbcff, 0xbababaff, 0xb9b9b9ff, 0xb7b7b7ff, 0xb5b5b5ff, - 0xb5b5b5ff, 0xb7b7b7ff, 0xb2b2b2ff, 0xaeaeaeff, 0xa9a9a9ff, 0xa5a5a5ff, - 0xa0a0a0ff, 0x9b9b9bff, 0x979797ff, 0x989898ff, 0x9a9a9aff, 0x969696ff, - 0xa0a0a0ff, 0x9f9f9fff, 0x9d9d9dff, 0x9b9b9bff, 0x9a9a9aff, 0x989898ff, - 0x979797ff, 0x959595ff, 0x6f6f6fff, 0x5b5b5bff, 0x575758ff, 0x5e5f66ff, - 0x646775ff, 0x6a6e84ff, 0x717693ff, 0x777ea1ff, 0x7d85adff, 0x858791ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xf9f9f9ff, 0xe5e5e5ff, 0xebebebff, 0xffffffff, 0xf2f2f2ff, - 0xdededeff, 0xdcdcdcff, 0xdbdbdbff, 0xd9d9d9ff, 0xd7d7d7ff, 0xd6d6d6ff, - 0xd4d4d4ff, 0xecececff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xfcfcfcff, 0xf7f7f7ff, 0xf1f1f1ff, 0xd2d2d2ff, 0xc4c4c4ff, 0xe0e0e0ff, - 0xdcdcdcff, 0xc3c3c3ff, 0xbdbdbdff, 0xbcbcbcff, 0xbababaff, 0xb9b9b9ff, - 0xb7b7b7ff, 0xb5b5b5ff, 0xb5b5b5ff, 0xb7b7b7ff, 0xb2b2b2ff, 0xaeaeaeff, - 0xa9a9a9ff, 0xa5a5a5ff, 0xa0a0a0ff, 0x9b9b9bff, 0x9c9c9cff, 0xa5a5a5ff, - 0x9a9a9aff, 0x898989ff, 0x939393ff, 0x9f9f9fff, 0x9d9d9dff, 0x9b9b9bff, - 0x9a9a9aff, 0x989898ff, 0x979797ff, 0x959595ff, 0x6f6f6fff, 0x5b5b5bff, - 0x575758ff, 0x5e5f66ff, 0x646775ff, 0x6a6e84ff, 0x717693ff, 0x797fa0ff, - 0x84868fff, 0x858585ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfafafaff, 0xe7e7e7ff, 0xe4e4e4ff, 0xebebebff, - 0xffffffff, 0xffffffff, 0xf2f2f2ff, 0xdcdcdcff, 0xdbdbdbff, 0xd9d9d9ff, - 0xd7d7d7ff, 0xd6d6d6ff, 0xd4d4d4ff, 0xecececff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xfcfcfcff, 0xf6f6f6ff, 0xd4d4d4ff, 0xc6c6c6ff, - 0xc4c4c4ff, 0xe0e0e0ff, 0xe0e0e0ff, 0xd9d9d9ff, 0xc0c0c0ff, 0xbcbcbcff, - 0xbababaff, 0xb9b9b9ff, 0xb7b7b7ff, 0xb5b5b5ff, 0xb5b5b5ff, 0xb7b7b7ff, - 0xb2b2b2ff, 0xaeaeaeff, 0xa9a9a9ff, 0xa5a5a5ff, 0xa0a0a0ff, 0xa0a0a0ff, - 0xa7a7a7ff, 0xa5a5a5ff, 0x9a9a9aff, 0x898989ff, 0x858585ff, 0x909090ff, - 0x9d9d9dff, 0x9b9b9bff, 0x9a9a9aff, 0x989898ff, 0x979797ff, 0x959595ff, - 0x6f6f6fff, 0x5b5b5bff, 0x575758ff, 0x5e5f66ff, 0x646775ff, 0x6a6e84ff, - 0x737893ff, 0x84868dff, 0x868686ff, 0x858585ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xfafafaff, 0xe8e8e8ff, 0xe6e6e6ff, - 0xe4e4e4ff, 0xebebebff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf1f1f1ff, - 0xdbdbdbff, 0xd9d9d9ff, 0xd7d7d7ff, 0xd6d6d6ff, 0xd4d4d4ff, 0xecececff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbfbfbff, 0xd7d7d7ff, - 0xc7c7c7ff, 0xc6c6c6ff, 0xc4c4c4ff, 0xe0e0e0ff, 0xe0e0e0ff, 0xdcdcdcff, - 0xd4d4d4ff, 0xbfbfbfff, 0xbababaff, 0xb9b9b9ff, 0xb7b7b7ff, 0xb5b5b5ff, - 0xb5b5b5ff, 0xb7b7b7ff, 0xb2b2b2ff, 0xaeaeaeff, 0xa9a9a9ff, 0xa5a5a5ff, - 0xa3a3a3ff, 0xa8a8a8ff, 0xa7a7a7ff, 0xa5a5a5ff, 0x9a9a9aff, 0x898989ff, - 0x858585ff, 0x808080ff, 0x8d8d8dff, 0x9b9b9bff, 0x9a9a9aff, 0x989898ff, - 0x979797ff, 0x959595ff, 0x6f6f6fff, 0x5b5b5bff, 0x575758ff, 0x5e5f66ff, - 0x646775ff, 0x6c7085ff, 0x85868cff, 0x888888ff, 0x868686ff, 0x858585ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbfbfbff, 0xeaeaeaff, - 0xe7e7e7ff, 0xe6e6e6ff, 0xe4e4e4ff, 0xebebebff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xf1f1f1ff, 0xd9d9d9ff, 0xd7d7d7ff, 0xd6d6d6ff, - 0xd4d4d4ff, 0xecececff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfefefeff, - 0xd9d9d9ff, 0xc9c9c9ff, 0xc7c7c7ff, 0xc6c6c6ff, 0xc4c4c4ff, 0xe0e0e0ff, - 0xe0e0e0ff, 0xdcdcdcff, 0xd7d7d7ff, 0xd0d0d0ff, 0xbdbdbdff, 0xb9b9b9ff, - 0xb7b7b7ff, 0xb5b5b5ff, 0xb5b5b5ff, 0xb7b7b7ff, 0xb2b2b2ff, 0xaeaeaeff, - 0xa9a9a9ff, 0xa7a7a7ff, 0xaaaaaaff, 0xa8a8a8ff, 0xa7a7a7ff, 0xa5a5a5ff, - 0x9a9a9aff, 0x898989ff, 0x858585ff, 0x808080ff, 0x7b7b7bff, 0x8a8a8aff, - 0x9a9a9aff, 0x989898ff, 0x979797ff, 0x959595ff, 0x6f6f6fff, 0x5b5b5bff, - 0x575758ff, 0x5e5f66ff, 0x676a77ff, 0x85858aff, 0x8a8a8aff, 0x888888ff, - 0x868686ff, 0x858585ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbfbfbff, - 0xecececff, 0xe9e9e9ff, 0xe7e7e7ff, 0xe6e6e6ff, 0xe4e4e4ff, 0xebebebff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf0f0f0ff, - 0xd7d7d7ff, 0xd6d6d6ff, 0xd4d4d4ff, 0xecececff, 0xffffffff, 0xffffffff, - 0xfefefeff, 0xdbdbdbff, 0xcacacaff, 0xc9c9c9ff, 0xc7c7c7ff, 0xc6c6c6ff, - 0xc4c4c4ff, 0xe0e0e0ff, 0xe0e0e0ff, 0xdcdcdcff, 0xd7d7d7ff, 0xd2d2d2ff, - 0xcbcbcbff, 0xbbbbbbff, 0xb7b7b7ff, 0xb5b5b5ff, 0xb5b5b5ff, 0xb7b7b7ff, - 0xb2b2b2ff, 0xaeaeaeff, 0xaaaaaaff, 0xacacacff, 0xaaaaaaff, 0xa8a8a8ff, - 0xa7a7a7ff, 0xa5a5a5ff, 0x9a9a9aff, 0x898989ff, 0x858585ff, 0x808080ff, - 0x7b7b7bff, 0x777777ff, 0x878787ff, 0x989898ff, 0x979797ff, 0x959595ff, - 0x6f6f6fff, 0x5b5b5bff, 0x575758ff, 0x616269ff, 0x848588ff, 0x8b8b8bff, - 0x8a8a8aff, 0x888888ff, 0x868686ff, 0x858585ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, - 0xfbfbfbff, 0xedededff, 0xebebebff, 0xe9e9e9ff, 0xe7e7e7ff, 0xe6e6e6ff, - 0xe4e4e4ff, 0xebebebff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xefefefff, 0xd6d6d6ff, 0xd4d4d4ff, 0xecececff, - 0xffffffff, 0xfefefeff, 0xddddddff, 0xccccccff, 0xcacacaff, 0xc9c9c9ff, - 0xc7c7c7ff, 0xc6c6c6ff, 0xc4c4c4ff, 0xe0e0e0ff, 0xe0e0e0ff, 0xdcdcdcff, - 0xd7d7d7ff, 0xd2d2d2ff, 0xcececeff, 0xc7c7c7ff, 0xb9b9b9ff, 0xb5b5b5ff, - 0xb5b5b5ff, 0xb7b7b7ff, 0xb2b2b2ff, 0xaeaeaeff, 0xadadadff, 0xacacacff, - 0xaaaaaaff, 0xa8a8a8ff, 0xa7a7a7ff, 0xa5a5a5ff, 0x9a9a9aff, 0x898989ff, - 0x858585ff, 0x808080ff, 0x7b7b7bff, 0x777777ff, 0x727272ff, 0x848484ff, - 0x979797ff, 0x959595ff, 0x6f6f6fff, 0x5b5b5bff, 0x5b5b5bff, 0x858587ff, - 0x8d8d8dff, 0x8b8b8bff, 0x8a8a8aff, 0x888888ff, 0x868686ff, 0x858585ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xffffffff, 0xfcfcfcff, 0xefefefff, 0xecececff, 0xebebebff, 0xe9e9e9ff, - 0xe7e7e7ff, 0xe6e6e6ff, 0xe4e4e4ff, 0xebebebff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xefefefff, - 0xd4d4d4ff, 0xecececff, 0xfefefeff, 0xddddddff, 0xcececeff, 0xccccccff, - 0xcacacaff, 0xc9c9c9ff, 0xc7c7c7ff, 0xc6c6c6ff, 0xc4c4c4ff, 0xe0e0e0ff, - 0xe0e0e0ff, 0xdcdcdcff, 0xd7d7d7ff, 0xd2d2d2ff, 0xcececeff, 0xc9c9c9ff, - 0xc3c3c3ff, 0xb6b6b6ff, 0xb5b5b5ff, 0xb7b7b7ff, 0xb1b1b1ff, 0xafafafff, - 0xadadadff, 0xacacacff, 0xaaaaaaff, 0xa8a8a8ff, 0xa7a7a7ff, 0xa5a5a5ff, - 0x9a9a9aff, 0x898989ff, 0x858585ff, 0x808080ff, 0x7b7b7bff, 0x777777ff, - 0x727272ff, 0x6e6e6eff, 0x818181ff, 0x959595ff, 0x6f6f6fff, 0x5e5e5eff, - 0x858585ff, 0x8f8f8fff, 0x8d8d8dff, 0x8b8b8bff, 0x8a8a8aff, 0x888888ff, - 0x868686ff, 0x858585ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xfcfcfcff, 0xf1f1f1ff, 0xeeeeeeff, 0xecececff, - 0xebebebff, 0xe9e9e9ff, 0xe7e7e7ff, 0xe6e6e6ff, 0xe4e4e4ff, 0xebebebff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xeeeeeeff, 0xebebebff, 0xdfdfdfff, 0xcfcfcfff, - 0xcececeff, 0xccccccff, 0xcacacaff, 0xc9c9c9ff, 0xc7c7c7ff, 0xc6c6c6ff, - 0xc4c4c4ff, 0xe0e0e0ff, 0xe0e0e0ff, 0xdcdcdcff, 0xd7d7d7ff, 0xd2d2d2ff, - 0xcececeff, 0xc9c9c9ff, 0xc5c5c5ff, 0xbfbfbfff, 0xb6b6b6ff, 0xb5b5b5ff, - 0xb0b0b0ff, 0xafafafff, 0xadadadff, 0xacacacff, 0xaaaaaaff, 0xa8a8a8ff, - 0xa7a7a7ff, 0xa5a5a5ff, 0x9a9a9aff, 0x898989ff, 0x858585ff, 0x808080ff, - 0x7b7b7bff, 0x777777ff, 0x727272ff, 0x6e6e6eff, 0x696969ff, 0x7e7e7eff, - 0x717171ff, 0x878787ff, 0x909090ff, 0x8f8f8fff, 0x8d8d8dff, 0x8b8b8bff, - 0x8a8a8aff, 0x888888ff, 0x868686ff, 0x858585ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfac394ff, 0xfac79bff, - 0xf8c49aff, 0xf8c49aff, 0xf7c299ff, 0xf7c199ff, 0xf6c098ff, 0xf6bf98ff, - 0xf5bd97ff, 0xf6b68bff, 0xfda770ff, 0xfda670ff, 0xfca570ff, 0xfca470ff, - 0xfca370ff, 0xfca270ff, 0xfca070ff, 0xfc9f70ff, 0xfc9e70ff, 0xf4a783ff, - 0xedae91ff, 0xecac90ff, 0xecac90ff, 0xeba98fff, 0xe9a78dff, 0xe8a58cff, - 0xe6a38aff, 0xe5a189ff, 0xe39e87ff, 0xef8c6bff, 0xef8666ff, 0xed8364ff, - 0xec8163ff, 0xe97e61ff, 0xe87c60ff, 0xe6785eff, 0xe5775dff, 0xe3735aff, - 0xdf755fff, 0xd28474ff, 0xce8274ff, 0xcd8072ff, 0xcb7d71ff, 0xca7b6fff, - 0xc8796eff, 0xc6776cff, 0xc5756bff, 0xc37269ff, 0xc8655aff, 0xcf5348ff, - 0xcd5046ff, 0xcb4e45ff, 0xc94b42ff, 0xc84941ff, 0xc6453fff, 0xc4443eff, - 0xc2403cff, 0xc13e3bff, 0xb4504eff, 0xaf5656ff, 0xad5454ff, 0xad5658ff, - 0xae565bff, 0xad575dff, 0xaf5961ff, 0xaf5a64ff, 0xb05a67ff, 0xae5b69ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xfc8929ff, 0xfe892aff, 0xfe882aff, 0xfe862aff, 0xfd842aff, 0xfd822aff, - 0xfd8129ff, 0xfd7f29ff, 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, 0xfb7829ff, - 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, - 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, - 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, - 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, - 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, - 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23c27ff, 0xf13a27ff, - 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, - 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe3242bff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xfb8729ff, 0xfe882aff, 0xfe862aff, 0xfd842aff, - 0xfd822aff, 0xfd8129ff, 0xfd7f29ff, 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, - 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, - 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, - 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, - 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, - 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, - 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, - 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, - 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, - 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe2242bff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfb8629ff, 0xfe862aff, - 0xfd842aff, 0xfd822aff, 0xfd8129ff, 0xfd7f29ff, 0xfc7d29ff, 0xfc7b29ff, - 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, - 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, - 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, - 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, - 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, - 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, - 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, - 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, - 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe1232cff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xfb8429ff, 0xfd842aff, 0xfd822aff, 0xfd8129ff, 0xfd7f29ff, 0xfc7d29ff, - 0xfc7b29ff, 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, - 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, - 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, - 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, - 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, - 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, - 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, - 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, - 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, - 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe0232dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xfa8229ff, 0xfd822aff, 0xfd8129ff, 0xfd7f29ff, - 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, - 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, - 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, - 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, - 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, - 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, - 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, - 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, - 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, - 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xdf232dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfa8029ff, 0xfd8129ff, - 0xfd7f29ff, 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, - 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, - 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, - 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, - 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, - 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, - 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, - 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, - 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, - 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, - 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xde232eff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xfa7f28ff, 0xfd7f29ff, 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, 0xfb7829ff, - 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, - 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, - 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, - 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, - 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, - 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, - 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, - 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdd222fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xfa7e28ff, 0xfc7d29ff, 0xfc7b29ff, 0xfc7a29ff, - 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, - 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, - 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, - 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, - 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, - 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, - 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, - 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, - 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, - 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xdc222fff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf97c28ff, 0xfc7b29ff, - 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, - 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, - 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, - 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, - 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, - 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, - 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, - 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, - 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, - 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdb2230ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf97a28ff, 0xfc7a29ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, 0xfb7329ff, - 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, - 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, - 0xf45f2cff, 0xb3a38eff, 0x80d8d8ff, 0x73e2eaff, 0x72e1eaff, 0x71dfe9ff, - 0x70dde8ff, 0x70dce7ff, 0x6fdae6ff, 0x6ed8e6ff, 0x6dd7e5ff, 0x6cd5e4ff, - 0x6cd4e3ff, 0x6bd2e2ff, 0x6bd0e1ff, 0x6acfe0ff, 0x69cde0ff, 0x69cbdfff, - 0x68cadeff, 0x69c6daff, 0x76b6c8ff, 0x8f9ba5ff, 0xbd6b6aff, 0xeb392dff, - 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, - 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, - 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, - 0xdd2231ff, 0xda2231ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf97928ff, 0xfb7829ff, 0xfb7629ff, 0xfb7529ff, - 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, - 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, - 0xf75e28ff, 0xf75c28ff, 0xa7b1a1ff, 0x6aeef8ff, 0x6aecf8ff, 0x69ebf7ff, - 0x68e9f6ff, 0x67e7f5ff, 0x67e6f4ff, 0x66e4f3ff, 0x65e2f3ff, 0x64e1f2ff, - 0x63dff1ff, 0x63def0ff, 0x62dcefff, 0x61daeeff, 0x60d9edff, 0x5fd7edff, - 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, - 0x5acce7ff, 0x6ab9d0ff, 0xb8686cff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, - 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, - 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, - 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xd82131ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf87728ff, 0xfb7629ff, - 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, - 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, - 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf06232ff, 0x6bedf6ff, 0x6aecf8ff, - 0x69ebf7ff, 0x68e9f6ff, 0x67e7f5ff, 0x67e6f4ff, 0x66e4f3ff, 0x65e2f3ff, - 0x64e1f2ff, 0x63dff1ff, 0x63def0ff, 0x62dcefff, 0x61daeeff, 0x60d9edff, - 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, - 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x91889aff, - 0xeb2f2aff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, - 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, - 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, - 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd72132ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf87528ff, 0xfb7529ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, 0xfa6e29ff, - 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, - 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xe36d44ff, - 0x6aecf8ff, 0x69ebf7ff, 0x68e9f6ff, 0x67e7f5ff, 0x67e6f4ff, 0x66e4f3ff, - 0x65e2f3ff, 0x64e1f2ff, 0x63dff1ff, 0x63def0ff, 0x62dcefff, 0x61daeeff, - 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, - 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, - 0x57c5e3ff, 0x56c3e3ff, 0x8a829fff, 0xed2827ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, - 0xd92133ff, 0xd62133ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf87428ff, 0xfb7329ff, 0xfa7129ff, 0xfa6f29ff, - 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, - 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, - 0xf65928ff, 0xf5582aff, 0x78dae0ff, 0x68e9f6ff, 0x67e7f5ff, 0x67e6f4ff, - 0x66e4f3ff, 0x65e2f3ff, 0x64e1f2ff, 0x63dff1ff, 0x63def0ff, 0x62dcefff, - 0x61daeeff, 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, - 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, - 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0xa75a77ff, - 0xec2627ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, - 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, - 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd52033ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf87228ff, 0xfa7129ff, - 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, - 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, - 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xce7e61ff, 0x69e4f2ff, - 0x67e6f4ff, 0x66e4f3ff, 0x65e2f3ff, 0x64e1f2ff, 0x63dff1ff, 0x63def0ff, - 0x62dcefff, 0x61daeeff, 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, - 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, - 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, - 0x53bee0ff, 0x62abceff, 0xd32540ff, 0xea2529ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, - 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, - 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd42034ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf77028ff, 0xfa6f29ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, 0xf96829ff, - 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, - 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, - 0xf55228ff, 0xc5826cff, 0x68e1f0ff, 0x65e2f3ff, 0x64e1f2ff, 0x63dff1ff, - 0x63def0ff, 0x62dcefff, 0x61daeeff, 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, - 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, - 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, - 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0xa15579ff, 0xd51f3cff, - 0xe8252aff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, - 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, - 0xd62035ff, 0xd32035ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf76e28ff, 0xfa6e29ff, 0xf96c29ff, 0xf96a29ff, - 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, - 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, - 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xc57e6bff, 0x65e0f0ff, - 0x63dff1ff, 0x63def0ff, 0x62dcefff, 0x61daeeff, 0x60d9edff, 0x5fd7edff, - 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, - 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, - 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0x51badeff, - 0x7b82a8ff, 0xcc1e45ff, 0xd31f3dff, 0xe6242bff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, - 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, - 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd22035ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf76d28ff, 0xf96c29ff, - 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, - 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, - 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, - 0xf44b27ff, 0x6ad8e7ff, 0x63def0ff, 0x62dcefff, 0x61daeeff, 0x60d9edff, - 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, - 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, - 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, - 0x51badeff, 0x50b8ddff, 0x649cc2ff, 0xcb1e45ff, 0xca1d44ff, 0xd21f3dff, - 0xe4242dff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, - 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, - 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd11f36ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf66b28ff, 0xf96a29ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, 0xf86328ff, - 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, - 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, - 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0x6ad7e6ff, 0x62dcefff, 0x61daeeff, - 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, - 0x62c5ddff, 0x7ba1bcff, 0x7aa1bbff, 0x799fbbff, 0x68b2cfff, 0x57c7e4ff, - 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, - 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x58aad0ff, 0xca1d44ff, - 0xc91d44ff, 0xc81d44ff, 0xd01f3dff, 0xe2232eff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, - 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, - 0xd31f37ff, 0xd01f37ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf66928ff, 0xf96829ff, 0xf96728ff, 0xf86528ff, - 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, - 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, - 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0x69d5e5ff, - 0x61daeeff, 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, - 0x5cd0e9ff, 0x5bcfe8ff, 0x77a6c1ff, 0xd12943ff, 0xd12842ff, 0xd12742ff, - 0xd12542ff, 0xb84462ff, 0x67acccff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, - 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, - 0x54acd3ff, 0xc91d44ff, 0xc81d44ff, 0xc91d43ff, 0xc81d43ff, 0xcf1e3dff, - 0xe0232fff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, - 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, - 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xcf1f37ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf66728ff, 0xf96728ff, - 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, - 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, - 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, - 0xf34627ff, 0x68d2e4ff, 0x60d9edff, 0x5fd7edff, 0x5fd5ecff, 0x5ed4ebff, - 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x76a5c0ff, 0xd12842ff, - 0xd12742ff, 0xd12542ff, 0xd02442ff, 0xd02342ff, 0xb74162ff, 0x55bfe0ff, - 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, - 0x4fb5dbff, 0x4eb3daff, 0x52aad2ff, 0xc81d44ff, 0xc91d43ff, 0xc81d43ff, - 0xc71d44ff, 0xc61d43ff, 0xcd1e3dff, 0xde2231ff, 0xde2230ff, 0xdd2231ff, - 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, - 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xce1f38ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf66627ff, 0xf86528ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, 0xf75e28ff, - 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, - 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, - 0xf34827ff, 0xf34627ff, 0xf34427ff, 0x67d1e3ff, 0x5fd7edff, 0x5fd5ecff, - 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, - 0x76a4bfff, 0xd12742ff, 0xd12542ff, 0xd02442ff, 0xd02342ff, 0xd02142ff, - 0xcf2042ff, 0x64a8caff, 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, - 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x51a9d2ff, 0xc91d43ff, - 0xc81d43ff, 0xc71d44ff, 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, 0xcc1e3dff, - 0xdc2232ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, - 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, - 0xd01f39ff, 0xcd1e39ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf56427ff, 0xf86328ff, 0xf86228ff, 0xf76028ff, - 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, - 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, - 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0x66cfe3ff, - 0x5fd5ecff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, - 0x5acce7ff, 0x59cae6ff, 0x75a1beff, 0xd12542ff, 0xd02442ff, 0xd02342ff, - 0xd02142ff, 0xcf2042ff, 0xcf1f42ff, 0x7197baff, 0x52bbdeff, 0x51badeff, - 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, - 0x9a948aff, 0xc81d43ff, 0xc71d44ff, 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, - 0xc41d42ff, 0xc31d42ff, 0xcb1e3eff, 0xd92133ff, 0xd92133ff, 0xd82134ff, - 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, - 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xcc1e39ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf56227ff, 0xf86228ff, - 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, - 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, - 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, - 0xf24127ff, 0x66cde2ff, 0x5ed4ebff, 0x5dd2eaff, 0x5cd0e9ff, 0x5bcfe8ff, - 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x74a0bdff, 0xd02442ff, - 0xd02342ff, 0xd02142ff, 0xcf2042ff, 0xcf1f42ff, 0xcf1e42ff, 0x6f95b9ff, - 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, - 0x4cb0d9ff, 0x9b998aff, 0xfcd843ff, 0xc71d44ff, 0xc61d43ff, 0xc51d43ff, - 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, 0xc21c42ff, 0xc91d3eff, - 0xd72135ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, - 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcb1e3aff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf56127ff, 0xf76028ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, 0xf65928ff, - 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, - 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, - 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0x65cce1ff, 0x5dd2eaff, 0x5cd0e9ff, - 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, - 0x749fbdff, 0xd02342ff, 0xd02142ff, 0xcf2042ff, 0xcf1f42ff, 0xcf1e42ff, - 0xce1e43ff, 0x6f95b9ff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, - 0x4db1d9ff, 0x4cb0d9ff, 0x9b998aff, 0xffe243ff, 0xfcd642ff, 0xc61d43ff, - 0xc51d43ff, 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, 0xc21c42ff, - 0xc11c42ff, 0xc11c42ff, 0xc71c3eff, 0xd52036ff, 0xd52036ff, 0xd42036ff, - 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, - 0xcd1e3bff, 0xca1e3bff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf45f27ff, 0xf75e28ff, 0xf75c28ff, 0xf75b28ff, - 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, - 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, - 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0x64cae0ff, - 0x5cd0e9ff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, - 0x57c7e4ff, 0x57c5e3ff, 0x739cbdff, 0xd02142ff, 0xcf2042ff, 0xcf1f42ff, - 0xcf1e42ff, 0xce1e43ff, 0xcd1e44ff, 0x6e93b8ff, 0x4fb6dcff, 0x4fb5dbff, - 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0x9b998aff, 0xffe243ff, 0xffdf42ff, - 0xfbd440ff, 0xc51d43ff, 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, - 0xc21c42ff, 0xc11c42ff, 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, 0xc61d3fff, - 0xd32037ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, - 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xc91d3bff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf45d27ff, 0xf75c28ff, - 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, - 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, - 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, - 0xf23b27ff, 0x63c8dfff, 0x5bcfe8ff, 0x5bcde8ff, 0x5acce7ff, 0x59cae6ff, - 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x739cbcff, 0xcf2042ff, - 0xcf1f42ff, 0xcf1e42ff, 0xce1e43ff, 0xcd1e44ff, 0xcc1e44ff, 0x6d91b8ff, - 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0x9b998aff, 0xffe243ff, - 0xffdf42ff, 0xfedd40ff, 0xfbd23fff, 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, - 0xc31d42ff, 0xc21c42ff, 0xc11c42ff, 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, - 0xbf1c42ff, 0xbe1b41ff, 0xc41c3fff, 0xd21f39ff, 0xd11f38ff, 0xd01f39ff, - 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xc81d3cff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf45b27ff, 0xf75b28ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, 0xf55428ff, - 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, - 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, - 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0x62c7deff, 0x5bcde8ff, 0x5acce7ff, - 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, - 0x729abbff, 0xcf1f42ff, 0xcf1e42ff, 0xce1e43ff, 0xcd1e44ff, 0xcc1e44ff, - 0xcc1e45ff, 0x6d91b8ff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0x9c998aff, - 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfbcf3eff, 0xc41d42ff, - 0xc31d42ff, 0xc31d42ff, 0xc21c42ff, 0xc11c42ff, 0xc11c42ff, 0xc01c42ff, - 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, 0xc31c3fff, - 0xd01f3aff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, - 0xca1d3dff, 0xc71d3dff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf45a27ff, 0xf65928ff, 0xf65728ff, 0xf65528ff, - 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, - 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, - 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0x62c6deff, - 0x5acce7ff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, - 0x55c2e2ff, 0x54c0e1ff, 0x7198baff, 0xcf1e42ff, 0xce1e43ff, 0xcd1e44ff, - 0xcc1e44ff, 0xcc1e45ff, 0xcb1e45ff, 0x6b8fb6ff, 0x4db1d9ff, 0x4cb0d9ff, - 0x9c998aff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, - 0xfbcd3dff, 0xc31d42ff, 0xc31d42ff, 0xc21c42ff, 0xc11c42ff, 0xc11c42ff, - 0xc01c42ff, 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, - 0xbc1b41ff, 0xbc1b41ff, 0xc11b40ff, 0xce1e3bff, 0xcd1e3bff, 0xcc1e3cff, - 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc61d3dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf35827ff, 0xf65728ff, - 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, - 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, - 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, - 0xf13627ff, 0x61c5ddff, 0x59cae6ff, 0x58c8e5ff, 0x57c7e4ff, 0x57c5e3ff, - 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x7197baff, 0xce1e43ff, - 0xcd1e44ff, 0xcc1e44ff, 0xcc1e45ff, 0xcb1e45ff, 0xca1d44ff, 0x6b8eb5ff, - 0x4cb0d9ff, 0x9c998aff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, - 0xfed83eff, 0xfed63dff, 0xfacb3cff, 0xc31d42ff, 0xc21c42ff, 0xc11c42ff, - 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, - 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xbf1c40ff, - 0xcc1e3dff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, 0xc41c3eff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf35627ff, 0xf65528ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, 0xf54f28ff, - 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, - 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, - 0xf13827ff, 0xf13627ff, 0xf03527ff, 0x60c3dcff, 0x58c8e5ff, 0x57c7e4ff, - 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, - 0x6f95b9ff, 0xcd1e44ff, 0xcc1e44ff, 0xcc1e45ff, 0xcb1e45ff, 0xca1d44ff, - 0xc91d44ff, 0x6a8db5ff, 0x9c998aff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, - 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfac93bff, 0xc21c42ff, - 0xc11c42ff, 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, - 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, - 0xba1a42ff, 0xb91a43ff, 0xbe1b41ff, 0xc91d3eff, 0xc91d3eff, 0xc81d3eff, - 0xc61c3fff, 0xc31c3fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf35427ff, 0xf55428ff, 0xf55228ff, 0xf55028ff, - 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, - 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, - 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0x60c0dbff, - 0x57c7e4ff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, - 0x53bddfff, 0x52bbdeff, 0x6f95b9ff, 0xcc1e44ff, 0xcc1e45ff, 0xcb1e45ff, - 0xca1d44ff, 0xc91d44ff, 0xc81d44ff, 0xbd8c69ff, 0xffe243ff, 0xffdf42ff, - 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, - 0xfac63aff, 0xc11c42ff, 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, 0xbf1c42ff, - 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, - 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xbd1b42ff, - 0xc71d3fff, 0xc61c3fff, 0xc51c40ff, 0xc21c3fff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf25327ff, 0xf55228ff, - 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, - 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, - 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, - 0xf03126ff, 0x5fbfdaff, 0x57c5e3ff, 0x56c3e3ff, 0x55c2e2ff, 0x54c0e1ff, - 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x6e93b8ff, 0xcc1e45ff, - 0xcb1e45ff, 0xca1d44ff, 0xc91d44ff, 0xc81d44ff, 0xc91d43ff, 0xf2b343ff, - 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, - 0xfdd23bff, 0xfdcf3aff, 0xfac438ff, 0xc11c42ff, 0xc01c42ff, 0xbf1c42ff, - 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, - 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, - 0xb81a43ff, 0xb71a42ff, 0xba1a42ff, 0xc41c40ff, 0xc41c40ff, 0xc11c40ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf25127ff, 0xf55028ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, 0xf44927ff, - 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, - 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, - 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0x5fbdd9ff, 0x56c3e3ff, 0x55c2e2ff, - 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, - 0x6d91b8ff, 0xcb1e45ff, 0xca1d44ff, 0xc91d44ff, 0xc81d44ff, 0xc91d43ff, - 0xc81d43ff, 0xf2b142ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, - 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xf9c237ff, 0xc01c42ff, - 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, - 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, - 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb91a42ff, - 0xc21c41ff, 0xc01b41ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf24f27ff, 0xf54f28ff, 0xf44d27ff, 0xf44b27ff, - 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, - 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, - 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0x5ebbd9ff, - 0x55c2e2ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, 0x51badeff, - 0x50b8ddff, 0x4fb6dcff, 0x6d91b8ff, 0xca1d44ff, 0xc91d44ff, 0xc81d44ff, - 0xc91d43ff, 0xc81d43ff, 0xc71d44ff, 0xf0af41ff, 0xfedb3fff, 0xfed83eff, - 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, - 0xf9c036ff, 0xbf1c42ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, 0xbd1b42ff, - 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, - 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb81a44ff, 0xbe1b41ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf24e27ff, 0xf44d27ff, - 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, - 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, - 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, - 0xef2c26ff, 0x5dbad8ff, 0x54c0e1ff, 0x53bee0ff, 0x53bddfff, 0x52bbdeff, - 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x6b8fb6ff, 0xc91d44ff, - 0xc81d44ff, 0xc91d43ff, 0xc81d43ff, 0xc71d44ff, 0xc61d43ff, 0xf0ae40ff, - 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, - 0xfccb37ff, 0xfcc836ff, 0xf9be36ff, 0xbf1c42ff, 0xbe1b41ff, 0xbe1a42ff, - 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, - 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb51a43ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf14c26ff, 0xf44b27ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, 0xf34427ff, - 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, - 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, - 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0x5cb8d8ff, 0x53bee0ff, 0x53bddfff, - 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, - 0x6b8eb5ff, 0xc81d44ff, 0xc91d43ff, 0xc81d43ff, 0xc71d44ff, 0xc61d43ff, - 0xc51d43ff, 0xf0ab3fff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, - 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xf9bc35ff, 0xbe1b41ff, - 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, - 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, - 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb01945ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf14b26ff, 0xf44927ff, 0xf34827ff, 0xf34627ff, - 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, - 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, - 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0x5bb6d7ff, - 0x53bddfff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, - 0x4eb3daff, 0x4db1d9ff, 0x6a8db5ff, 0xc91d43ff, 0xc81d43ff, 0xc71d44ff, - 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, 0xf0aa3eff, 0xfdd43cff, 0xfdd23bff, - 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, - 0xf9ba34ff, 0xbe1a42ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, 0xbb1a42ff, - 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, - 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb11844ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf14926ff, 0xf34827ff, - 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, - 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, - 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, - 0xee2726ff, 0x5bb5d6ff, 0x52bbdeff, 0x51badeff, 0x50b8ddff, 0x4fb6dcff, - 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0x9d8184ff, 0xc81d43ff, - 0xc71d44ff, 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, 0xc41d42ff, 0xefa83eff, - 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, - 0xfcc434ff, 0xfcc233ff, 0xf8b732ff, 0xbd1b42ff, 0xbc1b41ff, 0xbc1b41ff, - 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, - 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xaf1946ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf04826ff, 0xf34627ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, 0xf23f27ff, - 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, - 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, - 0xee2826ff, 0xee2726ff, 0xed2626ff, 0x5ab3d5ff, 0x51badeff, 0x50b8ddff, - 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0x9c998aff, - 0xf2b343ff, 0xc71d44ff, 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, 0xc41d42ff, - 0xc31d42ff, 0xefa73dff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, - 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xf8b531ff, 0xbc1b41ff, - 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, - 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb11947ff, 0xae1946ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xf04626ff, 0xf34427ff, 0xf34227ff, 0xf24127ff, - 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, - 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, - 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0x59b3d5ff, - 0x50b8ddff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, - 0x9c998aff, 0xffe243ff, 0xf2b142ff, 0xc61d43ff, 0xc51d43ff, 0xc51c43ff, - 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, 0xeea43cff, 0xfdcd38ff, 0xfccb37ff, - 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, - 0xf8b330ff, 0xbc1b41ff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, 0xb91a43ff, - 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xad1946ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf04426ff, 0xf34227ff, - 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, - 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, - 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, - 0xeb2528ff, 0x58b1d4ff, 0x4fb6dcff, 0x4fb5dbff, 0x4eb3daff, 0x4db1d9ff, - 0x4cb0d9ff, 0x9d9b89ff, 0xffe243ff, 0xffdf42ff, 0xf0af41ff, 0xc51d43ff, - 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, 0xc52541ff, 0xf5b63aff, - 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, - 0xfbbd30ff, 0xfbbb2fff, 0xf8b02fff, 0xbb1a42ff, 0xbb1a42ff, 0xba1a42ff, - 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xad1946ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xf04226ff, 0xf24127ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, 0xf13a27ff, - 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, - 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0x57afd3ff, 0x4fb5dbff, 0x4eb3daff, - 0x4db1d9ff, 0x4cb0d9ff, 0xa09a87ff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, - 0xf0ae40ff, 0xc51c43ff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, 0xc52541ff, - 0xefa63aff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, - 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xf7ae2eff, 0xbb1a42ff, - 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, - 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xad1947ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xef4126ff, 0xf23f27ff, 0xf23d27ff, 0xf23b27ff, - 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, - 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, - 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0x57aed2ff, - 0x4eb3daff, 0x4db1d9ff, 0x4cb0d9ff, 0xa39b84ff, 0xffe243ff, 0xffdf42ff, - 0xfedd40ff, 0xfedb3fff, 0xf0ab3fff, 0xc41d42ff, 0xc31d42ff, 0xc31d42ff, - 0xc52541ff, 0xefa63aff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, - 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, - 0xf7ad2dff, 0xba1a42ff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, 0xb81a43ff, - 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xac1946ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xef3f26ff, 0xf23d27ff, - 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, - 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, - 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0x56acd1ff, 0x4db1d9ff, 0x4cb0d9ff, 0xa29a85ff, 0xffe243ff, - 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xf0aa3eff, 0xc31d42ff, - 0xc31d42ff, 0xc52541ff, 0xefa63aff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, - 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, - 0xfab62dff, 0xfab42cff, 0xf7ab2bff, 0xb91a43ff, 0xb91a42ff, 0xb81a42ff, - 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xac1948ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xef3d26ff, 0xf23b27ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, 0xf03527ff, - 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, - 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, - 0xe92529ff, 0xe8252aff, 0xe7242aff, 0x55aad0ff, 0x4cb0d9ff, 0xa29a85ff, - 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, - 0xefa83eff, 0xc31d42ff, 0xc52541ff, 0xefa63aff, 0xfccb37ff, 0xfcc836ff, - 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, - 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xf7a82aff, 0xb91a42ff, - 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xab1849ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xef3b26ff, 0xf13a27ff, 0xf13827ff, 0xf13627ff, - 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, - 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, - 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0x54a9d0ff, - 0xa29a85ff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, 0xfed83eff, - 0xfed63dff, 0xfdd43cff, 0xefa73dff, 0xc52541ff, 0xefa63aff, 0xfccb37ff, - 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, - 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, - 0xf6a629ff, 0xb81a42ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xab1848ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xee3a26ff, 0xf13827ff, - 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, - 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, - 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, - 0xe5242cff, 0xae9a7bff, 0xffe243ff, 0xffdf42ff, 0xfedd40ff, 0xfedb3fff, - 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xf2ad3bff, 0xefa53aff, - 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, - 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, - 0xfaaf29ff, 0xf9ad28ff, 0xf6a428ff, 0xb81a43ff, 0xb71a42ff, 0xb61943ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xaa1849ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xee3826ff, 0xf13627ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, 0xf02f26ff, - 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xfed942ff, 0xffdf42ff, 0xfedd40ff, - 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, - 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, - 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, - 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf19629ff, 0xb71a42ff, - 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xaa194bff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xee3626ff, 0xf03527ff, 0xf03326ff, 0xf03126ff, - 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, - 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xfed741ff, - 0xfedd40ff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, 0xfdd23bff, - 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, - 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, - 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, - 0xd75e34ff, 0xb61943ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xa9184aff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xed3526ff, 0xf03326ff, - 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, - 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, - 0xe2232eff, 0xfdd53fff, 0xfedb3fff, 0xfed83eff, 0xfed63dff, 0xfdd43cff, - 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, - 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, - 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, - 0xf9a826ff, 0xe4792eff, 0xb71b42ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, - 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xa9184aff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xed3325ff, 0xf03126ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, 0xef2a26ff, - 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, - 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xfdd33eff, 0xfed83eff, 0xfed63dff, - 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, - 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, - 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, - 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, - 0xaa174cff, 0xa8184cff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xed3125ff, 0xf02f26ff, 0xef2e26ff, 0xef2c26ff, - 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, - 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xfcd03dff, - 0xfed63dff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, - 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, - 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, - 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, - 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa8174bff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xed2f25ff, 0xef2e26ff, - 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, - 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, - 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, - 0xdf2230ff, 0xfcce3cff, 0xfdd43cff, 0xfdd23bff, 0xfdcf3aff, 0xfdcd38ff, - 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, - 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, - 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, - 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa8164cff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xec2e25ff, 0xef2c26ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, 0xed2626ff, - 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xfbcc3bff, 0xfdd23bff, 0xfdcf3aff, - 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, - 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, - 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, - 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, - 0xa9154eff, 0xa8164eff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xec2c25ff, 0xef2a26ff, 0xee2826ff, 0xee2726ff, - 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, - 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xfbca3aff, - 0xfdcf3aff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, - 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, - 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, - 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, - 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa6164eff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xec2a25ff, 0xee2826ff, - 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, - 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, - 0xdc2232ff, 0xfbc739ff, 0xfdcd38ff, 0xfccb37ff, 0xfcc836ff, 0xfcc635ff, - 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, - 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, - 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, - 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, - 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa5164eff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xeb2825ff, 0xee2726ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, 0xea2528ff, - 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, - 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xfbc537ff, 0xfccb37ff, 0xfcc836ff, - 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, - 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, - 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, - 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, - 0xa61550ff, 0xa5154fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xeb2725ff, 0xed2626ff, 0xec2627ff, 0xeb2528ff, - 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, - 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xfac336ff, - 0xfcc836ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, - 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, - 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, - 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, - 0xa7154fff, 0xa61550ff, 0xa61551ff, 0xa5164fff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xea2625ff, 0xec2627ff, - 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, - 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, - 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, - 0xd82134ff, 0xfac135ff, 0xfcc635ff, 0xfcc434ff, 0xfcc233ff, 0xfbbf31ff, - 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, - 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, - 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, - 0xa9154fff, 0xa7154fff, 0xa61550ff, 0xa61551ff, 0xa61551ff, 0xa41651ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xe92626ff, 0xeb2528ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, 0xe7242aff, - 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, - 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xfabf35ff, 0xfcc434ff, 0xfcc233ff, - 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, - 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, - 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb11947ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, - 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61550ff, 0xa61551ff, 0xa61551ff, - 0xa51553ff, 0xa31552ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xe82527ff, 0xea2528ff, 0xe92529ff, 0xe8252aff, - 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, - 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, - 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xfabd35ff, - 0xfcc233ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, - 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, - 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, - 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, - 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa31551ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xe72527ff, 0xe92529ff, - 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, 0xe3232dff, - 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, - 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, - 0xd52036ff, 0xfabb34ff, 0xfbbf31ff, 0xfbbd30ff, 0xfbbb2fff, 0xfbb82eff, - 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, - 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, - 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, - 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, - 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa21553ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xe62528ff, 0xe8252aff, 0xe7242aff, 0xe6242bff, 0xe5242cff, 0xe4242cff, - 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, - 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, - 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xf9b732ff, 0xfbbd30ff, 0xfbbb2fff, - 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, - 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, - 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, - 0xa61550ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, - 0xa31455ff, 0xa21554ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xe52529ff, 0xe7242aff, 0xe6242bff, 0xe5242cff, - 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, - 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, - 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xf9b531ff, - 0xfbbb2fff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, 0xfaaf29ff, - 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, - 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, - 0xa7154fff, 0xa61550ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, - 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa11454ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xe42429ff, 0xe6242bff, - 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, 0xe0232fff, - 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, - 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, - 0xd21f38ff, 0xf9b330ff, 0xfbb82eff, 0xfab62dff, 0xfab42cff, 0xfab22aff, - 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, 0xb71c43ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, - 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, - 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, - 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21356ff, 0xa01455ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xe3242aff, 0xe5242cff, 0xe4242cff, 0xe3232dff, 0xe2232eff, 0xe1232eff, - 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, - 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, - 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xf9b02fff, 0xfab62dff, 0xfab42cff, - 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, 0xe4792eff, - 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, - 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, - 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21356ff, - 0xa11357ff, 0x9f1456ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xe3242bff, 0xe4242cff, 0xe3232dff, 0xe2232eff, - 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, - 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, - 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xf7ab2eff, - 0xfab42cff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, 0xf9a826ff, - 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, - 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, - 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, - 0xa21356ff, 0xa11357ff, 0xa01358ff, 0x9e1457ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xe2242bff, 0xe3232dff, - 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, - 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, - 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, - 0xcf1e3aff, 0xed8930ff, 0xfab22aff, 0xfaaf29ff, 0xf9ad28ff, 0xf9ab27ff, - 0xf9a826ff, 0xe4792eff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, 0xb41a44ff, - 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, - 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, - 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, - 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, - 0xa31456ff, 0xa21356ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9c1357ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xe1232cff, 0xe2232eff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, 0xde2230ff, - 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, - 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, - 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xd33438ff, 0xf5a22bff, 0xf9ad28ff, - 0xf9ab27ff, 0xf9a826ff, 0xe2752fff, 0xb71c43ff, 0xb51944ff, 0xb41943ff, - 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, - 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, - 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, - 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, - 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, - 0x9d1259ff, 0x9b1358ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xe0232dff, 0xe1232eff, 0xe0232fff, 0xdf2230ff, - 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, - 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, - 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, - 0xce293bff, 0xd75d35ff, 0xdb6633ff, 0xcc4639ff, 0xb61943ff, 0xb51944ff, - 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, 0xb21946ff, - 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, - 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, - 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, - 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, 0xa01358ff, - 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9a1359ff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdf232dff, 0xe0232fff, - 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, - 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, - 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, - 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc81d3fff, 0xba1b41ff, 0xb61943ff, - 0xb51944ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, 0xb21945ff, - 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, - 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, - 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, - 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, - 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9b125bff, 0x991359ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xde232eff, 0xdf2230ff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, 0xda2132ff, - 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, - 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, - 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, - 0xc51c40ff, 0xb81a42ff, 0xb41943ff, 0xb41a44ff, 0xb31944ff, 0xb31944ff, - 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, 0xaf1947ff, - 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, - 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, - 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, - 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9b125bff, - 0x9a125bff, 0x98125aff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xdd222fff, 0xde2230ff, 0xdd2231ff, 0xdc2232ff, - 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, - 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, - 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, - 0xc81d3eff, 0xc61c3fff, 0xc51c40ff, 0xc31c40ff, 0xb81a43ff, 0xb31944ff, - 0xb31944ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, 0xb01946ff, - 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, - 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, - 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, - 0xa21357ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, - 0x9b125bff, 0x9a125bff, 0x99115cff, 0x97125bff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xdc222fff, 0xdd2231ff, - 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, 0xd62035ff, - 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, - 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, - 0xc91d3eff, 0xc81d3eff, 0xc61c3fff, 0xc51c40ff, 0xc41c40ff, 0xc31c41ff, - 0xc11b42ff, 0xb61a44ff, 0xb21945ff, 0xb21946ff, 0xb21845ff, 0xb01846ff, - 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, 0xad1849ff, - 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, - 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, 0xa61450ff, - 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, - 0xa31456ff, 0xa21357ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9d1259ff, - 0x9c125aff, 0x9b125bff, 0x9a125bff, 0x99115cff, 0x98115dff, 0x96125bff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xdb2230ff, 0xdc2232ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, 0xd72034ff, - 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, - 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, - 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, 0xc61c3fff, 0xc51c40ff, 0xc41c40ff, - 0xc31c41ff, 0xc21b42ff, 0xc11b42ff, 0xbf1b43ff, 0xb41a45ff, 0xb21845ff, - 0xb01846ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, 0xae1847ff, - 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, - 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa9154fff, 0xa7154fff, - 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, - 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, - 0x9d1259ff, 0x9c125aff, 0x9b125bff, 0x9a125bff, 0x99115cff, 0x98115dff, - 0x97115dff, 0x95125cff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xda2231ff, 0xda2132ff, 0xd92133ff, 0xd82134ff, - 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, 0xd21f38ff, - 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, - 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, 0xc61c3fff, 0xc51c40ff, - 0xc41c40ff, 0xc31c41ff, 0xc21b42ff, 0xc11b42ff, 0xc01b43ff, 0xbf1b44ff, - 0xbe1a44ff, 0xb31946ff, 0xb01946ff, 0xaf1947ff, 0xaf1847ff, 0xaf1848ff, - 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, 0xab184cff, - 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, 0xa8154fff, - 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, 0xa41454ff, - 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, 0xa01358ff, - 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9b125bff, 0x9a125bff, 0x99115cff, - 0x98115dff, 0x97115dff, 0x96115eff, 0x94115dff, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xcb212eff, 0xd92133ff, - 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, 0xd31f37ff, - 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, 0xcd1e3bff, - 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, 0xc61c3fff, - 0xc51c40ff, 0xc41c40ff, 0xc31c41ff, 0xc21b42ff, 0xc11b42ff, 0xc01b43ff, - 0xbf1b44ff, 0xbe1a44ff, 0xbd1a45ff, 0xbb1a46ff, 0xb21946ff, 0xaf1847ff, - 0xaf1848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, 0xac174aff, - 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, 0xa9154eff, - 0xa8154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, 0xa51553ff, - 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, 0xa11357ff, - 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9b125bff, 0x9a125bff, - 0x99115cff, 0x98115dff, 0x97115dff, 0x96115eff, 0x95105fff, 0x8d1255ff, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xb22727ea, 0xd82134ff, 0xd72034ff, 0xd62035ff, 0xd52036ff, 0xd42036ff, - 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, 0xce1e3aff, - 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, 0xc81d3eff, - 0xc61c3fff, 0xc51c40ff, 0xc41c40ff, 0xc31c41ff, 0xc21b42ff, 0xc11b42ff, - 0xc01b43ff, 0xbf1b44ff, 0xbe1a44ff, 0xbd1a45ff, 0xbc1a46ff, 0xbb1a46ff, - 0xb91948ff, 0xb11848ff, 0xae1847ff, 0xad1849ff, 0xad174aff, 0xad1749ff, - 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, 0xa9164dff, - 0xa9154eff, 0xa8154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, 0xa61551ff, - 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, 0xa21357ff, - 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, 0x9b125bff, - 0x9a125bff, 0x99115cff, 0x98115dff, 0x97115dff, 0x96115eff, 0x95105fff, - 0x94105fff, 0x861c44e9, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xa5352622, 0xb72429f7, 0xd62035ff, 0xd52036ff, - 0xd42036ff, 0xd31f37ff, 0xd21f38ff, 0xd11f38ff, 0xd01f39ff, 0xcf1e3aff, - 0xce1e3aff, 0xcd1e3bff, 0xcc1e3cff, 0xcb1d3cff, 0xca1d3dff, 0xc91d3eff, - 0xc81d3eff, 0xc61c3fff, 0xc51c40ff, 0xc41c40ff, 0xc31c41ff, 0xc21b42ff, - 0xc11b42ff, 0xc01b43ff, 0xbf1b44ff, 0xbe1a44ff, 0xbd1a45ff, 0xbc1a46ff, - 0xbb1a46ff, 0xba1947ff, 0xb91948ff, 0xb71948ff, 0xaf1949ff, 0xad174aff, - 0xad1749ff, 0xac174aff, 0xab184cff, 0xaa174bff, 0xaa174cff, 0xa9174eff, - 0xa9164dff, 0xa9154eff, 0xa8154fff, 0xa7154fff, 0xa61450ff, 0xa61551ff, - 0xa61551ff, 0xa51553ff, 0xa41454ff, 0xa41453ff, 0xa31455ff, 0xa31456ff, - 0xa21357ff, 0xa11357ff, 0xa01358ff, 0x9f1359ff, 0x9d1259ff, 0x9c125aff, - 0x9b125bff, 0x9a125bff, 0x99115cff, 0x98115dff, 0x97115dff, 0x96115eff, - 0x95105fff, 0x94105fff, 0x87194af6, 0x87303820, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xa333224b, 0xa72e2597, 0xa32c269b, 0xa32c269b, 0xa32c269b, 0xa12c269b, - 0xa12c269b, 0xa12c269b, 0xa12c279b, 0xa02c279b, 0xa02c279b, 0xa02c279b, - 0xa02c299b, 0x9e2c299b, 0x9e2b299b, 0x9e2b299b, 0x9c2b299b, 0x9c2b299b, - 0x9c2b2b9b, 0x9b2b2b9b, 0x9b2b2b9b, 0x9b2b2b9b, 0x9b2b2b9b, 0x992b2b9b, - 0x992b2c9b, 0x992b2c9b, 0x992b2c9b, 0x972b2c9b, 0x972b2c9b, 0x972b2c9b, - 0x97292e9b, 0x94292f9d, 0x94292f9d, 0x92292f9d, 0x92292f9d, 0x9329319c, - 0x9329319c, 0x9129319c, 0x9129319c, 0x9129319c, 0x9029319c, 0x8e29319c, - 0x8e29319c, 0x9129319b, 0x9129319b, 0x8f27319b, 0x8f27319b, 0x8f27339b, - 0x8d27339b, 0x8d27339b, 0x8d27339b, 0x8d27339b, 0x8c27359b, 0x8c27359b, - 0x8c27359b, 0x8a27359b, 0x8a27359b, 0x8a27369b, 0x8a27369b, 0x8927369b, - 0x8927369b, 0x8926369b, 0x8a273897, 0x8b2c334b, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, -}; diff --git a/src/doom/doom_icon.h b/src/doom/doom_icon.h deleted file mode 100644 index bd2318bba0..0000000000 --- a/src/doom/doom_icon.h +++ /dev/null @@ -1,4 +0,0 @@ -static int doom_icon_w; -static int doom_icon_h; - -static const unsigned int doom_icon_data[]; diff --git a/src/doom/doomdef.c b/src/doom/doomdef.c index 796368ce9f..d6ec2f1c94 100644 --- a/src/doom/doomdef.c +++ b/src/doom/doomdef.c @@ -21,7 +21,7 @@ // This is the initial health a player has when starting anew. // See G_PlayerReborn in g_game.c -const uint8_t INITIAL_HEALTH = 100; +const uint8_t INITIAL_HEALTH = 100; // This is the number of bullets the player has when starting anew. // See G_PlayerReborn in g_game.c @@ -33,13 +33,13 @@ const uint8_t MAX_HEALTH = 200; // This is the maximum armor which can be reached by picking up // armor helmets. See P_TouchSpecialThing in p_inter.c -const uint8_t MAX_ARMOR = 200; +const uint8_t MAX_ARMOR = 200; -// This is the armor class that is given when picking up the green +// This is the armor class that is given when picking up the green // armor or an armor helmet. See P_TouchSpecialThing in p_inter.c const uint8_t GREEN_ARMOR_CLASS = 1; -// This is the armor class that is given when picking up the blue +// This is the armor class that is given when picking up the blue // armor or a megasphere. See P_TouchSpecialThing in p_inter.c const uint8_t BLUE_ARMOR_CLASS = 2; @@ -51,7 +51,7 @@ const uint8_t MAX_SOULSPHERE = 200; // gives. See P_TouchSpecialThing in p_inter.c const uint8_t SOULSPHERE_HEALTH = 100; -// This is what the health is set to after picking up a +// This is what the health is set to after picking up a // megasphere. See P_TouchSpecialThing in p_inter.c const uint8_t MEGASPHERE_HEALTH = 200; @@ -79,7 +79,7 @@ const uint8_t IDKFA_ARMOR_CLASS = 2; // See P_CheckAmmo and A_FireBFG in p_pspr.c const uint8_t BFG_CELLS_PER_SHOT = 40; -// This controls whether monsters can harm other monsters of the same +// This controls whether monsters can harm other monsters of the same // species. For example, whether an imp fireball will damage other // imps. The value of this in dehacked patches is weird - '202' means // off, while '221' means on. diff --git a/src/doom/f_finale.c b/src/doom/f_finale.c index f719d5dbac..ec731f8e8f 100644 --- a/src/doom/f_finale.c +++ b/src/doom/f_finale.c @@ -67,10 +67,11 @@ typedef struct const char *text; } textscreen_t; -static textscreen_t textscreens[] = {{doom, 1, 8, "FLOOR4_8", E1TEXT}, - {doom, 2, 8, "SFLR6_1", E2TEXT}, - {doom, 3, 8, "MFLR8_4", E3TEXT}, - }; +static textscreen_t textscreens[] = { + {doom, 1, 8, "FLOOR4_8", E1TEXT}, + {doom, 2, 8, "SFLR6_1", E2TEXT}, + {doom, 3, 8, "MFLR8_4", E3TEXT}, +}; const char *finaletext; const char *finaleflat; @@ -123,41 +124,10 @@ void F_StartFinale(void) boolean F_Responder(event_t *event) { - if (finalestage == F_STAGE_CAST) - return F_CastResponder(event); - return false; } -// -// F_Ticker -// -void F_Ticker(void) -{ - size_t i; - - // advance animation - finalecount++; - - if (finalestage == F_STAGE_CAST) - { - F_CastTicker(); - return; - } - - if (finalestage == F_STAGE_TEXT && - finalecount > strlen(finaletext) * TEXTSPEED + TEXTWAIT) - { - finalecount = 0; - finalestage = F_STAGE_ARTSCREEN; - wipegamestate = -1; // force a wipe - if (gameepisode == 3) - S_StartMusic(mus_bunny); - } -} - - // // F_TextWrite // @@ -173,7 +143,6 @@ void F_TextWrite(void) int x, y, w; signed int count; const char *ch; - int c; int cx; int cy; @@ -207,7 +176,7 @@ void F_TextWrite(void) count = 0; for (; count; count--) { - c = *ch++; + int c = *ch++; if (!c) break; if (c == '\n') @@ -264,25 +233,6 @@ int castframes; int castonmelee; boolean castattacking; - -// -// F_StartCast -// -void F_StartCast(void) -{ - wipegamestate = -1; // force a screen wipe - castnum = 0; - caststate = &states[mobjinfo[castorder[castnum].type].seestate]; - casttics = caststate->tics; - castdeath = false; - finalestage = F_STAGE_CAST; - castframes = 0; - castonmelee = 0; - castattacking = false; - S_ChangeMusic(mus_evil, true); -} - - // // F_CastTicker // @@ -327,28 +277,6 @@ void F_CastTicker(void) case S_SPOS_ATK2: sfx = sfx_shotgn; break; - case S_VILE_ATK2: - sfx = sfx_vilatk; - break; - case S_SKEL_FIST2: - sfx = sfx_skeswg; - break; - case S_SKEL_FIST4: - sfx = sfx_skepch; - break; - case S_SKEL_MISS2: - sfx = sfx_skeatk; - break; - case S_FATT_ATK8: - case S_FATT_ATK5: - case S_FATT_ATK2: - sfx = sfx_firsht; - break; - case S_CPOS_ATK2: - case S_CPOS_ATK3: - case S_CPOS_ATK4: - sfx = sfx_shotgn; - break; case S_TROO_ATK3: sfx = sfx_claw; break; @@ -356,28 +284,18 @@ void F_CastTicker(void) sfx = sfx_sgtatk; break; case S_BOSS_ATK2: - case S_BOS2_ATK2: case S_HEAD_ATK2: sfx = sfx_firsht; break; - case S_SKULL_ATK2: - sfx = sfx_sklatk; - break; case S_SPID_ATK2: case S_SPID_ATK3: sfx = sfx_shotgn; break; - case S_BSPI_ATK2: - sfx = sfx_plasma; - break; case S_CYBER_ATK2: case S_CYBER_ATK4: case S_CYBER_ATK6: sfx = sfx_rlaunc; break; - case S_PAIN_ATK3: - sfx = sfx_sklatk; - break; default: sfx = 0; break; @@ -399,11 +317,9 @@ void F_CastTicker(void) if (caststate == &states[S_NULL]) { if (castonmelee) - caststate = - &states[mobjinfo[castorder[castnum].type].meleestate]; + caststate = &states[mobjinfo[castorder[castnum].type].meleestate]; else - caststate = - &states[mobjinfo[castorder[castnum].type].missilestate]; + caststate = &states[mobjinfo[castorder[castnum].type].missilestate]; } } @@ -537,20 +453,16 @@ void F_CastDrawer(void) void F_DrawPatchCol(int x, patch_t *patch, int col) { column_t *column; - byte *source; - pixel_t *dest; - pixel_t *desttop; - int count; - column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); - desttop = I_VideoBuffer + x; + + pixel_t *desttop = desttop = I_VideoBuffer + x; // step through the posts in a column while (column->topdelta != 0xff) { - source = (byte *) column + 3; - dest = desttop + column->topdelta * SCREENWIDTH; - count = column->length; + byte *source = (byte *) column + 3; + pixel_t *dest = desttop + column->topdelta * SCREENWIDTH; + int count = column->length; while (count--) { @@ -620,7 +532,6 @@ void F_BunnyScroll(void) static void F_ArtScreenDrawer(void) { - const char *lumpname; if (gameepisode == 3) { @@ -628,6 +539,7 @@ static void F_ArtScreenDrawer(void) } else { + const char *lumpname; switch (gameepisode) { case 1: diff --git a/src/doom/f_wipe.c b/src/doom/f_wipe.c index 0fa7754dd5..39337f4d42 100644 --- a/src/doom/f_wipe.c +++ b/src/doom/f_wipe.c @@ -32,194 +32,165 @@ // // when zero, stop the wipe -static boolean go = 0; +static boolean go = 0; -static pixel_t* wipe_scr_start; -static pixel_t* wipe_scr_end; -static pixel_t* wipe_scr; +static pixel_t *wipe_scr_start; +static pixel_t *wipe_scr_end; +static pixel_t *wipe_scr; -void -wipe_shittyColMajorXform -( dpixel_t* array, - int width, - int height ) +void wipe_shittyColMajorXform(dpixel_t *array, int width, int height) { - int x; - int y; - dpixel_t* dest; + int x; + int y; + dpixel_t *dest; - dest = (dpixel_t*) Z_Malloc(width*height*sizeof(*dest), PU_STATIC, 0); + dest = (dpixel_t *) Z_Malloc(width * height * sizeof(*dest), PU_STATIC, 0); - for(y=0;y *e) - { - newval = *w - ticks; - if (newval < *e) - *w = *e; - else - *w = newval; - changed = true; - } - else if (*w < *e) - { - newval = *w + ticks; - if (newval > *e) - *w = *e; - else - *w = newval; - changed = true; - } - } - w++; - e++; + if (*w != *e) + { + if (*w > *e) + { + newval = *w - ticks; + if (newval < *e) + *w = *e; + else + *w = newval; + changed = true; + } + else if (*w < *e) + { + newval = *w + ticks; + if (newval > *e) + *w = *e; + else + *w = newval; + changed = true; + } + } + w++; + e++; } return !changed; - } -int -wipe_exitColorXForm -( int width, - int height, - int ticks ) +int wipe_exitColorXForm(int width, int height, int ticks) { return 0; } -static int* y; +static int *y; -int -wipe_initMelt -( int width, - int height, - int ticks ) +int wipe_initMelt(int width, int height, int ticks) { - int i, r; - // copy start screen to main screen - memcpy(wipe_scr, wipe_scr_start, width*height*sizeof(*wipe_scr)); - + memcpy(wipe_scr, wipe_scr_start, width * height * sizeof(*wipe_scr)); + // makes this wipe faster (in theory) // to have stuff in column-major format - wipe_shittyColMajorXform((dpixel_t*)wipe_scr_start, width/2, height); - wipe_shittyColMajorXform((dpixel_t*)wipe_scr_end, width/2, height); - + wipe_shittyColMajorXform((dpixel_t *) wipe_scr_start, width / 2, height); + wipe_shittyColMajorXform((dpixel_t *) wipe_scr_end, width / 2, height); + // setup initial column positions // (y<0 => not ready to scroll yet) - y = (int *) Z_Malloc(width*sizeof(int), PU_STATIC, 0); - y[0] = -(M_Random()%16); - for (i=1;i 0) y[i] = 0; - else if (y[i] == -16) y[i] = -15; + int r = (M_Random() % 3) - 1; + y[i] = y[i - 1] + r; + if (y[i] > 0) + y[i] = 0; + else if (y[i] == -16) + y[i] = -15; } return 0; } -int -wipe_doMelt -( int width, - int height, - int ticks ) +int wipe_doMelt(int width, int height, int ticks) { - int i; - int j; - int dy; - int idx; - - dpixel_t* s; - dpixel_t* d; - boolean done = true; + int i; + int j; + int dy; + int idx; - width/=2; + dpixel_t *s; + dpixel_t *d; + boolean done = true; + + width /= 2; while (ticks--) { - for (i=0;i= height) dy = height - y[i]; - s = &((dpixel_t *)wipe_scr_end)[i*height+y[i]]; - d = &((dpixel_t *)wipe_scr)[y[i]*width+i]; - idx = 0; - for (j=dy;j;j--) - { - d[idx] = *(s++); - idx += width; - } - y[i] += dy; - s = &((dpixel_t *)wipe_scr_start)[i*height]; - d = &((dpixel_t *)wipe_scr)[y[i]*width+i]; - idx = 0; - for (j=height-y[i];j;j--) - { - d[idx] = *(s++); - idx += width; - } - done = false; - } - } + for (i = 0; i < width; i++) + { + if (y[i] < 0) + { + y[i]++; + done = false; + } + else if (y[i] < height) + { + dy = (y[i] < 16) ? y[i] + 1 : 8; + if (y[i] + dy >= height) + dy = height - y[i]; + s = &((dpixel_t *) wipe_scr_end)[i * height + y[i]]; + d = &((dpixel_t *) wipe_scr)[y[i] * width + i]; + idx = 0; + for (j = dy; j; j--) + { + d[idx] = *(s++); + idx += width; + } + y[i] += dy; + s = &((dpixel_t *) wipe_scr_start)[i * height]; + d = &((dpixel_t *) wipe_scr)[y[i] * width + i]; + idx = 0; + for (j = height - y[i]; j; j--) + { + d[idx] = *(s++); + idx += width; + } + done = false; + } + } } return done; - } -int -wipe_exitMelt -( int width, - int height, - int ticks ) +int wipe_exitMelt(int width, int height, int ticks) { Z_Free(y); Z_Free(wipe_scr_start); @@ -227,68 +198,50 @@ wipe_exitMelt return 0; } -int -wipe_StartScreen -( int x, - int y, - int width, - int height ) +int wipe_StartScreen(int x, int y, int width, int height) { - wipe_scr_start = Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*wipe_scr_start), PU_STATIC, NULL); + wipe_scr_start = + Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*wipe_scr_start), PU_STATIC, NULL); I_ReadScreen(wipe_scr_start); return 0; } -int -wipe_EndScreen -( int x, - int y, - int width, - int height ) +int wipe_EndScreen(int x, int y, int width, int height) { - wipe_scr_end = Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*wipe_scr_end), PU_STATIC, NULL); + wipe_scr_end = + Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*wipe_scr_end), PU_STATIC, NULL); I_ReadScreen(wipe_scr_end); V_DrawBlock(x, y, width, height, wipe_scr_start); // restore start scr. return 0; } -int -wipe_ScreenWipe -( int wipeno, - int x, - int y, - int width, - int height, - int ticks ) +int wipe_ScreenWipe(int wipeno, int x, int y, int width, int height, int ticks) { int rc; - static int (*wipes[])(int, int, int) = - { - wipe_initColorXForm, wipe_doColorXForm, wipe_exitColorXForm, - wipe_initMelt, wipe_doMelt, wipe_exitMelt - }; + static int (*wipes[])(int, int, int) = {wipe_initColorXForm, wipe_doColorXForm, + wipe_exitColorXForm, wipe_initMelt, + wipe_doMelt, wipe_exitMelt}; // initial stuff if (!go) { - go = 1; - // wipe_scr = (pixel_t *) Z_Malloc(width*height, PU_STATIC, 0); // DEBUG - wipe_scr = I_VideoBuffer; - (*wipes[wipeno*3])(width, height, ticks); + go = 1; + // wipe_scr = (pixel_t *) Z_Malloc(width*height, PU_STATIC, 0); // DEBUG + wipe_scr = I_VideoBuffer; + (*wipes[wipeno * 3])(width, height, ticks); } // do a piece of wipe-in V_MarkRect(0, 0, width, height); - rc = (*wipes[wipeno*3+1])(width, height, ticks); + rc = (*wipes[wipeno * 3 + 1])(width, height, ticks); // V_DrawBlock(x, y, 0, width, height, wipe_scr); // DEBUG // final stuff if (rc) { - go = 0; - (*wipes[wipeno*3+2])(width, height, ticks); + go = 0; + (*wipes[wipeno * 3 + 2])(width, height, ticks); } return !go; } - diff --git a/src/doom/g_game.c b/src/doom/g_game.c index c19159f213..0b70d3cc32 100644 --- a/src/doom/g_game.c +++ b/src/doom/g_game.c @@ -153,9 +153,8 @@ fixed_t forwardmove[2] = {0x19, 0x32}; fixed_t sidemove[2] = {0x18, 0x28}; fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn -static int *weapon_keys[] = {&key_weapon1, &key_weapon2, &key_weapon3, - &key_weapon4, &key_weapon5, &key_weapon6, - &key_weapon7, &key_weapon8}; +static int *weapon_keys[] = {&key_weapon1, &key_weapon2, &key_weapon3, &key_weapon4, + &key_weapon5, &key_weapon6, &key_weapon7, &key_weapon8}; // Set to -1 or +1 to switch to the previous or next weapon. @@ -167,15 +166,10 @@ static const struct { weapontype_t weapon; weapontype_t weapon_num; -} weapon_order_table[] = {{wp_fist, wp_fist}, - {wp_chainsaw, wp_fist}, - {wp_pistol, wp_pistol}, - {wp_shotgun, wp_shotgun}, - {wp_supershotgun, wp_shotgun}, - {wp_chaingun, wp_chaingun}, - {wp_missile, wp_missile}, - {wp_plasma, wp_plasma}, - {wp_bfg, wp_bfg}}; +} weapon_order_table[] = { + {wp_fist, wp_fist}, {wp_chainsaw, wp_fist}, {wp_pistol, wp_pistol}, + {wp_shotgun, wp_shotgun}, {wp_supershotgun, wp_shotgun}, {wp_chaingun, wp_chaingun}, + {wp_missile, wp_missile}, {wp_plasma, wp_plasma}, {wp_bfg, wp_bfg}}; #define SLOWTURNTICS 6 @@ -217,17 +211,6 @@ int bodyqueslot; int vanilla_savegame_limit = 1; int vanilla_demo_limit = 1; -int G_CmdChecksum(ticcmd_t *cmd) -{ - size_t i; - int sum = 0; - - for (i = 0; i < sizeof(*cmd) / 4 - 1; i++) - sum += ((int *) cmd)[i]; - - return sum; -} - static boolean WeaponSelectable(weapontype_t weapon) { // Can't select a weapon if we don't own it. @@ -304,23 +287,21 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic) cmd->consistancy = consistancy[consoleplayer][maketic % BACKUPTICS]; - strafe = gamekeydown[key_strafe] || mousebuttons[mousebstrafe] || - joybuttons[joybstrafe]; + strafe = + gamekeydown[key_strafe] || mousebuttons[mousebstrafe] || joybuttons[joybstrafe]; // fraggle: support the old "joyb_speed = 31" hack which // allowed an autorun effect speed = key_speed >= NUMKEYS || joybspeed >= MAX_JOY_BUTTONS || - gamekeydown[key_speed] || joybuttons[joybspeed] || - mousebuttons[mousebspeed]; + gamekeydown[key_speed] || joybuttons[joybspeed] || mousebuttons[mousebspeed]; forward = side = 0; // use two stage accelerative turning // on the keyboard and joystick - if (joyxmove < 0 || joyxmove > 0 || gamekeydown[key_right] || - gamekeydown[key_left] || mousebuttons[mousebturnright] || - mousebuttons[mousebturnleft]) + if (joyxmove < 0 || joyxmove > 0 || gamekeydown[key_right] || gamekeydown[key_left] || + mousebuttons[mousebturnright] || mousebuttons[mousebturnleft]) turnheld += ticdup; else turnheld = 0; @@ -391,8 +372,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic) // buttons cmd->chatchar = HU_dequeueChatChar(); - if (gamekeydown[key_fire] || mousebuttons[mousebfire] || - joybuttons[joybfire]) + if (gamekeydown[key_fire] || mousebuttons[mousebfire] || joybuttons[joybfire]) cmd->buttons |= BT_ATTACK; if (gamekeydown[key_use] || joybuttons[joybuse] || mousebuttons[mousebuse]) @@ -531,8 +511,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, int maketic) if (sendsave) { sendsave = false; - cmd->buttons = - BT_SPECIAL | BTS_SAVEGAME | (savegameslot << BTS_SAVESHIFT); + cmd->buttons = BT_SPECIAL | BTS_SAVEGAME | (savegameslot << BTS_SAVESHIFT); } // low-res turning @@ -668,8 +647,8 @@ static void SetMouseButtons(unsigned int buttons_mask) boolean G_Responder(event_t *ev) { // allow spy mode changes even during the demo - if (gamestate == GS_LEVEL && ev->type == ev_keydown && - ev->data1 == key_spy && (singledemo || !deathmatch)) + if (gamestate == GS_LEVEL && ev->type == ev_keydown && ev->data1 == key_spy && + (singledemo || !deathmatch)) { // spy mode do @@ -677,8 +656,7 @@ boolean G_Responder(event_t *ev) displayplayer++; if (displayplayer == MAXPLAYERS) displayplayer = 0; - } while (!playeringame[displayplayer] && - displayplayer != consoleplayer); + } while (!playeringame[displayplayer] && displayplayer != consoleplayer); return true; } @@ -876,11 +854,10 @@ void G_Ticker(void) if (netgame && !netdemo && !(gametic % ticdup)) { - if (gametic > BACKUPTICS && - consistancy[i][buf] != cmd->consistancy) + if (gametic > BACKUPTICS && consistancy[i][buf] != cmd->consistancy) { - I_Error("consistency failure (%i should be %i)", - cmd->consistancy, consistancy[i][buf]); + I_Error("consistency failure (%i should be %i)", cmd->consistancy, + consistancy[i][buf]); } if (players[i].mo) consistancy[i][buf] = players[i].mo->x; @@ -915,8 +892,7 @@ void G_Ticker(void) } savegameslot = - (players[i].cmd.buttons & BTS_SAVEMASK) >> - BTS_SAVESHIFT; + (players[i].cmd.buttons & BTS_SAVEMASK) >> BTS_SAVESHIFT; gameaction = ga_savegame; break; } @@ -947,10 +923,6 @@ void G_Ticker(void) WI_Ticker(); break; - case GS_FINALE: - F_Ticker(); - break; - case GS_DEMOSCREEN: D_PageTicker(); break; @@ -963,18 +935,6 @@ void G_Ticker(void) // also see P_SpawnPlayer in P_Things // -// -// G_InitPlayer -// Called at the start. -// Called by the game initialization functions. -// -void G_InitPlayer(int player) -{ - // clear everything else to defaults - G_PlayerReborn(player); -} - - // // G_PlayerFinishLevel // Can when a player completes a level. @@ -1048,12 +1008,11 @@ boolean G_CheckSpot(int playernum, mapthing_t *mthing) fixed_t y; subsector_t *ss; mobj_t *mo; - int i; if (!players[playernum].mo) { // first spawn of level, before corpses - for (i = 0; i < playernum; i++) + for (int i = 0; i < playernum; i++) if (players[i].mo->x == mthing->x << FRACBITS && players[i].mo->y == mthing->y << FRACBITS) return false; @@ -1131,8 +1090,7 @@ boolean G_CheckSpot(int playernum, mapthing_t *mthing) xa = ya = 0; break; } - mo = P_SpawnMobj(x + 20 * xa, y + 20 * ya, ss->sector->floorheight, - MT_TFOG); + mo = P_SpawnMobj(x + 20 * xa, y + 20 * ya, ss->sector->floorheight, MT_TFOG); } if (players[consoleplayer].viewz != 1) @@ -1149,16 +1107,14 @@ boolean G_CheckSpot(int playernum, mapthing_t *mthing) // void G_DeathMatchSpawnPlayer(int playernum) { - int i, j; - int selections; + int selections = deathmatch_p - deathmatchstarts; - selections = deathmatch_p - deathmatchstarts; if (selections < 4) I_Error("Only %i deathmatch spots, 4 required", selections); - for (j = 0; j < 20; j++) + for (int j = 0; j < 20; j++) { - i = P_Random() % selections; + int i = P_Random() % selections; if (G_CheckSpot(playernum, &deathmatchstarts[i])) { deathmatchstarts[i].type = playernum + 1; @@ -1313,8 +1269,7 @@ void G_DoCompleted(void) wminfo.plyr[i].sitems = players[i].itemcount; wminfo.plyr[i].ssecret = players[i].secretcount; wminfo.plyr[i].stime = leveltime; - memcpy(wminfo.plyr[i].frags, players[i].frags, - sizeof(wminfo.plyr[i].frags)); + memcpy(wminfo.plyr[i].frags, players[i].frags, sizeof(wminfo.plyr[i].frags)); } gamestate = GS_INTERMISSION; @@ -1849,8 +1804,7 @@ void G_DoPlayDemo(void) for (i = 0; i < MAXPLAYERS; i++) playeringame[i] = *demo_p++; - if (playeringame[1] || M_CheckParm("-solo-net") > 0 || - M_CheckParm("-netdemo") > 0) + if (playeringame[1] || M_CheckParm("-solo-net") > 0 || M_CheckParm("-netdemo") > 0) { netgame = true; netdemo = true; @@ -1915,8 +1869,7 @@ boolean G_CheckDemoStatus(void) timingdemo = false; demoplayback = false; - I_Error("timed %i gametics in %i realtics (%f fps)", gametic, realtics, - fps); + I_Error("timed %i gametics in %i realtics (%f fps)", gametic, realtics, fps); } if (demoplayback) diff --git a/src/doom/hu_lib.c b/src/doom/hu_lib.c index d32c2004d2..46133332ef 100644 --- a/src/doom/hu_lib.c +++ b/src/doom/hu_lib.c @@ -33,24 +33,14 @@ #define noterased viewwindowx -void HUlib_init(void) -{ -} - -void HUlib_clearTextLine(hu_textline_t* t) +void HUlib_clearTextLine(hu_textline_t *t) { t->len = 0; t->l[0] = 0; t->needsupdate = true; } -void -HUlib_initTextLine -( hu_textline_t* t, - int x, - int y, - patch_t** f, - int sc ) +void HUlib_initTextLine(hu_textline_t *t, int x, int y, patch_t **f, int sc) { t->x = x; t->y = y; @@ -59,121 +49,97 @@ HUlib_initTextLine HUlib_clearTextLine(t); } -boolean -HUlib_addCharToTextLine -( hu_textline_t* t, - char ch ) +boolean HUlib_addCharToTextLine(hu_textline_t *t, char ch) { if (t->len == HU_MAXLINELENGTH) - return false; + return false; else { - t->l[t->len++] = ch; - t->l[t->len] = 0; - t->needsupdate = 4; - return true; + t->l[t->len++] = ch; + t->l[t->len] = 0; + t->needsupdate = 4; + return true; } - } -boolean HUlib_delCharFromTextLine(hu_textline_t* t) +boolean HUlib_delCharFromTextLine(hu_textline_t *t) { - if (!t->len) return false; + if (!t->len) + return false; else { - t->l[--t->len] = 0; - t->needsupdate = 4; - return true; + t->l[--t->len] = 0; + t->needsupdate = 4; + return true; } - } -void -HUlib_drawTextLine -( hu_textline_t* l, - boolean drawcursor ) +void HUlib_drawTextLine(hu_textline_t *l, boolean drawcursor) { - - int i; - int w; - int x; - unsigned char c; - // draw the new stuff - x = l->x; - for (i=0;ilen;i++) + int x = l->x; + + for (int i = 0; i < l->len; i++) { - c = toupper(l->l[i]); - if (c != ' ' - && c >= l->sc - && c <= '_') - { - w = SHORT(l->f[c - l->sc]->width); - if (x+w > SCREENWIDTH) - break; - V_DrawPatchDirect(x, l->y, l->f[c - l->sc]); - x += w; - } - else - { - x += 4; - if (x >= SCREENWIDTH) - break; - } + unsigned char c = toupper(l->l[i]); + if (c != ' ' && c >= l->sc && c <= '_') + { + int w = SHORT(l->f[c - l->sc]->width); + if (x + w > SCREENWIDTH) + break; + V_DrawPatchDirect(x, l->y, l->f[c - l->sc]); + x += w; + } + else + { + x += 4; + if (x >= SCREENWIDTH) + break; + } } // draw the cursor if requested - if (drawcursor - && x + SHORT(l->f['_' - l->sc]->width) <= SCREENWIDTH) + if (drawcursor && x + SHORT(l->f['_' - l->sc]->width) <= SCREENWIDTH) { - V_DrawPatchDirect(x, l->y, l->f['_' - l->sc]); + V_DrawPatchDirect(x, l->y, l->f['_' - l->sc]); } } // sorta called by HU_Erase and just better darn get things straight -void HUlib_eraseTextLine(hu_textline_t* l) +void HUlib_eraseTextLine(hu_textline_t *l) { - int lh; - int y; - int yoffset; - // Only erases when NOT in automap and the screen is reduced, // and the text must either need updating or refreshing // (because of a recent change back from the automap) - if (!automapactive && - viewwindowx && l->needsupdate) + if (!automapactive && viewwindowx && l->needsupdate) { - lh = SHORT(l->f[0]->height) + 1; - for (y=l->y,yoffset=y*SCREENWIDTH ; yy+lh ; y++,yoffset+=SCREENWIDTH) - { - if (y < viewwindowy || y >= viewwindowy + viewheight) - R_VideoErase(yoffset, SCREENWIDTH); // erase entire line - else - { - R_VideoErase(yoffset, viewwindowx); // erase left border - R_VideoErase(yoffset + viewwindowx + viewwidth, viewwindowx); - // erase right border - } - } + int yoffset; + int lh = SHORT(l->f[0]->height) + 1; + + for (int y = l->y, yoffset = y * SCREENWIDTH; y < l->y + lh; + y++, yoffset += SCREENWIDTH) + { + if (y < viewwindowy || y >= viewwindowy + viewheight) + R_VideoErase(yoffset, SCREENWIDTH); // erase entire line + else + { + R_VideoErase(yoffset, viewwindowx); // erase left border + R_VideoErase(yoffset + viewwindowx + viewwidth, viewwindowx); + // erase right border + } + } } - if (l->needsupdate) l->needsupdate--; - + if (l->needsupdate) + l->needsupdate--; } -void -HUlib_initSText -( hu_stext_t* s, - int x, - int y, - int h, - patch_t** font, - int startchar, - boolean* on ) +void HUlib_initSText(hu_stext_t *s, int x, int y, int h, patch_t **font, int startchar, + boolean *on) { int i; @@ -182,90 +148,73 @@ HUlib_initSText s->on = on; s->laston = true; s->cl = 0; - for (i=0;il[i], - x, y - i*(SHORT(font[0]->height)+1), - font, startchar); - + for (i = 0; i < h; i++) + HUlib_initTextLine(&s->l[i], x, y - i * (SHORT(font[0]->height) + 1), font, + startchar); } -void HUlib_addLineToSText(hu_stext_t* s) +void HUlib_addLineToSText(hu_stext_t *s) { int i; // add a clear line if (++s->cl == s->h) - s->cl = 0; + s->cl = 0; HUlib_clearTextLine(&s->l[s->cl]); // everything needs updating - for (i=0 ; ih ; i++) - s->l[i].needsupdate = 4; - + for (i = 0; i < s->h; i++) + s->l[i].needsupdate = 4; } -void -HUlib_addMessageToSText -( hu_stext_t* s, - const char* prefix, - const char* msg ) +void HUlib_addMessageToSText(hu_stext_t *s, const char *prefix, const char *msg) { HUlib_addLineToSText(s); if (prefix) - while (*prefix) - HUlib_addCharToTextLine(&s->l[s->cl], *(prefix++)); + while (*prefix) + HUlib_addCharToTextLine(&s->l[s->cl], *(prefix++)); while (*msg) - HUlib_addCharToTextLine(&s->l[s->cl], *(msg++)); + HUlib_addCharToTextLine(&s->l[s->cl], *(msg++)); } -void HUlib_drawSText(hu_stext_t* s) +void HUlib_drawSText(hu_stext_t *s) { - int i, idx; - hu_textline_t *l; if (!*s->on) - return; // if not on, don't draw + return; // if not on, don't draw // draw everything - for (i=0 ; ih ; i++) + for (int i = 0; i < s->h; i++) { - idx = s->cl - i; - if (idx < 0) - idx += s->h; // handle queue of lines - - l = &s->l[idx]; - - // need a decision made here on whether to skip the draw - HUlib_drawTextLine(l, false); // no cursor, please - } + int idx = s->cl - i; + if (idx < 0) + idx += s->h; // handle queue of lines + hu_textline_t *l = &s->l[idx]; + + // need a decision made here on whether to skip the draw + HUlib_drawTextLine(l, false); // no cursor, please + } } -void HUlib_eraseSText(hu_stext_t* s) +void HUlib_eraseSText(hu_stext_t *s) { int i; - for (i=0 ; ih ; i++) + for (i = 0; i < s->h; i++) { - if (s->laston && !*s->on) - s->l[i].needsupdate = 4; - HUlib_eraseTextLine(&s->l[i]); + if (s->laston && !*s->on) + s->l[i].needsupdate = 4; + HUlib_eraseTextLine(&s->l[i]); } s->laston = *s->on; - } -void -HUlib_initIText -( hu_itext_t* it, - int x, - int y, - patch_t** font, - int startchar, - boolean* on ) +void HUlib_initIText(hu_itext_t *it, int x, int y, patch_t **font, int startchar, + boolean *on) { it->lm = 0; // default left margin is start of text it->on = on; @@ -275,73 +224,49 @@ HUlib_initIText // The following deletion routines adhere to the left margin restriction -void HUlib_delCharFromIText(hu_itext_t* it) +void HUlib_delCharFromIText(hu_itext_t *it) { if (it->l.len != it->lm) - HUlib_delCharFromTextLine(&it->l); -} - -void HUlib_eraseLineFromIText(hu_itext_t* it) -{ - while (it->lm != it->l.len) - HUlib_delCharFromTextLine(&it->l); + HUlib_delCharFromTextLine(&it->l); } // Resets left margin as well -void HUlib_resetIText(hu_itext_t* it) +void HUlib_resetIText(hu_itext_t *it) { it->lm = 0; HUlib_clearTextLine(&it->l); } -void -HUlib_addPrefixToIText -( hu_itext_t* it, - char* str ) -{ - while (*str) - HUlib_addCharToTextLine(&it->l, *(str++)); - it->lm = it->l.len; -} - // wrapper function for handling general keyed input. // returns true if it ate the key -boolean -HUlib_keyInIText -( hu_itext_t* it, - unsigned char ch ) +boolean HUlib_keyInIText(hu_itext_t *it, unsigned char ch) { ch = toupper(ch); - if (ch >= ' ' && ch <= '_') - HUlib_addCharToTextLine(&it->l, (char) ch); - else - if (ch == KEY_BACKSPACE) - HUlib_delCharFromIText(it); - else - if (ch != KEY_ENTER) - return false; // did not eat key + if (ch >= ' ' && ch <= '_') + HUlib_addCharToTextLine(&it->l, (char) ch); + else if (ch == KEY_BACKSPACE) + HUlib_delCharFromIText(it); + else if (ch != KEY_ENTER) + return false; // did not eat key return true; // ate the key - } -void HUlib_drawIText(hu_itext_t* it) +void HUlib_drawIText(hu_itext_t *it) { hu_textline_t *l = &it->l; if (!*it->on) - return; + return; HUlib_drawTextLine(l, true); // draw the line w/ cursor - } -void HUlib_eraseIText(hu_itext_t* it) +void HUlib_eraseIText(hu_itext_t *it) { if (it->laston && !*it->on) - it->l.needsupdate = 4; + it->l.needsupdate = 4; HUlib_eraseTextLine(&it->l); it->laston = *it->on; } - diff --git a/src/doom/hu_lib.h b/src/doom/hu_lib.h index ca5eb8d8c8..81b52833ba 100644 --- a/src/doom/hu_lib.h +++ b/src/doom/hu_lib.h @@ -87,9 +87,6 @@ typedef struct // Widget creation, access, and update routines // -// initializes heads-up widget library -void HUlib_init(void); - // // textline code // @@ -156,18 +153,9 @@ HUlib_initIText // enforces left margin void HUlib_delCharFromIText(hu_itext_t* it); -// enforces left margin -void HUlib_eraseLineFromIText(hu_itext_t* it); - // resets line and left margin void HUlib_resetIText(hu_itext_t* it); -// left of left-margin -void -HUlib_addPrefixToIText -( hu_itext_t* it, - char* str ); - // whether eaten boolean HUlib_keyInIText diff --git a/src/doom/hu_stuff.c b/src/doom/hu_stuff.c index 146ae0ca41..3bf605d896 100644 --- a/src/doom/hu_stuff.c +++ b/src/doom/hu_stuff.c @@ -140,8 +140,8 @@ void HU_Start(void) chat_on = false; // create the message widget - HUlib_initSText(&w_message, HU_MSGX, HU_MSGY, HU_MSGHEIGHT, hu_font, - HU_FONTSTART, &message_on); + HUlib_initSText(&w_message, HU_MSGX, HU_MSGY, HU_MSGHEIGHT, hu_font, HU_FONTSTART, + &message_on); // create the map title widget HUlib_initTextLine(&w_title, HU_TITLEX, HU_TITLEY, hu_font, HU_FONTSTART); @@ -152,8 +152,7 @@ void HU_Start(void) HUlib_addCharToTextLine(&w_title, *(s++)); // create the chat widget - HUlib_initIText(&w_chat, HU_INPUTX, HU_INPUTY, hu_font, HU_FONTSTART, - &chat_on); + HUlib_initIText(&w_chat, HU_INPUTX, HU_INPUTY, hu_font, HU_FONTSTART, &chat_on); // create the inputbuffer widgets for (i = 0; i < MAXPLAYERS; i++) @@ -181,10 +180,6 @@ void HU_Erase(void) void HU_Ticker(void) { - - int i, rc; - char c; - // tick down message counter if message is up if (message_counter && !--message_counter) { @@ -212,8 +207,10 @@ void HU_Ticker(void) // check for incoming chat characters if (netgame) { - for (i = 0; i < MAXPLAYERS; i++) + for (int i = 0; i < MAXPLAYERS; i++) { + char c; + if (!playeringame[i]) continue; if (i != consoleplayer && (c = players[i].cmd.chatchar)) @@ -222,15 +219,14 @@ void HU_Ticker(void) chat_dest[i] = c; else { - rc = HUlib_keyInIText(&w_inputbuffer[i], c); + int rc = HUlib_keyInIText(&w_inputbuffer[i], c); if (rc && c == KEY_ENTER) { if (w_inputbuffer[i].l.len && (chat_dest[i] == consoleplayer + 1 || chat_dest[i] == HU_BROADCAST)) { - HUlib_addMessageToSText(&w_message, - player_names[i], + HUlib_addMessageToSText(&w_message, player_names[i], w_inputbuffer[i].l.l); message_nottobefuckedwith = true; diff --git a/src/doom/info.c b/src/doom/info.c index 11ea1abf7c..a331a4b5db 100644 --- a/src/doom/info.c +++ b/src/doom/info.c @@ -30,25 +30,26 @@ #include "p_mobj.h" const char *sprnames[] = { - "TROO","SHTG","PUNG","PISG","PISF","SHTF","SHT2","CHGG","CHGF","MISG", - "MISF","SAWG","PLSG","PLSF","BFGG","BFGF","BLUD","PUFF","BAL1","BAL2", - "PLSS","PLSE","MISL","BFS1","BFE1","BFE2","TFOG","IFOG","PLAY","POSS", - "SPOS","VILE","FIRE","FATB","FBXP","SKEL","MANF","FATT","CPOS","SARG", - "HEAD","BAL7","BOSS","BOS2","SKUL","SPID","BSPI","APLS","APBX","CYBR", - "PAIN","SSWV","KEEN","BBRN","BOSF","ARM1","ARM2","BAR1","BEXP","FCAN", - "BON1","BON2","BKEY","RKEY","YKEY","BSKU","RSKU","YSKU","STIM","MEDI", - "SOUL","PINV","PSTR","PINS","MEGA","SUIT","PMAP","PVIS","CLIP","AMMO", - "ROCK","BROK","CELL","CELP","SHEL","SBOX","BPAK","BFUG","MGUN","CSAW", - "LAUN","PLAS","SHOT","SGN2","COLU","SMT2","GOR1","POL2","POL5","POL4", - "POL3","POL1","POL6","GOR2","GOR3","GOR4","GOR5","SMIT","COL1","COL2", - "COL3","COL4","CAND","CBRA","COL6","TRE1","TRE2","ELEC","CEYE","FSKU", - "COL5","TBLU","TGRN","TRED","SMBT","SMGT","SMRT","HDB1","HDB2","HDB3", - "HDB4","HDB5","HDB6","POB1","POB2","BRS1","TLMP","TLP2", NULL -}; + "TROO", "SHTG", "PUNG", "PISG", "PISF", "SHTF", "SHT2", "CHGG", "CHGF", + "MISG", "MISF", "SAWG", "PLSG", "PLSF", "BFGG", "BFGF", "BLUD", "PUFF", + "BAL1", "BAL2", "PLSS", "PLSE", "MISL", "BFS1", "BFE1", "BFE2", "TFOG", + "IFOG", "PLAY", "POSS", "SPOS", "VILE", "FIRE", "FATB", "FBXP", "SKEL", + "MANF", "FATT", "CPOS", "SARG", "HEAD", "BAL7", "BOSS", "BOS2", "SKUL", + "SPID", "BSPI", "APLS", "APBX", "CYBR", "PAIN", "SSWV", "KEEN", "BBRN", + "BOSF", "ARM1", "ARM2", "BAR1", "BEXP", "FCAN", "BON1", "BON2", "BKEY", + "RKEY", "YKEY", "BSKU", "RSKU", "YSKU", "STIM", "MEDI", "SOUL", "PINV", + "PSTR", "PINS", "MEGA", "SUIT", "PMAP", "PVIS", "CLIP", "AMMO", "ROCK", + "BROK", "CELL", "CELP", "SHEL", "SBOX", "BPAK", "BFUG", "MGUN", "CSAW", + "LAUN", "PLAS", "SHOT", "SGN2", "COLU", "SMT2", "GOR1", "POL2", "POL5", + "POL4", "POL3", "POL1", "POL6", "GOR2", "GOR3", "GOR4", "GOR5", "SMIT", + "COL1", "COL2", "COL3", "COL4", "CAND", "CBRA", "COL6", "TRE1", "TRE2", + "ELEC", "CEYE", "FSKU", "COL5", "TBLU", "TGRN", "TRED", "SMBT", "SMGT", + "SMRT", "HDB1", "HDB2", "HDB3", "HDB4", "HDB5", "HDB6", "POB1", "POB2", + "BRS1", "TLMP", "TLP2", NULL}; // Doesn't work with g++, needs actionf_p1 -void A_Light0(); +void A_Light0(); void A_WeaponReady(); void A_Lower(); void A_Raise(); @@ -82,4581 +83,4697 @@ void A_FaceTarget(); void A_PosAttack(); void A_Scream(); void A_SPosAttack(); -void A_VileChase(); -void A_VileStart(); -void A_VileTarget(); -void A_VileAttack(); -void A_StartFire(); -void A_Fire(); -void A_FireCrackle(); -void A_Tracer(); -void A_SkelWhoosh(); -void A_SkelFist(); -void A_SkelMissile(); -void A_FatRaise(); -void A_FatAttack1(); -void A_FatAttack2(); -void A_FatAttack3(); void A_BossDeath(); -void A_CPosAttack(); -void A_CPosRefire(); void A_TroopAttack(); void A_SargAttack(); void A_HeadAttack(); void A_BruisAttack(); -void A_SkullAttack(); void A_Metal(); void A_SpidRefire(); -void A_BabyMetal(); -void A_BspiAttack(); void A_Hoof(); void A_CyberAttack(); -void A_PainAttack(); -void A_PainDie(); -void A_KeenDie(); -void A_BrainPain(); -void A_BrainScream(); -void A_BrainDie(); -void A_BrainAwake(); -void A_BrainSpit(); -void A_SpawnSound(); -void A_SpawnFly(); -void A_BrainExplode(); - - -state_t states[NUMSTATES] = { - {SPR_TROO,0,-1,{NULL},S_NULL,0,0}, // S_NULL - {SPR_SHTG,4,0,{A_Light0},S_NULL,0,0}, // S_LIGHTDONE - {SPR_PUNG,0,1,{A_WeaponReady},S_PUNCH,0,0}, // S_PUNCH - {SPR_PUNG,0,1,{A_Lower},S_PUNCHDOWN,0,0}, // S_PUNCHDOWN - {SPR_PUNG,0,1,{A_Raise},S_PUNCHUP,0,0}, // S_PUNCHUP - {SPR_PUNG,1,4,{NULL},S_PUNCH2,0,0}, // S_PUNCH1 - {SPR_PUNG,2,4,{A_Punch},S_PUNCH3,0,0}, // S_PUNCH2 - {SPR_PUNG,3,5,{NULL},S_PUNCH4,0,0}, // S_PUNCH3 - {SPR_PUNG,2,4,{NULL},S_PUNCH5,0,0}, // S_PUNCH4 - {SPR_PUNG,1,5,{A_ReFire},S_PUNCH,0,0}, // S_PUNCH5 - {SPR_PISG,0,1,{A_WeaponReady},S_PISTOL,0,0},// S_PISTOL - {SPR_PISG,0,1,{A_Lower},S_PISTOLDOWN,0,0}, // S_PISTOLDOWN - {SPR_PISG,0,1,{A_Raise},S_PISTOLUP,0,0}, // S_PISTOLUP - {SPR_PISG,0,4,{NULL},S_PISTOL2,0,0}, // S_PISTOL1 - {SPR_PISG,1,6,{A_FirePistol},S_PISTOL3,0,0},// S_PISTOL2 - {SPR_PISG,2,4,{NULL},S_PISTOL4,0,0}, // S_PISTOL3 - {SPR_PISG,1,5,{A_ReFire},S_PISTOL,0,0}, // S_PISTOL4 - {SPR_PISF,32768,7,{A_Light1},S_LIGHTDONE,0,0}, // S_PISTOLFLASH - {SPR_SHTG,0,1,{A_WeaponReady},S_SGUN,0,0}, // S_SGUN - {SPR_SHTG,0,1,{A_Lower},S_SGUNDOWN,0,0}, // S_SGUNDOWN - {SPR_SHTG,0,1,{A_Raise},S_SGUNUP,0,0}, // S_SGUNUP - {SPR_SHTG,0,3,{NULL},S_SGUN2,0,0}, // S_SGUN1 - {SPR_SHTG,0,7,{A_FireShotgun},S_SGUN3,0,0}, // S_SGUN2 - {SPR_SHTG,1,5,{NULL},S_SGUN4,0,0}, // S_SGUN3 - {SPR_SHTG,2,5,{NULL},S_SGUN5,0,0}, // S_SGUN4 - {SPR_SHTG,3,4,{NULL},S_SGUN6,0,0}, // S_SGUN5 - {SPR_SHTG,2,5,{NULL},S_SGUN7,0,0}, // S_SGUN6 - {SPR_SHTG,1,5,{NULL},S_SGUN8,0,0}, // S_SGUN7 - {SPR_SHTG,0,3,{NULL},S_SGUN9,0,0}, // S_SGUN8 - {SPR_SHTG,0,7,{A_ReFire},S_SGUN,0,0}, // S_SGUN9 - {SPR_SHTF,32768,4,{A_Light1},S_SGUNFLASH2,0,0}, // S_SGUNFLASH1 - {SPR_SHTF,32769,3,{A_Light2},S_LIGHTDONE,0,0}, // S_SGUNFLASH2 - {SPR_SHT2,0,1,{A_WeaponReady},S_DSGUN,0,0}, // S_DSGUN - {SPR_SHT2,0,1,{A_Lower},S_DSGUNDOWN,0,0}, // S_DSGUNDOWN - {SPR_SHT2,0,1,{A_Raise},S_DSGUNUP,0,0}, // S_DSGUNUP - {SPR_SHT2,0,3,{NULL},S_DSGUN2,0,0}, // S_DSGUN1 - {SPR_SHT2,0,7,{A_FireShotgun2},S_DSGUN3,0,0}, // S_DSGUN2 - {SPR_SHT2,1,7,{NULL},S_DSGUN4,0,0}, // S_DSGUN3 - {SPR_SHT2,2,7,{A_CheckReload},S_DSGUN5,0,0}, // S_DSGUN4 - {SPR_SHT2,3,7,{A_OpenShotgun2},S_DSGUN6,0,0}, // S_DSGUN5 - {SPR_SHT2,4,7,{NULL},S_DSGUN7,0,0}, // S_DSGUN6 - {SPR_SHT2,5,7,{A_LoadShotgun2},S_DSGUN8,0,0}, // S_DSGUN7 - {SPR_SHT2,6,6,{NULL},S_DSGUN9,0,0}, // S_DSGUN8 - {SPR_SHT2,7,6,{A_CloseShotgun2},S_DSGUN10,0,0}, // S_DSGUN9 - {SPR_SHT2,0,5,{A_ReFire},S_DSGUN,0,0}, // S_DSGUN10 - {SPR_SHT2,1,7,{NULL},S_DSNR2,0,0}, // S_DSNR1 - {SPR_SHT2,0,3,{NULL},S_DSGUNDOWN,0,0}, // S_DSNR2 - {SPR_SHT2,32776,5,{A_Light1},S_DSGUNFLASH2,0,0}, // S_DSGUNFLASH1 - {SPR_SHT2,32777,4,{A_Light2},S_LIGHTDONE,0,0}, // S_DSGUNFLASH2 - {SPR_CHGG,0,1,{A_WeaponReady},S_CHAIN,0,0}, // S_CHAIN - {SPR_CHGG,0,1,{A_Lower},S_CHAINDOWN,0,0}, // S_CHAINDOWN - {SPR_CHGG,0,1,{A_Raise},S_CHAINUP,0,0}, // S_CHAINUP - {SPR_CHGG,0,4,{A_FireCGun},S_CHAIN2,0,0}, // S_CHAIN1 - {SPR_CHGG,1,4,{A_FireCGun},S_CHAIN3,0,0}, // S_CHAIN2 - {SPR_CHGG,1,0,{A_ReFire},S_CHAIN,0,0}, // S_CHAIN3 - {SPR_CHGF,32768,5,{A_Light1},S_LIGHTDONE,0,0}, // S_CHAINFLASH1 - {SPR_CHGF,32769,5,{A_Light2},S_LIGHTDONE,0,0}, // S_CHAINFLASH2 - {SPR_MISG,0,1,{A_WeaponReady},S_MISSILE,0,0}, // S_MISSILE - {SPR_MISG,0,1,{A_Lower},S_MISSILEDOWN,0,0}, // S_MISSILEDOWN - {SPR_MISG,0,1,{A_Raise},S_MISSILEUP,0,0}, // S_MISSILEUP - {SPR_MISG,1,8,{A_GunFlash},S_MISSILE2,0,0}, // S_MISSILE1 - {SPR_MISG,1,12,{A_FireMissile},S_MISSILE3,0,0}, // S_MISSILE2 - {SPR_MISG,1,0,{A_ReFire},S_MISSILE,0,0}, // S_MISSILE3 - {SPR_MISF,32768,3,{A_Light1},S_MISSILEFLASH2,0,0}, // S_MISSILEFLASH1 - {SPR_MISF,32769,4,{NULL},S_MISSILEFLASH3,0,0}, // S_MISSILEFLASH2 - {SPR_MISF,32770,4,{A_Light2},S_MISSILEFLASH4,0,0}, // S_MISSILEFLASH3 - {SPR_MISF,32771,4,{A_Light2},S_LIGHTDONE,0,0}, // S_MISSILEFLASH4 - {SPR_SAWG,2,4,{A_WeaponReady},S_SAWB,0,0}, // S_SAW - {SPR_SAWG,3,4,{A_WeaponReady},S_SAW,0,0}, // S_SAWB - {SPR_SAWG,2,1,{A_Lower},S_SAWDOWN,0,0}, // S_SAWDOWN - {SPR_SAWG,2,1,{A_Raise},S_SAWUP,0,0}, // S_SAWUP - {SPR_SAWG,0,4,{A_Saw},S_SAW2,0,0}, // S_SAW1 - {SPR_SAWG,1,4,{A_Saw},S_SAW3,0,0}, // S_SAW2 - {SPR_SAWG,1,0,{A_ReFire},S_SAW,0,0}, // S_SAW3 - {SPR_PLSG,0,1,{A_WeaponReady},S_PLASMA,0,0}, // S_PLASMA - {SPR_PLSG,0,1,{A_Lower},S_PLASMADOWN,0,0}, // S_PLASMADOWN - {SPR_PLSG,0,1,{A_Raise},S_PLASMAUP,0,0}, // S_PLASMAUP - {SPR_PLSG,0,3,{A_FirePlasma},S_PLASMA2,0,0}, // S_PLASMA1 - {SPR_PLSG,1,20,{A_ReFire},S_PLASMA,0,0}, // S_PLASMA2 - {SPR_PLSF,32768,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH1 - {SPR_PLSF,32769,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH2 - {SPR_BFGG,0,1,{A_WeaponReady},S_BFG,0,0}, // S_BFG - {SPR_BFGG,0,1,{A_Lower},S_BFGDOWN,0,0}, // S_BFGDOWN - {SPR_BFGG,0,1,{A_Raise},S_BFGUP,0,0}, // S_BFGUP - {SPR_BFGG,0,20,{A_BFGsound},S_BFG2,0,0}, // S_BFG1 - {SPR_BFGG,1,10,{A_GunFlash},S_BFG3,0,0}, // S_BFG2 - {SPR_BFGG,1,10,{A_FireBFG},S_BFG4,0,0}, // S_BFG3 - {SPR_BFGG,1,20,{A_ReFire},S_BFG,0,0}, // S_BFG4 - {SPR_BFGF,32768,11,{A_Light1},S_BFGFLASH2,0,0}, // S_BFGFLASH1 - {SPR_BFGF,32769,6,{A_Light2},S_LIGHTDONE,0,0}, // S_BFGFLASH2 - {SPR_BLUD,2,8,{NULL},S_BLOOD2,0,0}, // S_BLOOD1 - {SPR_BLUD,1,8,{NULL},S_BLOOD3,0,0}, // S_BLOOD2 - {SPR_BLUD,0,8,{NULL},S_NULL,0,0}, // S_BLOOD3 - {SPR_PUFF,32768,4,{NULL},S_PUFF2,0,0}, // S_PUFF1 - {SPR_PUFF,1,4,{NULL},S_PUFF3,0,0}, // S_PUFF2 - {SPR_PUFF,2,4,{NULL},S_PUFF4,0,0}, // S_PUFF3 - {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_PUFF4 - {SPR_BAL1,32768,4,{NULL},S_TBALL2,0,0}, // S_TBALL1 - {SPR_BAL1,32769,4,{NULL},S_TBALL1,0,0}, // S_TBALL2 - {SPR_BAL1,32770,6,{NULL},S_TBALLX2,0,0}, // S_TBALLX1 - {SPR_BAL1,32771,6,{NULL},S_TBALLX3,0,0}, // S_TBALLX2 - {SPR_BAL1,32772,6,{NULL},S_NULL,0,0}, // S_TBALLX3 - {SPR_BAL2,32768,4,{NULL},S_RBALL2,0,0}, // S_RBALL1 - {SPR_BAL2,32769,4,{NULL},S_RBALL1,0,0}, // S_RBALL2 - {SPR_BAL2,32770,6,{NULL},S_RBALLX2,0,0}, // S_RBALLX1 - {SPR_BAL2,32771,6,{NULL},S_RBALLX3,0,0}, // S_RBALLX2 - {SPR_BAL2,32772,6,{NULL},S_NULL,0,0}, // S_RBALLX3 - {SPR_PLSS,32768,6,{NULL},S_PLASBALL2,0,0}, // S_PLASBALL - {SPR_PLSS,32769,6,{NULL},S_PLASBALL,0,0}, // S_PLASBALL2 - {SPR_PLSE,32768,4,{NULL},S_PLASEXP2,0,0}, // S_PLASEXP - {SPR_PLSE,32769,4,{NULL},S_PLASEXP3,0,0}, // S_PLASEXP2 - {SPR_PLSE,32770,4,{NULL},S_PLASEXP4,0,0}, // S_PLASEXP3 - {SPR_PLSE,32771,4,{NULL},S_PLASEXP5,0,0}, // S_PLASEXP4 - {SPR_PLSE,32772,4,{NULL},S_NULL,0,0}, // S_PLASEXP5 - {SPR_MISL,32768,1,{NULL},S_ROCKET,0,0}, // S_ROCKET - {SPR_BFS1,32768,4,{NULL},S_BFGSHOT2,0,0}, // S_BFGSHOT - {SPR_BFS1,32769,4,{NULL},S_BFGSHOT,0,0}, // S_BFGSHOT2 - {SPR_BFE1,32768,8,{NULL},S_BFGLAND2,0,0}, // S_BFGLAND - {SPR_BFE1,32769,8,{NULL},S_BFGLAND3,0,0}, // S_BFGLAND2 - {SPR_BFE1,32770,8,{A_BFGSpray},S_BFGLAND4,0,0}, // S_BFGLAND3 - {SPR_BFE1,32771,8,{NULL},S_BFGLAND5,0,0}, // S_BFGLAND4 - {SPR_BFE1,32772,8,{NULL},S_BFGLAND6,0,0}, // S_BFGLAND5 - {SPR_BFE1,32773,8,{NULL},S_NULL,0,0}, // S_BFGLAND6 - {SPR_BFE2,32768,8,{NULL},S_BFGEXP2,0,0}, // S_BFGEXP - {SPR_BFE2,32769,8,{NULL},S_BFGEXP3,0,0}, // S_BFGEXP2 - {SPR_BFE2,32770,8,{NULL},S_BFGEXP4,0,0}, // S_BFGEXP3 - {SPR_BFE2,32771,8,{NULL},S_NULL,0,0}, // S_BFGEXP4 - {SPR_MISL,32769,8,{A_Explode},S_EXPLODE2,0,0}, // S_EXPLODE1 - {SPR_MISL,32770,6,{NULL},S_EXPLODE3,0,0}, // S_EXPLODE2 - {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_EXPLODE3 - {SPR_TFOG,32768,6,{NULL},S_TFOG01,0,0}, // S_TFOG - {SPR_TFOG,32769,6,{NULL},S_TFOG02,0,0}, // S_TFOG01 - {SPR_TFOG,32768,6,{NULL},S_TFOG2,0,0}, // S_TFOG02 - {SPR_TFOG,32769,6,{NULL},S_TFOG3,0,0}, // S_TFOG2 - {SPR_TFOG,32770,6,{NULL},S_TFOG4,0,0}, // S_TFOG3 - {SPR_TFOG,32771,6,{NULL},S_TFOG5,0,0}, // S_TFOG4 - {SPR_TFOG,32772,6,{NULL},S_TFOG6,0,0}, // S_TFOG5 - {SPR_TFOG,32773,6,{NULL},S_TFOG7,0,0}, // S_TFOG6 - {SPR_TFOG,32774,6,{NULL},S_TFOG8,0,0}, // S_TFOG7 - {SPR_TFOG,32775,6,{NULL},S_TFOG9,0,0}, // S_TFOG8 - {SPR_TFOG,32776,6,{NULL},S_TFOG10,0,0}, // S_TFOG9 - {SPR_TFOG,32777,6,{NULL},S_NULL,0,0}, // S_TFOG10 - {SPR_IFOG,32768,6,{NULL},S_IFOG01,0,0}, // S_IFOG - {SPR_IFOG,32769,6,{NULL},S_IFOG02,0,0}, // S_IFOG01 - {SPR_IFOG,32768,6,{NULL},S_IFOG2,0,0}, // S_IFOG02 - {SPR_IFOG,32769,6,{NULL},S_IFOG3,0,0}, // S_IFOG2 - {SPR_IFOG,32770,6,{NULL},S_IFOG4,0,0}, // S_IFOG3 - {SPR_IFOG,32771,6,{NULL},S_IFOG5,0,0}, // S_IFOG4 - {SPR_IFOG,32772,6,{NULL},S_NULL,0,0}, // S_IFOG5 - {SPR_PLAY,0,-1,{NULL},S_NULL,0,0}, // S_PLAY - {SPR_PLAY,0,4,{NULL},S_PLAY_RUN2,0,0}, // S_PLAY_RUN1 - {SPR_PLAY,1,4,{NULL},S_PLAY_RUN3,0,0}, // S_PLAY_RUN2 - {SPR_PLAY,2,4,{NULL},S_PLAY_RUN4,0,0}, // S_PLAY_RUN3 - {SPR_PLAY,3,4,{NULL},S_PLAY_RUN1,0,0}, // S_PLAY_RUN4 - {SPR_PLAY,4,12,{NULL},S_PLAY,0,0}, // S_PLAY_ATK1 - {SPR_PLAY,32773,6,{NULL},S_PLAY_ATK1,0,0}, // S_PLAY_ATK2 - {SPR_PLAY,6,4,{NULL},S_PLAY_PAIN2,0,0}, // S_PLAY_PAIN - {SPR_PLAY,6,4,{A_Pain},S_PLAY,0,0}, // S_PLAY_PAIN2 - {SPR_PLAY,7,10,{NULL},S_PLAY_DIE2,0,0}, // S_PLAY_DIE1 - {SPR_PLAY,8,10,{A_PlayerScream},S_PLAY_DIE3,0,0}, // S_PLAY_DIE2 - {SPR_PLAY,9,10,{A_Fall},S_PLAY_DIE4,0,0}, // S_PLAY_DIE3 - {SPR_PLAY,10,10,{NULL},S_PLAY_DIE5,0,0}, // S_PLAY_DIE4 - {SPR_PLAY,11,10,{NULL},S_PLAY_DIE6,0,0}, // S_PLAY_DIE5 - {SPR_PLAY,12,10,{NULL},S_PLAY_DIE7,0,0}, // S_PLAY_DIE6 - {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_PLAY_DIE7 - {SPR_PLAY,14,5,{NULL},S_PLAY_XDIE2,0,0}, // S_PLAY_XDIE1 - {SPR_PLAY,15,5,{A_XScream},S_PLAY_XDIE3,0,0}, // S_PLAY_XDIE2 - {SPR_PLAY,16,5,{A_Fall},S_PLAY_XDIE4,0,0}, // S_PLAY_XDIE3 - {SPR_PLAY,17,5,{NULL},S_PLAY_XDIE5,0,0}, // S_PLAY_XDIE4 - {SPR_PLAY,18,5,{NULL},S_PLAY_XDIE6,0,0}, // S_PLAY_XDIE5 - {SPR_PLAY,19,5,{NULL},S_PLAY_XDIE7,0,0}, // S_PLAY_XDIE6 - {SPR_PLAY,20,5,{NULL},S_PLAY_XDIE8,0,0}, // S_PLAY_XDIE7 - {SPR_PLAY,21,5,{NULL},S_PLAY_XDIE9,0,0}, // S_PLAY_XDIE8 - {SPR_PLAY,22,-1,{NULL},S_NULL,0,0}, // S_PLAY_XDIE9 - {SPR_POSS,0,10,{A_Look},S_POSS_STND2,0,0}, // S_POSS_STND - {SPR_POSS,1,10,{A_Look},S_POSS_STND,0,0}, // S_POSS_STND2 - {SPR_POSS,0,4,{A_Chase},S_POSS_RUN2,0,0}, // S_POSS_RUN1 - {SPR_POSS,0,4,{A_Chase},S_POSS_RUN3,0,0}, // S_POSS_RUN2 - {SPR_POSS,1,4,{A_Chase},S_POSS_RUN4,0,0}, // S_POSS_RUN3 - {SPR_POSS,1,4,{A_Chase},S_POSS_RUN5,0,0}, // S_POSS_RUN4 - {SPR_POSS,2,4,{A_Chase},S_POSS_RUN6,0,0}, // S_POSS_RUN5 - {SPR_POSS,2,4,{A_Chase},S_POSS_RUN7,0,0}, // S_POSS_RUN6 - {SPR_POSS,3,4,{A_Chase},S_POSS_RUN8,0,0}, // S_POSS_RUN7 - {SPR_POSS,3,4,{A_Chase},S_POSS_RUN1,0,0}, // S_POSS_RUN8 - {SPR_POSS,4,10,{A_FaceTarget},S_POSS_ATK2,0,0}, // S_POSS_ATK1 - {SPR_POSS,5,8,{A_PosAttack},S_POSS_ATK3,0,0}, // S_POSS_ATK2 - {SPR_POSS,4,8,{NULL},S_POSS_RUN1,0,0}, // S_POSS_ATK3 - {SPR_POSS,6,3,{NULL},S_POSS_PAIN2,0,0}, // S_POSS_PAIN - {SPR_POSS,6,3,{A_Pain},S_POSS_RUN1,0,0}, // S_POSS_PAIN2 - {SPR_POSS,7,5,{NULL},S_POSS_DIE2,0,0}, // S_POSS_DIE1 - {SPR_POSS,8,5,{A_Scream},S_POSS_DIE3,0,0}, // S_POSS_DIE2 - {SPR_POSS,9,5,{A_Fall},S_POSS_DIE4,0,0}, // S_POSS_DIE3 - {SPR_POSS,10,5,{NULL},S_POSS_DIE5,0,0}, // S_POSS_DIE4 - {SPR_POSS,11,-1,{NULL},S_NULL,0,0}, // S_POSS_DIE5 - {SPR_POSS,12,5,{NULL},S_POSS_XDIE2,0,0}, // S_POSS_XDIE1 - {SPR_POSS,13,5,{A_XScream},S_POSS_XDIE3,0,0}, // S_POSS_XDIE2 - {SPR_POSS,14,5,{A_Fall},S_POSS_XDIE4,0,0}, // S_POSS_XDIE3 - {SPR_POSS,15,5,{NULL},S_POSS_XDIE5,0,0}, // S_POSS_XDIE4 - {SPR_POSS,16,5,{NULL},S_POSS_XDIE6,0,0}, // S_POSS_XDIE5 - {SPR_POSS,17,5,{NULL},S_POSS_XDIE7,0,0}, // S_POSS_XDIE6 - {SPR_POSS,18,5,{NULL},S_POSS_XDIE8,0,0}, // S_POSS_XDIE7 - {SPR_POSS,19,5,{NULL},S_POSS_XDIE9,0,0}, // S_POSS_XDIE8 - {SPR_POSS,20,-1,{NULL},S_NULL,0,0}, // S_POSS_XDIE9 - {SPR_POSS,10,5,{NULL},S_POSS_RAISE2,0,0}, // S_POSS_RAISE1 - {SPR_POSS,9,5,{NULL},S_POSS_RAISE3,0,0}, // S_POSS_RAISE2 - {SPR_POSS,8,5,{NULL},S_POSS_RAISE4,0,0}, // S_POSS_RAISE3 - {SPR_POSS,7,5,{NULL},S_POSS_RUN1,0,0}, // S_POSS_RAISE4 - {SPR_SPOS,0,10,{A_Look},S_SPOS_STND2,0,0}, // S_SPOS_STND - {SPR_SPOS,1,10,{A_Look},S_SPOS_STND,0,0}, // S_SPOS_STND2 - {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN2,0,0}, // S_SPOS_RUN1 - {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN3,0,0}, // S_SPOS_RUN2 - {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN4,0,0}, // S_SPOS_RUN3 - {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN5,0,0}, // S_SPOS_RUN4 - {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN6,0,0}, // S_SPOS_RUN5 - {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN7,0,0}, // S_SPOS_RUN6 - {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN8,0,0}, // S_SPOS_RUN7 - {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN1,0,0}, // S_SPOS_RUN8 - {SPR_SPOS,4,10,{A_FaceTarget},S_SPOS_ATK2,0,0}, // S_SPOS_ATK1 - {SPR_SPOS,32773,10,{A_SPosAttack},S_SPOS_ATK3,0,0}, // S_SPOS_ATK2 - {SPR_SPOS,4,10,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_ATK3 - {SPR_SPOS,6,3,{NULL},S_SPOS_PAIN2,0,0}, // S_SPOS_PAIN - {SPR_SPOS,6,3,{A_Pain},S_SPOS_RUN1,0,0}, // S_SPOS_PAIN2 - {SPR_SPOS,7,5,{NULL},S_SPOS_DIE2,0,0}, // S_SPOS_DIE1 - {SPR_SPOS,8,5,{A_Scream},S_SPOS_DIE3,0,0}, // S_SPOS_DIE2 - {SPR_SPOS,9,5,{A_Fall},S_SPOS_DIE4,0,0}, // S_SPOS_DIE3 - {SPR_SPOS,10,5,{NULL},S_SPOS_DIE5,0,0}, // S_SPOS_DIE4 - {SPR_SPOS,11,-1,{NULL},S_NULL,0,0}, // S_SPOS_DIE5 - {SPR_SPOS,12,5,{NULL},S_SPOS_XDIE2,0,0}, // S_SPOS_XDIE1 - {SPR_SPOS,13,5,{A_XScream},S_SPOS_XDIE3,0,0}, // S_SPOS_XDIE2 - {SPR_SPOS,14,5,{A_Fall},S_SPOS_XDIE4,0,0}, // S_SPOS_XDIE3 - {SPR_SPOS,15,5,{NULL},S_SPOS_XDIE5,0,0}, // S_SPOS_XDIE4 - {SPR_SPOS,16,5,{NULL},S_SPOS_XDIE6,0,0}, // S_SPOS_XDIE5 - {SPR_SPOS,17,5,{NULL},S_SPOS_XDIE7,0,0}, // S_SPOS_XDIE6 - {SPR_SPOS,18,5,{NULL},S_SPOS_XDIE8,0,0}, // S_SPOS_XDIE7 - {SPR_SPOS,19,5,{NULL},S_SPOS_XDIE9,0,0}, // S_SPOS_XDIE8 - {SPR_SPOS,20,-1,{NULL},S_NULL,0,0}, // S_SPOS_XDIE9 - {SPR_SPOS,11,5,{NULL},S_SPOS_RAISE2,0,0}, // S_SPOS_RAISE1 - {SPR_SPOS,10,5,{NULL},S_SPOS_RAISE3,0,0}, // S_SPOS_RAISE2 - {SPR_SPOS,9,5,{NULL},S_SPOS_RAISE4,0,0}, // S_SPOS_RAISE3 - {SPR_SPOS,8,5,{NULL},S_SPOS_RAISE5,0,0}, // S_SPOS_RAISE4 - {SPR_SPOS,7,5,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_RAISE5 - {SPR_VILE,0,10,{A_Look},S_VILE_STND2,0,0}, // S_VILE_STND - {SPR_VILE,1,10,{A_Look},S_VILE_STND,0,0}, // S_VILE_STND2 - {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN2,0,0}, // S_VILE_RUN1 - {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN3,0,0}, // S_VILE_RUN2 - {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN4,0,0}, // S_VILE_RUN3 - {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN5,0,0}, // S_VILE_RUN4 - {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN6,0,0}, // S_VILE_RUN5 - {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN7,0,0}, // S_VILE_RUN6 - {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN8,0,0}, // S_VILE_RUN7 - {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN9,0,0}, // S_VILE_RUN8 - {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN10,0,0}, // S_VILE_RUN9 - {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN11,0,0}, // S_VILE_RUN10 - {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN12,0,0}, // S_VILE_RUN11 - {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN1,0,0}, // S_VILE_RUN12 - {SPR_VILE,32774,0,{A_VileStart},S_VILE_ATK2,0,0}, // S_VILE_ATK1 - {SPR_VILE,32774,10,{A_FaceTarget},S_VILE_ATK3,0,0}, // S_VILE_ATK2 - {SPR_VILE,32775,8,{A_VileTarget},S_VILE_ATK4,0,0}, // S_VILE_ATK3 - {SPR_VILE,32776,8,{A_FaceTarget},S_VILE_ATK5,0,0}, // S_VILE_ATK4 - {SPR_VILE,32777,8,{A_FaceTarget},S_VILE_ATK6,0,0}, // S_VILE_ATK5 - {SPR_VILE,32778,8,{A_FaceTarget},S_VILE_ATK7,0,0}, // S_VILE_ATK6 - {SPR_VILE,32779,8,{A_FaceTarget},S_VILE_ATK8,0,0}, // S_VILE_ATK7 - {SPR_VILE,32780,8,{A_FaceTarget},S_VILE_ATK9,0,0}, // S_VILE_ATK8 - {SPR_VILE,32781,8,{A_FaceTarget},S_VILE_ATK10,0,0}, // S_VILE_ATK9 - {SPR_VILE,32782,8,{A_VileAttack},S_VILE_ATK11,0,0}, // S_VILE_ATK10 - {SPR_VILE,32783,20,{NULL},S_VILE_RUN1,0,0}, // S_VILE_ATK11 - {SPR_VILE,32794,10,{NULL},S_VILE_HEAL2,0,0}, // S_VILE_HEAL1 - {SPR_VILE,32795,10,{NULL},S_VILE_HEAL3,0,0}, // S_VILE_HEAL2 - {SPR_VILE,32796,10,{NULL},S_VILE_RUN1,0,0}, // S_VILE_HEAL3 - {SPR_VILE,16,5,{NULL},S_VILE_PAIN2,0,0}, // S_VILE_PAIN - {SPR_VILE,16,5,{A_Pain},S_VILE_RUN1,0,0}, // S_VILE_PAIN2 - {SPR_VILE,16,7,{NULL},S_VILE_DIE2,0,0}, // S_VILE_DIE1 - {SPR_VILE,17,7,{A_Scream},S_VILE_DIE3,0,0}, // S_VILE_DIE2 - {SPR_VILE,18,7,{A_Fall},S_VILE_DIE4,0,0}, // S_VILE_DIE3 - {SPR_VILE,19,7,{NULL},S_VILE_DIE5,0,0}, // S_VILE_DIE4 - {SPR_VILE,20,7,{NULL},S_VILE_DIE6,0,0}, // S_VILE_DIE5 - {SPR_VILE,21,7,{NULL},S_VILE_DIE7,0,0}, // S_VILE_DIE6 - {SPR_VILE,22,7,{NULL},S_VILE_DIE8,0,0}, // S_VILE_DIE7 - {SPR_VILE,23,5,{NULL},S_VILE_DIE9,0,0}, // S_VILE_DIE8 - {SPR_VILE,24,5,{NULL},S_VILE_DIE10,0,0}, // S_VILE_DIE9 - {SPR_VILE,25,-1,{NULL},S_NULL,0,0}, // S_VILE_DIE10 - {SPR_FIRE,32768,2,{A_StartFire},S_FIRE2,0,0}, // S_FIRE1 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE3,0,0}, // S_FIRE2 - {SPR_FIRE,32768,2,{A_Fire},S_FIRE4,0,0}, // S_FIRE3 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE5,0,0}, // S_FIRE4 - {SPR_FIRE,32770,2,{A_FireCrackle},S_FIRE6,0,0}, // S_FIRE5 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE7,0,0}, // S_FIRE6 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE8,0,0}, // S_FIRE7 - {SPR_FIRE,32769,2,{A_Fire},S_FIRE9,0,0}, // S_FIRE8 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE10,0,0}, // S_FIRE9 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE11,0,0}, // S_FIRE10 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE12,0,0}, // S_FIRE11 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE13,0,0}, // S_FIRE12 - {SPR_FIRE,32770,2,{A_Fire},S_FIRE14,0,0}, // S_FIRE13 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE15,0,0}, // S_FIRE14 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE16,0,0}, // S_FIRE15 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE17,0,0}, // S_FIRE16 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE18,0,0}, // S_FIRE17 - {SPR_FIRE,32771,2,{A_Fire},S_FIRE19,0,0}, // S_FIRE18 - {SPR_FIRE,32772,2,{A_FireCrackle},S_FIRE20,0,0}, // S_FIRE19 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE21,0,0}, // S_FIRE20 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE22,0,0}, // S_FIRE21 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE23,0,0}, // S_FIRE22 - {SPR_FIRE,32772,2,{A_Fire},S_FIRE24,0,0}, // S_FIRE23 - {SPR_FIRE,32773,2,{A_Fire},S_FIRE25,0,0}, // S_FIRE24 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE26,0,0}, // S_FIRE25 - {SPR_FIRE,32775,2,{A_Fire},S_FIRE27,0,0}, // S_FIRE26 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE28,0,0}, // S_FIRE27 - {SPR_FIRE,32775,2,{A_Fire},S_FIRE29,0,0}, // S_FIRE28 - {SPR_FIRE,32774,2,{A_Fire},S_FIRE30,0,0}, // S_FIRE29 - {SPR_FIRE,32775,2,{A_Fire},S_NULL,0,0}, // S_FIRE30 - {SPR_PUFF,1,4,{NULL},S_SMOKE2,0,0}, // S_SMOKE1 - {SPR_PUFF,2,4,{NULL},S_SMOKE3,0,0}, // S_SMOKE2 - {SPR_PUFF,1,4,{NULL},S_SMOKE4,0,0}, // S_SMOKE3 - {SPR_PUFF,2,4,{NULL},S_SMOKE5,0,0}, // S_SMOKE4 - {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_SMOKE5 - {SPR_FATB,32768,2,{A_Tracer},S_TRACER2,0,0}, // S_TRACER - {SPR_FATB,32769,2,{A_Tracer},S_TRACER,0,0}, // S_TRACER2 - {SPR_FBXP,32768,8,{NULL},S_TRACEEXP2,0,0}, // S_TRACEEXP1 - {SPR_FBXP,32769,6,{NULL},S_TRACEEXP3,0,0}, // S_TRACEEXP2 - {SPR_FBXP,32770,4,{NULL},S_NULL,0,0}, // S_TRACEEXP3 - {SPR_SKEL,0,10,{A_Look},S_SKEL_STND2,0,0}, // S_SKEL_STND - {SPR_SKEL,1,10,{A_Look},S_SKEL_STND,0,0}, // S_SKEL_STND2 - {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN2,0,0}, // S_SKEL_RUN1 - {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN3,0,0}, // S_SKEL_RUN2 - {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN4,0,0}, // S_SKEL_RUN3 - {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN5,0,0}, // S_SKEL_RUN4 - {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN6,0,0}, // S_SKEL_RUN5 - {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN7,0,0}, // S_SKEL_RUN6 - {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN8,0,0}, // S_SKEL_RUN7 - {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN9,0,0}, // S_SKEL_RUN8 - {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN10,0,0}, // S_SKEL_RUN9 - {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN11,0,0}, // S_SKEL_RUN10 - {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN12,0,0}, // S_SKEL_RUN11 - {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN1,0,0}, // S_SKEL_RUN12 - {SPR_SKEL,6,0,{A_FaceTarget},S_SKEL_FIST2,0,0}, // S_SKEL_FIST1 - {SPR_SKEL,6,6,{A_SkelWhoosh},S_SKEL_FIST3,0,0}, // S_SKEL_FIST2 - {SPR_SKEL,7,6,{A_FaceTarget},S_SKEL_FIST4,0,0}, // S_SKEL_FIST3 - {SPR_SKEL,8,6,{A_SkelFist},S_SKEL_RUN1,0,0}, // S_SKEL_FIST4 - {SPR_SKEL,32777,0,{A_FaceTarget},S_SKEL_MISS2,0,0}, // S_SKEL_MISS1 - {SPR_SKEL,32777,10,{A_FaceTarget},S_SKEL_MISS3,0,0}, // S_SKEL_MISS2 - {SPR_SKEL,10,10,{A_SkelMissile},S_SKEL_MISS4,0,0}, // S_SKEL_MISS3 - {SPR_SKEL,10,10,{A_FaceTarget},S_SKEL_RUN1,0,0}, // S_SKEL_MISS4 - {SPR_SKEL,11,5,{NULL},S_SKEL_PAIN2,0,0}, // S_SKEL_PAIN - {SPR_SKEL,11,5,{A_Pain},S_SKEL_RUN1,0,0}, // S_SKEL_PAIN2 - {SPR_SKEL,11,7,{NULL},S_SKEL_DIE2,0,0}, // S_SKEL_DIE1 - {SPR_SKEL,12,7,{NULL},S_SKEL_DIE3,0,0}, // S_SKEL_DIE2 - {SPR_SKEL,13,7,{A_Scream},S_SKEL_DIE4,0,0}, // S_SKEL_DIE3 - {SPR_SKEL,14,7,{A_Fall},S_SKEL_DIE5,0,0}, // S_SKEL_DIE4 - {SPR_SKEL,15,7,{NULL},S_SKEL_DIE6,0,0}, // S_SKEL_DIE5 - {SPR_SKEL,16,-1,{NULL},S_NULL,0,0}, // S_SKEL_DIE6 - {SPR_SKEL,16,5,{NULL},S_SKEL_RAISE2,0,0}, // S_SKEL_RAISE1 - {SPR_SKEL,15,5,{NULL},S_SKEL_RAISE3,0,0}, // S_SKEL_RAISE2 - {SPR_SKEL,14,5,{NULL},S_SKEL_RAISE4,0,0}, // S_SKEL_RAISE3 - {SPR_SKEL,13,5,{NULL},S_SKEL_RAISE5,0,0}, // S_SKEL_RAISE4 - {SPR_SKEL,12,5,{NULL},S_SKEL_RAISE6,0,0}, // S_SKEL_RAISE5 - {SPR_SKEL,11,5,{NULL},S_SKEL_RUN1,0,0}, // S_SKEL_RAISE6 - {SPR_MANF,32768,4,{NULL},S_FATSHOT2,0,0}, // S_FATSHOT1 - {SPR_MANF,32769,4,{NULL},S_FATSHOT1,0,0}, // S_FATSHOT2 - {SPR_MISL,32769,8,{NULL},S_FATSHOTX2,0,0}, // S_FATSHOTX1 - {SPR_MISL,32770,6,{NULL},S_FATSHOTX3,0,0}, // S_FATSHOTX2 - {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_FATSHOTX3 - {SPR_FATT,0,15,{A_Look},S_FATT_STND2,0,0}, // S_FATT_STND - {SPR_FATT,1,15,{A_Look},S_FATT_STND,0,0}, // S_FATT_STND2 - {SPR_FATT,0,4,{A_Chase},S_FATT_RUN2,0,0}, // S_FATT_RUN1 - {SPR_FATT,0,4,{A_Chase},S_FATT_RUN3,0,0}, // S_FATT_RUN2 - {SPR_FATT,1,4,{A_Chase},S_FATT_RUN4,0,0}, // S_FATT_RUN3 - {SPR_FATT,1,4,{A_Chase},S_FATT_RUN5,0,0}, // S_FATT_RUN4 - {SPR_FATT,2,4,{A_Chase},S_FATT_RUN6,0,0}, // S_FATT_RUN5 - {SPR_FATT,2,4,{A_Chase},S_FATT_RUN7,0,0}, // S_FATT_RUN6 - {SPR_FATT,3,4,{A_Chase},S_FATT_RUN8,0,0}, // S_FATT_RUN7 - {SPR_FATT,3,4,{A_Chase},S_FATT_RUN9,0,0}, // S_FATT_RUN8 - {SPR_FATT,4,4,{A_Chase},S_FATT_RUN10,0,0}, // S_FATT_RUN9 - {SPR_FATT,4,4,{A_Chase},S_FATT_RUN11,0,0}, // S_FATT_RUN10 - {SPR_FATT,5,4,{A_Chase},S_FATT_RUN12,0,0}, // S_FATT_RUN11 - {SPR_FATT,5,4,{A_Chase},S_FATT_RUN1,0,0}, // S_FATT_RUN12 - {SPR_FATT,6,20,{A_FatRaise},S_FATT_ATK2,0,0}, // S_FATT_ATK1 - {SPR_FATT,32775,10,{A_FatAttack1},S_FATT_ATK3,0,0}, // S_FATT_ATK2 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK4,0,0}, // S_FATT_ATK3 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK5,0,0}, // S_FATT_ATK4 - {SPR_FATT,32775,10,{A_FatAttack2},S_FATT_ATK6,0,0}, // S_FATT_ATK5 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK7,0,0}, // S_FATT_ATK6 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK8,0,0}, // S_FATT_ATK7 - {SPR_FATT,32775,10,{A_FatAttack3},S_FATT_ATK9,0,0}, // S_FATT_ATK8 - {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK10,0,0}, // S_FATT_ATK9 - {SPR_FATT,6,5,{A_FaceTarget},S_FATT_RUN1,0,0}, // S_FATT_ATK10 - {SPR_FATT,9,3,{NULL},S_FATT_PAIN2,0,0}, // S_FATT_PAIN - {SPR_FATT,9,3,{A_Pain},S_FATT_RUN1,0,0}, // S_FATT_PAIN2 - {SPR_FATT,10,6,{NULL},S_FATT_DIE2,0,0}, // S_FATT_DIE1 - {SPR_FATT,11,6,{A_Scream},S_FATT_DIE3,0,0}, // S_FATT_DIE2 - {SPR_FATT,12,6,{A_Fall},S_FATT_DIE4,0,0}, // S_FATT_DIE3 - {SPR_FATT,13,6,{NULL},S_FATT_DIE5,0,0}, // S_FATT_DIE4 - {SPR_FATT,14,6,{NULL},S_FATT_DIE6,0,0}, // S_FATT_DIE5 - {SPR_FATT,15,6,{NULL},S_FATT_DIE7,0,0}, // S_FATT_DIE6 - {SPR_FATT,16,6,{NULL},S_FATT_DIE8,0,0}, // S_FATT_DIE7 - {SPR_FATT,17,6,{NULL},S_FATT_DIE9,0,0}, // S_FATT_DIE8 - {SPR_FATT,18,6,{NULL},S_FATT_DIE10,0,0}, // S_FATT_DIE9 - {SPR_FATT,19,-1,{A_BossDeath},S_NULL,0,0}, // S_FATT_DIE10 - {SPR_FATT,17,5,{NULL},S_FATT_RAISE2,0,0}, // S_FATT_RAISE1 - {SPR_FATT,16,5,{NULL},S_FATT_RAISE3,0,0}, // S_FATT_RAISE2 - {SPR_FATT,15,5,{NULL},S_FATT_RAISE4,0,0}, // S_FATT_RAISE3 - {SPR_FATT,14,5,{NULL},S_FATT_RAISE5,0,0}, // S_FATT_RAISE4 - {SPR_FATT,13,5,{NULL},S_FATT_RAISE6,0,0}, // S_FATT_RAISE5 - {SPR_FATT,12,5,{NULL},S_FATT_RAISE7,0,0}, // S_FATT_RAISE6 - {SPR_FATT,11,5,{NULL},S_FATT_RAISE8,0,0}, // S_FATT_RAISE7 - {SPR_FATT,10,5,{NULL},S_FATT_RUN1,0,0}, // S_FATT_RAISE8 - {SPR_CPOS,0,10,{A_Look},S_CPOS_STND2,0,0}, // S_CPOS_STND - {SPR_CPOS,1,10,{A_Look},S_CPOS_STND,0,0}, // S_CPOS_STND2 - {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN2,0,0}, // S_CPOS_RUN1 - {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN3,0,0}, // S_CPOS_RUN2 - {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN4,0,0}, // S_CPOS_RUN3 - {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN5,0,0}, // S_CPOS_RUN4 - {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN6,0,0}, // S_CPOS_RUN5 - {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN7,0,0}, // S_CPOS_RUN6 - {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN8,0,0}, // S_CPOS_RUN7 - {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN1,0,0}, // S_CPOS_RUN8 - {SPR_CPOS,4,10,{A_FaceTarget},S_CPOS_ATK2,0,0}, // S_CPOS_ATK1 - {SPR_CPOS,32773,4,{A_CPosAttack},S_CPOS_ATK3,0,0}, // S_CPOS_ATK2 - {SPR_CPOS,32772,4,{A_CPosAttack},S_CPOS_ATK4,0,0}, // S_CPOS_ATK3 - {SPR_CPOS,5,1,{A_CPosRefire},S_CPOS_ATK2,0,0}, // S_CPOS_ATK4 - {SPR_CPOS,6,3,{NULL},S_CPOS_PAIN2,0,0}, // S_CPOS_PAIN - {SPR_CPOS,6,3,{A_Pain},S_CPOS_RUN1,0,0}, // S_CPOS_PAIN2 - {SPR_CPOS,7,5,{NULL},S_CPOS_DIE2,0,0}, // S_CPOS_DIE1 - {SPR_CPOS,8,5,{A_Scream},S_CPOS_DIE3,0,0}, // S_CPOS_DIE2 - {SPR_CPOS,9,5,{A_Fall},S_CPOS_DIE4,0,0}, // S_CPOS_DIE3 - {SPR_CPOS,10,5,{NULL},S_CPOS_DIE5,0,0}, // S_CPOS_DIE4 - {SPR_CPOS,11,5,{NULL},S_CPOS_DIE6,0,0}, // S_CPOS_DIE5 - {SPR_CPOS,12,5,{NULL},S_CPOS_DIE7,0,0}, // S_CPOS_DIE6 - {SPR_CPOS,13,-1,{NULL},S_NULL,0,0}, // S_CPOS_DIE7 - {SPR_CPOS,14,5,{NULL},S_CPOS_XDIE2,0,0}, // S_CPOS_XDIE1 - {SPR_CPOS,15,5,{A_XScream},S_CPOS_XDIE3,0,0}, // S_CPOS_XDIE2 - {SPR_CPOS,16,5,{A_Fall},S_CPOS_XDIE4,0,0}, // S_CPOS_XDIE3 - {SPR_CPOS,17,5,{NULL},S_CPOS_XDIE5,0,0}, // S_CPOS_XDIE4 - {SPR_CPOS,18,5,{NULL},S_CPOS_XDIE6,0,0}, // S_CPOS_XDIE5 - {SPR_CPOS,19,-1,{NULL},S_NULL,0,0}, // S_CPOS_XDIE6 - {SPR_CPOS,13,5,{NULL},S_CPOS_RAISE2,0,0}, // S_CPOS_RAISE1 - {SPR_CPOS,12,5,{NULL},S_CPOS_RAISE3,0,0}, // S_CPOS_RAISE2 - {SPR_CPOS,11,5,{NULL},S_CPOS_RAISE4,0,0}, // S_CPOS_RAISE3 - {SPR_CPOS,10,5,{NULL},S_CPOS_RAISE5,0,0}, // S_CPOS_RAISE4 - {SPR_CPOS,9,5,{NULL},S_CPOS_RAISE6,0,0}, // S_CPOS_RAISE5 - {SPR_CPOS,8,5,{NULL},S_CPOS_RAISE7,0,0}, // S_CPOS_RAISE6 - {SPR_CPOS,7,5,{NULL},S_CPOS_RUN1,0,0}, // S_CPOS_RAISE7 - {SPR_TROO,0,10,{A_Look},S_TROO_STND2,0,0}, // S_TROO_STND - {SPR_TROO,1,10,{A_Look},S_TROO_STND,0,0}, // S_TROO_STND2 - {SPR_TROO,0,3,{A_Chase},S_TROO_RUN2,0,0}, // S_TROO_RUN1 - {SPR_TROO,0,3,{A_Chase},S_TROO_RUN3,0,0}, // S_TROO_RUN2 - {SPR_TROO,1,3,{A_Chase},S_TROO_RUN4,0,0}, // S_TROO_RUN3 - {SPR_TROO,1,3,{A_Chase},S_TROO_RUN5,0,0}, // S_TROO_RUN4 - {SPR_TROO,2,3,{A_Chase},S_TROO_RUN6,0,0}, // S_TROO_RUN5 - {SPR_TROO,2,3,{A_Chase},S_TROO_RUN7,0,0}, // S_TROO_RUN6 - {SPR_TROO,3,3,{A_Chase},S_TROO_RUN8,0,0}, // S_TROO_RUN7 - {SPR_TROO,3,3,{A_Chase},S_TROO_RUN1,0,0}, // S_TROO_RUN8 - {SPR_TROO,4,8,{A_FaceTarget},S_TROO_ATK2,0,0}, // S_TROO_ATK1 - {SPR_TROO,5,8,{A_FaceTarget},S_TROO_ATK3,0,0}, // S_TROO_ATK2 - {SPR_TROO,6,6,{A_TroopAttack},S_TROO_RUN1,0,0}, // S_TROO_ATK3 - {SPR_TROO,7,2,{NULL},S_TROO_PAIN2,0,0}, // S_TROO_PAIN - {SPR_TROO,7,2,{A_Pain},S_TROO_RUN1,0,0}, // S_TROO_PAIN2 - {SPR_TROO,8,8,{NULL},S_TROO_DIE2,0,0}, // S_TROO_DIE1 - {SPR_TROO,9,8,{A_Scream},S_TROO_DIE3,0,0}, // S_TROO_DIE2 - {SPR_TROO,10,6,{NULL},S_TROO_DIE4,0,0}, // S_TROO_DIE3 - {SPR_TROO,11,6,{A_Fall},S_TROO_DIE5,0,0}, // S_TROO_DIE4 - {SPR_TROO,12,-1,{NULL},S_NULL,0,0}, // S_TROO_DIE5 - {SPR_TROO,13,5,{NULL},S_TROO_XDIE2,0,0}, // S_TROO_XDIE1 - {SPR_TROO,14,5,{A_XScream},S_TROO_XDIE3,0,0}, // S_TROO_XDIE2 - {SPR_TROO,15,5,{NULL},S_TROO_XDIE4,0,0}, // S_TROO_XDIE3 - {SPR_TROO,16,5,{A_Fall},S_TROO_XDIE5,0,0}, // S_TROO_XDIE4 - {SPR_TROO,17,5,{NULL},S_TROO_XDIE6,0,0}, // S_TROO_XDIE5 - {SPR_TROO,18,5,{NULL},S_TROO_XDIE7,0,0}, // S_TROO_XDIE6 - {SPR_TROO,19,5,{NULL},S_TROO_XDIE8,0,0}, // S_TROO_XDIE7 - {SPR_TROO,20,-1,{NULL},S_NULL,0,0}, // S_TROO_XDIE8 - {SPR_TROO,12,8,{NULL},S_TROO_RAISE2,0,0}, // S_TROO_RAISE1 - {SPR_TROO,11,8,{NULL},S_TROO_RAISE3,0,0}, // S_TROO_RAISE2 - {SPR_TROO,10,6,{NULL},S_TROO_RAISE4,0,0}, // S_TROO_RAISE3 - {SPR_TROO,9,6,{NULL},S_TROO_RAISE5,0,0}, // S_TROO_RAISE4 - {SPR_TROO,8,6,{NULL},S_TROO_RUN1,0,0}, // S_TROO_RAISE5 - {SPR_SARG,0,10,{A_Look},S_SARG_STND2,0,0}, // S_SARG_STND - {SPR_SARG,1,10,{A_Look},S_SARG_STND,0,0}, // S_SARG_STND2 - {SPR_SARG,0,2,{A_Chase},S_SARG_RUN2,0,0}, // S_SARG_RUN1 - {SPR_SARG,0,2,{A_Chase},S_SARG_RUN3,0,0}, // S_SARG_RUN2 - {SPR_SARG,1,2,{A_Chase},S_SARG_RUN4,0,0}, // S_SARG_RUN3 - {SPR_SARG,1,2,{A_Chase},S_SARG_RUN5,0,0}, // S_SARG_RUN4 - {SPR_SARG,2,2,{A_Chase},S_SARG_RUN6,0,0}, // S_SARG_RUN5 - {SPR_SARG,2,2,{A_Chase},S_SARG_RUN7,0,0}, // S_SARG_RUN6 - {SPR_SARG,3,2,{A_Chase},S_SARG_RUN8,0,0}, // S_SARG_RUN7 - {SPR_SARG,3,2,{A_Chase},S_SARG_RUN1,0,0}, // S_SARG_RUN8 - {SPR_SARG,4,8,{A_FaceTarget},S_SARG_ATK2,0,0}, // S_SARG_ATK1 - {SPR_SARG,5,8,{A_FaceTarget},S_SARG_ATK3,0,0}, // S_SARG_ATK2 - {SPR_SARG,6,8,{A_SargAttack},S_SARG_RUN1,0,0}, // S_SARG_ATK3 - {SPR_SARG,7,2,{NULL},S_SARG_PAIN2,0,0}, // S_SARG_PAIN - {SPR_SARG,7,2,{A_Pain},S_SARG_RUN1,0,0}, // S_SARG_PAIN2 - {SPR_SARG,8,8,{NULL},S_SARG_DIE2,0,0}, // S_SARG_DIE1 - {SPR_SARG,9,8,{A_Scream},S_SARG_DIE3,0,0}, // S_SARG_DIE2 - {SPR_SARG,10,4,{NULL},S_SARG_DIE4,0,0}, // S_SARG_DIE3 - {SPR_SARG,11,4,{A_Fall},S_SARG_DIE5,0,0}, // S_SARG_DIE4 - {SPR_SARG,12,4,{NULL},S_SARG_DIE6,0,0}, // S_SARG_DIE5 - {SPR_SARG,13,-1,{NULL},S_NULL,0,0}, // S_SARG_DIE6 - {SPR_SARG,13,5,{NULL},S_SARG_RAISE2,0,0}, // S_SARG_RAISE1 - {SPR_SARG,12,5,{NULL},S_SARG_RAISE3,0,0}, // S_SARG_RAISE2 - {SPR_SARG,11,5,{NULL},S_SARG_RAISE4,0,0}, // S_SARG_RAISE3 - {SPR_SARG,10,5,{NULL},S_SARG_RAISE5,0,0}, // S_SARG_RAISE4 - {SPR_SARG,9,5,{NULL},S_SARG_RAISE6,0,0}, // S_SARG_RAISE5 - {SPR_SARG,8,5,{NULL},S_SARG_RUN1,0,0}, // S_SARG_RAISE6 - {SPR_HEAD,0,10,{A_Look},S_HEAD_STND,0,0}, // S_HEAD_STND - {SPR_HEAD,0,3,{A_Chase},S_HEAD_RUN1,0,0}, // S_HEAD_RUN1 - {SPR_HEAD,1,5,{A_FaceTarget},S_HEAD_ATK2,0,0}, // S_HEAD_ATK1 - {SPR_HEAD,2,5,{A_FaceTarget},S_HEAD_ATK3,0,0}, // S_HEAD_ATK2 - {SPR_HEAD,32771,5,{A_HeadAttack},S_HEAD_RUN1,0,0}, // S_HEAD_ATK3 - {SPR_HEAD,4,3,{NULL},S_HEAD_PAIN2,0,0}, // S_HEAD_PAIN - {SPR_HEAD,4,3,{A_Pain},S_HEAD_PAIN3,0,0}, // S_HEAD_PAIN2 - {SPR_HEAD,5,6,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_PAIN3 - {SPR_HEAD,6,8,{NULL},S_HEAD_DIE2,0,0}, // S_HEAD_DIE1 - {SPR_HEAD,7,8,{A_Scream},S_HEAD_DIE3,0,0}, // S_HEAD_DIE2 - {SPR_HEAD,8,8,{NULL},S_HEAD_DIE4,0,0}, // S_HEAD_DIE3 - {SPR_HEAD,9,8,{NULL},S_HEAD_DIE5,0,0}, // S_HEAD_DIE4 - {SPR_HEAD,10,8,{A_Fall},S_HEAD_DIE6,0,0}, // S_HEAD_DIE5 - {SPR_HEAD,11,-1,{NULL},S_NULL,0,0}, // S_HEAD_DIE6 - {SPR_HEAD,11,8,{NULL},S_HEAD_RAISE2,0,0}, // S_HEAD_RAISE1 - {SPR_HEAD,10,8,{NULL},S_HEAD_RAISE3,0,0}, // S_HEAD_RAISE2 - {SPR_HEAD,9,8,{NULL},S_HEAD_RAISE4,0,0}, // S_HEAD_RAISE3 - {SPR_HEAD,8,8,{NULL},S_HEAD_RAISE5,0,0}, // S_HEAD_RAISE4 - {SPR_HEAD,7,8,{NULL},S_HEAD_RAISE6,0,0}, // S_HEAD_RAISE5 - {SPR_HEAD,6,8,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_RAISE6 - {SPR_BAL7,32768,4,{NULL},S_BRBALL2,0,0}, // S_BRBALL1 - {SPR_BAL7,32769,4,{NULL},S_BRBALL1,0,0}, // S_BRBALL2 - {SPR_BAL7,32770,6,{NULL},S_BRBALLX2,0,0}, // S_BRBALLX1 - {SPR_BAL7,32771,6,{NULL},S_BRBALLX3,0,0}, // S_BRBALLX2 - {SPR_BAL7,32772,6,{NULL},S_NULL,0,0}, // S_BRBALLX3 - {SPR_BOSS,0,10,{A_Look},S_BOSS_STND2,0,0}, // S_BOSS_STND - {SPR_BOSS,1,10,{A_Look},S_BOSS_STND,0,0}, // S_BOSS_STND2 - {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN2,0,0}, // S_BOSS_RUN1 - {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN3,0,0}, // S_BOSS_RUN2 - {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN4,0,0}, // S_BOSS_RUN3 - {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN5,0,0}, // S_BOSS_RUN4 - {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN6,0,0}, // S_BOSS_RUN5 - {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN7,0,0}, // S_BOSS_RUN6 - {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN8,0,0}, // S_BOSS_RUN7 - {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN1,0,0}, // S_BOSS_RUN8 - {SPR_BOSS,4,8,{A_FaceTarget},S_BOSS_ATK2,0,0}, // S_BOSS_ATK1 - {SPR_BOSS,5,8,{A_FaceTarget},S_BOSS_ATK3,0,0}, // S_BOSS_ATK2 - {SPR_BOSS,6,8,{A_BruisAttack},S_BOSS_RUN1,0,0}, // S_BOSS_ATK3 - {SPR_BOSS,7,2,{NULL},S_BOSS_PAIN2,0,0}, // S_BOSS_PAIN - {SPR_BOSS,7,2,{A_Pain},S_BOSS_RUN1,0,0}, // S_BOSS_PAIN2 - {SPR_BOSS,8,8,{NULL},S_BOSS_DIE2,0,0}, // S_BOSS_DIE1 - {SPR_BOSS,9,8,{A_Scream},S_BOSS_DIE3,0,0}, // S_BOSS_DIE2 - {SPR_BOSS,10,8,{NULL},S_BOSS_DIE4,0,0}, // S_BOSS_DIE3 - {SPR_BOSS,11,8,{A_Fall},S_BOSS_DIE5,0,0}, // S_BOSS_DIE4 - {SPR_BOSS,12,8,{NULL},S_BOSS_DIE6,0,0}, // S_BOSS_DIE5 - {SPR_BOSS,13,8,{NULL},S_BOSS_DIE7,0,0}, // S_BOSS_DIE6 - {SPR_BOSS,14,-1,{A_BossDeath},S_NULL,0,0}, // S_BOSS_DIE7 - {SPR_BOSS,14,8,{NULL},S_BOSS_RAISE2,0,0}, // S_BOSS_RAISE1 - {SPR_BOSS,13,8,{NULL},S_BOSS_RAISE3,0,0}, // S_BOSS_RAISE2 - {SPR_BOSS,12,8,{NULL},S_BOSS_RAISE4,0,0}, // S_BOSS_RAISE3 - {SPR_BOSS,11,8,{NULL},S_BOSS_RAISE5,0,0}, // S_BOSS_RAISE4 - {SPR_BOSS,10,8,{NULL},S_BOSS_RAISE6,0,0}, // S_BOSS_RAISE5 - {SPR_BOSS,9,8,{NULL},S_BOSS_RAISE7,0,0}, // S_BOSS_RAISE6 - {SPR_BOSS,8,8,{NULL},S_BOSS_RUN1,0,0}, // S_BOSS_RAISE7 - {SPR_BOS2,0,10,{A_Look},S_BOS2_STND2,0,0}, // S_BOS2_STND - {SPR_BOS2,1,10,{A_Look},S_BOS2_STND,0,0}, // S_BOS2_STND2 - {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN2,0,0}, // S_BOS2_RUN1 - {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN3,0,0}, // S_BOS2_RUN2 - {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN4,0,0}, // S_BOS2_RUN3 - {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN5,0,0}, // S_BOS2_RUN4 - {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN6,0,0}, // S_BOS2_RUN5 - {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN7,0,0}, // S_BOS2_RUN6 - {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN8,0,0}, // S_BOS2_RUN7 - {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN1,0,0}, // S_BOS2_RUN8 - {SPR_BOS2,4,8,{A_FaceTarget},S_BOS2_ATK2,0,0}, // S_BOS2_ATK1 - {SPR_BOS2,5,8,{A_FaceTarget},S_BOS2_ATK3,0,0}, // S_BOS2_ATK2 - {SPR_BOS2,6,8,{A_BruisAttack},S_BOS2_RUN1,0,0}, // S_BOS2_ATK3 - {SPR_BOS2,7,2,{NULL},S_BOS2_PAIN2,0,0}, // S_BOS2_PAIN - {SPR_BOS2,7,2,{A_Pain},S_BOS2_RUN1,0,0}, // S_BOS2_PAIN2 - {SPR_BOS2,8,8,{NULL},S_BOS2_DIE2,0,0}, // S_BOS2_DIE1 - {SPR_BOS2,9,8,{A_Scream},S_BOS2_DIE3,0,0}, // S_BOS2_DIE2 - {SPR_BOS2,10,8,{NULL},S_BOS2_DIE4,0,0}, // S_BOS2_DIE3 - {SPR_BOS2,11,8,{A_Fall},S_BOS2_DIE5,0,0}, // S_BOS2_DIE4 - {SPR_BOS2,12,8,{NULL},S_BOS2_DIE6,0,0}, // S_BOS2_DIE5 - {SPR_BOS2,13,8,{NULL},S_BOS2_DIE7,0,0}, // S_BOS2_DIE6 - {SPR_BOS2,14,-1,{NULL},S_NULL,0,0}, // S_BOS2_DIE7 - {SPR_BOS2,14,8,{NULL},S_BOS2_RAISE2,0,0}, // S_BOS2_RAISE1 - {SPR_BOS2,13,8,{NULL},S_BOS2_RAISE3,0,0}, // S_BOS2_RAISE2 - {SPR_BOS2,12,8,{NULL},S_BOS2_RAISE4,0,0}, // S_BOS2_RAISE3 - {SPR_BOS2,11,8,{NULL},S_BOS2_RAISE5,0,0}, // S_BOS2_RAISE4 - {SPR_BOS2,10,8,{NULL},S_BOS2_RAISE6,0,0}, // S_BOS2_RAISE5 - {SPR_BOS2,9,8,{NULL},S_BOS2_RAISE7,0,0}, // S_BOS2_RAISE6 - {SPR_BOS2,8,8,{NULL},S_BOS2_RUN1,0,0}, // S_BOS2_RAISE7 - {SPR_SKUL,32768,10,{A_Look},S_SKULL_STND2,0,0}, // S_SKULL_STND - {SPR_SKUL,32769,10,{A_Look},S_SKULL_STND,0,0}, // S_SKULL_STND2 - {SPR_SKUL,32768,6,{A_Chase},S_SKULL_RUN2,0,0}, // S_SKULL_RUN1 - {SPR_SKUL,32769,6,{A_Chase},S_SKULL_RUN1,0,0}, // S_SKULL_RUN2 - {SPR_SKUL,32770,10,{A_FaceTarget},S_SKULL_ATK2,0,0}, // S_SKULL_ATK1 - {SPR_SKUL,32771,4,{A_SkullAttack},S_SKULL_ATK3,0,0}, // S_SKULL_ATK2 - {SPR_SKUL,32770,4,{NULL},S_SKULL_ATK4,0,0}, // S_SKULL_ATK3 - {SPR_SKUL,32771,4,{NULL},S_SKULL_ATK3,0,0}, // S_SKULL_ATK4 - {SPR_SKUL,32772,3,{NULL},S_SKULL_PAIN2,0,0}, // S_SKULL_PAIN - {SPR_SKUL,32772,3,{A_Pain},S_SKULL_RUN1,0,0}, // S_SKULL_PAIN2 - {SPR_SKUL,32773,6,{NULL},S_SKULL_DIE2,0,0}, // S_SKULL_DIE1 - {SPR_SKUL,32774,6,{A_Scream},S_SKULL_DIE3,0,0}, // S_SKULL_DIE2 - {SPR_SKUL,32775,6,{NULL},S_SKULL_DIE4,0,0}, // S_SKULL_DIE3 - {SPR_SKUL,32776,6,{A_Fall},S_SKULL_DIE5,0,0}, // S_SKULL_DIE4 - {SPR_SKUL,9,6,{NULL},S_SKULL_DIE6,0,0}, // S_SKULL_DIE5 - {SPR_SKUL,10,6,{NULL},S_NULL,0,0}, // S_SKULL_DIE6 - {SPR_SPID,0,10,{A_Look},S_SPID_STND2,0,0}, // S_SPID_STND - {SPR_SPID,1,10,{A_Look},S_SPID_STND,0,0}, // S_SPID_STND2 - {SPR_SPID,0,3,{A_Metal},S_SPID_RUN2,0,0}, // S_SPID_RUN1 - {SPR_SPID,0,3,{A_Chase},S_SPID_RUN3,0,0}, // S_SPID_RUN2 - {SPR_SPID,1,3,{A_Chase},S_SPID_RUN4,0,0}, // S_SPID_RUN3 - {SPR_SPID,1,3,{A_Chase},S_SPID_RUN5,0,0}, // S_SPID_RUN4 - {SPR_SPID,2,3,{A_Metal},S_SPID_RUN6,0,0}, // S_SPID_RUN5 - {SPR_SPID,2,3,{A_Chase},S_SPID_RUN7,0,0}, // S_SPID_RUN6 - {SPR_SPID,3,3,{A_Chase},S_SPID_RUN8,0,0}, // S_SPID_RUN7 - {SPR_SPID,3,3,{A_Chase},S_SPID_RUN9,0,0}, // S_SPID_RUN8 - {SPR_SPID,4,3,{A_Metal},S_SPID_RUN10,0,0}, // S_SPID_RUN9 - {SPR_SPID,4,3,{A_Chase},S_SPID_RUN11,0,0}, // S_SPID_RUN10 - {SPR_SPID,5,3,{A_Chase},S_SPID_RUN12,0,0}, // S_SPID_RUN11 - {SPR_SPID,5,3,{A_Chase},S_SPID_RUN1,0,0}, // S_SPID_RUN12 - {SPR_SPID,32768,20,{A_FaceTarget},S_SPID_ATK2,0,0}, // S_SPID_ATK1 - {SPR_SPID,32774,4,{A_SPosAttack},S_SPID_ATK3,0,0}, // S_SPID_ATK2 - {SPR_SPID,32775,4,{A_SPosAttack},S_SPID_ATK4,0,0}, // S_SPID_ATK3 - {SPR_SPID,32775,1,{A_SpidRefire},S_SPID_ATK2,0,0}, // S_SPID_ATK4 - {SPR_SPID,8,3,{NULL},S_SPID_PAIN2,0,0}, // S_SPID_PAIN - {SPR_SPID,8,3,{A_Pain},S_SPID_RUN1,0,0}, // S_SPID_PAIN2 - {SPR_SPID,9,20,{A_Scream},S_SPID_DIE2,0,0}, // S_SPID_DIE1 - {SPR_SPID,10,10,{A_Fall},S_SPID_DIE3,0,0}, // S_SPID_DIE2 - {SPR_SPID,11,10,{NULL},S_SPID_DIE4,0,0}, // S_SPID_DIE3 - {SPR_SPID,12,10,{NULL},S_SPID_DIE5,0,0}, // S_SPID_DIE4 - {SPR_SPID,13,10,{NULL},S_SPID_DIE6,0,0}, // S_SPID_DIE5 - {SPR_SPID,14,10,{NULL},S_SPID_DIE7,0,0}, // S_SPID_DIE6 - {SPR_SPID,15,10,{NULL},S_SPID_DIE8,0,0}, // S_SPID_DIE7 - {SPR_SPID,16,10,{NULL},S_SPID_DIE9,0,0}, // S_SPID_DIE8 - {SPR_SPID,17,10,{NULL},S_SPID_DIE10,0,0}, // S_SPID_DIE9 - {SPR_SPID,18,30,{NULL},S_SPID_DIE11,0,0}, // S_SPID_DIE10 - {SPR_SPID,18,-1,{A_BossDeath},S_NULL,0,0}, // S_SPID_DIE11 - {SPR_BSPI,0,10,{A_Look},S_BSPI_STND2,0,0}, // S_BSPI_STND - {SPR_BSPI,1,10,{A_Look},S_BSPI_STND,0,0}, // S_BSPI_STND2 - {SPR_BSPI,0,20,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_SIGHT - {SPR_BSPI,0,3,{A_BabyMetal},S_BSPI_RUN2,0,0}, // S_BSPI_RUN1 - {SPR_BSPI,0,3,{A_Chase},S_BSPI_RUN3,0,0}, // S_BSPI_RUN2 - {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN4,0,0}, // S_BSPI_RUN3 - {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN5,0,0}, // S_BSPI_RUN4 - {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN6,0,0}, // S_BSPI_RUN5 - {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN7,0,0}, // S_BSPI_RUN6 - {SPR_BSPI,3,3,{A_BabyMetal},S_BSPI_RUN8,0,0}, // S_BSPI_RUN7 - {SPR_BSPI,3,3,{A_Chase},S_BSPI_RUN9,0,0}, // S_BSPI_RUN8 - {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN10,0,0}, // S_BSPI_RUN9 - {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN11,0,0}, // S_BSPI_RUN10 - {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN12,0,0}, // S_BSPI_RUN11 - {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN1,0,0}, // S_BSPI_RUN12 - {SPR_BSPI,32768,20,{A_FaceTarget},S_BSPI_ATK2,0,0}, // S_BSPI_ATK1 - {SPR_BSPI,32774,4,{A_BspiAttack},S_BSPI_ATK3,0,0}, // S_BSPI_ATK2 - {SPR_BSPI,32775,4,{NULL},S_BSPI_ATK4,0,0}, // S_BSPI_ATK3 - {SPR_BSPI,32775,1,{A_SpidRefire},S_BSPI_ATK2,0,0}, // S_BSPI_ATK4 - {SPR_BSPI,8,3,{NULL},S_BSPI_PAIN2,0,0}, // S_BSPI_PAIN - {SPR_BSPI,8,3,{A_Pain},S_BSPI_RUN1,0,0}, // S_BSPI_PAIN2 - {SPR_BSPI,9,20,{A_Scream},S_BSPI_DIE2,0,0}, // S_BSPI_DIE1 - {SPR_BSPI,10,7,{A_Fall},S_BSPI_DIE3,0,0}, // S_BSPI_DIE2 - {SPR_BSPI,11,7,{NULL},S_BSPI_DIE4,0,0}, // S_BSPI_DIE3 - {SPR_BSPI,12,7,{NULL},S_BSPI_DIE5,0,0}, // S_BSPI_DIE4 - {SPR_BSPI,13,7,{NULL},S_BSPI_DIE6,0,0}, // S_BSPI_DIE5 - {SPR_BSPI,14,7,{NULL},S_BSPI_DIE7,0,0}, // S_BSPI_DIE6 - {SPR_BSPI,15,-1,{A_BossDeath},S_NULL,0,0}, // S_BSPI_DIE7 - {SPR_BSPI,15,5,{NULL},S_BSPI_RAISE2,0,0}, // S_BSPI_RAISE1 - {SPR_BSPI,14,5,{NULL},S_BSPI_RAISE3,0,0}, // S_BSPI_RAISE2 - {SPR_BSPI,13,5,{NULL},S_BSPI_RAISE4,0,0}, // S_BSPI_RAISE3 - {SPR_BSPI,12,5,{NULL},S_BSPI_RAISE5,0,0}, // S_BSPI_RAISE4 - {SPR_BSPI,11,5,{NULL},S_BSPI_RAISE6,0,0}, // S_BSPI_RAISE5 - {SPR_BSPI,10,5,{NULL},S_BSPI_RAISE7,0,0}, // S_BSPI_RAISE6 - {SPR_BSPI,9,5,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_RAISE7 - {SPR_APLS,32768,5,{NULL},S_ARACH_PLAZ2,0,0}, // S_ARACH_PLAZ - {SPR_APLS,32769,5,{NULL},S_ARACH_PLAZ,0,0}, // S_ARACH_PLAZ2 - {SPR_APBX,32768,5,{NULL},S_ARACH_PLEX2,0,0}, // S_ARACH_PLEX - {SPR_APBX,32769,5,{NULL},S_ARACH_PLEX3,0,0}, // S_ARACH_PLEX2 - {SPR_APBX,32770,5,{NULL},S_ARACH_PLEX4,0,0}, // S_ARACH_PLEX3 - {SPR_APBX,32771,5,{NULL},S_ARACH_PLEX5,0,0}, // S_ARACH_PLEX4 - {SPR_APBX,32772,5,{NULL},S_NULL,0,0}, // S_ARACH_PLEX5 - {SPR_CYBR,0,10,{A_Look},S_CYBER_STND2,0,0}, // S_CYBER_STND - {SPR_CYBR,1,10,{A_Look},S_CYBER_STND,0,0}, // S_CYBER_STND2 - {SPR_CYBR,0,3,{A_Hoof},S_CYBER_RUN2,0,0}, // S_CYBER_RUN1 - {SPR_CYBR,0,3,{A_Chase},S_CYBER_RUN3,0,0}, // S_CYBER_RUN2 - {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN4,0,0}, // S_CYBER_RUN3 - {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN5,0,0}, // S_CYBER_RUN4 - {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN6,0,0}, // S_CYBER_RUN5 - {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN7,0,0}, // S_CYBER_RUN6 - {SPR_CYBR,3,3,{A_Metal},S_CYBER_RUN8,0,0}, // S_CYBER_RUN7 - {SPR_CYBR,3,3,{A_Chase},S_CYBER_RUN1,0,0}, // S_CYBER_RUN8 - {SPR_CYBR,4,6,{A_FaceTarget},S_CYBER_ATK2,0,0}, // S_CYBER_ATK1 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK3,0,0}, // S_CYBER_ATK2 - {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK4,0,0}, // S_CYBER_ATK3 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK5,0,0}, // S_CYBER_ATK4 - {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK6,0,0}, // S_CYBER_ATK5 - {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_RUN1,0,0}, // S_CYBER_ATK6 - {SPR_CYBR,6,10,{A_Pain},S_CYBER_RUN1,0,0}, // S_CYBER_PAIN - {SPR_CYBR,7,10,{NULL},S_CYBER_DIE2,0,0}, // S_CYBER_DIE1 - {SPR_CYBR,8,10,{A_Scream},S_CYBER_DIE3,0,0}, // S_CYBER_DIE2 - {SPR_CYBR,9,10,{NULL},S_CYBER_DIE4,0,0}, // S_CYBER_DIE3 - {SPR_CYBR,10,10,{NULL},S_CYBER_DIE5,0,0}, // S_CYBER_DIE4 - {SPR_CYBR,11,10,{NULL},S_CYBER_DIE6,0,0}, // S_CYBER_DIE5 - {SPR_CYBR,12,10,{A_Fall},S_CYBER_DIE7,0,0}, // S_CYBER_DIE6 - {SPR_CYBR,13,10,{NULL},S_CYBER_DIE8,0,0}, // S_CYBER_DIE7 - {SPR_CYBR,14,10,{NULL},S_CYBER_DIE9,0,0}, // S_CYBER_DIE8 - {SPR_CYBR,15,30,{NULL},S_CYBER_DIE10,0,0}, // S_CYBER_DIE9 - {SPR_CYBR,15,-1,{A_BossDeath},S_NULL,0,0}, // S_CYBER_DIE10 - {SPR_PAIN,0,10,{A_Look},S_PAIN_STND,0,0}, // S_PAIN_STND - {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN2,0,0}, // S_PAIN_RUN1 - {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN3,0,0}, // S_PAIN_RUN2 - {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN4,0,0}, // S_PAIN_RUN3 - {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN5,0,0}, // S_PAIN_RUN4 - {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN6,0,0}, // S_PAIN_RUN5 - {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN1,0,0}, // S_PAIN_RUN6 - {SPR_PAIN,3,5,{A_FaceTarget},S_PAIN_ATK2,0,0}, // S_PAIN_ATK1 - {SPR_PAIN,4,5,{A_FaceTarget},S_PAIN_ATK3,0,0}, // S_PAIN_ATK2 - {SPR_PAIN,32773,5,{A_FaceTarget},S_PAIN_ATK4,0,0}, // S_PAIN_ATK3 - {SPR_PAIN,32773,0,{A_PainAttack},S_PAIN_RUN1,0,0}, // S_PAIN_ATK4 - {SPR_PAIN,6,6,{NULL},S_PAIN_PAIN2,0,0}, // S_PAIN_PAIN - {SPR_PAIN,6,6,{A_Pain},S_PAIN_RUN1,0,0}, // S_PAIN_PAIN2 - {SPR_PAIN,32775,8,{NULL},S_PAIN_DIE2,0,0}, // S_PAIN_DIE1 - {SPR_PAIN,32776,8,{A_Scream},S_PAIN_DIE3,0,0}, // S_PAIN_DIE2 - {SPR_PAIN,32777,8,{NULL},S_PAIN_DIE4,0,0}, // S_PAIN_DIE3 - {SPR_PAIN,32778,8,{NULL},S_PAIN_DIE5,0,0}, // S_PAIN_DIE4 - {SPR_PAIN,32779,8,{A_PainDie},S_PAIN_DIE6,0,0}, // S_PAIN_DIE5 - {SPR_PAIN,32780,8,{NULL},S_NULL,0,0}, // S_PAIN_DIE6 - {SPR_PAIN,12,8,{NULL},S_PAIN_RAISE2,0,0}, // S_PAIN_RAISE1 - {SPR_PAIN,11,8,{NULL},S_PAIN_RAISE3,0,0}, // S_PAIN_RAISE2 - {SPR_PAIN,10,8,{NULL},S_PAIN_RAISE4,0,0}, // S_PAIN_RAISE3 - {SPR_PAIN,9,8,{NULL},S_PAIN_RAISE5,0,0}, // S_PAIN_RAISE4 - {SPR_PAIN,8,8,{NULL},S_PAIN_RAISE6,0,0}, // S_PAIN_RAISE5 - {SPR_PAIN,7,8,{NULL},S_PAIN_RUN1,0,0}, // S_PAIN_RAISE6 - {SPR_SSWV,0,10,{A_Look},S_SSWV_STND2,0,0}, // S_SSWV_STND - {SPR_SSWV,1,10,{A_Look},S_SSWV_STND,0,0}, // S_SSWV_STND2 - {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN2,0,0}, // S_SSWV_RUN1 - {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN3,0,0}, // S_SSWV_RUN2 - {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN4,0,0}, // S_SSWV_RUN3 - {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN5,0,0}, // S_SSWV_RUN4 - {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN6,0,0}, // S_SSWV_RUN5 - {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN7,0,0}, // S_SSWV_RUN6 - {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN8,0,0}, // S_SSWV_RUN7 - {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN1,0,0}, // S_SSWV_RUN8 - {SPR_SSWV,4,10,{A_FaceTarget},S_SSWV_ATK2,0,0}, // S_SSWV_ATK1 - {SPR_SSWV,5,10,{A_FaceTarget},S_SSWV_ATK3,0,0}, // S_SSWV_ATK2 - {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK4,0,0}, // S_SSWV_ATK3 - {SPR_SSWV,5,6,{A_FaceTarget},S_SSWV_ATK5,0,0}, // S_SSWV_ATK4 - {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK6,0,0}, // S_SSWV_ATK5 - {SPR_SSWV,5,1,{A_CPosRefire},S_SSWV_ATK2,0,0}, // S_SSWV_ATK6 - {SPR_SSWV,7,3,{NULL},S_SSWV_PAIN2,0,0}, // S_SSWV_PAIN - {SPR_SSWV,7,3,{A_Pain},S_SSWV_RUN1,0,0}, // S_SSWV_PAIN2 - {SPR_SSWV,8,5,{NULL},S_SSWV_DIE2,0,0}, // S_SSWV_DIE1 - {SPR_SSWV,9,5,{A_Scream},S_SSWV_DIE3,0,0}, // S_SSWV_DIE2 - {SPR_SSWV,10,5,{A_Fall},S_SSWV_DIE4,0,0}, // S_SSWV_DIE3 - {SPR_SSWV,11,5,{NULL},S_SSWV_DIE5,0,0}, // S_SSWV_DIE4 - {SPR_SSWV,12,-1,{NULL},S_NULL,0,0}, // S_SSWV_DIE5 - {SPR_SSWV,13,5,{NULL},S_SSWV_XDIE2,0,0}, // S_SSWV_XDIE1 - {SPR_SSWV,14,5,{A_XScream},S_SSWV_XDIE3,0,0}, // S_SSWV_XDIE2 - {SPR_SSWV,15,5,{A_Fall},S_SSWV_XDIE4,0,0}, // S_SSWV_XDIE3 - {SPR_SSWV,16,5,{NULL},S_SSWV_XDIE5,0,0}, // S_SSWV_XDIE4 - {SPR_SSWV,17,5,{NULL},S_SSWV_XDIE6,0,0}, // S_SSWV_XDIE5 - {SPR_SSWV,18,5,{NULL},S_SSWV_XDIE7,0,0}, // S_SSWV_XDIE6 - {SPR_SSWV,19,5,{NULL},S_SSWV_XDIE8,0,0}, // S_SSWV_XDIE7 - {SPR_SSWV,20,5,{NULL},S_SSWV_XDIE9,0,0}, // S_SSWV_XDIE8 - {SPR_SSWV,21,-1,{NULL},S_NULL,0,0}, // S_SSWV_XDIE9 - {SPR_SSWV,12,5,{NULL},S_SSWV_RAISE2,0,0}, // S_SSWV_RAISE1 - {SPR_SSWV,11,5,{NULL},S_SSWV_RAISE3,0,0}, // S_SSWV_RAISE2 - {SPR_SSWV,10,5,{NULL},S_SSWV_RAISE4,0,0}, // S_SSWV_RAISE3 - {SPR_SSWV,9,5,{NULL},S_SSWV_RAISE5,0,0}, // S_SSWV_RAISE4 - {SPR_SSWV,8,5,{NULL},S_SSWV_RUN1,0,0}, // S_SSWV_RAISE5 - {SPR_KEEN,0,-1,{NULL},S_KEENSTND,0,0}, // S_KEENSTND - {SPR_KEEN,0,6,{NULL},S_COMMKEEN2,0,0}, // S_COMMKEEN - {SPR_KEEN,1,6,{NULL},S_COMMKEEN3,0,0}, // S_COMMKEEN2 - {SPR_KEEN,2,6,{A_Scream},S_COMMKEEN4,0,0}, // S_COMMKEEN3 - {SPR_KEEN,3,6,{NULL},S_COMMKEEN5,0,0}, // S_COMMKEEN4 - {SPR_KEEN,4,6,{NULL},S_COMMKEEN6,0,0}, // S_COMMKEEN5 - {SPR_KEEN,5,6,{NULL},S_COMMKEEN7,0,0}, // S_COMMKEEN6 - {SPR_KEEN,6,6,{NULL},S_COMMKEEN8,0,0}, // S_COMMKEEN7 - {SPR_KEEN,7,6,{NULL},S_COMMKEEN9,0,0}, // S_COMMKEEN8 - {SPR_KEEN,8,6,{NULL},S_COMMKEEN10,0,0}, // S_COMMKEEN9 - {SPR_KEEN,9,6,{NULL},S_COMMKEEN11,0,0}, // S_COMMKEEN10 - {SPR_KEEN,10,6,{A_KeenDie},S_COMMKEEN12,0,0},// S_COMMKEEN11 - {SPR_KEEN,11,-1,{NULL},S_NULL,0,0}, // S_COMMKEEN12 - {SPR_KEEN,12,4,{NULL},S_KEENPAIN2,0,0}, // S_KEENPAIN - {SPR_KEEN,12,8,{A_Pain},S_KEENSTND,0,0}, // S_KEENPAIN2 - {SPR_BBRN,0,-1,{NULL},S_NULL,0,0}, // S_BRAIN - {SPR_BBRN,1,36,{A_BrainPain},S_BRAIN,0,0}, // S_BRAIN_PAIN - {SPR_BBRN,0,100,{A_BrainScream},S_BRAIN_DIE2,0,0}, // S_BRAIN_DIE1 - {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE3,0,0}, // S_BRAIN_DIE2 - {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE4,0,0}, // S_BRAIN_DIE3 - {SPR_BBRN,0,-1,{A_BrainDie},S_NULL,0,0}, // S_BRAIN_DIE4 - {SPR_SSWV,0,10,{A_Look},S_BRAINEYE,0,0}, // S_BRAINEYE - {SPR_SSWV,0,181,{A_BrainAwake},S_BRAINEYE1,0,0}, // S_BRAINEYESEE - {SPR_SSWV,0,150,{A_BrainSpit},S_BRAINEYE1,0,0}, // S_BRAINEYE1 - {SPR_BOSF,32768,3,{A_SpawnSound},S_SPAWN2,0,0}, // S_SPAWN1 - {SPR_BOSF,32769,3,{A_SpawnFly},S_SPAWN3,0,0}, // S_SPAWN2 - {SPR_BOSF,32770,3,{A_SpawnFly},S_SPAWN4,0,0}, // S_SPAWN3 - {SPR_BOSF,32771,3,{A_SpawnFly},S_SPAWN1,0,0}, // S_SPAWN4 - {SPR_FIRE,32768,4,{A_Fire},S_SPAWNFIRE2,0,0}, // S_SPAWNFIRE1 - {SPR_FIRE,32769,4,{A_Fire},S_SPAWNFIRE3,0,0}, // S_SPAWNFIRE2 - {SPR_FIRE,32770,4,{A_Fire},S_SPAWNFIRE4,0,0}, // S_SPAWNFIRE3 - {SPR_FIRE,32771,4,{A_Fire},S_SPAWNFIRE5,0,0}, // S_SPAWNFIRE4 - {SPR_FIRE,32772,4,{A_Fire},S_SPAWNFIRE6,0,0}, // S_SPAWNFIRE5 - {SPR_FIRE,32773,4,{A_Fire},S_SPAWNFIRE7,0,0}, // S_SPAWNFIRE6 - {SPR_FIRE,32774,4,{A_Fire},S_SPAWNFIRE8,0,0}, // S_SPAWNFIRE7 - {SPR_FIRE,32775,4,{A_Fire},S_NULL,0,0}, // S_SPAWNFIRE8 - {SPR_MISL,32769,10,{NULL},S_BRAINEXPLODE2,0,0}, // S_BRAINEXPLODE1 - {SPR_MISL,32770,10,{NULL},S_BRAINEXPLODE3,0,0}, // S_BRAINEXPLODE2 - {SPR_MISL,32771,10,{A_BrainExplode},S_NULL,0,0}, // S_BRAINEXPLODE3 - {SPR_ARM1,0,6,{NULL},S_ARM1A,0,0}, // S_ARM1 - {SPR_ARM1,32769,7,{NULL},S_ARM1,0,0}, // S_ARM1A - {SPR_ARM2,0,6,{NULL},S_ARM2A,0,0}, // S_ARM2 - {SPR_ARM2,32769,6,{NULL},S_ARM2,0,0}, // S_ARM2A - {SPR_BAR1,0,6,{NULL},S_BAR2,0,0}, // S_BAR1 - {SPR_BAR1,1,6,{NULL},S_BAR1,0,0}, // S_BAR2 - {SPR_BEXP,32768,5,{NULL},S_BEXP2,0,0}, // S_BEXP - {SPR_BEXP,32769,5,{A_Scream},S_BEXP3,0,0}, // S_BEXP2 - {SPR_BEXP,32770,5,{NULL},S_BEXP4,0,0}, // S_BEXP3 - {SPR_BEXP,32771,10,{A_Explode},S_BEXP5,0,0}, // S_BEXP4 - {SPR_BEXP,32772,10,{NULL},S_NULL,0,0}, // S_BEXP5 - {SPR_FCAN,32768,4,{NULL},S_BBAR2,0,0}, // S_BBAR1 - {SPR_FCAN,32769,4,{NULL},S_BBAR3,0,0}, // S_BBAR2 - {SPR_FCAN,32770,4,{NULL},S_BBAR1,0,0}, // S_BBAR3 - {SPR_BON1,0,6,{NULL},S_BON1A,0,0}, // S_BON1 - {SPR_BON1,1,6,{NULL},S_BON1B,0,0}, // S_BON1A - {SPR_BON1,2,6,{NULL},S_BON1C,0,0}, // S_BON1B - {SPR_BON1,3,6,{NULL},S_BON1D,0,0}, // S_BON1C - {SPR_BON1,2,6,{NULL},S_BON1E,0,0}, // S_BON1D - {SPR_BON1,1,6,{NULL},S_BON1,0,0}, // S_BON1E - {SPR_BON2,0,6,{NULL},S_BON2A,0,0}, // S_BON2 - {SPR_BON2,1,6,{NULL},S_BON2B,0,0}, // S_BON2A - {SPR_BON2,2,6,{NULL},S_BON2C,0,0}, // S_BON2B - {SPR_BON2,3,6,{NULL},S_BON2D,0,0}, // S_BON2C - {SPR_BON2,2,6,{NULL},S_BON2E,0,0}, // S_BON2D - {SPR_BON2,1,6,{NULL},S_BON2,0,0}, // S_BON2E - {SPR_BKEY,0,10,{NULL},S_BKEY2,0,0}, // S_BKEY - {SPR_BKEY,32769,10,{NULL},S_BKEY,0,0}, // S_BKEY2 - {SPR_RKEY,0,10,{NULL},S_RKEY2,0,0}, // S_RKEY - {SPR_RKEY,32769,10,{NULL},S_RKEY,0,0}, // S_RKEY2 - {SPR_YKEY,0,10,{NULL},S_YKEY2,0,0}, // S_YKEY - {SPR_YKEY,32769,10,{NULL},S_YKEY,0,0}, // S_YKEY2 - {SPR_BSKU,0,10,{NULL},S_BSKULL2,0,0}, // S_BSKULL - {SPR_BSKU,32769,10,{NULL},S_BSKULL,0,0}, // S_BSKULL2 - {SPR_RSKU,0,10,{NULL},S_RSKULL2,0,0}, // S_RSKULL - {SPR_RSKU,32769,10,{NULL},S_RSKULL,0,0}, // S_RSKULL2 - {SPR_YSKU,0,10,{NULL},S_YSKULL2,0,0}, // S_YSKULL - {SPR_YSKU,32769,10,{NULL},S_YSKULL,0,0}, // S_YSKULL2 - {SPR_STIM,0,-1,{NULL},S_NULL,0,0}, // S_STIM - {SPR_MEDI,0,-1,{NULL},S_NULL,0,0}, // S_MEDI - {SPR_SOUL,32768,6,{NULL},S_SOUL2,0,0}, // S_SOUL - {SPR_SOUL,32769,6,{NULL},S_SOUL3,0,0}, // S_SOUL2 - {SPR_SOUL,32770,6,{NULL},S_SOUL4,0,0}, // S_SOUL3 - {SPR_SOUL,32771,6,{NULL},S_SOUL5,0,0}, // S_SOUL4 - {SPR_SOUL,32770,6,{NULL},S_SOUL6,0,0}, // S_SOUL5 - {SPR_SOUL,32769,6,{NULL},S_SOUL,0,0}, // S_SOUL6 - {SPR_PINV,32768,6,{NULL},S_PINV2,0,0}, // S_PINV - {SPR_PINV,32769,6,{NULL},S_PINV3,0,0}, // S_PINV2 - {SPR_PINV,32770,6,{NULL},S_PINV4,0,0}, // S_PINV3 - {SPR_PINV,32771,6,{NULL},S_PINV,0,0}, // S_PINV4 - {SPR_PSTR,32768,-1,{NULL},S_NULL,0,0}, // S_PSTR - {SPR_PINS,32768,6,{NULL},S_PINS2,0,0}, // S_PINS - {SPR_PINS,32769,6,{NULL},S_PINS3,0,0}, // S_PINS2 - {SPR_PINS,32770,6,{NULL},S_PINS4,0,0}, // S_PINS3 - {SPR_PINS,32771,6,{NULL},S_PINS,0,0}, // S_PINS4 - {SPR_MEGA,32768,6,{NULL},S_MEGA2,0,0}, // S_MEGA - {SPR_MEGA,32769,6,{NULL},S_MEGA3,0,0}, // S_MEGA2 - {SPR_MEGA,32770,6,{NULL},S_MEGA4,0,0}, // S_MEGA3 - {SPR_MEGA,32771,6,{NULL},S_MEGA,0,0}, // S_MEGA4 - {SPR_SUIT,32768,-1,{NULL},S_NULL,0,0}, // S_SUIT - {SPR_PMAP,32768,6,{NULL},S_PMAP2,0,0}, // S_PMAP - {SPR_PMAP,32769,6,{NULL},S_PMAP3,0,0}, // S_PMAP2 - {SPR_PMAP,32770,6,{NULL},S_PMAP4,0,0}, // S_PMAP3 - {SPR_PMAP,32771,6,{NULL},S_PMAP5,0,0}, // S_PMAP4 - {SPR_PMAP,32770,6,{NULL},S_PMAP6,0,0}, // S_PMAP5 - {SPR_PMAP,32769,6,{NULL},S_PMAP,0,0}, // S_PMAP6 - {SPR_PVIS,32768,6,{NULL},S_PVIS2,0,0}, // S_PVIS - {SPR_PVIS,1,6,{NULL},S_PVIS,0,0}, // S_PVIS2 - {SPR_CLIP,0,-1,{NULL},S_NULL,0,0}, // S_CLIP - {SPR_AMMO,0,-1,{NULL},S_NULL,0,0}, // S_AMMO - {SPR_ROCK,0,-1,{NULL},S_NULL,0,0}, // S_ROCK - {SPR_BROK,0,-1,{NULL},S_NULL,0,0}, // S_BROK - {SPR_CELL,0,-1,{NULL},S_NULL,0,0}, // S_CELL - {SPR_CELP,0,-1,{NULL},S_NULL,0,0}, // S_CELP - {SPR_SHEL,0,-1,{NULL},S_NULL,0,0}, // S_SHEL - {SPR_SBOX,0,-1,{NULL},S_NULL,0,0}, // S_SBOX - {SPR_BPAK,0,-1,{NULL},S_NULL,0,0}, // S_BPAK - {SPR_BFUG,0,-1,{NULL},S_NULL,0,0}, // S_BFUG - {SPR_MGUN,0,-1,{NULL},S_NULL,0,0}, // S_MGUN - {SPR_CSAW,0,-1,{NULL},S_NULL,0,0}, // S_CSAW - {SPR_LAUN,0,-1,{NULL},S_NULL,0,0}, // S_LAUN - {SPR_PLAS,0,-1,{NULL},S_NULL,0,0}, // S_PLAS - {SPR_SHOT,0,-1,{NULL},S_NULL,0,0}, // S_SHOT - {SPR_SGN2,0,-1,{NULL},S_NULL,0,0}, // S_SHOT2 - {SPR_COLU,32768,-1,{NULL},S_NULL,0,0}, // S_COLU - {SPR_SMT2,0,-1,{NULL},S_NULL,0,0}, // S_STALAG - {SPR_GOR1,0,10,{NULL},S_BLOODYTWITCH2,0,0}, // S_BLOODYTWITCH - {SPR_GOR1,1,15,{NULL},S_BLOODYTWITCH3,0,0}, // S_BLOODYTWITCH2 - {SPR_GOR1,2,8,{NULL},S_BLOODYTWITCH4,0,0}, // S_BLOODYTWITCH3 - {SPR_GOR1,1,6,{NULL},S_BLOODYTWITCH,0,0}, // S_BLOODYTWITCH4 - {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_DEADTORSO - {SPR_PLAY,18,-1,{NULL},S_NULL,0,0}, // S_DEADBOTTOM - {SPR_POL2,0,-1,{NULL},S_NULL,0,0}, // S_HEADSONSTICK - {SPR_POL5,0,-1,{NULL},S_NULL,0,0}, // S_GIBS - {SPR_POL4,0,-1,{NULL},S_NULL,0,0}, // S_HEADONASTICK - {SPR_POL3,32768,6,{NULL},S_HEADCANDLES2,0,0}, // S_HEADCANDLES - {SPR_POL3,32769,6,{NULL},S_HEADCANDLES,0,0}, // S_HEADCANDLES2 - {SPR_POL1,0,-1,{NULL},S_NULL,0,0}, // S_DEADSTICK - {SPR_POL6,0,6,{NULL},S_LIVESTICK2,0,0}, // S_LIVESTICK - {SPR_POL6,1,8,{NULL},S_LIVESTICK,0,0}, // S_LIVESTICK2 - {SPR_GOR2,0,-1,{NULL},S_NULL,0,0}, // S_MEAT2 - {SPR_GOR3,0,-1,{NULL},S_NULL,0,0}, // S_MEAT3 - {SPR_GOR4,0,-1,{NULL},S_NULL,0,0}, // S_MEAT4 - {SPR_GOR5,0,-1,{NULL},S_NULL,0,0}, // S_MEAT5 - {SPR_SMIT,0,-1,{NULL},S_NULL,0,0}, // S_STALAGTITE - {SPR_COL1,0,-1,{NULL},S_NULL,0,0}, // S_TALLGRNCOL - {SPR_COL2,0,-1,{NULL},S_NULL,0,0}, // S_SHRTGRNCOL - {SPR_COL3,0,-1,{NULL},S_NULL,0,0}, // S_TALLREDCOL - {SPR_COL4,0,-1,{NULL},S_NULL,0,0}, // S_SHRTREDCOL - {SPR_CAND,32768,-1,{NULL},S_NULL,0,0}, // S_CANDLESTIK - {SPR_CBRA,32768,-1,{NULL},S_NULL,0,0}, // S_CANDELABRA - {SPR_COL6,0,-1,{NULL},S_NULL,0,0}, // S_SKULLCOL - {SPR_TRE1,0,-1,{NULL},S_NULL,0,0}, // S_TORCHTREE - {SPR_TRE2,0,-1,{NULL},S_NULL,0,0}, // S_BIGTREE - {SPR_ELEC,0,-1,{NULL},S_NULL,0,0}, // S_TECHPILLAR - {SPR_CEYE,32768,6,{NULL},S_EVILEYE2,0,0}, // S_EVILEYE - {SPR_CEYE,32769,6,{NULL},S_EVILEYE3,0,0}, // S_EVILEYE2 - {SPR_CEYE,32770,6,{NULL},S_EVILEYE4,0,0}, // S_EVILEYE3 - {SPR_CEYE,32769,6,{NULL},S_EVILEYE,0,0}, // S_EVILEYE4 - {SPR_FSKU,32768,6,{NULL},S_FLOATSKULL2,0,0}, // S_FLOATSKULL - {SPR_FSKU,32769,6,{NULL},S_FLOATSKULL3,0,0}, // S_FLOATSKULL2 - {SPR_FSKU,32770,6,{NULL},S_FLOATSKULL,0,0}, // S_FLOATSKULL3 - {SPR_COL5,0,14,{NULL},S_HEARTCOL2,0,0}, // S_HEARTCOL - {SPR_COL5,1,14,{NULL},S_HEARTCOL,0,0}, // S_HEARTCOL2 - {SPR_TBLU,32768,4,{NULL},S_BLUETORCH2,0,0}, // S_BLUETORCH - {SPR_TBLU,32769,4,{NULL},S_BLUETORCH3,0,0}, // S_BLUETORCH2 - {SPR_TBLU,32770,4,{NULL},S_BLUETORCH4,0,0}, // S_BLUETORCH3 - {SPR_TBLU,32771,4,{NULL},S_BLUETORCH,0,0}, // S_BLUETORCH4 - {SPR_TGRN,32768,4,{NULL},S_GREENTORCH2,0,0}, // S_GREENTORCH - {SPR_TGRN,32769,4,{NULL},S_GREENTORCH3,0,0}, // S_GREENTORCH2 - {SPR_TGRN,32770,4,{NULL},S_GREENTORCH4,0,0}, // S_GREENTORCH3 - {SPR_TGRN,32771,4,{NULL},S_GREENTORCH,0,0}, // S_GREENTORCH4 - {SPR_TRED,32768,4,{NULL},S_REDTORCH2,0,0}, // S_REDTORCH - {SPR_TRED,32769,4,{NULL},S_REDTORCH3,0,0}, // S_REDTORCH2 - {SPR_TRED,32770,4,{NULL},S_REDTORCH4,0,0}, // S_REDTORCH3 - {SPR_TRED,32771,4,{NULL},S_REDTORCH,0,0}, // S_REDTORCH4 - {SPR_SMBT,32768,4,{NULL},S_BTORCHSHRT2,0,0}, // S_BTORCHSHRT - {SPR_SMBT,32769,4,{NULL},S_BTORCHSHRT3,0,0}, // S_BTORCHSHRT2 - {SPR_SMBT,32770,4,{NULL},S_BTORCHSHRT4,0,0}, // S_BTORCHSHRT3 - {SPR_SMBT,32771,4,{NULL},S_BTORCHSHRT,0,0}, // S_BTORCHSHRT4 - {SPR_SMGT,32768,4,{NULL},S_GTORCHSHRT2,0,0}, // S_GTORCHSHRT - {SPR_SMGT,32769,4,{NULL},S_GTORCHSHRT3,0,0}, // S_GTORCHSHRT2 - {SPR_SMGT,32770,4,{NULL},S_GTORCHSHRT4,0,0}, // S_GTORCHSHRT3 - {SPR_SMGT,32771,4,{NULL},S_GTORCHSHRT,0,0}, // S_GTORCHSHRT4 - {SPR_SMRT,32768,4,{NULL},S_RTORCHSHRT2,0,0}, // S_RTORCHSHRT - {SPR_SMRT,32769,4,{NULL},S_RTORCHSHRT3,0,0}, // S_RTORCHSHRT2 - {SPR_SMRT,32770,4,{NULL},S_RTORCHSHRT4,0,0}, // S_RTORCHSHRT3 - {SPR_SMRT,32771,4,{NULL},S_RTORCHSHRT,0,0}, // S_RTORCHSHRT4 - {SPR_HDB1,0,-1,{NULL},S_NULL,0,0}, // S_HANGNOGUTS - {SPR_HDB2,0,-1,{NULL},S_NULL,0,0}, // S_HANGBNOBRAIN - {SPR_HDB3,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKDN - {SPR_HDB4,0,-1,{NULL},S_NULL,0,0}, // S_HANGTSKULL - {SPR_HDB5,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKUP - {SPR_HDB6,0,-1,{NULL},S_NULL,0,0}, // S_HANGTNOBRAIN - {SPR_POB1,0,-1,{NULL},S_NULL,0,0}, // S_COLONGIBS - {SPR_POB2,0,-1,{NULL},S_NULL,0,0}, // S_SMALLPOOL - {SPR_BRS1,0,-1,{NULL},S_NULL,0,0}, // S_BRAINSTEM - {SPR_TLMP,32768,4,{NULL},S_TECHLAMP2,0,0}, // S_TECHLAMP - {SPR_TLMP,32769,4,{NULL},S_TECHLAMP3,0,0}, // S_TECHLAMP2 - {SPR_TLMP,32770,4,{NULL},S_TECHLAMP4,0,0}, // S_TECHLAMP3 - {SPR_TLMP,32771,4,{NULL},S_TECHLAMP,0,0}, // S_TECHLAMP4 - {SPR_TLP2,32768,4,{NULL},S_TECH2LAMP2,0,0}, // S_TECH2LAMP - {SPR_TLP2,32769,4,{NULL},S_TECH2LAMP3,0,0}, // S_TECH2LAMP2 - {SPR_TLP2,32770,4,{NULL},S_TECH2LAMP4,0,0}, // S_TECH2LAMP3 - {SPR_TLP2,32771,4,{NULL},S_TECH2LAMP,0,0} // S_TECH2LAMP4 + + +state_t states[NUMSTATES] = { + {SPR_TROO, 0, -1, {NULL}, S_NULL, 0, 0}, // S_NULL + {SPR_SHTG, 4, 0, {A_Light0}, S_NULL, 0, 0}, // S_LIGHTDONE + {SPR_PUNG, 0, 1, {A_WeaponReady}, S_PUNCH, 0, 0}, // S_PUNCH + {SPR_PUNG, 0, 1, {A_Lower}, S_PUNCHDOWN, 0, 0}, // S_PUNCHDOWN + {SPR_PUNG, 0, 1, {A_Raise}, S_PUNCHUP, 0, 0}, // S_PUNCHUP + {SPR_PUNG, 1, 4, {NULL}, S_PUNCH2, 0, 0}, // S_PUNCH1 + {SPR_PUNG, 2, 4, {A_Punch}, S_PUNCH3, 0, 0}, // S_PUNCH2 + {SPR_PUNG, 3, 5, {NULL}, S_PUNCH4, 0, 0}, // S_PUNCH3 + {SPR_PUNG, 2, 4, {NULL}, S_PUNCH5, 0, 0}, // S_PUNCH4 + {SPR_PUNG, 1, 5, {A_ReFire}, S_PUNCH, 0, 0}, // S_PUNCH5 + {SPR_PISG, 0, 1, {A_WeaponReady}, S_PISTOL, 0, 0}, // S_PISTOL + {SPR_PISG, 0, 1, {A_Lower}, S_PISTOLDOWN, 0, 0}, // S_PISTOLDOWN + {SPR_PISG, 0, 1, {A_Raise}, S_PISTOLUP, 0, 0}, // S_PISTOLUP + {SPR_PISG, 0, 4, {NULL}, S_PISTOL2, 0, 0}, // S_PISTOL1 + {SPR_PISG, 1, 6, {A_FirePistol}, S_PISTOL3, 0, 0}, // S_PISTOL2 + {SPR_PISG, 2, 4, {NULL}, S_PISTOL4, 0, 0}, // S_PISTOL3 + {SPR_PISG, 1, 5, {A_ReFire}, S_PISTOL, 0, 0}, // S_PISTOL4 + {SPR_PISF, 32768, 7, {A_Light1}, S_LIGHTDONE, 0, 0}, // S_PISTOLFLASH + {SPR_SHTG, 0, 1, {A_WeaponReady}, S_SGUN, 0, 0}, // S_SGUN + {SPR_SHTG, 0, 1, {A_Lower}, S_SGUNDOWN, 0, 0}, // S_SGUNDOWN + {SPR_SHTG, 0, 1, {A_Raise}, S_SGUNUP, 0, 0}, // S_SGUNUP + {SPR_SHTG, 0, 3, {NULL}, S_SGUN2, 0, 0}, // S_SGUN1 + {SPR_SHTG, 0, 7, {A_FireShotgun}, S_SGUN3, 0, 0}, // S_SGUN2 + {SPR_SHTG, 1, 5, {NULL}, S_SGUN4, 0, 0}, // S_SGUN3 + {SPR_SHTG, 2, 5, {NULL}, S_SGUN5, 0, 0}, // S_SGUN4 + {SPR_SHTG, 3, 4, {NULL}, S_SGUN6, 0, 0}, // S_SGUN5 + {SPR_SHTG, 2, 5, {NULL}, S_SGUN7, 0, 0}, // S_SGUN6 + {SPR_SHTG, 1, 5, {NULL}, S_SGUN8, 0, 0}, // S_SGUN7 + {SPR_SHTG, 0, 3, {NULL}, S_SGUN9, 0, 0}, // S_SGUN8 + {SPR_SHTG, 0, 7, {A_ReFire}, S_SGUN, 0, 0}, // S_SGUN9 + {SPR_SHTF, 32768, 4, {A_Light1}, S_SGUNFLASH2, 0, 0}, // S_SGUNFLASH1 + {SPR_SHTF, 32769, 3, {A_Light2}, S_LIGHTDONE, 0, 0}, // S_SGUNFLASH2 + {SPR_SHT2, 0, 1, {A_WeaponReady}, S_DSGUN, 0, 0}, // S_DSGUN + {SPR_SHT2, 0, 1, {A_Lower}, S_DSGUNDOWN, 0, 0}, // S_DSGUNDOWN + {SPR_SHT2, 0, 1, {A_Raise}, S_DSGUNUP, 0, 0}, // S_DSGUNUP + {SPR_SHT2, 0, 3, {NULL}, S_DSGUN2, 0, 0}, // S_DSGUN1 + {SPR_SHT2, 0, 7, {A_FireShotgun2}, S_DSGUN3, 0, 0}, // S_DSGUN2 + {SPR_SHT2, 1, 7, {NULL}, S_DSGUN4, 0, 0}, // S_DSGUN3 + {SPR_SHT2, 2, 7, {A_CheckReload}, S_DSGUN5, 0, 0}, // S_DSGUN4 + {SPR_SHT2, 3, 7, {A_OpenShotgun2}, S_DSGUN6, 0, 0}, // S_DSGUN5 + {SPR_SHT2, 4, 7, {NULL}, S_DSGUN7, 0, 0}, // S_DSGUN6 + {SPR_SHT2, 5, 7, {A_LoadShotgun2}, S_DSGUN8, 0, 0}, // S_DSGUN7 + {SPR_SHT2, 6, 6, {NULL}, S_DSGUN9, 0, 0}, // S_DSGUN8 + {SPR_SHT2, 7, 6, {A_CloseShotgun2}, S_DSGUN10, 0, 0}, // S_DSGUN9 + {SPR_SHT2, 0, 5, {A_ReFire}, S_DSGUN, 0, 0}, // S_DSGUN10 + {SPR_SHT2, 1, 7, {NULL}, S_DSNR2, 0, 0}, // S_DSNR1 + {SPR_SHT2, 0, 3, {NULL}, S_DSGUNDOWN, 0, 0}, // S_DSNR2 + {SPR_SHT2, 32776, 5, {A_Light1}, S_DSGUNFLASH2, 0, 0}, // S_DSGUNFLASH1 + {SPR_SHT2, 32777, 4, {A_Light2}, S_LIGHTDONE, 0, 0}, // S_DSGUNFLASH2 + {SPR_CHGG, 0, 1, {A_WeaponReady}, S_CHAIN, 0, 0}, // S_CHAIN + {SPR_CHGG, 0, 1, {A_Lower}, S_CHAINDOWN, 0, 0}, // S_CHAINDOWN + {SPR_CHGG, 0, 1, {A_Raise}, S_CHAINUP, 0, 0}, // S_CHAINUP + {SPR_CHGG, 0, 4, {A_FireCGun}, S_CHAIN2, 0, 0}, // S_CHAIN1 + {SPR_CHGG, 1, 4, {A_FireCGun}, S_CHAIN3, 0, 0}, // S_CHAIN2 + {SPR_CHGG, 1, 0, {A_ReFire}, S_CHAIN, 0, 0}, // S_CHAIN3 + {SPR_CHGF, 32768, 5, {A_Light1}, S_LIGHTDONE, 0, 0}, // S_CHAINFLASH1 + {SPR_CHGF, 32769, 5, {A_Light2}, S_LIGHTDONE, 0, 0}, // S_CHAINFLASH2 + {SPR_MISG, 0, 1, {A_WeaponReady}, S_MISSILE, 0, 0}, // S_MISSILE + {SPR_MISG, 0, 1, {A_Lower}, S_MISSILEDOWN, 0, 0}, // S_MISSILEDOWN + {SPR_MISG, 0, 1, {A_Raise}, S_MISSILEUP, 0, 0}, // S_MISSILEUP + {SPR_MISG, 1, 8, {A_GunFlash}, S_MISSILE2, 0, 0}, // S_MISSILE1 + {SPR_MISG, 1, 12, {A_FireMissile}, S_MISSILE3, 0, 0}, // S_MISSILE2 + {SPR_MISG, 1, 0, {A_ReFire}, S_MISSILE, 0, 0}, // S_MISSILE3 + {SPR_MISF, 32768, 3, {A_Light1}, S_MISSILEFLASH2, 0, 0}, // S_MISSILEFLASH1 + {SPR_MISF, 32769, 4, {NULL}, S_MISSILEFLASH3, 0, 0}, // S_MISSILEFLASH2 + {SPR_MISF, 32770, 4, {A_Light2}, S_MISSILEFLASH4, 0, 0}, // S_MISSILEFLASH3 + {SPR_MISF, 32771, 4, {A_Light2}, S_LIGHTDONE, 0, 0}, // S_MISSILEFLASH4 + {SPR_SAWG, 2, 4, {A_WeaponReady}, S_SAWB, 0, 0}, // S_SAW + {SPR_SAWG, 3, 4, {A_WeaponReady}, S_SAW, 0, 0}, // S_SAWB + {SPR_SAWG, 2, 1, {A_Lower}, S_SAWDOWN, 0, 0}, // S_SAWDOWN + {SPR_SAWG, 2, 1, {A_Raise}, S_SAWUP, 0, 0}, // S_SAWUP + {SPR_SAWG, 0, 4, {A_Saw}, S_SAW2, 0, 0}, // S_SAW1 + {SPR_SAWG, 1, 4, {A_Saw}, S_SAW3, 0, 0}, // S_SAW2 + {SPR_SAWG, 1, 0, {A_ReFire}, S_SAW, 0, 0}, // S_SAW3 + {SPR_PLSG, 0, 1, {A_WeaponReady}, S_PLASMA, 0, 0}, // S_PLASMA + {SPR_PLSG, 0, 1, {A_Lower}, S_PLASMADOWN, 0, 0}, // S_PLASMADOWN + {SPR_PLSG, 0, 1, {A_Raise}, S_PLASMAUP, 0, 0}, // S_PLASMAUP + {SPR_PLSG, 0, 3, {A_FirePlasma}, S_PLASMA2, 0, 0}, // S_PLASMA1 + {SPR_PLSG, 1, 20, {A_ReFire}, S_PLASMA, 0, 0}, // S_PLASMA2 + {SPR_PLSF, 32768, 4, {A_Light1}, S_LIGHTDONE, 0, 0}, // S_PLASMAFLASH1 + {SPR_PLSF, 32769, 4, {A_Light1}, S_LIGHTDONE, 0, 0}, // S_PLASMAFLASH2 + {SPR_BFGG, 0, 1, {A_WeaponReady}, S_BFG, 0, 0}, // S_BFG + {SPR_BFGG, 0, 1, {A_Lower}, S_BFGDOWN, 0, 0}, // S_BFGDOWN + {SPR_BFGG, 0, 1, {A_Raise}, S_BFGUP, 0, 0}, // S_BFGUP + {SPR_BFGG, 0, 20, {A_BFGsound}, S_BFG2, 0, 0}, // S_BFG1 + {SPR_BFGG, 1, 10, {A_GunFlash}, S_BFG3, 0, 0}, // S_BFG2 + {SPR_BFGG, 1, 10, {A_FireBFG}, S_BFG4, 0, 0}, // S_BFG3 + {SPR_BFGG, 1, 20, {A_ReFire}, S_BFG, 0, 0}, // S_BFG4 + {SPR_BFGF, 32768, 11, {A_Light1}, S_BFGFLASH2, 0, 0}, // S_BFGFLASH1 + {SPR_BFGF, 32769, 6, {A_Light2}, S_LIGHTDONE, 0, 0}, // S_BFGFLASH2 + {SPR_BLUD, 2, 8, {NULL}, S_BLOOD2, 0, 0}, // S_BLOOD1 + {SPR_BLUD, 1, 8, {NULL}, S_BLOOD3, 0, 0}, // S_BLOOD2 + {SPR_BLUD, 0, 8, {NULL}, S_NULL, 0, 0}, // S_BLOOD3 + {SPR_PUFF, 32768, 4, {NULL}, S_PUFF2, 0, 0}, // S_PUFF1 + {SPR_PUFF, 1, 4, {NULL}, S_PUFF3, 0, 0}, // S_PUFF2 + {SPR_PUFF, 2, 4, {NULL}, S_PUFF4, 0, 0}, // S_PUFF3 + {SPR_PUFF, 3, 4, {NULL}, S_NULL, 0, 0}, // S_PUFF4 + {SPR_BAL1, 32768, 4, {NULL}, S_TBALL2, 0, 0}, // S_TBALL1 + {SPR_BAL1, 32769, 4, {NULL}, S_TBALL1, 0, 0}, // S_TBALL2 + {SPR_BAL1, 32770, 6, {NULL}, S_TBALLX2, 0, 0}, // S_TBALLX1 + {SPR_BAL1, 32771, 6, {NULL}, S_TBALLX3, 0, 0}, // S_TBALLX2 + {SPR_BAL1, 32772, 6, {NULL}, S_NULL, 0, 0}, // S_TBALLX3 + {SPR_BAL2, 32768, 4, {NULL}, S_RBALL2, 0, 0}, // S_RBALL1 + {SPR_BAL2, 32769, 4, {NULL}, S_RBALL1, 0, 0}, // S_RBALL2 + {SPR_BAL2, 32770, 6, {NULL}, S_RBALLX2, 0, 0}, // S_RBALLX1 + {SPR_BAL2, 32771, 6, {NULL}, S_RBALLX3, 0, 0}, // S_RBALLX2 + {SPR_BAL2, 32772, 6, {NULL}, S_NULL, 0, 0}, // S_RBALLX3 + {SPR_PLSS, 32768, 6, {NULL}, S_PLASBALL2, 0, 0}, // S_PLASBALL + {SPR_PLSS, 32769, 6, {NULL}, S_PLASBALL, 0, 0}, // S_PLASBALL2 + {SPR_PLSE, 32768, 4, {NULL}, S_PLASEXP2, 0, 0}, // S_PLASEXP + {SPR_PLSE, 32769, 4, {NULL}, S_PLASEXP3, 0, 0}, // S_PLASEXP2 + {SPR_PLSE, 32770, 4, {NULL}, S_PLASEXP4, 0, 0}, // S_PLASEXP3 + {SPR_PLSE, 32771, 4, {NULL}, S_PLASEXP5, 0, 0}, // S_PLASEXP4 + {SPR_PLSE, 32772, 4, {NULL}, S_NULL, 0, 0}, // S_PLASEXP5 + {SPR_MISL, 32768, 1, {NULL}, S_ROCKET, 0, 0}, // S_ROCKET + {SPR_BFS1, 32768, 4, {NULL}, S_BFGSHOT2, 0, 0}, // S_BFGSHOT + {SPR_BFS1, 32769, 4, {NULL}, S_BFGSHOT, 0, 0}, // S_BFGSHOT2 + {SPR_BFE1, 32768, 8, {NULL}, S_BFGLAND2, 0, 0}, // S_BFGLAND + {SPR_BFE1, 32769, 8, {NULL}, S_BFGLAND3, 0, 0}, // S_BFGLAND2 + {SPR_BFE1, 32770, 8, {A_BFGSpray}, S_BFGLAND4, 0, 0}, // S_BFGLAND3 + {SPR_BFE1, 32771, 8, {NULL}, S_BFGLAND5, 0, 0}, // S_BFGLAND4 + {SPR_BFE1, 32772, 8, {NULL}, S_BFGLAND6, 0, 0}, // S_BFGLAND5 + {SPR_BFE1, 32773, 8, {NULL}, S_NULL, 0, 0}, // S_BFGLAND6 + {SPR_BFE2, 32768, 8, {NULL}, S_BFGEXP2, 0, 0}, // S_BFGEXP + {SPR_BFE2, 32769, 8, {NULL}, S_BFGEXP3, 0, 0}, // S_BFGEXP2 + {SPR_BFE2, 32770, 8, {NULL}, S_BFGEXP4, 0, 0}, // S_BFGEXP3 + {SPR_BFE2, 32771, 8, {NULL}, S_NULL, 0, 0}, // S_BFGEXP4 + {SPR_MISL, 32769, 8, {A_Explode}, S_EXPLODE2, 0, 0}, // S_EXPLODE1 + {SPR_MISL, 32770, 6, {NULL}, S_EXPLODE3, 0, 0}, // S_EXPLODE2 + {SPR_MISL, 32771, 4, {NULL}, S_NULL, 0, 0}, // S_EXPLODE3 + {SPR_TFOG, 32768, 6, {NULL}, S_TFOG01, 0, 0}, // S_TFOG + {SPR_TFOG, 32769, 6, {NULL}, S_TFOG02, 0, 0}, // S_TFOG01 + {SPR_TFOG, 32768, 6, {NULL}, S_TFOG2, 0, 0}, // S_TFOG02 + {SPR_TFOG, 32769, 6, {NULL}, S_TFOG3, 0, 0}, // S_TFOG2 + {SPR_TFOG, 32770, 6, {NULL}, S_TFOG4, 0, 0}, // S_TFOG3 + {SPR_TFOG, 32771, 6, {NULL}, S_TFOG5, 0, 0}, // S_TFOG4 + {SPR_TFOG, 32772, 6, {NULL}, S_TFOG6, 0, 0}, // S_TFOG5 + {SPR_TFOG, 32773, 6, {NULL}, S_TFOG7, 0, 0}, // S_TFOG6 + {SPR_TFOG, 32774, 6, {NULL}, S_TFOG8, 0, 0}, // S_TFOG7 + {SPR_TFOG, 32775, 6, {NULL}, S_TFOG9, 0, 0}, // S_TFOG8 + {SPR_TFOG, 32776, 6, {NULL}, S_TFOG10, 0, 0}, // S_TFOG9 + {SPR_TFOG, 32777, 6, {NULL}, S_NULL, 0, 0}, // S_TFOG10 + {SPR_IFOG, 32768, 6, {NULL}, S_IFOG01, 0, 0}, // S_IFOG + {SPR_IFOG, 32769, 6, {NULL}, S_IFOG02, 0, 0}, // S_IFOG01 + {SPR_IFOG, 32768, 6, {NULL}, S_IFOG2, 0, 0}, // S_IFOG02 + {SPR_IFOG, 32769, 6, {NULL}, S_IFOG3, 0, 0}, // S_IFOG2 + {SPR_IFOG, 32770, 6, {NULL}, S_IFOG4, 0, 0}, // S_IFOG3 + {SPR_IFOG, 32771, 6, {NULL}, S_IFOG5, 0, 0}, // S_IFOG4 + {SPR_IFOG, 32772, 6, {NULL}, S_NULL, 0, 0}, // S_IFOG5 + {SPR_PLAY, 0, -1, {NULL}, S_NULL, 0, 0}, // S_PLAY + {SPR_PLAY, 0, 4, {NULL}, S_PLAY_RUN2, 0, 0}, // S_PLAY_RUN1 + {SPR_PLAY, 1, 4, {NULL}, S_PLAY_RUN3, 0, 0}, // S_PLAY_RUN2 + {SPR_PLAY, 2, 4, {NULL}, S_PLAY_RUN4, 0, 0}, // S_PLAY_RUN3 + {SPR_PLAY, 3, 4, {NULL}, S_PLAY_RUN1, 0, 0}, // S_PLAY_RUN4 + {SPR_PLAY, 4, 12, {NULL}, S_PLAY, 0, 0}, // S_PLAY_ATK1 + {SPR_PLAY, 32773, 6, {NULL}, S_PLAY_ATK1, 0, 0}, // S_PLAY_ATK2 + {SPR_PLAY, 6, 4, {NULL}, S_PLAY_PAIN2, 0, 0}, // S_PLAY_PAIN + {SPR_PLAY, 6, 4, {A_Pain}, S_PLAY, 0, 0}, // S_PLAY_PAIN2 + {SPR_PLAY, 7, 10, {NULL}, S_PLAY_DIE2, 0, 0}, // S_PLAY_DIE1 + {SPR_PLAY, 8, 10, {A_PlayerScream}, S_PLAY_DIE3, 0, 0}, // S_PLAY_DIE2 + {SPR_PLAY, 9, 10, {A_Fall}, S_PLAY_DIE4, 0, 0}, // S_PLAY_DIE3 + {SPR_PLAY, 10, 10, {NULL}, S_PLAY_DIE5, 0, 0}, // S_PLAY_DIE4 + {SPR_PLAY, 11, 10, {NULL}, S_PLAY_DIE6, 0, 0}, // S_PLAY_DIE5 + {SPR_PLAY, 12, 10, {NULL}, S_PLAY_DIE7, 0, 0}, // S_PLAY_DIE6 + {SPR_PLAY, 13, -1, {NULL}, S_NULL, 0, 0}, // S_PLAY_DIE7 + {SPR_PLAY, 14, 5, {NULL}, S_PLAY_XDIE2, 0, 0}, // S_PLAY_XDIE1 + {SPR_PLAY, 15, 5, {A_XScream}, S_PLAY_XDIE3, 0, 0}, // S_PLAY_XDIE2 + {SPR_PLAY, 16, 5, {A_Fall}, S_PLAY_XDIE4, 0, 0}, // S_PLAY_XDIE3 + {SPR_PLAY, 17, 5, {NULL}, S_PLAY_XDIE5, 0, 0}, // S_PLAY_XDIE4 + {SPR_PLAY, 18, 5, {NULL}, S_PLAY_XDIE6, 0, 0}, // S_PLAY_XDIE5 + {SPR_PLAY, 19, 5, {NULL}, S_PLAY_XDIE7, 0, 0}, // S_PLAY_XDIE6 + {SPR_PLAY, 20, 5, {NULL}, S_PLAY_XDIE8, 0, 0}, // S_PLAY_XDIE7 + {SPR_PLAY, 21, 5, {NULL}, S_PLAY_XDIE9, 0, 0}, // S_PLAY_XDIE8 + {SPR_PLAY, 22, -1, {NULL}, S_NULL, 0, 0}, // S_PLAY_XDIE9 + {SPR_POSS, 0, 10, {A_Look}, S_POSS_STND2, 0, 0}, // S_POSS_STND + {SPR_POSS, 1, 10, {A_Look}, S_POSS_STND, 0, 0}, // S_POSS_STND2 + {SPR_POSS, 0, 4, {A_Chase}, S_POSS_RUN2, 0, 0}, // S_POSS_RUN1 + {SPR_POSS, 0, 4, {A_Chase}, S_POSS_RUN3, 0, 0}, // S_POSS_RUN2 + {SPR_POSS, 1, 4, {A_Chase}, S_POSS_RUN4, 0, 0}, // S_POSS_RUN3 + {SPR_POSS, 1, 4, {A_Chase}, S_POSS_RUN5, 0, 0}, // S_POSS_RUN4 + {SPR_POSS, 2, 4, {A_Chase}, S_POSS_RUN6, 0, 0}, // S_POSS_RUN5 + {SPR_POSS, 2, 4, {A_Chase}, S_POSS_RUN7, 0, 0}, // S_POSS_RUN6 + {SPR_POSS, 3, 4, {A_Chase}, S_POSS_RUN8, 0, 0}, // S_POSS_RUN7 + {SPR_POSS, 3, 4, {A_Chase}, S_POSS_RUN1, 0, 0}, // S_POSS_RUN8 + {SPR_POSS, 4, 10, {A_FaceTarget}, S_POSS_ATK2, 0, 0}, // S_POSS_ATK1 + {SPR_POSS, 5, 8, {A_PosAttack}, S_POSS_ATK3, 0, 0}, // S_POSS_ATK2 + {SPR_POSS, 4, 8, {NULL}, S_POSS_RUN1, 0, 0}, // S_POSS_ATK3 + {SPR_POSS, 6, 3, {NULL}, S_POSS_PAIN2, 0, 0}, // S_POSS_PAIN + {SPR_POSS, 6, 3, {A_Pain}, S_POSS_RUN1, 0, 0}, // S_POSS_PAIN2 + {SPR_POSS, 7, 5, {NULL}, S_POSS_DIE2, 0, 0}, // S_POSS_DIE1 + {SPR_POSS, 8, 5, {A_Scream}, S_POSS_DIE3, 0, 0}, // S_POSS_DIE2 + {SPR_POSS, 9, 5, {A_Fall}, S_POSS_DIE4, 0, 0}, // S_POSS_DIE3 + {SPR_POSS, 10, 5, {NULL}, S_POSS_DIE5, 0, 0}, // S_POSS_DIE4 + {SPR_POSS, 11, -1, {NULL}, S_NULL, 0, 0}, // S_POSS_DIE5 + {SPR_POSS, 12, 5, {NULL}, S_POSS_XDIE2, 0, 0}, // S_POSS_XDIE1 + {SPR_POSS, 13, 5, {A_XScream}, S_POSS_XDIE3, 0, 0}, // S_POSS_XDIE2 + {SPR_POSS, 14, 5, {A_Fall}, S_POSS_XDIE4, 0, 0}, // S_POSS_XDIE3 + {SPR_POSS, 15, 5, {NULL}, S_POSS_XDIE5, 0, 0}, // S_POSS_XDIE4 + {SPR_POSS, 16, 5, {NULL}, S_POSS_XDIE6, 0, 0}, // S_POSS_XDIE5 + {SPR_POSS, 17, 5, {NULL}, S_POSS_XDIE7, 0, 0}, // S_POSS_XDIE6 + {SPR_POSS, 18, 5, {NULL}, S_POSS_XDIE8, 0, 0}, // S_POSS_XDIE7 + {SPR_POSS, 19, 5, {NULL}, S_POSS_XDIE9, 0, 0}, // S_POSS_XDIE8 + {SPR_POSS, 20, -1, {NULL}, S_NULL, 0, 0}, // S_POSS_XDIE9 + {SPR_POSS, 10, 5, {NULL}, S_POSS_RAISE2, 0, 0}, // S_POSS_RAISE1 + {SPR_POSS, 9, 5, {NULL}, S_POSS_RAISE3, 0, 0}, // S_POSS_RAISE2 + {SPR_POSS, 8, 5, {NULL}, S_POSS_RAISE4, 0, 0}, // S_POSS_RAISE3 + {SPR_POSS, 7, 5, {NULL}, S_POSS_RUN1, 0, 0}, // S_POSS_RAISE4 + {SPR_SPOS, 0, 10, {A_Look}, S_SPOS_STND2, 0, 0}, // S_SPOS_STND + {SPR_SPOS, 1, 10, {A_Look}, S_SPOS_STND, 0, 0}, // S_SPOS_STND2 + {SPR_SPOS, 0, 3, {A_Chase}, S_SPOS_RUN2, 0, 0}, // S_SPOS_RUN1 + {SPR_SPOS, 0, 3, {A_Chase}, S_SPOS_RUN3, 0, 0}, // S_SPOS_RUN2 + {SPR_SPOS, 1, 3, {A_Chase}, S_SPOS_RUN4, 0, 0}, // S_SPOS_RUN3 + {SPR_SPOS, 1, 3, {A_Chase}, S_SPOS_RUN5, 0, 0}, // S_SPOS_RUN4 + {SPR_SPOS, 2, 3, {A_Chase}, S_SPOS_RUN6, 0, 0}, // S_SPOS_RUN5 + {SPR_SPOS, 2, 3, {A_Chase}, S_SPOS_RUN7, 0, 0}, // S_SPOS_RUN6 + {SPR_SPOS, 3, 3, {A_Chase}, S_SPOS_RUN8, 0, 0}, // S_SPOS_RUN7 + {SPR_SPOS, 3, 3, {A_Chase}, S_SPOS_RUN1, 0, 0}, // S_SPOS_RUN8 + {SPR_SPOS, 4, 10, {A_FaceTarget}, S_SPOS_ATK2, 0, 0}, // S_SPOS_ATK1 + {SPR_SPOS, 32773, 10, {A_SPosAttack}, S_SPOS_ATK3, 0, 0}, // S_SPOS_ATK2 + {SPR_SPOS, 4, 10, {NULL}, S_SPOS_RUN1, 0, 0}, // S_SPOS_ATK3 + {SPR_SPOS, 6, 3, {NULL}, S_SPOS_PAIN2, 0, 0}, // S_SPOS_PAIN + {SPR_SPOS, 6, 3, {A_Pain}, S_SPOS_RUN1, 0, 0}, // S_SPOS_PAIN2 + {SPR_SPOS, 7, 5, {NULL}, S_SPOS_DIE2, 0, 0}, // S_SPOS_DIE1 + {SPR_SPOS, 8, 5, {A_Scream}, S_SPOS_DIE3, 0, 0}, // S_SPOS_DIE2 + {SPR_SPOS, 9, 5, {A_Fall}, S_SPOS_DIE4, 0, 0}, // S_SPOS_DIE3 + {SPR_SPOS, 10, 5, {NULL}, S_SPOS_DIE5, 0, 0}, // S_SPOS_DIE4 + {SPR_SPOS, 11, -1, {NULL}, S_NULL, 0, 0}, // S_SPOS_DIE5 + {SPR_SPOS, 12, 5, {NULL}, S_SPOS_XDIE2, 0, 0}, // S_SPOS_XDIE1 + {SPR_SPOS, 13, 5, {A_XScream}, S_SPOS_XDIE3, 0, 0}, // S_SPOS_XDIE2 + {SPR_SPOS, 14, 5, {A_Fall}, S_SPOS_XDIE4, 0, 0}, // S_SPOS_XDIE3 + {SPR_SPOS, 15, 5, {NULL}, S_SPOS_XDIE5, 0, 0}, // S_SPOS_XDIE4 + {SPR_SPOS, 16, 5, {NULL}, S_SPOS_XDIE6, 0, 0}, // S_SPOS_XDIE5 + {SPR_SPOS, 17, 5, {NULL}, S_SPOS_XDIE7, 0, 0}, // S_SPOS_XDIE6 + {SPR_SPOS, 18, 5, {NULL}, S_SPOS_XDIE8, 0, 0}, // S_SPOS_XDIE7 + {SPR_SPOS, 19, 5, {NULL}, S_SPOS_XDIE9, 0, 0}, // S_SPOS_XDIE8 + {SPR_SPOS, 20, -1, {NULL}, S_NULL, 0, 0}, // S_SPOS_XDIE9 + {SPR_SPOS, 11, 5, {NULL}, S_SPOS_RAISE2, 0, 0}, // S_SPOS_RAISE1 + {SPR_SPOS, 10, 5, {NULL}, S_SPOS_RAISE3, 0, 0}, // S_SPOS_RAISE2 + {SPR_SPOS, 9, 5, {NULL}, S_SPOS_RAISE4, 0, 0}, // S_SPOS_RAISE3 + {SPR_SPOS, 8, 5, {NULL}, S_SPOS_RAISE5, 0, 0}, // S_SPOS_RAISE4 + {SPR_SPOS, 7, 5, {NULL}, S_SPOS_RUN1, 0, 0}, // S_SPOS_RAISE5 + {SPR_VILE, 0, 10, {A_Look}, S_VILE_STND2, 0, 0}, // S_VILE_STND + {SPR_VILE, 1, 10, {A_Look}, S_VILE_STND, 0, 0}, // S_VILE_STND2 + // Arch-vile running + {SPR_VILE, 0, 2, {NULL}, S_VILE_RUN2, 0, 0}, // S_VILE_RUN1 + {SPR_VILE, 0, 2, {NULL}, S_VILE_RUN3, 0, 0}, // S_VILE_RUN2 + {SPR_VILE, 1, 2, {NULL}, S_VILE_RUN4, 0, 0}, // S_VILE_RUN3 + {SPR_VILE, 1, 2, {NULL}, S_VILE_RUN5, 0, 0}, // S_VILE_RUN4 + {SPR_VILE, 2, 2, {NULL}, S_VILE_RUN6, 0, 0}, // S_VILE_RUN5 + {SPR_VILE, 2, 2, {NULL}, S_VILE_RUN7, 0, 0}, // S_VILE_RUN6 + {SPR_VILE, 3, 2, {NULL}, S_VILE_RUN8, 0, 0}, // S_VILE_RUN7 + {SPR_VILE, 3, 2, {NULL}, S_VILE_RUN9, 0, 0}, // S_VILE_RUN8 + {SPR_VILE, 4, 2, {NULL}, S_VILE_RUN10, 0, 0}, // S_VILE_RUN9 + {SPR_VILE, 4, 2, {NULL}, S_VILE_RUN11, 0, 0}, // S_VILE_RUN10 + {SPR_VILE, 5, 2, {NULL}, S_VILE_RUN12, 0, 0}, // S_VILE_RUN11 + {SPR_VILE, 5, 2, {NULL}, S_VILE_RUN1, 0, 0}, // S_VILE_RUN12 + // Arch-vile attacking + {SPR_VILE, 32774, 0, {NULL}, S_VILE_ATK2, 0, 0}, // S_VILE_ATK1 + {SPR_VILE, 32774, 10, {NULL}, S_VILE_ATK3, 0, 0}, // S_VILE_ATK2 + {SPR_VILE, 32775, 8, {NULL}, S_VILE_ATK4, 0, 0}, // S_VILE_ATK3 + {SPR_VILE, 32776, 8, {NULL}, S_VILE_ATK5, 0, 0}, // S_VILE_ATK4 + {SPR_VILE, 32777, 8, {NULL}, S_VILE_ATK6, 0, 0}, // S_VILE_ATK5 + {SPR_VILE, 32778, 8, {NULL}, S_VILE_ATK7, 0, 0}, // S_VILE_ATK6 + {SPR_VILE, 32779, 8, {NULL}, S_VILE_ATK8, 0, 0}, // S_VILE_ATK7 + {SPR_VILE, 32780, 8, {NULL}, S_VILE_ATK9, 0, 0}, // S_VILE_ATK8 + {SPR_VILE, 32781, 8, {NULL}, S_VILE_ATK10, 0, 0}, // S_VILE_ATK9 + {SPR_VILE, 32782, 8, {NULL}, S_VILE_ATK11, 0, 0}, // S_VILE_ATK10 + {SPR_VILE, 32783, 20, {NULL}, S_VILE_RUN1, 0, 0}, // S_VILE_ATK11 + {SPR_VILE, 32794, 10, {NULL}, S_VILE_HEAL2, 0, 0}, // S_VILE_HEAL1 + {SPR_VILE, 32795, 10, {NULL}, S_VILE_HEAL3, 0, 0}, // S_VILE_HEAL2 + {SPR_VILE, 32796, 10, {NULL}, S_VILE_RUN1, 0, 0}, // S_VILE_HEAL3 + {SPR_VILE, 16, 5, {NULL}, S_VILE_PAIN2, 0, 0}, // S_VILE_PAIN + {SPR_VILE, 16, 5, {A_Pain}, S_VILE_RUN1, 0, 0}, // S_VILE_PAIN2 + {SPR_VILE, 16, 7, {NULL}, S_VILE_DIE2, 0, 0}, // S_VILE_DIE1 + {SPR_VILE, 17, 7, {A_Scream}, S_VILE_DIE3, 0, 0}, // S_VILE_DIE2 + {SPR_VILE, 18, 7, {A_Fall}, S_VILE_DIE4, 0, 0}, // S_VILE_DIE3 + {SPR_VILE, 19, 7, {NULL}, S_VILE_DIE5, 0, 0}, // S_VILE_DIE4 + {SPR_VILE, 20, 7, {NULL}, S_VILE_DIE6, 0, 0}, // S_VILE_DIE5 + {SPR_VILE, 21, 7, {NULL}, S_VILE_DIE7, 0, 0}, // S_VILE_DIE6 + {SPR_VILE, 22, 7, {NULL}, S_VILE_DIE8, 0, 0}, // S_VILE_DIE7 + {SPR_VILE, 23, 5, {NULL}, S_VILE_DIE9, 0, 0}, // S_VILE_DIE8 + {SPR_VILE, 24, 5, {NULL}, S_VILE_DIE10, 0, 0}, // S_VILE_DIE9 + {SPR_VILE, 25, -1, {NULL}, S_NULL, 0, 0}, // S_VILE_DIE10 + // Fire spawned by Arch-vile + {SPR_FIRE, 32768, 2, {NULL}, S_FIRE2, 0, 0}, // S_FIRE1 + {SPR_FIRE, 32769, 2, {NULL}, S_FIRE3, 0, 0}, // S_FIRE2 + {SPR_FIRE, 32768, 2, {NULL}, S_FIRE4, 0, 0}, // S_FIRE3 + {SPR_FIRE, 32769, 2, {NULL}, S_FIRE5, 0, 0}, // S_FIRE4 + {SPR_FIRE, 32770, 2, {NULL}, S_FIRE6, 0, 0}, // S_FIRE5 + {SPR_FIRE, 32769, 2, {NULL}, S_FIRE7, 0, 0}, // S_FIRE6 + {SPR_FIRE, 32770, 2, {NULL}, S_FIRE8, 0, 0}, // S_FIRE7 + {SPR_FIRE, 32769, 2, {NULL}, S_FIRE9, 0, 0}, // S_FIRE8 + {SPR_FIRE, 32770, 2, {NULL}, S_FIRE10, 0, 0}, // S_FIRE9 + {SPR_FIRE, 32771, 2, {NULL}, S_FIRE11, 0, 0}, // S_FIRE10 + {SPR_FIRE, 32770, 2, {NULL}, S_FIRE12, 0, 0}, // S_FIRE11 + {SPR_FIRE, 32771, 2, {NULL}, S_FIRE13, 0, 0}, // S_FIRE12 + {SPR_FIRE, 32770, 2, {NULL}, S_FIRE14, 0, 0}, // S_FIRE13 + {SPR_FIRE, 32771, 2, {NULL}, S_FIRE15, 0, 0}, // S_FIRE14 + {SPR_FIRE, 32772, 2, {NULL}, S_FIRE16, 0, 0}, // S_FIRE15 + {SPR_FIRE, 32771, 2, {NULL}, S_FIRE17, 0, 0}, // S_FIRE16 + {SPR_FIRE, 32772, 2, {NULL}, S_FIRE18, 0, 0}, // S_FIRE17 + {SPR_FIRE, 32771, 2, {NULL}, S_FIRE19, 0, 0}, // S_FIRE18 + {SPR_FIRE, 32772, 2, {NULL}, S_FIRE20, 0, 0}, // S_FIRE19 + {SPR_FIRE, 32773, 2, {NULL}, S_FIRE21, 0, 0}, // S_FIRE20 + {SPR_FIRE, 32772, 2, {NULL}, S_FIRE22, 0, 0}, // S_FIRE21 + {SPR_FIRE, 32773, 2, {NULL}, S_FIRE23, 0, 0}, // S_FIRE22 + {SPR_FIRE, 32772, 2, {NULL}, S_FIRE24, 0, 0}, // S_FIRE23 + {SPR_FIRE, 32773, 2, {NULL}, S_FIRE25, 0, 0}, // S_FIRE24 + {SPR_FIRE, 32774, 2, {NULL}, S_FIRE26, 0, 0}, // S_FIRE25 + {SPR_FIRE, 32775, 2, {NULL}, S_FIRE27, 0, 0}, // S_FIRE26 + {SPR_FIRE, 32774, 2, {NULL}, S_FIRE28, 0, 0}, // S_FIRE27 + {SPR_FIRE, 32775, 2, {NULL}, S_FIRE29, 0, 0}, // S_FIRE28 + {SPR_FIRE, 32774, 2, {NULL}, S_FIRE30, 0, 0}, // S_FIRE29 + {SPR_FIRE, 32775, 2, {NULL}, S_NULL, 0, 0}, // S_FIRE30 + {SPR_PUFF, 1, 4, {NULL}, S_SMOKE2, 0, 0}, // S_SMOKE1 + {SPR_PUFF, 2, 4, {NULL}, S_SMOKE3, 0, 0}, // S_SMOKE2 + {SPR_PUFF, 1, 4, {NULL}, S_SMOKE4, 0, 0}, // S_SMOKE3 + {SPR_PUFF, 2, 4, {NULL}, S_SMOKE5, 0, 0}, // S_SMOKE4 + {SPR_PUFF, 3, 4, {NULL}, S_NULL, 0, 0}, // S_SMOKE5 + // Arch-vile tracers + {SPR_FATB, 32768, 2, {NULL}, S_TRACER2, 0, 0}, // S_TRACER + {SPR_FATB, 32769, 2, {NULL}, S_TRACER, 0, 0}, // S_TRACER2 + {SPR_FBXP, 32768, 8, {NULL}, S_TRACEEXP2, 0, 0}, // S_TRACEEXP1 + {SPR_FBXP, 32769, 6, {NULL}, S_TRACEEXP3, 0, 0}, // S_TRACEEXP2 + {SPR_FBXP, 32770, 4, {NULL}, S_NULL, 0, 0}, // S_TRACEEXP3 + // Revenant + {SPR_SKEL, 0, 10, {A_Look}, S_SKEL_STND2, 0, 0}, // S_SKEL_STND + {SPR_SKEL, 1, 10, {A_Look}, S_SKEL_STND, 0, 0}, // S_SKEL_STND2 + {SPR_SKEL, 0, 2, {A_Chase}, S_SKEL_RUN2, 0, 0}, // S_SKEL_RUN1 + {SPR_SKEL, 0, 2, {A_Chase}, S_SKEL_RUN3, 0, 0}, // S_SKEL_RUN2 + {SPR_SKEL, 1, 2, {A_Chase}, S_SKEL_RUN4, 0, 0}, // S_SKEL_RUN3 + {SPR_SKEL, 1, 2, {A_Chase}, S_SKEL_RUN5, 0, 0}, // S_SKEL_RUN4 + {SPR_SKEL, 2, 2, {A_Chase}, S_SKEL_RUN6, 0, 0}, // S_SKEL_RUN5 + {SPR_SKEL, 2, 2, {A_Chase}, S_SKEL_RUN7, 0, 0}, // S_SKEL_RUN6 + {SPR_SKEL, 3, 2, {A_Chase}, S_SKEL_RUN8, 0, 0}, // S_SKEL_RUN7 + {SPR_SKEL, 3, 2, {A_Chase}, S_SKEL_RUN9, 0, 0}, // S_SKEL_RUN8 + {SPR_SKEL, 4, 2, {A_Chase}, S_SKEL_RUN10, 0, 0}, // S_SKEL_RUN9 + {SPR_SKEL, 4, 2, {A_Chase}, S_SKEL_RUN11, 0, 0}, // S_SKEL_RUN10 + {SPR_SKEL, 5, 2, {A_Chase}, S_SKEL_RUN12, 0, 0}, // S_SKEL_RUN11 + {SPR_SKEL, 5, 2, {A_Chase}, S_SKEL_RUN1, 0, 0}, // S_SKEL_RUN12 + {SPR_SKEL, 6, 0, {A_FaceTarget}, S_SKEL_FIST2, 0, 0}, // S_SKEL_FIST1 + {SPR_SKEL, 6, 6, {NULL}, S_SKEL_FIST3, 0, 0}, // S_SKEL_FIST2 + {SPR_SKEL, 7, 6, {A_FaceTarget}, S_SKEL_FIST4, 0, 0}, // S_SKEL_FIST3 + {SPR_SKEL, 8, 6, {NULL}, S_SKEL_RUN1, 0, 0}, // S_SKEL_FIST4 + {SPR_SKEL, 32777, 0, {A_FaceTarget}, S_SKEL_MISS2, 0, 0}, // S_SKEL_MISS1 + {SPR_SKEL, 32777, 10, {A_FaceTarget}, S_SKEL_MISS3, 0, 0}, // S_SKEL_MISS2 + {SPR_SKEL, 10, 10, {NULL}, S_SKEL_MISS4, 0, 0}, // S_SKEL_MISS3 + {SPR_SKEL, 10, 10, {A_FaceTarget}, S_SKEL_RUN1, 0, 0}, // S_SKEL_MISS4 + {SPR_SKEL, 11, 5, {NULL}, S_SKEL_PAIN2, 0, 0}, // S_SKEL_PAIN + {SPR_SKEL, 11, 5, {A_Pain}, S_SKEL_RUN1, 0, 0}, // S_SKEL_PAIN2 + {SPR_SKEL, 11, 7, {NULL}, S_SKEL_DIE2, 0, 0}, // S_SKEL_DIE1 + {SPR_SKEL, 12, 7, {NULL}, S_SKEL_DIE3, 0, 0}, // S_SKEL_DIE2 + {SPR_SKEL, 13, 7, {A_Scream}, S_SKEL_DIE4, 0, 0}, // S_SKEL_DIE3 + {SPR_SKEL, 14, 7, {A_Fall}, S_SKEL_DIE5, 0, 0}, // S_SKEL_DIE4 + {SPR_SKEL, 15, 7, {NULL}, S_SKEL_DIE6, 0, 0}, // S_SKEL_DIE5 + {SPR_SKEL, 16, -1, {NULL}, S_NULL, 0, 0}, // S_SKEL_DIE6 + {SPR_SKEL, 16, 5, {NULL}, S_SKEL_RAISE2, 0, 0}, // S_SKEL_RAISE1 + {SPR_SKEL, 15, 5, {NULL}, S_SKEL_RAISE3, 0, 0}, // S_SKEL_RAISE2 + {SPR_SKEL, 14, 5, {NULL}, S_SKEL_RAISE4, 0, 0}, // S_SKEL_RAISE3 + {SPR_SKEL, 13, 5, {NULL}, S_SKEL_RAISE5, 0, 0}, // S_SKEL_RAISE4 + {SPR_SKEL, 12, 5, {NULL}, S_SKEL_RAISE6, 0, 0}, // S_SKEL_RAISE5 + {SPR_SKEL, 11, 5, {NULL}, S_SKEL_RUN1, 0, 0}, // S_SKEL_RAISE6 + // Mancubus + {SPR_MANF, 32768, 4, {NULL}, S_FATSHOT2, 0, 0}, // S_FATSHOT1 + {SPR_MANF, 32769, 4, {NULL}, S_FATSHOT1, 0, 0}, // S_FATSHOT2 + {SPR_MISL, 32769, 8, {NULL}, S_FATSHOTX2, 0, 0}, // S_FATSHOTX1 + {SPR_MISL, 32770, 6, {NULL}, S_FATSHOTX3, 0, 0}, // S_FATSHOTX2 + {SPR_MISL, 32771, 4, {NULL}, S_NULL, 0, 0}, // S_FATSHOTX3 + {SPR_FATT, 0, 15, {A_Look}, S_FATT_STND2, 0, 0}, // S_FATT_STND + {SPR_FATT, 1, 15, {A_Look}, S_FATT_STND, 0, 0}, // S_FATT_STND2 + {SPR_FATT, 0, 4, {A_Chase}, S_FATT_RUN2, 0, 0}, // S_FATT_RUN1 + {SPR_FATT, 0, 4, {A_Chase}, S_FATT_RUN3, 0, 0}, // S_FATT_RUN2 + {SPR_FATT, 1, 4, {A_Chase}, S_FATT_RUN4, 0, 0}, // S_FATT_RUN3 + {SPR_FATT, 1, 4, {A_Chase}, S_FATT_RUN5, 0, 0}, // S_FATT_RUN4 + {SPR_FATT, 2, 4, {A_Chase}, S_FATT_RUN6, 0, 0}, // S_FATT_RUN5 + {SPR_FATT, 2, 4, {A_Chase}, S_FATT_RUN7, 0, 0}, // S_FATT_RUN6 + {SPR_FATT, 3, 4, {A_Chase}, S_FATT_RUN8, 0, 0}, // S_FATT_RUN7 + {SPR_FATT, 3, 4, {A_Chase}, S_FATT_RUN9, 0, 0}, // S_FATT_RUN8 + {SPR_FATT, 4, 4, {A_Chase}, S_FATT_RUN10, 0, 0}, // S_FATT_RUN9 + {SPR_FATT, 4, 4, {A_Chase}, S_FATT_RUN11, 0, 0}, // S_FATT_RUN10 + {SPR_FATT, 5, 4, {A_Chase}, S_FATT_RUN12, 0, 0}, // S_FATT_RUN11 + {SPR_FATT, 5, 4, {A_Chase}, S_FATT_RUN1, 0, 0}, // S_FATT_RUN12 + {SPR_FATT, 6, 20, {NULL}, S_FATT_ATK2, 0, 0}, // S_FATT_ATK1 + {SPR_FATT, 32775, 10, {NULL}, S_FATT_ATK3, 0, 0}, // S_FATT_ATK2 + {SPR_FATT, 8, 5, {NULL}, S_FATT_ATK4, 0, 0}, // S_FATT_ATK3 + {SPR_FATT, 6, 5, {NULL}, S_FATT_ATK5, 0, 0}, // S_FATT_ATK4 + {SPR_FATT, 32775, 10, {NULL}, S_FATT_ATK6, 0, 0}, // S_FATT_ATK5 + {SPR_FATT, 8, 5, {A_FaceTarget}, S_FATT_ATK7, 0, 0}, // S_FATT_ATK6 + {SPR_FATT, 6, 5, {A_FaceTarget}, S_FATT_ATK8, 0, 0}, // S_FATT_ATK7 + {SPR_FATT, 32775, 10, {NULL}, S_FATT_ATK9, 0, 0}, // S_FATT_ATK8 + {SPR_FATT, 8, 5, {A_FaceTarget}, S_FATT_ATK10, 0, 0}, // S_FATT_ATK9 + {SPR_FATT, 6, 5, {A_FaceTarget}, S_FATT_RUN1, 0, 0}, // S_FATT_ATK10 + {SPR_FATT, 9, 3, {NULL}, S_FATT_PAIN2, 0, 0}, // S_FATT_PAIN + {SPR_FATT, 9, 3, {NULL}, S_FATT_RUN1, 0, 0}, // S_FATT_PAIN2 + {SPR_FATT, 10, 6, {NULL}, S_FATT_DIE2, 0, 0}, // S_FATT_DIE1 + {SPR_FATT, 11, 6, {A_Scream}, S_FATT_DIE3, 0, 0}, // S_FATT_DIE2 + {SPR_FATT, 12, 6, {A_Fall}, S_FATT_DIE4, 0, 0}, // S_FATT_DIE3 + {SPR_FATT, 13, 6, {NULL}, S_FATT_DIE5, 0, 0}, // S_FATT_DIE4 + {SPR_FATT, 14, 6, {NULL}, S_FATT_DIE6, 0, 0}, // S_FATT_DIE5 + {SPR_FATT, 15, 6, {NULL}, S_FATT_DIE7, 0, 0}, // S_FATT_DIE6 + {SPR_FATT, 16, 6, {NULL}, S_FATT_DIE8, 0, 0}, // S_FATT_DIE7 + {SPR_FATT, 17, 6, {NULL}, S_FATT_DIE9, 0, 0}, // S_FATT_DIE8 + {SPR_FATT, 18, 6, {NULL}, S_FATT_DIE10, 0, 0}, // S_FATT_DIE9 + {SPR_FATT, 19, -1, {NULL}, S_NULL, 0, 0}, // S_FATT_DIE10 + {SPR_FATT, 17, 5, {NULL}, S_FATT_RAISE2, 0, 0}, // S_FATT_RAISE1 + {SPR_FATT, 16, 5, {NULL}, S_FATT_RAISE3, 0, 0}, // S_FATT_RAISE2 + {SPR_FATT, 15, 5, {NULL}, S_FATT_RAISE4, 0, 0}, // S_FATT_RAISE3 + {SPR_FATT, 14, 5, {NULL}, S_FATT_RAISE5, 0, 0}, // S_FATT_RAISE4 + {SPR_FATT, 13, 5, {NULL}, S_FATT_RAISE6, 0, 0}, // S_FATT_RAISE5 + {SPR_FATT, 12, 5, {NULL}, S_FATT_RAISE7, 0, 0}, // S_FATT_RAISE6 + {SPR_FATT, 11, 5, {NULL}, S_FATT_RAISE8, 0, 0}, // S_FATT_RAISE7 + {SPR_FATT, 10, 5, {NULL}, S_FATT_RUN1, 0, 0}, // S_FATT_RAISE8 + // Chain gunner + {SPR_CPOS, 0, 10, {A_Look}, S_CPOS_STND2, 0, 0}, // S_CPOS_STND + {SPR_CPOS, 1, 10, {A_Look}, S_CPOS_STND, 0, 0}, // S_CPOS_STND2 + {SPR_CPOS, 0, 3, {A_Chase}, S_CPOS_RUN2, 0, 0}, // S_CPOS_RUN1 + {SPR_CPOS, 0, 3, {A_Chase}, S_CPOS_RUN3, 0, 0}, // S_CPOS_RUN2 + {SPR_CPOS, 1, 3, {A_Chase}, S_CPOS_RUN4, 0, 0}, // S_CPOS_RUN3 + {SPR_CPOS, 1, 3, {A_Chase}, S_CPOS_RUN5, 0, 0}, // S_CPOS_RUN4 + {SPR_CPOS, 2, 3, {A_Chase}, S_CPOS_RUN6, 0, 0}, // S_CPOS_RUN5 + {SPR_CPOS, 2, 3, {A_Chase}, S_CPOS_RUN7, 0, 0}, // S_CPOS_RUN6 + {SPR_CPOS, 3, 3, {A_Chase}, S_CPOS_RUN8, 0, 0}, // S_CPOS_RUN7 + {SPR_CPOS, 3, 3, {A_Chase}, S_CPOS_RUN1, 0, 0}, // S_CPOS_RUN8 + {SPR_CPOS, 4, 10, {A_FaceTarget}, S_CPOS_ATK2, 0, 0}, // S_CPOS_ATK1 + {SPR_CPOS, 32773, 4, {NULL}, S_CPOS_ATK3, 0, 0}, // S_CPOS_ATK2 + {SPR_CPOS, 32772, 4, {NULL}, S_CPOS_ATK4, 0, 0}, // S_CPOS_ATK3 + {SPR_CPOS, 5, 1, {NULL}, S_CPOS_ATK2, 0, 0}, // S_CPOS_ATK4 + {SPR_CPOS, 6, 3, {NULL}, S_CPOS_PAIN2, 0, 0}, // S_CPOS_PAIN + {SPR_CPOS, 6, 3, {A_Pain}, S_CPOS_RUN1, 0, 0}, // S_CPOS_PAIN2 + {SPR_CPOS, 7, 5, {NULL}, S_CPOS_DIE2, 0, 0}, // S_CPOS_DIE1 + {SPR_CPOS, 8, 5, {A_Scream}, S_CPOS_DIE3, 0, 0}, // S_CPOS_DIE2 + {SPR_CPOS, 9, 5, {A_Fall}, S_CPOS_DIE4, 0, 0}, // S_CPOS_DIE3 + {SPR_CPOS, 10, 5, {NULL}, S_CPOS_DIE5, 0, 0}, // S_CPOS_DIE4 + {SPR_CPOS, 11, 5, {NULL}, S_CPOS_DIE6, 0, 0}, // S_CPOS_DIE5 + {SPR_CPOS, 12, 5, {NULL}, S_CPOS_DIE7, 0, 0}, // S_CPOS_DIE6 + {SPR_CPOS, 13, -1, {NULL}, S_NULL, 0, 0}, // S_CPOS_DIE7 + {SPR_CPOS, 14, 5, {NULL}, S_CPOS_XDIE2, 0, 0}, // S_CPOS_XDIE1 + {SPR_CPOS, 15, 5, {A_XScream}, S_CPOS_XDIE3, 0, 0}, // S_CPOS_XDIE2 + {SPR_CPOS, 16, 5, {A_Fall}, S_CPOS_XDIE4, 0, 0}, // S_CPOS_XDIE3 + {SPR_CPOS, 17, 5, {NULL}, S_CPOS_XDIE5, 0, 0}, // S_CPOS_XDIE4 + {SPR_CPOS, 18, 5, {NULL}, S_CPOS_XDIE6, 0, 0}, // S_CPOS_XDIE5 + {SPR_CPOS, 19, -1, {NULL}, S_NULL, 0, 0}, // S_CPOS_XDIE6 + {SPR_CPOS, 13, 5, {NULL}, S_CPOS_RAISE2, 0, 0}, // S_CPOS_RAISE1 + {SPR_CPOS, 12, 5, {NULL}, S_CPOS_RAISE3, 0, 0}, // S_CPOS_RAISE2 + {SPR_CPOS, 11, 5, {NULL}, S_CPOS_RAISE4, 0, 0}, // S_CPOS_RAISE3 + {SPR_CPOS, 10, 5, {NULL}, S_CPOS_RAISE5, 0, 0}, // S_CPOS_RAISE4 + {SPR_CPOS, 9, 5, {NULL}, S_CPOS_RAISE6, 0, 0}, // S_CPOS_RAISE5 + {SPR_CPOS, 8, 5, {NULL}, S_CPOS_RAISE7, 0, 0}, // S_CPOS_RAISE6 + {SPR_CPOS, 7, 5, {NULL}, S_CPOS_RUN1, 0, 0}, // S_CPOS_RAISE7 + {SPR_TROO, 0, 10, {A_Look}, S_TROO_STND2, 0, 0}, // S_TROO_STND + {SPR_TROO, 1, 10, {A_Look}, S_TROO_STND, 0, 0}, // S_TROO_STND2 + {SPR_TROO, 0, 3, {A_Chase}, S_TROO_RUN2, 0, 0}, // S_TROO_RUN1 + {SPR_TROO, 0, 3, {A_Chase}, S_TROO_RUN3, 0, 0}, // S_TROO_RUN2 + {SPR_TROO, 1, 3, {A_Chase}, S_TROO_RUN4, 0, 0}, // S_TROO_RUN3 + {SPR_TROO, 1, 3, {A_Chase}, S_TROO_RUN5, 0, 0}, // S_TROO_RUN4 + {SPR_TROO, 2, 3, {A_Chase}, S_TROO_RUN6, 0, 0}, // S_TROO_RUN5 + {SPR_TROO, 2, 3, {A_Chase}, S_TROO_RUN7, 0, 0}, // S_TROO_RUN6 + {SPR_TROO, 3, 3, {A_Chase}, S_TROO_RUN8, 0, 0}, // S_TROO_RUN7 + {SPR_TROO, 3, 3, {A_Chase}, S_TROO_RUN1, 0, 0}, // S_TROO_RUN8 + {SPR_TROO, 4, 8, {A_FaceTarget}, S_TROO_ATK2, 0, 0}, // S_TROO_ATK1 + {SPR_TROO, 5, 8, {A_FaceTarget}, S_TROO_ATK3, 0, 0}, // S_TROO_ATK2 + {SPR_TROO, 6, 6, {A_TroopAttack}, S_TROO_RUN1, 0, 0}, // S_TROO_ATK3 + {SPR_TROO, 7, 2, {NULL}, S_TROO_PAIN2, 0, 0}, // S_TROO_PAIN + {SPR_TROO, 7, 2, {A_Pain}, S_TROO_RUN1, 0, 0}, // S_TROO_PAIN2 + {SPR_TROO, 8, 8, {NULL}, S_TROO_DIE2, 0, 0}, // S_TROO_DIE1 + {SPR_TROO, 9, 8, {A_Scream}, S_TROO_DIE3, 0, 0}, // S_TROO_DIE2 + {SPR_TROO, 10, 6, {NULL}, S_TROO_DIE4, 0, 0}, // S_TROO_DIE3 + {SPR_TROO, 11, 6, {A_Fall}, S_TROO_DIE5, 0, 0}, // S_TROO_DIE4 + {SPR_TROO, 12, -1, {NULL}, S_NULL, 0, 0}, // S_TROO_DIE5 + {SPR_TROO, 13, 5, {NULL}, S_TROO_XDIE2, 0, 0}, // S_TROO_XDIE1 + {SPR_TROO, 14, 5, {A_XScream}, S_TROO_XDIE3, 0, 0}, // S_TROO_XDIE2 + {SPR_TROO, 15, 5, {NULL}, S_TROO_XDIE4, 0, 0}, // S_TROO_XDIE3 + {SPR_TROO, 16, 5, {A_Fall}, S_TROO_XDIE5, 0, 0}, // S_TROO_XDIE4 + {SPR_TROO, 17, 5, {NULL}, S_TROO_XDIE6, 0, 0}, // S_TROO_XDIE5 + {SPR_TROO, 18, 5, {NULL}, S_TROO_XDIE7, 0, 0}, // S_TROO_XDIE6 + {SPR_TROO, 19, 5, {NULL}, S_TROO_XDIE8, 0, 0}, // S_TROO_XDIE7 + {SPR_TROO, 20, -1, {NULL}, S_NULL, 0, 0}, // S_TROO_XDIE8 + {SPR_TROO, 12, 8, {NULL}, S_TROO_RAISE2, 0, 0}, // S_TROO_RAISE1 + {SPR_TROO, 11, 8, {NULL}, S_TROO_RAISE3, 0, 0}, // S_TROO_RAISE2 + {SPR_TROO, 10, 6, {NULL}, S_TROO_RAISE4, 0, 0}, // S_TROO_RAISE3 + {SPR_TROO, 9, 6, {NULL}, S_TROO_RAISE5, 0, 0}, // S_TROO_RAISE4 + {SPR_TROO, 8, 6, {NULL}, S_TROO_RUN1, 0, 0}, // S_TROO_RAISE5 + {SPR_SARG, 0, 10, {A_Look}, S_SARG_STND2, 0, 0}, // S_SARG_STND + {SPR_SARG, 1, 10, {A_Look}, S_SARG_STND, 0, 0}, // S_SARG_STND2 + {SPR_SARG, 0, 2, {A_Chase}, S_SARG_RUN2, 0, 0}, // S_SARG_RUN1 + {SPR_SARG, 0, 2, {A_Chase}, S_SARG_RUN3, 0, 0}, // S_SARG_RUN2 + {SPR_SARG, 1, 2, {A_Chase}, S_SARG_RUN4, 0, 0}, // S_SARG_RUN3 + {SPR_SARG, 1, 2, {A_Chase}, S_SARG_RUN5, 0, 0}, // S_SARG_RUN4 + {SPR_SARG, 2, 2, {A_Chase}, S_SARG_RUN6, 0, 0}, // S_SARG_RUN5 + {SPR_SARG, 2, 2, {A_Chase}, S_SARG_RUN7, 0, 0}, // S_SARG_RUN6 + {SPR_SARG, 3, 2, {A_Chase}, S_SARG_RUN8, 0, 0}, // S_SARG_RUN7 + {SPR_SARG, 3, 2, {A_Chase}, S_SARG_RUN1, 0, 0}, // S_SARG_RUN8 + {SPR_SARG, 4, 8, {A_FaceTarget}, S_SARG_ATK2, 0, 0}, // S_SARG_ATK1 + {SPR_SARG, 5, 8, {A_FaceTarget}, S_SARG_ATK3, 0, 0}, // S_SARG_ATK2 + {SPR_SARG, 6, 8, {A_SargAttack}, S_SARG_RUN1, 0, 0}, // S_SARG_ATK3 + {SPR_SARG, 7, 2, {NULL}, S_SARG_PAIN2, 0, 0}, // S_SARG_PAIN + {SPR_SARG, 7, 2, {A_Pain}, S_SARG_RUN1, 0, 0}, // S_SARG_PAIN2 + {SPR_SARG, 8, 8, {NULL}, S_SARG_DIE2, 0, 0}, // S_SARG_DIE1 + {SPR_SARG, 9, 8, {A_Scream}, S_SARG_DIE3, 0, 0}, // S_SARG_DIE2 + {SPR_SARG, 10, 4, {NULL}, S_SARG_DIE4, 0, 0}, // S_SARG_DIE3 + {SPR_SARG, 11, 4, {A_Fall}, S_SARG_DIE5, 0, 0}, // S_SARG_DIE4 + {SPR_SARG, 12, 4, {NULL}, S_SARG_DIE6, 0, 0}, // S_SARG_DIE5 + {SPR_SARG, 13, -1, {NULL}, S_NULL, 0, 0}, // S_SARG_DIE6 + {SPR_SARG, 13, 5, {NULL}, S_SARG_RAISE2, 0, 0}, // S_SARG_RAISE1 + {SPR_SARG, 12, 5, {NULL}, S_SARG_RAISE3, 0, 0}, // S_SARG_RAISE2 + {SPR_SARG, 11, 5, {NULL}, S_SARG_RAISE4, 0, 0}, // S_SARG_RAISE3 + {SPR_SARG, 10, 5, {NULL}, S_SARG_RAISE5, 0, 0}, // S_SARG_RAISE4 + {SPR_SARG, 9, 5, {NULL}, S_SARG_RAISE6, 0, 0}, // S_SARG_RAISE5 + {SPR_SARG, 8, 5, {NULL}, S_SARG_RUN1, 0, 0}, // S_SARG_RAISE6 + {SPR_HEAD, 0, 10, {A_Look}, S_HEAD_STND, 0, 0}, // S_HEAD_STND + {SPR_HEAD, 0, 3, {A_Chase}, S_HEAD_RUN1, 0, 0}, // S_HEAD_RUN1 + {SPR_HEAD, 1, 5, {A_FaceTarget}, S_HEAD_ATK2, 0, 0}, // S_HEAD_ATK1 + {SPR_HEAD, 2, 5, {A_FaceTarget}, S_HEAD_ATK3, 0, 0}, // S_HEAD_ATK2 + {SPR_HEAD, 32771, 5, {A_HeadAttack}, S_HEAD_RUN1, 0, 0}, // S_HEAD_ATK3 + {SPR_HEAD, 4, 3, {NULL}, S_HEAD_PAIN2, 0, 0}, // S_HEAD_PAIN + {SPR_HEAD, 4, 3, {A_Pain}, S_HEAD_PAIN3, 0, 0}, // S_HEAD_PAIN2 + {SPR_HEAD, 5, 6, {NULL}, S_HEAD_RUN1, 0, 0}, // S_HEAD_PAIN3 + {SPR_HEAD, 6, 8, {NULL}, S_HEAD_DIE2, 0, 0}, // S_HEAD_DIE1 + {SPR_HEAD, 7, 8, {A_Scream}, S_HEAD_DIE3, 0, 0}, // S_HEAD_DIE2 + {SPR_HEAD, 8, 8, {NULL}, S_HEAD_DIE4, 0, 0}, // S_HEAD_DIE3 + {SPR_HEAD, 9, 8, {NULL}, S_HEAD_DIE5, 0, 0}, // S_HEAD_DIE4 + {SPR_HEAD, 10, 8, {A_Fall}, S_HEAD_DIE6, 0, 0}, // S_HEAD_DIE5 + {SPR_HEAD, 11, -1, {NULL}, S_NULL, 0, 0}, // S_HEAD_DIE6 + {SPR_HEAD, 11, 8, {NULL}, S_HEAD_RAISE2, 0, 0}, // S_HEAD_RAISE1 + {SPR_HEAD, 10, 8, {NULL}, S_HEAD_RAISE3, 0, 0}, // S_HEAD_RAISE2 + {SPR_HEAD, 9, 8, {NULL}, S_HEAD_RAISE4, 0, 0}, // S_HEAD_RAISE3 + {SPR_HEAD, 8, 8, {NULL}, S_HEAD_RAISE5, 0, 0}, // S_HEAD_RAISE4 + {SPR_HEAD, 7, 8, {NULL}, S_HEAD_RAISE6, 0, 0}, // S_HEAD_RAISE5 + {SPR_HEAD, 6, 8, {NULL}, S_HEAD_RUN1, 0, 0}, // S_HEAD_RAISE6 + {SPR_BAL7, 32768, 4, {NULL}, S_BRBALL2, 0, 0}, // S_BRBALL1 + {SPR_BAL7, 32769, 4, {NULL}, S_BRBALL1, 0, 0}, // S_BRBALL2 + {SPR_BAL7, 32770, 6, {NULL}, S_BRBALLX2, 0, 0}, // S_BRBALLX1 + {SPR_BAL7, 32771, 6, {NULL}, S_BRBALLX3, 0, 0}, // S_BRBALLX2 + {SPR_BAL7, 32772, 6, {NULL}, S_NULL, 0, 0}, // S_BRBALLX3 + {SPR_BOSS, 0, 10, {A_Look}, S_BOSS_STND2, 0, 0}, // S_BOSS_STND + {SPR_BOSS, 1, 10, {A_Look}, S_BOSS_STND, 0, 0}, // S_BOSS_STND2 + {SPR_BOSS, 0, 3, {A_Chase}, S_BOSS_RUN2, 0, 0}, // S_BOSS_RUN1 + {SPR_BOSS, 0, 3, {A_Chase}, S_BOSS_RUN3, 0, 0}, // S_BOSS_RUN2 + {SPR_BOSS, 1, 3, {A_Chase}, S_BOSS_RUN4, 0, 0}, // S_BOSS_RUN3 + {SPR_BOSS, 1, 3, {A_Chase}, S_BOSS_RUN5, 0, 0}, // S_BOSS_RUN4 + {SPR_BOSS, 2, 3, {A_Chase}, S_BOSS_RUN6, 0, 0}, // S_BOSS_RUN5 + {SPR_BOSS, 2, 3, {A_Chase}, S_BOSS_RUN7, 0, 0}, // S_BOSS_RUN6 + {SPR_BOSS, 3, 3, {A_Chase}, S_BOSS_RUN8, 0, 0}, // S_BOSS_RUN7 + {SPR_BOSS, 3, 3, {A_Chase}, S_BOSS_RUN1, 0, 0}, // S_BOSS_RUN8 + {SPR_BOSS, 4, 8, {A_FaceTarget}, S_BOSS_ATK2, 0, 0}, // S_BOSS_ATK1 + {SPR_BOSS, 5, 8, {A_FaceTarget}, S_BOSS_ATK3, 0, 0}, // S_BOSS_ATK2 + {SPR_BOSS, 6, 8, {A_BruisAttack}, S_BOSS_RUN1, 0, 0}, // S_BOSS_ATK3 + {SPR_BOSS, 7, 2, {NULL}, S_BOSS_PAIN2, 0, 0}, // S_BOSS_PAIN + {SPR_BOSS, 7, 2, {A_Pain}, S_BOSS_RUN1, 0, 0}, // S_BOSS_PAIN2 + {SPR_BOSS, 8, 8, {NULL}, S_BOSS_DIE2, 0, 0}, // S_BOSS_DIE1 + {SPR_BOSS, 9, 8, {A_Scream}, S_BOSS_DIE3, 0, 0}, // S_BOSS_DIE2 + {SPR_BOSS, 10, 8, {NULL}, S_BOSS_DIE4, 0, 0}, // S_BOSS_DIE3 + {SPR_BOSS, 11, 8, {A_Fall}, S_BOSS_DIE5, 0, 0}, // S_BOSS_DIE4 + {SPR_BOSS, 12, 8, {NULL}, S_BOSS_DIE6, 0, 0}, // S_BOSS_DIE5 + {SPR_BOSS, 13, 8, {NULL}, S_BOSS_DIE7, 0, 0}, // S_BOSS_DIE6 + {SPR_BOSS, 14, -1, {A_BossDeath}, S_NULL, 0, 0}, // S_BOSS_DIE7 + {SPR_BOSS, 14, 8, {NULL}, S_BOSS_RAISE2, 0, 0}, // S_BOSS_RAISE1 + {SPR_BOSS, 13, 8, {NULL}, S_BOSS_RAISE3, 0, 0}, // S_BOSS_RAISE2 + {SPR_BOSS, 12, 8, {NULL}, S_BOSS_RAISE4, 0, 0}, // S_BOSS_RAISE3 + {SPR_BOSS, 11, 8, {NULL}, S_BOSS_RAISE5, 0, 0}, // S_BOSS_RAISE4 + {SPR_BOSS, 10, 8, {NULL}, S_BOSS_RAISE6, 0, 0}, // S_BOSS_RAISE5 + {SPR_BOSS, 9, 8, {NULL}, S_BOSS_RAISE7, 0, 0}, // S_BOSS_RAISE6 + {SPR_BOSS, 8, 8, {NULL}, S_BOSS_RUN1, 0, 0}, // S_BOSS_RAISE7 + {SPR_BOS2, 0, 10, {A_Look}, S_BOS2_STND2, 0, 0}, // S_BOS2_STND + {SPR_BOS2, 1, 10, {A_Look}, S_BOS2_STND, 0, 0}, // S_BOS2_STND2 + {SPR_BOS2, 0, 3, {A_Chase}, S_BOS2_RUN2, 0, 0}, // S_BOS2_RUN1 + {SPR_BOS2, 0, 3, {A_Chase}, S_BOS2_RUN3, 0, 0}, // S_BOS2_RUN2 + {SPR_BOS2, 1, 3, {A_Chase}, S_BOS2_RUN4, 0, 0}, // S_BOS2_RUN3 + {SPR_BOS2, 1, 3, {A_Chase}, S_BOS2_RUN5, 0, 0}, // S_BOS2_RUN4 + {SPR_BOS2, 2, 3, {A_Chase}, S_BOS2_RUN6, 0, 0}, // S_BOS2_RUN5 + {SPR_BOS2, 2, 3, {A_Chase}, S_BOS2_RUN7, 0, 0}, // S_BOS2_RUN6 + {SPR_BOS2, 3, 3, {A_Chase}, S_BOS2_RUN8, 0, 0}, // S_BOS2_RUN7 + {SPR_BOS2, 3, 3, {A_Chase}, S_BOS2_RUN1, 0, 0}, // S_BOS2_RUN8 + {SPR_BOS2, 4, 8, {A_FaceTarget}, S_BOS2_ATK2, 0, 0}, // S_BOS2_ATK1 + {SPR_BOS2, 5, 8, {A_FaceTarget}, S_BOS2_ATK3, 0, 0}, // S_BOS2_ATK2 + {SPR_BOS2, 6, 8, {A_BruisAttack}, S_BOS2_RUN1, 0, 0}, // S_BOS2_ATK3 + {SPR_BOS2, 7, 2, {NULL}, S_BOS2_PAIN2, 0, 0}, // S_BOS2_PAIN + {SPR_BOS2, 7, 2, {A_Pain}, S_BOS2_RUN1, 0, 0}, // S_BOS2_PAIN2 + {SPR_BOS2, 8, 8, {NULL}, S_BOS2_DIE2, 0, 0}, // S_BOS2_DIE1 + {SPR_BOS2, 9, 8, {A_Scream}, S_BOS2_DIE3, 0, 0}, // S_BOS2_DIE2 + {SPR_BOS2, 10, 8, {NULL}, S_BOS2_DIE4, 0, 0}, // S_BOS2_DIE3 + {SPR_BOS2, 11, 8, {A_Fall}, S_BOS2_DIE5, 0, 0}, // S_BOS2_DIE4 + {SPR_BOS2, 12, 8, {NULL}, S_BOS2_DIE6, 0, 0}, // S_BOS2_DIE5 + {SPR_BOS2, 13, 8, {NULL}, S_BOS2_DIE7, 0, 0}, // S_BOS2_DIE6 + {SPR_BOS2, 14, -1, {NULL}, S_NULL, 0, 0}, // S_BOS2_DIE7 + {SPR_BOS2, 14, 8, {NULL}, S_BOS2_RAISE2, 0, 0}, // S_BOS2_RAISE1 + {SPR_BOS2, 13, 8, {NULL}, S_BOS2_RAISE3, 0, 0}, // S_BOS2_RAISE2 + {SPR_BOS2, 12, 8, {NULL}, S_BOS2_RAISE4, 0, 0}, // S_BOS2_RAISE3 + {SPR_BOS2, 11, 8, {NULL}, S_BOS2_RAISE5, 0, 0}, // S_BOS2_RAISE4 + {SPR_BOS2, 10, 8, {NULL}, S_BOS2_RAISE6, 0, 0}, // S_BOS2_RAISE5 + {SPR_BOS2, 9, 8, {NULL}, S_BOS2_RAISE7, 0, 0}, // S_BOS2_RAISE6 + {SPR_BOS2, 8, 8, {NULL}, S_BOS2_RUN1, 0, 0}, // S_BOS2_RAISE7 + {SPR_SKUL, 32768, 10, {A_Look}, S_SKULL_STND2, 0, 0}, // S_SKULL_STND + {SPR_SKUL, 32769, 10, {A_Look}, S_SKULL_STND, 0, 0}, // S_SKULL_STND2 + {SPR_SKUL, 32768, 6, {A_Chase}, S_SKULL_RUN2, 0, 0}, // S_SKULL_RUN1 + {SPR_SKUL, 32769, 6, {A_Chase}, S_SKULL_RUN1, 0, 0}, // S_SKULL_RUN2 + {SPR_SKUL, 32770, 10, {A_FaceTarget}, S_SKULL_ATK2, 0, 0}, // S_SKULL_ATK1 + {SPR_SKUL, 32771, 4, {NULL}, S_SKULL_ATK3, 0, 0}, // S_SKULL_ATK2 + {SPR_SKUL, 32770, 4, {NULL}, S_SKULL_ATK4, 0, 0}, // S_SKULL_ATK3 + {SPR_SKUL, 32771, 4, {NULL}, S_SKULL_ATK3, 0, 0}, // S_SKULL_ATK4 + {SPR_SKUL, 32772, 3, {NULL}, S_SKULL_PAIN2, 0, 0}, // S_SKULL_PAIN + {SPR_SKUL, 32772, 3, {A_Pain}, S_SKULL_RUN1, 0, 0}, // S_SKULL_PAIN2 + {SPR_SKUL, 32773, 6, {NULL}, S_SKULL_DIE2, 0, 0}, // S_SKULL_DIE1 + {SPR_SKUL, 32774, 6, {A_Scream}, S_SKULL_DIE3, 0, 0}, // S_SKULL_DIE2 + {SPR_SKUL, 32775, 6, {NULL}, S_SKULL_DIE4, 0, 0}, // S_SKULL_DIE3 + {SPR_SKUL, 32776, 6, {A_Fall}, S_SKULL_DIE5, 0, 0}, // S_SKULL_DIE4 + {SPR_SKUL, 9, 6, {NULL}, S_SKULL_DIE6, 0, 0}, // S_SKULL_DIE5 + {SPR_SKUL, 10, 6, {NULL}, S_NULL, 0, 0}, // S_SKULL_DIE6 + {SPR_SPID, 0, 10, {A_Look}, S_SPID_STND2, 0, 0}, // S_SPID_STND + {SPR_SPID, 1, 10, {A_Look}, S_SPID_STND, 0, 0}, // S_SPID_STND2 + {SPR_SPID, 0, 3, {NULL}, S_SPID_RUN2, 0, 0}, // S_SPID_RUN1 + {SPR_SPID, 0, 3, {A_Chase}, S_SPID_RUN3, 0, 0}, // S_SPID_RUN2 + {SPR_SPID, 1, 3, {A_Chase}, S_SPID_RUN4, 0, 0}, // S_SPID_RUN3 + {SPR_SPID, 1, 3, {A_Chase}, S_SPID_RUN5, 0, 0}, // S_SPID_RUN4 + {SPR_SPID, 2, 3, {A_Metal}, S_SPID_RUN6, 0, 0}, // S_SPID_RUN5 + {SPR_SPID, 2, 3, {A_Chase}, S_SPID_RUN7, 0, 0}, // S_SPID_RUN6 + {SPR_SPID, 3, 3, {A_Chase}, S_SPID_RUN8, 0, 0}, // S_SPID_RUN7 + {SPR_SPID, 3, 3, {A_Chase}, S_SPID_RUN9, 0, 0}, // S_SPID_RUN8 + {SPR_SPID, 4, 3, {NULL}, S_SPID_RUN10, 0, 0}, // S_SPID_RUN9 + {SPR_SPID, 4, 3, {A_Chase}, S_SPID_RUN11, 0, 0}, // S_SPID_RUN10 + {SPR_SPID, 5, 3, {A_Chase}, S_SPID_RUN12, 0, 0}, // S_SPID_RUN11 + {SPR_SPID, 5, 3, {A_Chase}, S_SPID_RUN1, 0, 0}, // S_SPID_RUN12 + {SPR_SPID, 32768, 20, {A_FaceTarget}, S_SPID_ATK2, 0, 0}, // S_SPID_ATK1 + {SPR_SPID, 32774, 4, {A_SPosAttack}, S_SPID_ATK3, 0, 0}, // S_SPID_ATK2 + {SPR_SPID, 32775, 4, {A_SPosAttack}, S_SPID_ATK4, 0, 0}, // S_SPID_ATK3 + {SPR_SPID, 32775, 1, {A_SpidRefire}, S_SPID_ATK2, 0, 0}, // S_SPID_ATK4 + {SPR_SPID, 8, 3, {NULL}, S_SPID_PAIN2, 0, 0}, // S_SPID_PAIN + {SPR_SPID, 8, 3, {A_Pain}, S_SPID_RUN1, 0, 0}, // S_SPID_PAIN2 + {SPR_SPID, 9, 20, {A_Scream}, S_SPID_DIE2, 0, 0}, // S_SPID_DIE1 + {SPR_SPID, 10, 10, {A_Fall}, S_SPID_DIE3, 0, 0}, // S_SPID_DIE2 + {SPR_SPID, 11, 10, {NULL}, S_SPID_DIE4, 0, 0}, // S_SPID_DIE3 + {SPR_SPID, 12, 10, {NULL}, S_SPID_DIE5, 0, 0}, // S_SPID_DIE4 + {SPR_SPID, 13, 10, {NULL}, S_SPID_DIE6, 0, 0}, // S_SPID_DIE5 + {SPR_SPID, 14, 10, {NULL}, S_SPID_DIE7, 0, 0}, // S_SPID_DIE6 + {SPR_SPID, 15, 10, {NULL}, S_SPID_DIE8, 0, 0}, // S_SPID_DIE7 + {SPR_SPID, 16, 10, {NULL}, S_SPID_DIE9, 0, 0}, // S_SPID_DIE8 + {SPR_SPID, 17, 10, {NULL}, S_SPID_DIE10, 0, 0}, // S_SPID_DIE9 + {SPR_SPID, 18, 30, {NULL}, S_SPID_DIE11, 0, 0}, // S_SPID_DIE10 + {SPR_SPID, 18, -1, {A_BossDeath}, S_NULL, 0, 0}, // S_SPID_DIE11 + {SPR_BSPI, 0, 10, {A_Look}, S_BSPI_STND2, 0, 0}, // S_BSPI_STND + {SPR_BSPI, 1, 10, {A_Look}, S_BSPI_STND, 0, 0}, // S_BSPI_STND2 + {SPR_BSPI, 0, 20, {NULL}, S_BSPI_RUN1, 0, 0}, // S_BSPI_SIGHT + {SPR_BSPI, 0, 3, {NULL}, S_BSPI_RUN2, 0, 0}, // S_BSPI_RUN1 + {SPR_BSPI, 0, 3, {A_Chase}, S_BSPI_RUN3, 0, 0}, // S_BSPI_RUN2 + {SPR_BSPI, 1, 3, {A_Chase}, S_BSPI_RUN4, 0, 0}, // S_BSPI_RUN3 + {SPR_BSPI, 1, 3, {A_Chase}, S_BSPI_RUN5, 0, 0}, // S_BSPI_RUN4 + {SPR_BSPI, 2, 3, {A_Chase}, S_BSPI_RUN6, 0, 0}, // S_BSPI_RUN5 + {SPR_BSPI, 2, 3, {A_Chase}, S_BSPI_RUN7, 0, 0}, // S_BSPI_RUN6 + {SPR_BSPI, 3, 3, {NULL}, S_BSPI_RUN8, 0, 0}, // S_BSPI_RUN7 + {SPR_BSPI, 3, 3, {A_Chase}, S_BSPI_RUN9, 0, 0}, // S_BSPI_RUN8 + {SPR_BSPI, 4, 3, {A_Chase}, S_BSPI_RUN10, 0, 0}, // S_BSPI_RUN9 + {SPR_BSPI, 4, 3, {A_Chase}, S_BSPI_RUN11, 0, 0}, // S_BSPI_RUN10 + {SPR_BSPI, 5, 3, {A_Chase}, S_BSPI_RUN12, 0, 0}, // S_BSPI_RUN11 + {SPR_BSPI, 5, 3, {A_Chase}, S_BSPI_RUN1, 0, 0}, // S_BSPI_RUN12 + {SPR_BSPI, 32768, 20, {A_FaceTarget}, S_BSPI_ATK2, 0, 0}, // S_BSPI_ATK1 + {SPR_BSPI, 32774, 4, {NULL}, S_BSPI_ATK3, 0, 0}, // S_BSPI_ATK2 + {SPR_BSPI, 32775, 4, {NULL}, S_BSPI_ATK4, 0, 0}, // S_BSPI_ATK3 + {SPR_BSPI, 32775, 1, {A_SpidRefire}, S_BSPI_ATK2, 0, 0}, // S_BSPI_ATK4 + {SPR_BSPI, 8, 3, {NULL}, S_BSPI_PAIN2, 0, 0}, // S_BSPI_PAIN + {SPR_BSPI, 8, 3, {A_Pain}, S_BSPI_RUN1, 0, 0}, // S_BSPI_PAIN2 + {SPR_BSPI, 9, 20, {A_Scream}, S_BSPI_DIE2, 0, 0}, // S_BSPI_DIE1 + {SPR_BSPI, 10, 7, {A_Fall}, S_BSPI_DIE3, 0, 0}, // S_BSPI_DIE2 + {SPR_BSPI, 11, 7, {NULL}, S_BSPI_DIE4, 0, 0}, // S_BSPI_DIE3 + {SPR_BSPI, 12, 7, {NULL}, S_BSPI_DIE5, 0, 0}, // S_BSPI_DIE4 + {SPR_BSPI, 13, 7, {NULL}, S_BSPI_DIE6, 0, 0}, // S_BSPI_DIE5 + {SPR_BSPI, 14, 7, {NULL}, S_BSPI_DIE7, 0, 0}, // S_BSPI_DIE6 + {SPR_BSPI, 15, -1, {A_BossDeath}, S_NULL, 0, 0}, // S_BSPI_DIE7 + {SPR_BSPI, 15, 5, {NULL}, S_BSPI_RAISE2, 0, 0}, // S_BSPI_RAISE1 + {SPR_BSPI, 14, 5, {NULL}, S_BSPI_RAISE3, 0, 0}, // S_BSPI_RAISE2 + {SPR_BSPI, 13, 5, {NULL}, S_BSPI_RAISE4, 0, 0}, // S_BSPI_RAISE3 + {SPR_BSPI, 12, 5, {NULL}, S_BSPI_RAISE5, 0, 0}, // S_BSPI_RAISE4 + {SPR_BSPI, 11, 5, {NULL}, S_BSPI_RAISE6, 0, 0}, // S_BSPI_RAISE5 + {SPR_BSPI, 10, 5, {NULL}, S_BSPI_RAISE7, 0, 0}, // S_BSPI_RAISE6 + {SPR_BSPI, 9, 5, {NULL}, S_BSPI_RUN1, 0, 0}, // S_BSPI_RAISE7 + {SPR_APLS, 32768, 5, {NULL}, S_ARACH_PLAZ2, 0, 0}, // S_ARACH_PLAZ + {SPR_APLS, 32769, 5, {NULL}, S_ARACH_PLAZ, 0, 0}, // S_ARACH_PLAZ2 + {SPR_APBX, 32768, 5, {NULL}, S_ARACH_PLEX2, 0, 0}, // S_ARACH_PLEX + {SPR_APBX, 32769, 5, {NULL}, S_ARACH_PLEX3, 0, 0}, // S_ARACH_PLEX2 + {SPR_APBX, 32770, 5, {NULL}, S_ARACH_PLEX4, 0, 0}, // S_ARACH_PLEX3 + {SPR_APBX, 32771, 5, {NULL}, S_ARACH_PLEX5, 0, 0}, // S_ARACH_PLEX4 + {SPR_APBX, 32772, 5, {NULL}, S_NULL, 0, 0}, // S_ARACH_PLEX5 + {SPR_CYBR, 0, 10, {A_Look}, S_CYBER_STND2, 0, 0}, // S_CYBER_STND + {SPR_CYBR, 1, 10, {A_Look}, S_CYBER_STND, 0, 0}, // S_CYBER_STND2 + {SPR_CYBR, 0, 3, {A_Hoof}, S_CYBER_RUN2, 0, 0}, // S_CYBER_RUN1 + {SPR_CYBR, 0, 3, {A_Chase}, S_CYBER_RUN3, 0, 0}, // S_CYBER_RUN2 + {SPR_CYBR, 1, 3, {A_Chase}, S_CYBER_RUN4, 0, 0}, // S_CYBER_RUN3 + {SPR_CYBR, 1, 3, {A_Chase}, S_CYBER_RUN5, 0, 0}, // S_CYBER_RUN4 + {SPR_CYBR, 2, 3, {A_Chase}, S_CYBER_RUN6, 0, 0}, // S_CYBER_RUN5 + {SPR_CYBR, 2, 3, {A_Chase}, S_CYBER_RUN7, 0, 0}, // S_CYBER_RUN6 + {SPR_CYBR, 3, 3, {A_Metal}, S_CYBER_RUN8, 0, 0}, // S_CYBER_RUN7 + {SPR_CYBR, 3, 3, {A_Chase}, S_CYBER_RUN1, 0, 0}, // S_CYBER_RUN8 + {SPR_CYBR, 4, 6, {A_FaceTarget}, S_CYBER_ATK2, 0, 0}, // S_CYBER_ATK1 + {SPR_CYBR, 5, 12, {A_CyberAttack}, S_CYBER_ATK3, 0, 0}, // S_CYBER_ATK2 + {SPR_CYBR, 4, 12, {A_FaceTarget}, S_CYBER_ATK4, 0, 0}, // S_CYBER_ATK3 + {SPR_CYBR, 5, 12, {A_CyberAttack}, S_CYBER_ATK5, 0, 0}, // S_CYBER_ATK4 + {SPR_CYBR, 4, 12, {A_FaceTarget}, S_CYBER_ATK6, 0, 0}, // S_CYBER_ATK5 + {SPR_CYBR, 5, 12, {A_CyberAttack}, S_CYBER_RUN1, 0, 0}, // S_CYBER_ATK6 + {SPR_CYBR, 6, 10, {A_Pain}, S_CYBER_RUN1, 0, 0}, // S_CYBER_PAIN + {SPR_CYBR, 7, 10, {NULL}, S_CYBER_DIE2, 0, 0}, // S_CYBER_DIE1 + {SPR_CYBR, 8, 10, {A_Scream}, S_CYBER_DIE3, 0, 0}, // S_CYBER_DIE2 + {SPR_CYBR, 9, 10, {NULL}, S_CYBER_DIE4, 0, 0}, // S_CYBER_DIE3 + {SPR_CYBR, 10, 10, {NULL}, S_CYBER_DIE5, 0, 0}, // S_CYBER_DIE4 + {SPR_CYBR, 11, 10, {NULL}, S_CYBER_DIE6, 0, 0}, // S_CYBER_DIE5 + {SPR_CYBR, 12, 10, {A_Fall}, S_CYBER_DIE7, 0, 0}, // S_CYBER_DIE6 + {SPR_CYBR, 13, 10, {NULL}, S_CYBER_DIE8, 0, 0}, // S_CYBER_DIE7 + {SPR_CYBR, 14, 10, {NULL}, S_CYBER_DIE9, 0, 0}, // S_CYBER_DIE8 + {SPR_CYBR, 15, 30, {NULL}, S_CYBER_DIE10, 0, 0}, // S_CYBER_DIE9 + {SPR_CYBR, 15, -1, {A_BossDeath}, S_NULL, 0, 0}, // S_CYBER_DIE10 + {SPR_PAIN, 0, 10, {A_Look}, S_PAIN_STND, 0, 0}, // S_PAIN_STND + {SPR_PAIN, 0, 3, {A_Chase}, S_PAIN_RUN2, 0, 0}, // S_PAIN_RUN1 + {SPR_PAIN, 0, 3, {A_Chase}, S_PAIN_RUN3, 0, 0}, // S_PAIN_RUN2 + {SPR_PAIN, 1, 3, {A_Chase}, S_PAIN_RUN4, 0, 0}, // S_PAIN_RUN3 + {SPR_PAIN, 1, 3, {A_Chase}, S_PAIN_RUN5, 0, 0}, // S_PAIN_RUN4 + {SPR_PAIN, 2, 3, {A_Chase}, S_PAIN_RUN6, 0, 0}, // S_PAIN_RUN5 + {SPR_PAIN, 2, 3, {A_Chase}, S_PAIN_RUN1, 0, 0}, // S_PAIN_RUN6 + {SPR_PAIN, 3, 5, {A_FaceTarget}, S_PAIN_ATK2, 0, 0}, // S_PAIN_ATK1 + {SPR_PAIN, 4, 5, {A_FaceTarget}, S_PAIN_ATK3, 0, 0}, // S_PAIN_ATK2 + {SPR_PAIN, 32773, 5, {A_FaceTarget}, S_PAIN_ATK4, 0, 0}, // S_PAIN_ATK3 + {SPR_PAIN, 32773, 0, {NULL}, S_PAIN_RUN1, 0, 0}, // S_PAIN_ATK4 + {SPR_PAIN, 6, 6, {NULL}, S_PAIN_PAIN2, 0, 0}, // S_PAIN_PAIN + {SPR_PAIN, 6, 6, {A_Pain}, S_PAIN_RUN1, 0, 0}, // S_PAIN_PAIN2 + {SPR_PAIN, 32775, 8, {NULL}, S_PAIN_DIE2, 0, 0}, // S_PAIN_DIE1 + {SPR_PAIN, 32776, 8, {A_Scream}, S_PAIN_DIE3, 0, 0}, // S_PAIN_DIE2 + {SPR_PAIN, 32777, 8, {NULL}, S_PAIN_DIE4, 0, 0}, // S_PAIN_DIE3 + {SPR_PAIN, 32778, 8, {NULL}, S_PAIN_DIE5, 0, 0}, // S_PAIN_DIE4 + {SPR_PAIN, 32779, 8, {NULL}, S_PAIN_DIE6, 0, 0}, // S_PAIN_DIE5 + {SPR_PAIN, 32780, 8, {NULL}, S_NULL, 0, 0}, // S_PAIN_DIE6 + {SPR_PAIN, 12, 8, {NULL}, S_PAIN_RAISE2, 0, 0}, // S_PAIN_RAISE1 + {SPR_PAIN, 11, 8, {NULL}, S_PAIN_RAISE3, 0, 0}, // S_PAIN_RAISE2 + {SPR_PAIN, 10, 8, {NULL}, S_PAIN_RAISE4, 0, 0}, // S_PAIN_RAISE3 + {SPR_PAIN, 9, 8, {NULL}, S_PAIN_RAISE5, 0, 0}, // S_PAIN_RAISE4 + {SPR_PAIN, 8, 8, {NULL}, S_PAIN_RAISE6, 0, 0}, // S_PAIN_RAISE5 + {SPR_PAIN, 7, 8, {NULL}, S_PAIN_RUN1, 0, 0}, // S_PAIN_RAISE6 + {SPR_SSWV, 0, 10, {A_Look}, S_SSWV_STND2, 0, 0}, // S_SSWV_STND + {SPR_SSWV, 1, 10, {A_Look}, S_SSWV_STND, 0, 0}, // S_SSWV_STND2 + {SPR_SSWV, 0, 3, {A_Chase}, S_SSWV_RUN2, 0, 0}, // S_SSWV_RUN1 + {SPR_SSWV, 0, 3, {A_Chase}, S_SSWV_RUN3, 0, 0}, // S_SSWV_RUN2 + {SPR_SSWV, 1, 3, {A_Chase}, S_SSWV_RUN4, 0, 0}, // S_SSWV_RUN3 + {SPR_SSWV, 1, 3, {A_Chase}, S_SSWV_RUN5, 0, 0}, // S_SSWV_RUN4 + {SPR_SSWV, 2, 3, {A_Chase}, S_SSWV_RUN6, 0, 0}, // S_SSWV_RUN5 + {SPR_SSWV, 2, 3, {A_Chase}, S_SSWV_RUN7, 0, 0}, // S_SSWV_RUN6 + {SPR_SSWV, 3, 3, {A_Chase}, S_SSWV_RUN8, 0, 0}, // S_SSWV_RUN7 + {SPR_SSWV, 3, 3, {A_Chase}, S_SSWV_RUN1, 0, 0}, // S_SSWV_RUN8 + {SPR_SSWV, 4, 10, {A_FaceTarget}, S_SSWV_ATK2, 0, 0}, // S_SSWV_ATK1 + {SPR_SSWV, 5, 10, {A_FaceTarget}, S_SSWV_ATK3, 0, 0}, // S_SSWV_ATK2 + {SPR_SSWV, 32774, 4, {NULL}, S_SSWV_ATK4, 0, 0}, // S_SSWV_ATK3 + {SPR_SSWV, 5, 6, {A_FaceTarget}, S_SSWV_ATK5, 0, 0}, // S_SSWV_ATK4 + {SPR_SSWV, 32774, 4, {NULL}, S_SSWV_ATK6, 0, 0}, // S_SSWV_ATK5 + {SPR_SSWV, 5, 1, {NULL}, S_SSWV_ATK2, 0, 0}, // S_SSWV_ATK6 + {SPR_SSWV, 7, 3, {NULL}, S_SSWV_PAIN2, 0, 0}, // S_SSWV_PAIN + {SPR_SSWV, 7, 3, {A_Pain}, S_SSWV_RUN1, 0, 0}, // S_SSWV_PAIN2 + {SPR_SSWV, 8, 5, {NULL}, S_SSWV_DIE2, 0, 0}, // S_SSWV_DIE1 + {SPR_SSWV, 9, 5, {A_Scream}, S_SSWV_DIE3, 0, 0}, // S_SSWV_DIE2 + {SPR_SSWV, 10, 5, {A_Fall}, S_SSWV_DIE4, 0, 0}, // S_SSWV_DIE3 + {SPR_SSWV, 11, 5, {NULL}, S_SSWV_DIE5, 0, 0}, // S_SSWV_DIE4 + {SPR_SSWV, 12, -1, {NULL}, S_NULL, 0, 0}, // S_SSWV_DIE5 + {SPR_SSWV, 13, 5, {NULL}, S_SSWV_XDIE2, 0, 0}, // S_SSWV_XDIE1 + {SPR_SSWV, 14, 5, {A_XScream}, S_SSWV_XDIE3, 0, 0}, // S_SSWV_XDIE2 + {SPR_SSWV, 15, 5, {A_Fall}, S_SSWV_XDIE4, 0, 0}, // S_SSWV_XDIE3 + {SPR_SSWV, 16, 5, {NULL}, S_SSWV_XDIE5, 0, 0}, // S_SSWV_XDIE4 + {SPR_SSWV, 17, 5, {NULL}, S_SSWV_XDIE6, 0, 0}, // S_SSWV_XDIE5 + {SPR_SSWV, 18, 5, {NULL}, S_SSWV_XDIE7, 0, 0}, // S_SSWV_XDIE6 + {SPR_SSWV, 19, 5, {NULL}, S_SSWV_XDIE8, 0, 0}, // S_SSWV_XDIE7 + {SPR_SSWV, 20, 5, {NULL}, S_SSWV_XDIE9, 0, 0}, // S_SSWV_XDIE8 + {SPR_SSWV, 21, -1, {NULL}, S_NULL, 0, 0}, // S_SSWV_XDIE9 + {SPR_SSWV, 12, 5, {NULL}, S_SSWV_RAISE2, 0, 0}, // S_SSWV_RAISE1 + {SPR_SSWV, 11, 5, {NULL}, S_SSWV_RAISE3, 0, 0}, // S_SSWV_RAISE2 + {SPR_SSWV, 10, 5, {NULL}, S_SSWV_RAISE4, 0, 0}, // S_SSWV_RAISE3 + {SPR_SSWV, 9, 5, {NULL}, S_SSWV_RAISE5, 0, 0}, // S_SSWV_RAISE4 + {SPR_SSWV, 8, 5, {NULL}, S_SSWV_RUN1, 0, 0}, // S_SSWV_RAISE5 + {SPR_KEEN, 0, -1, {NULL}, S_KEENSTND, 0, 0}, // S_KEENSTND + {SPR_KEEN, 0, 6, {NULL}, S_COMMKEEN2, 0, 0}, // S_COMMKEEN + {SPR_KEEN, 1, 6, {NULL}, S_COMMKEEN3, 0, 0}, // S_COMMKEEN2 + {SPR_KEEN, 2, 6, {A_Scream}, S_COMMKEEN4, 0, 0}, // S_COMMKEEN3 + {SPR_KEEN, 3, 6, {NULL}, S_COMMKEEN5, 0, 0}, // S_COMMKEEN4 + {SPR_KEEN, 4, 6, {NULL}, S_COMMKEEN6, 0, 0}, // S_COMMKEEN5 + {SPR_KEEN, 5, 6, {NULL}, S_COMMKEEN7, 0, 0}, // S_COMMKEEN6 + {SPR_KEEN, 6, 6, {NULL}, S_COMMKEEN8, 0, 0}, // S_COMMKEEN7 + {SPR_KEEN, 7, 6, {NULL}, S_COMMKEEN9, 0, 0}, // S_COMMKEEN8 + {SPR_KEEN, 8, 6, {NULL}, S_COMMKEEN10, 0, 0}, // S_COMMKEEN9 + {SPR_KEEN, 9, 6, {NULL}, S_COMMKEEN11, 0, 0}, // S_COMMKEEN10 + {SPR_KEEN, 10, 6, {NULL}, S_COMMKEEN12, 0, 0}, // S_COMMKEEN11 + {SPR_KEEN, 11, -1, {NULL}, S_NULL, 0, 0}, // S_COMMKEEN12 + {SPR_KEEN, 12, 4, {NULL}, S_KEENPAIN2, 0, 0}, // S_KEENPAIN + {SPR_KEEN, 12, 8, {A_Pain}, S_KEENSTND, 0, 0}, // S_KEENPAIN2 + {SPR_BBRN, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BRAIN + {SPR_BBRN, 1, 36, {NULL}, S_BRAIN, 0, 0}, // S_BRAIN_PAIN + {SPR_BBRN, 0, 100, {NULL}, S_BRAIN_DIE2, 0, 0}, // S_BRAIN_DIE1 + {SPR_BBRN, 0, 10, {NULL}, S_BRAIN_DIE3, 0, 0}, // S_BRAIN_DIE2 + {SPR_BBRN, 0, 10, {NULL}, S_BRAIN_DIE4, 0, 0}, // S_BRAIN_DIE3 + {SPR_BBRN, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BRAIN_DIE4 + {SPR_SSWV, 0, 10, {A_Look}, S_BRAINEYE, 0, 0}, // S_BRAINEYE + {SPR_SSWV, 0, 181, {NULL}, S_BRAINEYE1, 0, 0}, // S_BRAINEYESEE + {SPR_SSWV, 0, 150, {NULL}, S_BRAINEYE1, 0, 0}, // S_BRAINEYE1 + {SPR_BOSF, 32768, 3, {NULL}, S_SPAWN2, 0, 0}, // S_SPAWN1 + {SPR_BOSF, 32769, 3, {NULL}, S_SPAWN3, 0, 0}, // S_SPAWN2 + {SPR_BOSF, 32770, 3, {NULL}, S_SPAWN4, 0, 0}, // S_SPAWN3 + {SPR_BOSF, 32771, 3, {NULL}, S_SPAWN1, 0, 0}, // S_SPAWN4 + {SPR_FIRE, 32768, 4, {NULL}, S_SPAWNFIRE2, 0, 0}, // S_SPAWNFIRE1 + {SPR_FIRE, 32769, 4, {NULL}, S_SPAWNFIRE3, 0, 0}, // S_SPAWNFIRE2 + {SPR_FIRE, 32770, 4, {NULL}, S_SPAWNFIRE4, 0, 0}, // S_SPAWNFIRE3 + {SPR_FIRE, 32771, 4, {NULL}, S_SPAWNFIRE5, 0, 0}, // S_SPAWNFIRE4 + {SPR_FIRE, 32772, 4, {NULL}, S_SPAWNFIRE6, 0, 0}, // S_SPAWNFIRE5 + {SPR_FIRE, 32773, 4, {NULL}, S_SPAWNFIRE7, 0, 0}, // S_SPAWNFIRE6 + {SPR_FIRE, 32774, 4, {NULL}, S_SPAWNFIRE8, 0, 0}, // S_SPAWNFIRE7 + {SPR_FIRE, 32775, 4, {NULL}, S_NULL, 0, 0}, // S_SPAWNFIRE8 + {SPR_MISL, 32769, 10, {NULL}, S_BRAINEXPLODE2, 0, 0}, // S_BRAINEXPLODE1 + {SPR_MISL, 32770, 10, {NULL}, S_BRAINEXPLODE3, 0, 0}, // S_BRAINEXPLODE2 + {SPR_MISL, 32771, 10, {NULL}, S_NULL, 0, 0}, // S_BRAINEXPLODE3 + {SPR_ARM1, 0, 6, {NULL}, S_ARM1A, 0, 0}, // S_ARM1 + {SPR_ARM1, 32769, 7, {NULL}, S_ARM1, 0, 0}, // S_ARM1A + {SPR_ARM2, 0, 6, {NULL}, S_ARM2A, 0, 0}, // S_ARM2 + {SPR_ARM2, 32769, 6, {NULL}, S_ARM2, 0, 0}, // S_ARM2A + {SPR_BAR1, 0, 6, {NULL}, S_BAR2, 0, 0}, // S_BAR1 + {SPR_BAR1, 1, 6, {NULL}, S_BAR1, 0, 0}, // S_BAR2 + {SPR_BEXP, 32768, 5, {NULL}, S_BEXP2, 0, 0}, // S_BEXP + {SPR_BEXP, 32769, 5, {A_Scream}, S_BEXP3, 0, 0}, // S_BEXP2 + {SPR_BEXP, 32770, 5, {NULL}, S_BEXP4, 0, 0}, // S_BEXP3 + {SPR_BEXP, 32771, 10, {A_Explode}, S_BEXP5, 0, 0}, // S_BEXP4 + {SPR_BEXP, 32772, 10, {NULL}, S_NULL, 0, 0}, // S_BEXP5 + {SPR_FCAN, 32768, 4, {NULL}, S_BBAR2, 0, 0}, // S_BBAR1 + {SPR_FCAN, 32769, 4, {NULL}, S_BBAR3, 0, 0}, // S_BBAR2 + {SPR_FCAN, 32770, 4, {NULL}, S_BBAR1, 0, 0}, // S_BBAR3 + {SPR_BON1, 0, 6, {NULL}, S_BON1A, 0, 0}, // S_BON1 + {SPR_BON1, 1, 6, {NULL}, S_BON1B, 0, 0}, // S_BON1A + {SPR_BON1, 2, 6, {NULL}, S_BON1C, 0, 0}, // S_BON1B + {SPR_BON1, 3, 6, {NULL}, S_BON1D, 0, 0}, // S_BON1C + {SPR_BON1, 2, 6, {NULL}, S_BON1E, 0, 0}, // S_BON1D + {SPR_BON1, 1, 6, {NULL}, S_BON1, 0, 0}, // S_BON1E + {SPR_BON2, 0, 6, {NULL}, S_BON2A, 0, 0}, // S_BON2 + {SPR_BON2, 1, 6, {NULL}, S_BON2B, 0, 0}, // S_BON2A + {SPR_BON2, 2, 6, {NULL}, S_BON2C, 0, 0}, // S_BON2B + {SPR_BON2, 3, 6, {NULL}, S_BON2D, 0, 0}, // S_BON2C + {SPR_BON2, 2, 6, {NULL}, S_BON2E, 0, 0}, // S_BON2D + {SPR_BON2, 1, 6, {NULL}, S_BON2, 0, 0}, // S_BON2E + {SPR_BKEY, 0, 10, {NULL}, S_BKEY2, 0, 0}, // S_BKEY + {SPR_BKEY, 32769, 10, {NULL}, S_BKEY, 0, 0}, // S_BKEY2 + {SPR_RKEY, 0, 10, {NULL}, S_RKEY2, 0, 0}, // S_RKEY + {SPR_RKEY, 32769, 10, {NULL}, S_RKEY, 0, 0}, // S_RKEY2 + {SPR_YKEY, 0, 10, {NULL}, S_YKEY2, 0, 0}, // S_YKEY + {SPR_YKEY, 32769, 10, {NULL}, S_YKEY, 0, 0}, // S_YKEY2 + {SPR_BSKU, 0, 10, {NULL}, S_BSKULL2, 0, 0}, // S_BSKULL + {SPR_BSKU, 32769, 10, {NULL}, S_BSKULL, 0, 0}, // S_BSKULL2 + {SPR_RSKU, 0, 10, {NULL}, S_RSKULL2, 0, 0}, // S_RSKULL + {SPR_RSKU, 32769, 10, {NULL}, S_RSKULL, 0, 0}, // S_RSKULL2 + {SPR_YSKU, 0, 10, {NULL}, S_YSKULL2, 0, 0}, // S_YSKULL + {SPR_YSKU, 32769, 10, {NULL}, S_YSKULL, 0, 0}, // S_YSKULL2 + {SPR_STIM, 0, -1, {NULL}, S_NULL, 0, 0}, // S_STIM + {SPR_MEDI, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MEDI + {SPR_SOUL, 32768, 6, {NULL}, S_SOUL2, 0, 0}, // S_SOUL + {SPR_SOUL, 32769, 6, {NULL}, S_SOUL3, 0, 0}, // S_SOUL2 + {SPR_SOUL, 32770, 6, {NULL}, S_SOUL4, 0, 0}, // S_SOUL3 + {SPR_SOUL, 32771, 6, {NULL}, S_SOUL5, 0, 0}, // S_SOUL4 + {SPR_SOUL, 32770, 6, {NULL}, S_SOUL6, 0, 0}, // S_SOUL5 + {SPR_SOUL, 32769, 6, {NULL}, S_SOUL, 0, 0}, // S_SOUL6 + {SPR_PINV, 32768, 6, {NULL}, S_PINV2, 0, 0}, // S_PINV + {SPR_PINV, 32769, 6, {NULL}, S_PINV3, 0, 0}, // S_PINV2 + {SPR_PINV, 32770, 6, {NULL}, S_PINV4, 0, 0}, // S_PINV3 + {SPR_PINV, 32771, 6, {NULL}, S_PINV, 0, 0}, // S_PINV4 + {SPR_PSTR, 32768, -1, {NULL}, S_NULL, 0, 0}, // S_PSTR + {SPR_PINS, 32768, 6, {NULL}, S_PINS2, 0, 0}, // S_PINS + {SPR_PINS, 32769, 6, {NULL}, S_PINS3, 0, 0}, // S_PINS2 + {SPR_PINS, 32770, 6, {NULL}, S_PINS4, 0, 0}, // S_PINS3 + {SPR_PINS, 32771, 6, {NULL}, S_PINS, 0, 0}, // S_PINS4 + {SPR_MEGA, 32768, 6, {NULL}, S_MEGA2, 0, 0}, // S_MEGA + {SPR_MEGA, 32769, 6, {NULL}, S_MEGA3, 0, 0}, // S_MEGA2 + {SPR_MEGA, 32770, 6, {NULL}, S_MEGA4, 0, 0}, // S_MEGA3 + {SPR_MEGA, 32771, 6, {NULL}, S_MEGA, 0, 0}, // S_MEGA4 + {SPR_SUIT, 32768, -1, {NULL}, S_NULL, 0, 0}, // S_SUIT + {SPR_PMAP, 32768, 6, {NULL}, S_PMAP2, 0, 0}, // S_PMAP + {SPR_PMAP, 32769, 6, {NULL}, S_PMAP3, 0, 0}, // S_PMAP2 + {SPR_PMAP, 32770, 6, {NULL}, S_PMAP4, 0, 0}, // S_PMAP3 + {SPR_PMAP, 32771, 6, {NULL}, S_PMAP5, 0, 0}, // S_PMAP4 + {SPR_PMAP, 32770, 6, {NULL}, S_PMAP6, 0, 0}, // S_PMAP5 + {SPR_PMAP, 32769, 6, {NULL}, S_PMAP, 0, 0}, // S_PMAP6 + {SPR_PVIS, 32768, 6, {NULL}, S_PVIS2, 0, 0}, // S_PVIS + {SPR_PVIS, 1, 6, {NULL}, S_PVIS, 0, 0}, // S_PVIS2 + {SPR_CLIP, 0, -1, {NULL}, S_NULL, 0, 0}, // S_CLIP + {SPR_AMMO, 0, -1, {NULL}, S_NULL, 0, 0}, // S_AMMO + {SPR_ROCK, 0, -1, {NULL}, S_NULL, 0, 0}, // S_ROCK + {SPR_BROK, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BROK + {SPR_CELL, 0, -1, {NULL}, S_NULL, 0, 0}, // S_CELL + {SPR_CELP, 0, -1, {NULL}, S_NULL, 0, 0}, // S_CELP + {SPR_SHEL, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SHEL + {SPR_SBOX, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SBOX + {SPR_BPAK, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BPAK + {SPR_BFUG, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BFUG + {SPR_MGUN, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MGUN + {SPR_CSAW, 0, -1, {NULL}, S_NULL, 0, 0}, // S_CSAW + {SPR_LAUN, 0, -1, {NULL}, S_NULL, 0, 0}, // S_LAUN + {SPR_PLAS, 0, -1, {NULL}, S_NULL, 0, 0}, // S_PLAS + {SPR_SHOT, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SHOT + {SPR_SGN2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SHOT2 + {SPR_COLU, 32768, -1, {NULL}, S_NULL, 0, 0}, // S_COLU + {SPR_SMT2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_STALAG + {SPR_GOR1, 0, 10, {NULL}, S_BLOODYTWITCH2, 0, 0}, // S_BLOODYTWITCH + {SPR_GOR1, 1, 15, {NULL}, S_BLOODYTWITCH3, 0, 0}, // S_BLOODYTWITCH2 + {SPR_GOR1, 2, 8, {NULL}, S_BLOODYTWITCH4, 0, 0}, // S_BLOODYTWITCH3 + {SPR_GOR1, 1, 6, {NULL}, S_BLOODYTWITCH, 0, 0}, // S_BLOODYTWITCH4 + {SPR_PLAY, 13, -1, {NULL}, S_NULL, 0, 0}, // S_DEADTORSO + {SPR_PLAY, 18, -1, {NULL}, S_NULL, 0, 0}, // S_DEADBOTTOM + {SPR_POL2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HEADSONSTICK + {SPR_POL5, 0, -1, {NULL}, S_NULL, 0, 0}, // S_GIBS + {SPR_POL4, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HEADONASTICK + {SPR_POL3, 32768, 6, {NULL}, S_HEADCANDLES2, 0, 0}, // S_HEADCANDLES + {SPR_POL3, 32769, 6, {NULL}, S_HEADCANDLES, 0, 0}, // S_HEADCANDLES2 + {SPR_POL1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_DEADSTICK + {SPR_POL6, 0, 6, {NULL}, S_LIVESTICK2, 0, 0}, // S_LIVESTICK + {SPR_POL6, 1, 8, {NULL}, S_LIVESTICK, 0, 0}, // S_LIVESTICK2 + {SPR_GOR2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MEAT2 + {SPR_GOR3, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MEAT3 + {SPR_GOR4, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MEAT4 + {SPR_GOR5, 0, -1, {NULL}, S_NULL, 0, 0}, // S_MEAT5 + {SPR_SMIT, 0, -1, {NULL}, S_NULL, 0, 0}, // S_STALAGTITE + {SPR_COL1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_TALLGRNCOL + {SPR_COL2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SHRTGRNCOL + {SPR_COL3, 0, -1, {NULL}, S_NULL, 0, 0}, // S_TALLREDCOL + {SPR_COL4, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SHRTREDCOL + {SPR_CAND, 32768, -1, {NULL}, S_NULL, 0, 0}, // S_CANDLESTIK + {SPR_CBRA, 32768, -1, {NULL}, S_NULL, 0, 0}, // S_CANDELABRA + {SPR_COL6, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SKULLCOL + {SPR_TRE1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_TORCHTREE + {SPR_TRE2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BIGTREE + {SPR_ELEC, 0, -1, {NULL}, S_NULL, 0, 0}, // S_TECHPILLAR + {SPR_CEYE, 32768, 6, {NULL}, S_EVILEYE2, 0, 0}, // S_EVILEYE + {SPR_CEYE, 32769, 6, {NULL}, S_EVILEYE3, 0, 0}, // S_EVILEYE2 + {SPR_CEYE, 32770, 6, {NULL}, S_EVILEYE4, 0, 0}, // S_EVILEYE3 + {SPR_CEYE, 32769, 6, {NULL}, S_EVILEYE, 0, 0}, // S_EVILEYE4 + {SPR_FSKU, 32768, 6, {NULL}, S_FLOATSKULL2, 0, 0}, // S_FLOATSKULL + {SPR_FSKU, 32769, 6, {NULL}, S_FLOATSKULL3, 0, 0}, // S_FLOATSKULL2 + {SPR_FSKU, 32770, 6, {NULL}, S_FLOATSKULL, 0, 0}, // S_FLOATSKULL3 + {SPR_COL5, 0, 14, {NULL}, S_HEARTCOL2, 0, 0}, // S_HEARTCOL + {SPR_COL5, 1, 14, {NULL}, S_HEARTCOL, 0, 0}, // S_HEARTCOL2 + {SPR_TBLU, 32768, 4, {NULL}, S_BLUETORCH2, 0, 0}, // S_BLUETORCH + {SPR_TBLU, 32769, 4, {NULL}, S_BLUETORCH3, 0, 0}, // S_BLUETORCH2 + {SPR_TBLU, 32770, 4, {NULL}, S_BLUETORCH4, 0, 0}, // S_BLUETORCH3 + {SPR_TBLU, 32771, 4, {NULL}, S_BLUETORCH, 0, 0}, // S_BLUETORCH4 + {SPR_TGRN, 32768, 4, {NULL}, S_GREENTORCH2, 0, 0}, // S_GREENTORCH + {SPR_TGRN, 32769, 4, {NULL}, S_GREENTORCH3, 0, 0}, // S_GREENTORCH2 + {SPR_TGRN, 32770, 4, {NULL}, S_GREENTORCH4, 0, 0}, // S_GREENTORCH3 + {SPR_TGRN, 32771, 4, {NULL}, S_GREENTORCH, 0, 0}, // S_GREENTORCH4 + {SPR_TRED, 32768, 4, {NULL}, S_REDTORCH2, 0, 0}, // S_REDTORCH + {SPR_TRED, 32769, 4, {NULL}, S_REDTORCH3, 0, 0}, // S_REDTORCH2 + {SPR_TRED, 32770, 4, {NULL}, S_REDTORCH4, 0, 0}, // S_REDTORCH3 + {SPR_TRED, 32771, 4, {NULL}, S_REDTORCH, 0, 0}, // S_REDTORCH4 + {SPR_SMBT, 32768, 4, {NULL}, S_BTORCHSHRT2, 0, 0}, // S_BTORCHSHRT + {SPR_SMBT, 32769, 4, {NULL}, S_BTORCHSHRT3, 0, 0}, // S_BTORCHSHRT2 + {SPR_SMBT, 32770, 4, {NULL}, S_BTORCHSHRT4, 0, 0}, // S_BTORCHSHRT3 + {SPR_SMBT, 32771, 4, {NULL}, S_BTORCHSHRT, 0, 0}, // S_BTORCHSHRT4 + {SPR_SMGT, 32768, 4, {NULL}, S_GTORCHSHRT2, 0, 0}, // S_GTORCHSHRT + {SPR_SMGT, 32769, 4, {NULL}, S_GTORCHSHRT3, 0, 0}, // S_GTORCHSHRT2 + {SPR_SMGT, 32770, 4, {NULL}, S_GTORCHSHRT4, 0, 0}, // S_GTORCHSHRT3 + {SPR_SMGT, 32771, 4, {NULL}, S_GTORCHSHRT, 0, 0}, // S_GTORCHSHRT4 + {SPR_SMRT, 32768, 4, {NULL}, S_RTORCHSHRT2, 0, 0}, // S_RTORCHSHRT + {SPR_SMRT, 32769, 4, {NULL}, S_RTORCHSHRT3, 0, 0}, // S_RTORCHSHRT2 + {SPR_SMRT, 32770, 4, {NULL}, S_RTORCHSHRT4, 0, 0}, // S_RTORCHSHRT3 + {SPR_SMRT, 32771, 4, {NULL}, S_RTORCHSHRT, 0, 0}, // S_RTORCHSHRT4 + {SPR_HDB1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGNOGUTS + {SPR_HDB2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGBNOBRAIN + {SPR_HDB3, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGTLOOKDN + {SPR_HDB4, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGTSKULL + {SPR_HDB5, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGTLOOKUP + {SPR_HDB6, 0, -1, {NULL}, S_NULL, 0, 0}, // S_HANGTNOBRAIN + {SPR_POB1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_COLONGIBS + {SPR_POB2, 0, -1, {NULL}, S_NULL, 0, 0}, // S_SMALLPOOL + {SPR_BRS1, 0, -1, {NULL}, S_NULL, 0, 0}, // S_BRAINSTEM + {SPR_TLMP, 32768, 4, {NULL}, S_TECHLAMP2, 0, 0}, // S_TECHLAMP + {SPR_TLMP, 32769, 4, {NULL}, S_TECHLAMP3, 0, 0}, // S_TECHLAMP2 + {SPR_TLMP, 32770, 4, {NULL}, S_TECHLAMP4, 0, 0}, // S_TECHLAMP3 + {SPR_TLMP, 32771, 4, {NULL}, S_TECHLAMP, 0, 0}, // S_TECHLAMP4 + {SPR_TLP2, 32768, 4, {NULL}, S_TECH2LAMP2, 0, 0}, // S_TECH2LAMP + {SPR_TLP2, 32769, 4, {NULL}, S_TECH2LAMP3, 0, 0}, // S_TECH2LAMP2 + {SPR_TLP2, 32770, 4, {NULL}, S_TECH2LAMP4, 0, 0}, // S_TECH2LAMP3 + {SPR_TLP2, 32771, 4, {NULL}, S_TECH2LAMP, 0, 0} // S_TECH2LAMP4 }; mobjinfo_t mobjinfo[NUMMOBJTYPES] = { - { // MT_PLAYER - -1, // doomednum - S_PLAY, // spawnstate - 100, // spawnhealth - S_PLAY_RUN1, // seestate - sfx_None, // seesound - 0, // reactiontime - sfx_None, // attacksound - S_PLAY_PAIN, // painstate - 255, // painchance - sfx_plpain, // painsound - S_NULL, // meleestate - S_PLAY_ATK1, // missilestate - S_PLAY_DIE1, // deathstate - S_PLAY_XDIE1, // xdeathstate - sfx_pldeth, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_POSSESSED - 3004, // doomednum - S_POSS_STND, // spawnstate - 20, // spawnhealth - S_POSS_RUN1, // seestate - sfx_posit1, // seesound - 8, // reactiontime - sfx_pistol, // attacksound - S_POSS_PAIN, // painstate - 200, // painchance - sfx_popain, // painsound - 0, // meleestate - S_POSS_ATK1, // missilestate - S_POSS_DIE1, // deathstate - S_POSS_XDIE1, // xdeathstate - sfx_podth1, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_POSS_RAISE1 // raisestate - }, - - { // MT_SHOTGUY - 9, // doomednum - S_SPOS_STND, // spawnstate - 30, // spawnhealth - S_SPOS_RUN1, // seestate - sfx_posit2, // seesound - 8, // reactiontime - 0, // attacksound - S_SPOS_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_SPOS_ATK1, // missilestate - S_SPOS_DIE1, // deathstate - S_SPOS_XDIE1, // xdeathstate - sfx_podth2, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SPOS_RAISE1 // raisestate - }, - - { // MT_VILE - 64, // doomednum - S_VILE_STND, // spawnstate - 700, // spawnhealth - S_VILE_RUN1, // seestate - sfx_vilsit, // seesound - 8, // reactiontime - 0, // attacksound - S_VILE_PAIN, // painstate - 10, // painchance - sfx_vipain, // painsound - 0, // meleestate - S_VILE_ATK1, // missilestate - S_VILE_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_vildth, // deathsound - 15, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 500, // mass - 0, // damage - sfx_vilact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_FIRE - -1, // doomednum - S_FIRE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_UNDEAD - 66, // doomednum - S_SKEL_STND, // spawnstate - 300, // spawnhealth - S_SKEL_RUN1, // seestate - sfx_skesit, // seesound - 8, // reactiontime - 0, // attacksound - S_SKEL_PAIN, // painstate - 100, // painchance - sfx_popain, // painsound - S_SKEL_FIST1, // meleestate - S_SKEL_MISS1, // missilestate - S_SKEL_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_skedth, // deathsound - 10, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 500, // mass - 0, // damage - sfx_skeact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SKEL_RAISE1 // raisestate - }, - - { // MT_TRACER - -1, // doomednum - S_TRACER, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_skeatk, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_TRACEEXP1, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 10*FRACUNIT, // speed - 11*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 10, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_SMOKE - -1, // doomednum - S_SMOKE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_FATSO - 67, // doomednum - S_FATT_STND, // spawnstate - 600, // spawnhealth - S_FATT_RUN1, // seestate - sfx_mansit, // seesound - 8, // reactiontime - 0, // attacksound - S_FATT_PAIN, // painstate - 80, // painchance - sfx_mnpain, // painsound - 0, // meleestate - S_FATT_ATK1, // missilestate - S_FATT_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_mandth, // deathsound - 8, // speed - 48*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_FATT_RAISE1 // raisestate - }, - - { // MT_FATSHOT - -1, // doomednum - S_FATSHOT1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_FATSHOTX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 20*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 8, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_CHAINGUY - 65, // doomednum - S_CPOS_STND, // spawnstate - 70, // spawnhealth - S_CPOS_RUN1, // seestate - sfx_posit2, // seesound - 8, // reactiontime - 0, // attacksound - S_CPOS_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_CPOS_ATK1, // missilestate - S_CPOS_DIE1, // deathstate - S_CPOS_XDIE1, // xdeathstate - sfx_podth2, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_CPOS_RAISE1 // raisestate - }, - - { // MT_TROOP - 3001, // doomednum - S_TROO_STND, // spawnstate - 60, // spawnhealth - S_TROO_RUN1, // seestate - sfx_bgsit1, // seesound - 8, // reactiontime - 0, // attacksound - S_TROO_PAIN, // painstate - 200, // painchance - sfx_popain, // painsound - S_TROO_ATK1, // meleestate - S_TROO_ATK1, // missilestate - S_TROO_DIE1, // deathstate - S_TROO_XDIE1, // xdeathstate - sfx_bgdth1, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_bgact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_TROO_RAISE1 // raisestate - }, - - { // MT_SERGEANT - 3002, // doomednum - S_SARG_STND, // spawnstate - 150, // spawnhealth - S_SARG_RUN1, // seestate - sfx_sgtsit, // seesound - 8, // reactiontime - sfx_sgtatk, // attacksound - S_SARG_PAIN, // painstate - 180, // painchance - sfx_dmpain, // painsound - S_SARG_ATK1, // meleestate - 0, // missilestate - S_SARG_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_sgtdth, // deathsound - 10, // speed - 30*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SARG_RAISE1 // raisestate - }, - - { // MT_SHADOWS - 58, // doomednum - S_SARG_STND, // spawnstate - 150, // spawnhealth - S_SARG_RUN1, // seestate - sfx_sgtsit, // seesound - 8, // reactiontime - sfx_sgtatk, // attacksound - S_SARG_PAIN, // painstate - 180, // painchance - sfx_dmpain, // painsound - S_SARG_ATK1, // meleestate - 0, // missilestate - S_SARG_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_sgtdth, // deathsound - 10, // speed - 30*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_SHADOW|MF_COUNTKILL, // flags - S_SARG_RAISE1 // raisestate - }, - - { // MT_HEAD - 3005, // doomednum - S_HEAD_STND, // spawnstate - 400, // spawnhealth - S_HEAD_RUN1, // seestate - sfx_cacsit, // seesound - 8, // reactiontime - 0, // attacksound - S_HEAD_PAIN, // painstate - 128, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_HEAD_ATK1, // missilestate - S_HEAD_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_cacdth, // deathsound - 8, // speed - 31*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags - S_HEAD_RAISE1 // raisestate - }, - - { // MT_BRUISER - 3003, // doomednum - S_BOSS_STND, // spawnstate - 1000, // spawnhealth - S_BOSS_RUN1, // seestate - sfx_brssit, // seesound - 8, // reactiontime - 0, // attacksound - S_BOSS_PAIN, // painstate - 50, // painchance - sfx_dmpain, // painsound - S_BOSS_ATK1, // meleestate - S_BOSS_ATK1, // missilestate - S_BOSS_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_brsdth, // deathsound - 8, // speed - 24*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BOSS_RAISE1 // raisestate - }, - - { // MT_BRUISERSHOT - -1, // doomednum - S_BRBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BRBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 15*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 8, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_KNIGHT - 69, // doomednum - S_BOS2_STND, // spawnstate - 500, // spawnhealth - S_BOS2_RUN1, // seestate - sfx_kntsit, // seesound - 8, // reactiontime - 0, // attacksound - S_BOS2_PAIN, // painstate - 50, // painchance - sfx_dmpain, // painsound - S_BOS2_ATK1, // meleestate - S_BOS2_ATK1, // missilestate - S_BOS2_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_kntdth, // deathsound - 8, // speed - 24*FRACUNIT, // radius - 64*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BOS2_RAISE1 // raisestate - }, - - { // MT_SKULL - 3006, // doomednum - S_SKULL_STND, // spawnstate - 100, // spawnhealth - S_SKULL_RUN1, // seestate - 0, // seesound - 8, // reactiontime - sfx_sklatk, // attacksound - S_SKULL_PAIN, // painstate - 256, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_SKULL_ATK1, // missilestate - S_SKULL_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 8, // speed - 16*FRACUNIT, // radius - 56*FRACUNIT, // height - 50, // mass - 3, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_SPIDER - 7, // doomednum - S_SPID_STND, // spawnstate - 3000, // spawnhealth - S_SPID_RUN1, // seestate - sfx_spisit, // seesound - 8, // reactiontime - sfx_shotgn, // attacksound - S_SPID_PAIN, // painstate - 40, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_SPID_ATK1, // missilestate - S_SPID_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_spidth, // deathsound - 12, // speed - 128*FRACUNIT, // radius - 100*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_BABY - 68, // doomednum - S_BSPI_STND, // spawnstate - 500, // spawnhealth - S_BSPI_SIGHT, // seestate - sfx_bspsit, // seesound - 8, // reactiontime - 0, // attacksound - S_BSPI_PAIN, // painstate - 128, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_BSPI_ATK1, // missilestate - S_BSPI_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_bspdth, // deathsound - 12, // speed - 64*FRACUNIT, // radius - 64*FRACUNIT, // height - 600, // mass - 0, // damage - sfx_bspact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_BSPI_RAISE1 // raisestate - }, - - { // MT_CYBORG - 16, // doomednum - S_CYBER_STND, // spawnstate - 4000, // spawnhealth - S_CYBER_RUN1, // seestate - sfx_cybsit, // seesound - 8, // reactiontime - 0, // attacksound - S_CYBER_PAIN, // painstate - 20, // painchance - sfx_dmpain, // painsound - 0, // meleestate - S_CYBER_ATK1, // missilestate - S_CYBER_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_cybdth, // deathsound - 16, // speed - 40*FRACUNIT, // radius - 110*FRACUNIT, // height - 1000, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_PAIN - 71, // doomednum - S_PAIN_STND, // spawnstate - 400, // spawnhealth - S_PAIN_RUN1, // seestate - sfx_pesit, // seesound - 8, // reactiontime - 0, // attacksound - S_PAIN_PAIN, // painstate - 128, // painchance - sfx_pepain, // painsound - 0, // meleestate - S_PAIN_ATK1, // missilestate - S_PAIN_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_pedth, // deathsound - 8, // speed - 31*FRACUNIT, // radius - 56*FRACUNIT, // height - 400, // mass - 0, // damage - sfx_dmact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL, // flags - S_PAIN_RAISE1 // raisestate - }, - - { // MT_WOLFSS - 84, // doomednum - S_SSWV_STND, // spawnstate - 50, // spawnhealth - S_SSWV_RUN1, // seestate - sfx_sssit, // seesound - 8, // reactiontime - 0, // attacksound - S_SSWV_PAIN, // painstate - 170, // painchance - sfx_popain, // painsound - 0, // meleestate - S_SSWV_ATK1, // missilestate - S_SSWV_DIE1, // deathstate - S_SSWV_XDIE1, // xdeathstate - sfx_ssdth, // deathsound - 8, // speed - 20*FRACUNIT, // radius - 56*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_posact, // activesound - MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_SSWV_RAISE1 // raisestate - }, - - { // MT_KEEN - 72, // doomednum - S_KEENSTND, // spawnstate - 100, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_KEENPAIN, // painstate - 256, // painchance - sfx_keenpn, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_COMMKEEN, // deathstate - S_NULL, // xdeathstate - sfx_keendt, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 72*FRACUNIT, // height - 10000000, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY|MF_SHOOTABLE|MF_COUNTKILL, // flags - S_NULL // raisestate - }, - - { // MT_BOSSBRAIN - 88, // doomednum - S_BRAIN, // spawnstate - 250, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_BRAIN_PAIN, // painstate - 255, // painchance - sfx_bospn, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BRAIN_DIE1, // deathstate - S_NULL, // xdeathstate - sfx_bosdth, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 10000000, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE, // flags - S_NULL // raisestate - }, - - { // MT_BOSSSPIT - 89, // doomednum - S_BRAINEYE, // spawnstate - 1000, // spawnhealth - S_BRAINEYESEE, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_BOSSTARGET - 87, // doomednum - S_NULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_SPAWNSHOT - -1, // doomednum - S_SPAWN1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_bospit, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 32*FRACUNIT, // height - 100, // mass - 3, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY|MF_NOCLIP, // flags - S_NULL // raisestate - }, - - { // MT_SPAWNFIRE - -1, // doomednum - S_SPAWNFIRE1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BARREL - 2035, // doomednum - S_BAR1, // spawnstate - 20, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BEXP, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 0, // speed - 10*FRACUNIT, // radius - 42*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD, // flags - S_NULL // raisestate - }, - - { // MT_TROOPSHOT - -1, // doomednum - S_TBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_TBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 3, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_HEADSHOT - -1, // doomednum - S_RBALL1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_firsht, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_RBALLX1, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 10*FRACUNIT, // speed - 6*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_ROCKET - -1, // doomednum - S_ROCKET, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_rlaunc, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_EXPLODE1, // deathstate - S_NULL, // xdeathstate - sfx_barexp, // deathsound - 20*FRACUNIT, // speed - 11*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 20, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_PLASMA - -1, // doomednum - S_PLASBALL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_plasma, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_PLASEXP, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BFG - -1, // doomednum - S_BFGSHOT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - 0, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_BFGLAND, // deathstate - S_NULL, // xdeathstate - sfx_rxplod, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 100, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_ARACHPLAZ - -1, // doomednum - S_ARACH_PLAZ, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_plasma, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_ARACH_PLEX, // deathstate - S_NULL, // xdeathstate - sfx_firxpl, // deathsound - 25*FRACUNIT, // speed - 13*FRACUNIT, // radius - 8*FRACUNIT, // height - 100, // mass - 5, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_PUFF - -1, // doomednum - S_PUFF1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_BLOOD - -1, // doomednum - S_BLOOD1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_TFOG - -1, // doomednum - S_TFOG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_IFOG - -1, // doomednum - S_IFOG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_TELEPORTMAN - 14, // doomednum - S_NULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOSECTOR, // flags - S_NULL // raisestate - }, - - { // MT_EXTRABFG - -1, // doomednum - S_BFGEXP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC0 - 2018, // doomednum - S_ARM1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC1 - 2019, // doomednum - S_ARM2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC2 - 2014, // doomednum - S_BON1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC3 - 2015, // doomednum - S_BON2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC4 - 5, // doomednum - S_BKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC5 - 13, // doomednum - S_RKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC6 - 6, // doomednum - S_YKEY, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC7 - 39, // doomednum - S_YSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC8 - 38, // doomednum - S_RSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC9 - 40, // doomednum - S_BSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_NOTDMATCH, // flags - S_NULL // raisestate - }, - - { // MT_MISC10 - 2011, // doomednum - S_STIM, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC11 - 2012, // doomednum - S_MEDI, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC12 - 2013, // doomednum - S_SOUL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_INV - 2022, // doomednum - S_PINV, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC13 - 2023, // doomednum - S_PSTR, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_INS - 2024, // doomednum - S_PINS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC14 - 2025, // doomednum - S_SUIT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC15 - 2026, // doomednum - S_PMAP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MISC16 - 2045, // doomednum - S_PVIS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_MEGA - 83, // doomednum - S_MEGA, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL|MF_COUNTITEM, // flags - S_NULL // raisestate - }, - - { // MT_CLIP - 2007, // doomednum - S_CLIP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC17 - 2048, // doomednum - S_AMMO, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC18 - 2010, // doomednum - S_ROCK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC19 - 2046, // doomednum - S_BROK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC20 - 2047, // doomednum - S_CELL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC21 - 17, // doomednum - S_CELP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC22 - 2008, // doomednum - S_SHEL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC23 - 2049, // doomednum - S_SBOX, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC24 - 8, // doomednum - S_BPAK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC25 - 2006, // doomednum - S_BFUG, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_CHAINGUN - 2002, // doomednum - S_MGUN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC26 - 2005, // doomednum - S_CSAW, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC27 - 2003, // doomednum - S_LAUN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC28 - 2004, // doomednum - S_PLAS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_SHOTGUN - 2001, // doomednum - S_SHOT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_SUPERSHOTGUN - 82, // doomednum - S_SHOT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - - { // MT_MISC29 - 85, // doomednum - S_TECHLAMP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC30 - 86, // doomednum - S_TECH2LAMP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC31 - 2028, // doomednum - S_COLU, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC32 - 30, // doomednum - S_TALLGRNCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC33 - 31, // doomednum - S_SHRTGRNCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC34 - 32, // doomednum - S_TALLREDCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC35 - 33, // doomednum - S_SHRTREDCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC36 - 37, // doomednum - S_SKULLCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC37 - 36, // doomednum - S_HEARTCOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC38 - 41, // doomednum - S_EVILEYE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC39 - 42, // doomednum - S_FLOATSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC40 - 43, // doomednum - S_TORCHTREE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC41 - 44, // doomednum - S_BLUETORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC42 - 45, // doomednum - S_GREENTORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC43 - 46, // doomednum - S_REDTORCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC44 - 55, // doomednum - S_BTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC45 - 56, // doomednum - S_GTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC46 - 57, // doomednum - S_RTORCHSHRT, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC47 - 47, // doomednum - S_STALAGTITE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC48 - 48, // doomednum - S_TECHPILLAR, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC49 - 34, // doomednum - S_CANDLESTIK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC50 - 35, // doomednum - S_CANDELABRA, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC51 - 49, // doomednum - S_BLOODYTWITCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC52 - 50, // doomednum - S_MEAT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC53 - 51, // doomednum - S_MEAT3, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC54 - 52, // doomednum - S_MEAT4, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC55 - 53, // doomednum - S_MEAT5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC56 - 59, // doomednum - S_MEAT2, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 84*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC57 - 60, // doomednum - S_MEAT4, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC58 - 61, // doomednum - S_MEAT3, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC59 - 62, // doomednum - S_MEAT5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 52*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC60 - 63, // doomednum - S_BLOODYTWITCH, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 68*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC61 - 22, // doomednum - S_HEAD_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC62 - 15, // doomednum - S_PLAY_DIE7, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC63 - 18, // doomednum - S_POSS_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC64 - 21, // doomednum - S_SARG_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC65 - 23, // doomednum - S_SKULL_DIE6, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC66 - 20, // doomednum - S_TROO_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC67 - 19, // doomednum - S_SPOS_DIE5, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC68 - 10, // doomednum - S_PLAY_XDIE9, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC69 - 12, // doomednum - S_PLAY_XDIE9, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC70 - 28, // doomednum - S_HEADSONSTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC71 - 24, // doomednum - S_GIBS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - 0, // flags - S_NULL // raisestate - }, - - { // MT_MISC72 - 27, // doomednum - S_HEADONASTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC73 - 29, // doomednum - S_HEADCANDLES, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC74 - 25, // doomednum - S_DEADSTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC75 - 26, // doomednum - S_LIVESTICK, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC76 - 54, // doomednum - S_BIGTREE, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 32*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC77 - 70, // doomednum - S_BBAR1, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID, // flags - S_NULL // raisestate - }, - - { // MT_MISC78 - 73, // doomednum - S_HANGNOGUTS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 88*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC79 - 74, // doomednum - S_HANGBNOBRAIN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 88*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC80 - 75, // doomednum - S_HANGTLOOKDN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC81 - 76, // doomednum - S_HANGTSKULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC82 - 77, // doomednum - S_HANGTLOOKUP, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC83 - 78, // doomednum - S_HANGTNOBRAIN, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 16*FRACUNIT, // radius - 64*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY, // flags - S_NULL // raisestate - }, - - { // MT_MISC84 - 79, // doomednum - S_COLONGIBS, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_MISC85 - 80, // doomednum - S_SMALLPOOL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - }, - - { // MT_MISC86 - 81, // doomednum - S_BRAINSTEM, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_None, // deathsound - 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height - 100, // mass - 0, // damage - sfx_None, // activesound - MF_NOBLOCKMAP, // flags - S_NULL // raisestate - } -}; - + { + // MT_PLAYER + -1, // doomednum + S_PLAY, // spawnstate + 100, // spawnhealth + S_PLAY_RUN1, // seestate + sfx_None, // seesound + 0, // reactiontime + sfx_None, // attacksound + S_PLAY_PAIN, // painstate + 255, // painchance + sfx_plpain, // painsound + S_NULL, // meleestate + S_PLAY_ATK1, // missilestate + S_PLAY_DIE1, // deathstate + S_PLAY_XDIE1, // xdeathstate + sfx_pldeth, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE | MF_DROPOFF | MF_PICKUP | + MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_POSSESSED + 3004, // doomednum + S_POSS_STND, // spawnstate + 20, // spawnhealth + S_POSS_RUN1, // seestate + sfx_posit1, // seesound + 8, // reactiontime + sfx_pistol, // attacksound + S_POSS_PAIN, // painstate + 200, // painchance + sfx_popain, // painsound + 0, // meleestate + S_POSS_ATK1, // missilestate + S_POSS_DIE1, // deathstate + S_POSS_XDIE1, // xdeathstate + sfx_podth1, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_POSS_RAISE1 // raisestate + }, + + { + // MT_SHOTGUY + 9, // doomednum + S_SPOS_STND, // spawnstate + 30, // spawnhealth + S_SPOS_RUN1, // seestate + sfx_posit2, // seesound + 8, // reactiontime + 0, // attacksound + S_SPOS_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_SPOS_ATK1, // missilestate + S_SPOS_DIE1, // deathstate + S_SPOS_XDIE1, // xdeathstate + sfx_podth2, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SPOS_RAISE1 // raisestate + }, + + { + // MT_VILE + 64, // doomednum + S_VILE_STND, // spawnstate + 700, // spawnhealth + S_VILE_RUN1, // seestate + sfx_vilsit, // seesound + 8, // reactiontime + 0, // attacksound + S_VILE_PAIN, // painstate + 10, // painchance + sfx_vipain, // painsound + 0, // meleestate + S_VILE_ATK1, // missilestate + S_VILE_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_vildth, // deathsound + 15, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 500, // mass + 0, // damage + sfx_vilact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { + // MT_FIRE + -1, // doomednum + S_FIRE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_UNDEAD + 66, // doomednum + S_SKEL_STND, // spawnstate + 300, // spawnhealth + S_SKEL_RUN1, // seestate + sfx_skesit, // seesound + 8, // reactiontime + 0, // attacksound + S_SKEL_PAIN, // painstate + 100, // painchance + sfx_popain, // painsound + S_SKEL_FIST1, // meleestate + S_SKEL_MISS1, // missilestate + S_SKEL_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_skedth, // deathsound + 10, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 500, // mass + 0, // damage + sfx_skeact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SKEL_RAISE1 // raisestate + }, + + { + // MT_TRACER + -1, // doomednum + S_TRACER, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_skeatk, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_TRACEEXP1, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 10 * FRACUNIT, // speed + 11 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 10, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_SMOKE + -1, // doomednum + S_SMOKE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_FATSO + 67, // doomednum + S_FATT_STND, // spawnstate + 600, // spawnhealth + S_FATT_RUN1, // seestate + sfx_mansit, // seesound + 8, // reactiontime + 0, // attacksound + S_FATT_PAIN, // painstate + 80, // painchance + sfx_mnpain, // painsound + 0, // meleestate + S_FATT_ATK1, // missilestate + S_FATT_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_mandth, // deathsound + 8, // speed + 48 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_FATT_RAISE1 // raisestate + }, + + { + // MT_FATSHOT + -1, // doomednum + S_FATSHOT1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_FATSHOTX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 20 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 8, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_CHAINGUY + 65, // doomednum + S_CPOS_STND, // spawnstate + 70, // spawnhealth + S_CPOS_RUN1, // seestate + sfx_posit2, // seesound + 8, // reactiontime + 0, // attacksound + S_CPOS_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_CPOS_ATK1, // missilestate + S_CPOS_DIE1, // deathstate + S_CPOS_XDIE1, // xdeathstate + sfx_podth2, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_CPOS_RAISE1 // raisestate + }, + + { + // MT_TROOP + 3001, // doomednum + S_TROO_STND, // spawnstate + 60, // spawnhealth + S_TROO_RUN1, // seestate + sfx_bgsit1, // seesound + 8, // reactiontime + 0, // attacksound + S_TROO_PAIN, // painstate + 200, // painchance + sfx_popain, // painsound + S_TROO_ATK1, // meleestate + S_TROO_ATK1, // missilestate + S_TROO_DIE1, // deathstate + S_TROO_XDIE1, // xdeathstate + sfx_bgdth1, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_bgact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_TROO_RAISE1 // raisestate + }, + + { + // MT_SERGEANT + 3002, // doomednum + S_SARG_STND, // spawnstate + 150, // spawnhealth + S_SARG_RUN1, // seestate + sfx_sgtsit, // seesound + 8, // reactiontime + sfx_sgtatk, // attacksound + S_SARG_PAIN, // painstate + 180, // painchance + sfx_dmpain, // painsound + S_SARG_ATK1, // meleestate + 0, // missilestate + S_SARG_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_sgtdth, // deathsound + 10, // speed + 30 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SARG_RAISE1 // raisestate + }, + + { + // MT_SHADOWS + 58, // doomednum + S_SARG_STND, // spawnstate + 150, // spawnhealth + S_SARG_RUN1, // seestate + sfx_sgtsit, // seesound + 8, // reactiontime + sfx_sgtatk, // attacksound + S_SARG_PAIN, // painstate + 180, // painchance + sfx_dmpain, // painsound + S_SARG_ATK1, // meleestate + 0, // missilestate + S_SARG_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_sgtdth, // deathsound + 10, // speed + 30 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_SHADOW | MF_COUNTKILL, // flags + S_SARG_RAISE1 // raisestate + }, + + { + // MT_HEAD + 3005, // doomednum + S_HEAD_STND, // spawnstate + 400, // spawnhealth + S_HEAD_RUN1, // seestate + sfx_cacsit, // seesound + 8, // reactiontime + 0, // attacksound + S_HEAD_PAIN, // painstate + 128, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_HEAD_ATK1, // missilestate + S_HEAD_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_cacdth, // deathsound + 8, // speed + 31 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | + MF_COUNTKILL, // flags + S_HEAD_RAISE1 // raisestate + }, + + { + // MT_BRUISER + 3003, // doomednum + S_BOSS_STND, // spawnstate + 1000, // spawnhealth + S_BOSS_RUN1, // seestate + sfx_brssit, // seesound + 8, // reactiontime + 0, // attacksound + S_BOSS_PAIN, // painstate + 50, // painchance + sfx_dmpain, // painsound + S_BOSS_ATK1, // meleestate + S_BOSS_ATK1, // missilestate + S_BOSS_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_brsdth, // deathsound + 8, // speed + 24 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BOSS_RAISE1 // raisestate + }, + + { + // MT_BRUISERSHOT + -1, // doomednum + S_BRBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BRBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 15 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 8, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_KNIGHT + 69, // doomednum + S_BOS2_STND, // spawnstate + 500, // spawnhealth + S_BOS2_RUN1, // seestate + sfx_kntsit, // seesound + 8, // reactiontime + 0, // attacksound + S_BOS2_PAIN, // painstate + 50, // painchance + sfx_dmpain, // painsound + S_BOS2_ATK1, // meleestate + S_BOS2_ATK1, // missilestate + S_BOS2_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_kntdth, // deathsound + 8, // speed + 24 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BOS2_RAISE1 // raisestate + }, + + { + // MT_SKULL + 3006, // doomednum + S_SKULL_STND, // spawnstate + 100, // spawnhealth + S_SKULL_RUN1, // seestate + 0, // seesound + 8, // reactiontime + sfx_sklatk, // attacksound + S_SKULL_PAIN, // painstate + 256, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_SKULL_ATK1, // missilestate + S_SKULL_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 8, // speed + 16 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 50, // mass + 3, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_SPIDER + 7, // doomednum + S_SPID_STND, // spawnstate + 3000, // spawnhealth + S_SPID_RUN1, // seestate + sfx_spisit, // seesound + 8, // reactiontime + sfx_shotgn, // attacksound + S_SPID_PAIN, // painstate + 40, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_SPID_ATK1, // missilestate + S_SPID_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_spidth, // deathsound + 12, // speed + 128 * FRACUNIT, // radius + 100 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { + // MT_BABY + 68, // doomednum + S_BSPI_STND, // spawnstate + 500, // spawnhealth + S_BSPI_SIGHT, // seestate + sfx_bspsit, // seesound + 8, // reactiontime + 0, // attacksound + S_BSPI_PAIN, // painstate + 128, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_BSPI_ATK1, // missilestate + S_BSPI_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_bspdth, // deathsound + 12, // speed + 64 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 600, // mass + 0, // damage + sfx_bspact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BSPI_RAISE1 // raisestate + }, + + { + // MT_CYBORG + 16, // doomednum + S_CYBER_STND, // spawnstate + 4000, // spawnhealth + S_CYBER_RUN1, // seestate + sfx_cybsit, // seesound + 8, // reactiontime + 0, // attacksound + S_CYBER_PAIN, // painstate + 20, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_CYBER_ATK1, // missilestate + S_CYBER_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_cybdth, // deathsound + 16, // speed + 40 * FRACUNIT, // radius + 110 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { + // MT_PAIN + 71, // doomednum + S_PAIN_STND, // spawnstate + 400, // spawnhealth + S_PAIN_RUN1, // seestate + sfx_pesit, // seesound + 8, // reactiontime + 0, // attacksound + S_PAIN_PAIN, // painstate + 128, // painchance + sfx_pepain, // painsound + 0, // meleestate + S_PAIN_ATK1, // missilestate + S_PAIN_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_pedth, // deathsound + 8, // speed + 31 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | + MF_COUNTKILL, // flags + S_PAIN_RAISE1 // raisestate + }, + + { + // MT_WOLFSS + 84, // doomednum + S_SSWV_STND, // spawnstate + 50, // spawnhealth + S_SSWV_RUN1, // seestate + sfx_sssit, // seesound + 8, // reactiontime + 0, // attacksound + S_SSWV_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_SSWV_ATK1, // missilestate + S_SSWV_DIE1, // deathstate + S_SSWV_XDIE1, // xdeathstate + sfx_ssdth, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SSWV_RAISE1 // raisestate + }, + + { + // MT_KEEN + 72, // doomednum + S_KEENSTND, // spawnstate + 100, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_KEENPAIN, // painstate + 256, // painchance + sfx_keenpn, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_COMMKEEN, // deathstate + S_NULL, // xdeathstate + sfx_keendt, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 72 * FRACUNIT, // height + 10000000, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY | MF_SHOOTABLE | + MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { + // MT_BOSSBRAIN + 88, // doomednum + S_BRAIN, // spawnstate + 250, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_BRAIN_PAIN, // painstate + 255, // painchance + sfx_bospn, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BRAIN_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_bosdth, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 10000000, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE, // flags + S_NULL // raisestate + }, + + { + // MT_BOSSSPIT + 89, // doomednum + S_BRAINEYE, // spawnstate + 1000, // spawnhealth + S_BRAINEYESEE, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { + // MT_BOSSTARGET + 87, // doomednum + S_NULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { + // MT_SPAWNSHOT + -1, // doomednum + S_SPAWN1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_bospit, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 3, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY | + MF_NOCLIP, // flags + S_NULL // raisestate + }, + + { + // MT_SPAWNFIRE + -1, // doomednum + S_SPAWNFIRE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_BARREL + 2035, // doomednum + S_BAR1, // spawnstate + 20, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BEXP, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 0, // speed + 10 * FRACUNIT, // radius + 42 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE | MF_NOBLOOD, // flags + S_NULL // raisestate + }, + + { + // MT_TROOPSHOT + -1, // doomednum + S_TBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_TBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 3, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_HEADSHOT + -1, // doomednum + S_RBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_RBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_ROCKET + -1, // doomednum + S_ROCKET, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_rlaunc, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_EXPLODE1, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 20 * FRACUNIT, // speed + 11 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 20, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_PLASMA + -1, // doomednum + S_PLASBALL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_plasma, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_PLASEXP, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_BFG + -1, // doomednum + S_BFGSHOT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + 0, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BFGLAND, // deathstate + S_NULL, // xdeathstate + sfx_rxplod, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 100, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_ARACHPLAZ + -1, // doomednum + S_ARACH_PLAZ, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_plasma, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_ARACH_PLEX, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_PUFF + -1, // doomednum + S_PUFF1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_BLOOD + -1, // doomednum + S_BLOOD1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { + // MT_TFOG + -1, // doomednum + S_TFOG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_IFOG + -1, // doomednum + S_IFOG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_TELEPORTMAN + 14, // doomednum + S_NULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { + // MT_EXTRABFG + -1, // doomednum + S_BFGEXP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC0 + 2018, // doomednum + S_ARM1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC1 + 2019, // doomednum + S_ARM2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC2 + 2014, // doomednum + S_BON1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MISC3 + 2015, // doomednum + S_BON2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MISC4 + 5, // doomednum + S_BKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC5 + 13, // doomednum + S_RKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC6 + 6, // doomednum + S_YKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC7 + 39, // doomednum + S_YSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC8 + 38, // doomednum + S_RSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC9 + 40, // doomednum + S_BSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { + // MT_MISC10 + 2011, // doomednum + S_STIM, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC11 + 2012, // doomednum + S_MEDI, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC12 + 2013, // doomednum + S_SOUL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_INV + 2022, // doomednum + S_PINV, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MISC13 + 2023, // doomednum + S_PSTR, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_INS + 2024, // doomednum + S_PINS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MISC14 + 2025, // doomednum + S_SUIT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC15 + 2026, // doomednum + S_PMAP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MISC16 + 2045, // doomednum + S_PVIS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_MEGA + 83, // doomednum + S_MEGA, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { + // MT_CLIP + 2007, // doomednum + S_CLIP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC17 + 2048, // doomednum + S_AMMO, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC18 + 2010, // doomednum + S_ROCK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC19 + 2046, // doomednum + S_BROK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC20 + 2047, // doomednum + S_CELL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC21 + 17, // doomednum + S_CELP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC22 + 2008, // doomednum + S_SHEL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC23 + 2049, // doomednum + S_SBOX, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC24 + 8, // doomednum + S_BPAK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC25 + 2006, // doomednum + S_BFUG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_CHAINGUN + 2002, // doomednum + S_MGUN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC26 + 2005, // doomednum + S_CSAW, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC27 + 2003, // doomednum + S_LAUN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC28 + 2004, // doomednum + S_PLAS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_SHOTGUN + 2001, // doomednum + S_SHOT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_SUPERSHOTGUN + 82, // doomednum + S_SHOT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { + // MT_MISC29 + 85, // doomednum + S_TECHLAMP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC30 + 86, // doomednum + S_TECH2LAMP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC31 + 2028, // doomednum + S_COLU, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC32 + 30, // doomednum + S_TALLGRNCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC33 + 31, // doomednum + S_SHRTGRNCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC34 + 32, // doomednum + S_TALLREDCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC35 + 33, // doomednum + S_SHRTREDCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC36 + 37, // doomednum + S_SKULLCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC37 + 36, // doomednum + S_HEARTCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC38 + 41, // doomednum + S_EVILEYE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC39 + 42, // doomednum + S_FLOATSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC40 + 43, // doomednum + S_TORCHTREE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC41 + 44, // doomednum + S_BLUETORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC42 + 45, // doomednum + S_GREENTORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC43 + 46, // doomednum + S_REDTORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC44 + 55, // doomednum + S_BTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC45 + 56, // doomednum + S_GTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC46 + 57, // doomednum + S_RTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC47 + 47, // doomednum + S_STALAGTITE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC48 + 48, // doomednum + S_TECHPILLAR, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC49 + 34, // doomednum + S_CANDLESTIK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC50 + 35, // doomednum + S_CANDELABRA, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC51 + 49, // doomednum + S_BLOODYTWITCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC52 + 50, // doomednum + S_MEAT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC53 + 51, // doomednum + S_MEAT3, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC54 + 52, // doomednum + S_MEAT4, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC55 + 53, // doomednum + S_MEAT5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC56 + 59, // doomednum + S_MEAT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC57 + 60, // doomednum + S_MEAT4, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC58 + 61, // doomednum + S_MEAT3, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC59 + 62, // doomednum + S_MEAT5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC60 + 63, // doomednum + S_BLOODYTWITCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC61 + 22, // doomednum + S_HEAD_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC62 + 15, // doomednum + S_PLAY_DIE7, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC63 + 18, // doomednum + S_POSS_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC64 + 21, // doomednum + S_SARG_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC65 + 23, // doomednum + S_SKULL_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC66 + 20, // doomednum + S_TROO_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC67 + 19, // doomednum + S_SPOS_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC68 + 10, // doomednum + S_PLAY_XDIE9, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC69 + 12, // doomednum + S_PLAY_XDIE9, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC70 + 28, // doomednum + S_HEADSONSTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC71 + 24, // doomednum + S_GIBS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { + // MT_MISC72 + 27, // doomednum + S_HEADONASTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC73 + 29, // doomednum + S_HEADCANDLES, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC74 + 25, // doomednum + S_DEADSTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC75 + 26, // doomednum + S_LIVESTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC76 + 54, // doomednum + S_BIGTREE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 32 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC77 + 70, // doomednum + S_BBAR1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { + // MT_MISC78 + 73, // doomednum + S_HANGNOGUTS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 88 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC79 + 74, // doomednum + S_HANGBNOBRAIN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 88 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC80 + 75, // doomednum + S_HANGTLOOKDN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC81 + 76, // doomednum + S_HANGTSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC82 + 77, // doomednum + S_HANGTLOOKUP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC83 + 78, // doomednum + S_HANGTNOBRAIN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { + // MT_MISC84 + 79, // doomednum + S_COLONGIBS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { + // MT_MISC85 + 80, // doomednum + S_SMALLPOOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { + // MT_MISC86 + 81, // doomednum + S_BRAINSTEM, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }}; diff --git a/src/doom/m_menu.c b/src/doom/m_menu.c index d6866b3598..bcd7e5b301 100644 --- a/src/doom/m_menu.c +++ b/src/doom/m_menu.c @@ -168,11 +168,11 @@ static void M_LoadGame(int choice); static void M_SaveGame(int choice); static void M_Options(int choice); static void M_EndGame(int choice); -static void M_ReadThis(int choice); -static void M_ReadThis2(int choice); +static void M_ReadThis(); +static void M_ReadThis2(); static void M_QuitDOOM(int choice); -static void M_ChangeMessages(int choice); +static void M_ChangeMessages(); static void M_ChangeSensitivity(int choice); static void M_SfxVol(int choice); static void M_MusicVol(int choice); @@ -180,7 +180,7 @@ static void M_ChangeDetail(int choice); static void M_SizeDisplay(int choice); static void M_Sound(int choice); -static void M_FinishReadThis(int choice); +static void M_FinishReadThis(); static void M_LoadSelect(int choice); static void M_SaveSelect(int choice); static void M_ReadSaveStrings(void); @@ -327,8 +327,7 @@ enum menuitem_t ReadMenu1[] = {{1, "", M_ReadThis2, 0}}; -menu_t ReadDef1 = {read1_end, &MainDef, ReadMenu1, M_DrawReadThis1, - 280, 185, 0}; +menu_t ReadDef1 = {read1_end, &MainDef, ReadMenu1, M_DrawReadThis1, 280, 185, 0}; enum { @@ -338,8 +337,7 @@ enum menuitem_t ReadMenu2[] = {{1, "", M_FinishReadThis, 0}}; -menu_t ReadDef2 = {read2_end, &ReadDef1, ReadMenu2, M_DrawReadThis2, - 330, 175, 0}; +menu_t ReadDef2 = {read2_end, &ReadDef1, ReadMenu2, M_DrawReadThis2, 330, 175, 0}; // // SOUND VOLUME MENU @@ -374,20 +372,18 @@ enum load_end } load_e; -menuitem_t LoadMenu[] = { - {1, "", M_LoadSelect, '1'}, {1, "", M_LoadSelect, '2'}, - {1, "", M_LoadSelect, '3'}, {1, "", M_LoadSelect, '4'}, - {1, "", M_LoadSelect, '5'}, {1, "", M_LoadSelect, '6'}}; +menuitem_t LoadMenu[] = {{1, "", M_LoadSelect, '1'}, {1, "", M_LoadSelect, '2'}, + {1, "", M_LoadSelect, '3'}, {1, "", M_LoadSelect, '4'}, + {1, "", M_LoadSelect, '5'}, {1, "", M_LoadSelect, '6'}}; menu_t LoadDef = {load_end, &MainDef, LoadMenu, M_DrawLoad, 80, 54, 0}; // // SAVE GAME MENU // -menuitem_t SaveMenu[] = { - {1, "", M_SaveSelect, '1'}, {1, "", M_SaveSelect, '2'}, - {1, "", M_SaveSelect, '3'}, {1, "", M_SaveSelect, '4'}, - {1, "", M_SaveSelect, '5'}, {1, "", M_SaveSelect, '6'}}; +menuitem_t SaveMenu[] = {{1, "", M_SaveSelect, '1'}, {1, "", M_SaveSelect, '2'}, + {1, "", M_SaveSelect, '3'}, {1, "", M_SaveSelect, '4'}, + {1, "", M_SaveSelect, '5'}, {1, "", M_SaveSelect, '6'}}; menu_t SaveDef = {load_end, &MainDef, SaveMenu, M_DrawSave, 80, 54, 0}; @@ -398,23 +394,20 @@ menu_t SaveDef = {load_end, &MainDef, SaveMenu, M_DrawSave, 80, 54, 0}; // void M_ReadSaveStrings(void) { - FILE *handle; - int i; char name[256]; - for (i = 0; i < load_end; i++) + for (int i = 0; i < load_end; i++) { - int retval; M_StringCopy(name, P_SaveGameFile(i), sizeof(name)); - handle = M_fopen(name, "rb"); + FILE *handle = M_fopen(name, "rb"); if (handle == NULL) { M_StringCopy(savegamestrings[i], EMPTYSTRING, SAVESTRINGSIZE); LoadMenu[i].status = 0; continue; } - retval = fread(&savegamestrings[i], 1, SAVESTRINGSIZE, handle); + int retval = fread(&savegamestrings[i], 1, SAVESTRINGSIZE, handle); fclose(handle); LoadMenu[i].status = retval == SAVESTRINGSIZE; } @@ -445,18 +438,15 @@ void M_DrawSaveLoadBorder(int x, int y) { int i; - V_DrawPatchDirect(x - 8, y + 7, - W_CacheLumpName("M_LSLEFT", PU_CACHE)); + V_DrawPatchDirect(x - 8, y + 7, W_CacheLumpName("M_LSLEFT", PU_CACHE)); for (i = 0; i < 24; i++) { - V_DrawPatchDirect(x, y + 7, - W_CacheLumpName("M_LSCNTR", PU_CACHE)); + V_DrawPatchDirect(x, y + 7, W_CacheLumpName("M_LSCNTR", PU_CACHE)); x += 8; } - V_DrawPatchDirect(x, y + 7, - W_CacheLumpName("M_LSRGHT", PU_CACHE)); + V_DrawPatchDirect(x, y + 7, W_CacheLumpName("M_LSRGHT", PU_CACHE)); } @@ -532,8 +522,7 @@ static void SetDefaultSaveName(int slot) // map from IWAD or PWAD? if (W_IsIWADLump(maplumpinfo) && strcmp(savegamedir, "")) { - M_snprintf(savegamestrings[itemOn], SAVESTRINGSIZE, "%s", - maplumpinfo->name); + M_snprintf(savegamestrings[itemOn], SAVESTRINGSIZE, "%s", maplumpinfo->name); } else { @@ -545,8 +534,8 @@ static void SetDefaultSaveName(int slot) *ext = '\0'; } - M_snprintf(savegamestrings[itemOn], SAVESTRINGSIZE, "%s (%s)", - maplumpinfo->name, wadname); + M_snprintf(savegamestrings[itemOn], SAVESTRINGSIZE, "%s (%s)", maplumpinfo->name, + wadname); free(wadname); } M_ForceUppercase(savegamestrings[itemOn]); @@ -634,8 +623,7 @@ void M_QuickSave(void) quickSaveSlot = -2; // means to pick a slot now return; } - M_snprintf(tempstring, sizeof(tempstring), QSPROMPT, - savegamestrings[quickSaveSlot]); + M_snprintf(tempstring, sizeof(tempstring), QSPROMPT, savegamestrings[quickSaveSlot]); M_StartMessage(tempstring, M_QuickSaveResponse, true); } @@ -666,8 +654,7 @@ void M_QuickLoad(void) M_StartMessage(QSAVESPOT, NULL, false); return; } - M_snprintf(tempstring, sizeof(tempstring), QLPROMPT, - savegamestrings[quickSaveSlot]); + M_snprintf(tempstring, sizeof(tempstring), QLPROMPT, savegamestrings[quickSaveSlot]); M_StartMessage(tempstring, M_QuickLoadResponse, true); } @@ -704,11 +691,9 @@ void M_DrawSound(void) { V_DrawPatchDirect(60, 38, W_CacheLumpName("M_SVOL", PU_CACHE)); - M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (sfx_vol + 1), 16, - sfxVolume); + M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (sfx_vol + 1), 16, sfxVolume); - M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (music_vol + 1), 16, - musicVolume); + M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (music_vol + 1), 16, musicVolume); } void M_Sound(int choice) @@ -788,8 +773,7 @@ int epi; void M_DrawEpisode(void) { - V_DrawPatchDirect(54, 38, - W_CacheLumpName("M_EPISOD", PU_CACHE)); + V_DrawPatchDirect(54, 38, W_CacheLumpName("M_EPISOD", PU_CACHE)); } void M_VerifyNightmare(int key) @@ -828,22 +812,18 @@ static const char *msgNames[2] = {"M_MSGOFF", "M_MSGON"}; void M_DrawOptions(void) { - V_DrawPatchDirect(108, 15, - W_CacheLumpName("M_OPTTTL", PU_CACHE)); + V_DrawPatchDirect(108, 15, W_CacheLumpName("M_OPTTTL", PU_CACHE)); - V_DrawPatchDirect( - OptionsDef.x + 175, OptionsDef.y + LINEHEIGHT * detail, - W_CacheLumpName(detailNames[detailLevel], PU_CACHE)); + V_DrawPatchDirect(OptionsDef.x + 175, OptionsDef.y + LINEHEIGHT * detail, + W_CacheLumpName(detailNames[detailLevel], PU_CACHE)); - V_DrawPatchDirect( - OptionsDef.x + 120, OptionsDef.y + LINEHEIGHT * messages, - W_CacheLumpName(msgNames[showMessages], PU_CACHE)); + V_DrawPatchDirect(OptionsDef.x + 120, OptionsDef.y + LINEHEIGHT * messages, + W_CacheLumpName(msgNames[showMessages], PU_CACHE)); M_DrawThermo(OptionsDef.x, OptionsDef.y + LINEHEIGHT * (mousesens + 1), 10, mouseSensitivity); - M_DrawThermo(OptionsDef.x, OptionsDef.y + LINEHEIGHT * (scrnsize + 1), 9, - screenSize); + M_DrawThermo(OptionsDef.x, OptionsDef.y + LINEHEIGHT * (scrnsize + 1), 9, screenSize); } void M_Options(int choice) @@ -855,10 +835,8 @@ void M_Options(int choice) // // Toggle messages on/off // -void M_ChangeMessages(int choice) +void M_ChangeMessages() { - // warning: unused parameter `int choice' - choice = 0; showMessages = 1 - showMessages; if (!showMessages) @@ -905,21 +883,18 @@ void M_EndGame(int choice) // // M_ReadThis // -void M_ReadThis(int choice) +void M_ReadThis() { - choice = 0; M_SetupNextMenu(&ReadDef1); } -void M_ReadThis2(int choice) +void M_ReadThis2() { - choice = 0; M_SetupNextMenu(&ReadDef2); } -void M_FinishReadThis(int choice) +void M_FinishReadThis() { - choice = 0; M_SetupNextMenu(&MainDef); } @@ -959,8 +934,7 @@ static const char *M_SelectEndMessage(void) void M_QuitDOOM(int choice) { - M_snprintf(endstring, sizeof(endstring), "%s\n\n" DOSY, - M_SelectEndMessage()); + M_snprintf(endstring, sizeof(endstring), "%s\n\n" DOSY, M_SelectEndMessage()); M_StartMessage(endstring, M_QuitResponse, true); } @@ -1034,14 +1008,12 @@ void M_DrawThermo(int x, int y, int thermWidth, int thermDot) xx += 8; for (i = 0; i < thermWidth; i++) { - V_DrawPatchDirect(xx, y, - W_CacheLumpName("M_THERMM", PU_CACHE)); + V_DrawPatchDirect(xx, y, W_CacheLumpName("M_THERMM", PU_CACHE)); xx += 8; } V_DrawPatchDirect(xx, y, W_CacheLumpName("M_THERMR", PU_CACHE)); - V_DrawPatchDirect((x + 8) + thermDot * 8, y, - W_CacheLumpName("M_THERMO", PU_CACHE)); + V_DrawPatchDirect((x + 8) + thermDot * 8, y, W_CacheLumpName("M_THERMO", PU_CACHE)); } @@ -1062,13 +1034,11 @@ void M_StartMessage(const char *string, void *routine, boolean input) // int M_StringWidth(const char *string) { - size_t i; int w = 0; - int c; - for (i = 0; i < strlen(string); i++) + for (size_t i = 0; i < strlen(string); i++) { - c = toupper(string[i]) - HU_FONTSTART; + int c = toupper(string[i]) - HU_FONTSTART; if (c < 0 || c >= HU_FONTSIZE) w += 4; else @@ -1234,9 +1204,8 @@ boolean M_Responder(event_t *ev) joywait = I_GetTime() + 2; } -#define JOY_BUTTON_MAPPED(x) ((x) >= 0) -#define JOY_BUTTON_PRESSED(x) \ - (JOY_BUTTON_MAPPED(x) && (ev->data1 & (1 << (x))) != 0) +#define JOY_BUTTON_MAPPED(x) ((x) >= 0) +#define JOY_BUTTON_PRESSED(x) (JOY_BUTTON_MAPPED(x) && (ev->data1 & (1 << (x))) != 0) if (JOY_BUTTON_PRESSED(joybfire)) { @@ -1359,8 +1328,7 @@ boolean M_Responder(event_t *ev) case KEY_ESCAPE: saveStringEnter = 0; I_StopTextInput(); - M_StringCopy(savegamestrings[saveSlot], saveOldString, - SAVESTRINGSIZE); + M_StringCopy(savegamestrings[saveSlot], saveOldString, SAVESTRINGSIZE); break; case KEY_ENTER: @@ -1400,10 +1368,8 @@ boolean M_Responder(event_t *ev) break; } - if (ch >= 32 && ch <= 127 && - saveCharIndex < SAVESTRINGSIZE - 1 && - M_StringWidth(savegamestrings[saveSlot]) < - (SAVESTRINGSIZE - 2) * 8) + if (ch >= 32 && ch <= 127 && saveCharIndex < SAVESTRINGSIZE - 1 && + M_StringWidth(savegamestrings[saveSlot]) < (SAVESTRINGSIZE - 2) * 8) { savegamestrings[saveSlot][saveCharIndex++] = ch; savegamestrings[saveSlot][saveCharIndex] = 0; @@ -1435,8 +1401,7 @@ boolean M_Responder(event_t *ev) return true; } - if ((devparm && key == key_menu_help) || - (key != 0 && key == key_menu_screenshot)) + if ((devparm && key == key_menu_help) || (key != 0 && key == key_menu_screenshot)) { G_ScreenShot(); return true; @@ -1513,7 +1478,7 @@ boolean M_Responder(event_t *ev) } else if (key == key_menu_messages) // Toggle messages { - M_ChangeMessages(0); + M_ChangeMessages(); S_StartSound(NULL, sfx_swtchn); return true; } @@ -1741,16 +1706,14 @@ void M_Drawer(void) static short y; unsigned int i; unsigned int max; - char string[80]; - const char *name; - int start; inhelpscreens = false; // Horiz. & Vertically center string and print it. if (messageToPrint) { - start = 0; + int start = 0; + char string[80]; y = SCREENHEIGHT / 2 - M_StringHeight(messageString) / 2; while (messageString[start] != '\0') { @@ -1804,7 +1767,7 @@ void M_Drawer(void) for (i = 0; i < max; i++) { - name = currentMenu->menuitems[i].name; + const char *name = currentMenu->menuitems[i].name; if (name[0] && W_CheckNumForName(name) > 0) { @@ -1815,9 +1778,8 @@ void M_Drawer(void) // DRAW SKULL - V_DrawPatchDirect( - x + SKULLXOFF, currentMenu->y - 5 + itemOn * LINEHEIGHT, - W_CacheLumpName(skullName[whichSkull], PU_CACHE)); + V_DrawPatchDirect(x + SKULLXOFF, currentMenu->y - 5 + itemOn * LINEHEIGHT, + W_CacheLumpName(skullName[whichSkull], PU_CACHE)); } diff --git a/src/doom/m_random.c b/src/doom/m_random.c index b4f59b33f4..67a02d5b1d 100644 --- a/src/doom/m_random.c +++ b/src/doom/m_random.c @@ -22,50 +22,46 @@ // static const unsigned char rndtable[256] = { - 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66 , - 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36 , - 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188 , - 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224 , - 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242 , - 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0 , - 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235 , - 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113 , - 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75 , - 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196 , - 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113 , - 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241 , - 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224 , - 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95 , - 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226 , - 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36 , - 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106 , - 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136 , - 120, 163, 236, 249 -}; + 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66, 74, 21, + 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36, 95, 110, 85, 48, + 212, 140, 211, 249, 22, 79, 200, 50, 28, 188, 52, 140, 202, 120, 68, 145, + 62, 70, 184, 190, 91, 197, 152, 224, 149, 104, 25, 178, 252, 182, 202, 182, + 141, 197, 4, 81, 181, 242, 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, + 122, 175, 249, 0, 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, + 2, 235, 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113, + 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75, 136, 156, + 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196, 135, 106, 63, 197, + 195, 86, 96, 203, 113, 101, 170, 247, 181, 113, 80, 250, 108, 7, 255, 237, + 129, 226, 79, 107, 112, 166, 103, 241, 24, 223, 239, 120, 198, 58, 60, 82, + 128, 3, 184, 66, 143, 224, 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, + 59, 33, 159, 95, 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, + 109, 226, 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36, + 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106, 197, 242, + 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136, 120, 163, 236, 249}; -int rndindex = 0; -int prndindex = 0; +int rndindex = 0; +int prndindex = 0; // Which one is deterministic? -int P_Random (void) +int P_Random(void) { - prndindex = (prndindex+1)&0xff; + prndindex = (prndindex + 1) & 0xff; return rndtable[prndindex]; } -int M_Random (void) +int M_Random(void) { - rndindex = (rndindex+1)&0xff; + rndindex = (rndindex + 1) & 0xff; return rndtable[rndindex]; } -void M_ClearRandom (void) +void M_ClearRandom(void) { rndindex = prndindex = 0; } // inspired by the same routine in Eternity, thanks haleyjd -int P_SubRandom (void) +int P_SubRandom(void) { int r = P_Random(); return r - P_Random(); diff --git a/src/doom/p_ceilng.c b/src/doom/p_ceilng.c index d1e61c898b..9c54543531 100644 --- a/src/doom/p_ceilng.c +++ b/src/doom/p_ceilng.c @@ -16,7 +16,6 @@ // - #include "z_zone.h" #include "doomdef.h" #include "p_local.h" @@ -35,120 +34,116 @@ // -ceiling_t* activeceilings[MAXCEILINGS]; +ceiling_t *activeceilings[MAXCEILINGS]; // // T_MoveCeiling // -void T_MoveCeiling (ceiling_t* ceiling) +void T_MoveCeiling(ceiling_t *ceiling) { - result_e res; - - switch(ceiling->direction) + result_e res; + + switch (ceiling->direction) { - case 0: - // IN STASIS - break; - case 1: - // UP - res = T_MovePlane(ceiling->sector, - ceiling->speed, - ceiling->topheight, - false,1,ceiling->direction); - - if (!(leveltime&7)) - { - switch(ceiling->type) - { - case silentCrushAndRaise: - break; - default: - S_StartSound(&ceiling->sector->soundorg, sfx_stnmov); - // ? - break; - } - } - - if (res == pastdest) - { - switch(ceiling->type) - { - case raiseToHighest: - P_RemoveActiveCeiling(ceiling); - break; - - case silentCrushAndRaise: - S_StartSound(&ceiling->sector->soundorg, sfx_pstop); - case fastCrushAndRaise: - case crushAndRaise: - ceiling->direction = -1; - break; - - default: - break; - } - - } - break; - - case -1: - // DOWN - res = T_MovePlane(ceiling->sector, - ceiling->speed, - ceiling->bottomheight, - ceiling->crush,1,ceiling->direction); - - if (!(leveltime&7)) - { - switch(ceiling->type) - { - case silentCrushAndRaise: break; - default: - S_StartSound(&ceiling->sector->soundorg, sfx_stnmov); - } - } - - if (res == pastdest) - { - switch(ceiling->type) - { - case silentCrushAndRaise: - S_StartSound(&ceiling->sector->soundorg, sfx_pstop); - case crushAndRaise: - ceiling->speed = CEILSPEED; - case fastCrushAndRaise: - ceiling->direction = 1; - break; - - case lowerAndCrush: - case lowerToFloor: - P_RemoveActiveCeiling(ceiling); - break; - - default: - break; - } - } - else // ( res != pastdest ) - { - if (res == crushed) - { - switch(ceiling->type) - { - case silentCrushAndRaise: - case crushAndRaise: - case lowerAndCrush: - ceiling->speed = CEILSPEED / 8; - break; - - default: - break; - } - } - } - break; + case 0: + // IN STASIS + break; + case 1: + // UP + res = T_MovePlane(ceiling->sector, ceiling->speed, ceiling->topheight, false, + 1, ceiling->direction); + + if (!(leveltime & 7)) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + break; + default: + S_StartSound(&ceiling->sector->soundorg, sfx_stnmov); + // ? + break; + } + } + + if (res == pastdest) + { + switch (ceiling->type) + { + case raiseToHighest: + P_RemoveActiveCeiling(ceiling); + break; + + case silentCrushAndRaise: + S_StartSound(&ceiling->sector->soundorg, sfx_pstop); + case fastCrushAndRaise: + case crushAndRaise: + ceiling->direction = -1; + break; + + default: + break; + } + } + break; + + case -1: + // DOWN + res = T_MovePlane(ceiling->sector, ceiling->speed, ceiling->bottomheight, + ceiling->crush, 1, ceiling->direction); + + if (!(leveltime & 7)) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + break; + default: + S_StartSound(&ceiling->sector->soundorg, sfx_stnmov); + } + } + + if (res == pastdest) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + S_StartSound(&ceiling->sector->soundorg, sfx_pstop); + case crushAndRaise: + ceiling->speed = CEILSPEED; + case fastCrushAndRaise: + ceiling->direction = 1; + break; + + case lowerAndCrush: + case lowerToFloor: + P_RemoveActiveCeiling(ceiling); + break; + + default: + break; + } + } + else // ( res != pastdest ) + { + if (res == crushed) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + case crushAndRaise: + case lowerAndCrush: + ceiling->speed = CEILSPEED / 8; + break; + + default: + break; + } + } + } + break; } } @@ -157,78 +152,75 @@ void T_MoveCeiling (ceiling_t* ceiling) // EV_DoCeiling // Move a ceiling up/down and all around! // -int -EV_DoCeiling -( line_t* line, - ceiling_e type ) +int EV_DoCeiling(line_t *line, ceiling_e type) { - int secnum; - int rtn; - sector_t* sec; - ceiling_t* ceiling; - + int secnum; + int rtn; + sector_t *sec; + ceiling_t *ceiling; + secnum = -1; rtn = 0; - + // Reactivate in-stasis ceilings...for certain types. - switch(type) + switch (type) { - case fastCrushAndRaise: - case silentCrushAndRaise: - case crushAndRaise: - P_ActivateInStasisCeiling(line); - default: - break; + case fastCrushAndRaise: + case silentCrushAndRaise: + case crushAndRaise: + P_ActivateInStasisCeiling(line); + default: + break; } - - while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) { - sec = §ors[secnum]; - if (sec->specialdata) - continue; - - // new door thinker - rtn = 1; - ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVSPEC, 0); - P_AddThinker (&ceiling->thinker); - sec->specialdata = ceiling; - ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling; - ceiling->sector = sec; - ceiling->crush = false; - - switch(type) - { - case fastCrushAndRaise: - ceiling->crush = true; - ceiling->topheight = sec->ceilingheight; - ceiling->bottomheight = sec->floorheight + (8*FRACUNIT); - ceiling->direction = -1; - ceiling->speed = CEILSPEED * 2; - break; - - case silentCrushAndRaise: - case crushAndRaise: - ceiling->crush = true; - ceiling->topheight = sec->ceilingheight; - case lowerAndCrush: - case lowerToFloor: - ceiling->bottomheight = sec->floorheight; - if (type != lowerToFloor) - ceiling->bottomheight += 8*FRACUNIT; - ceiling->direction = -1; - ceiling->speed = CEILSPEED; - break; - - case raiseToHighest: - ceiling->topheight = P_FindHighestCeilingSurrounding(sec); - ceiling->direction = 1; - ceiling->speed = CEILSPEED; - break; - } - - ceiling->tag = sec->tag; - ceiling->type = type; - P_AddActiveCeiling(ceiling); + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + // new door thinker + rtn = 1; + ceiling = Z_Malloc(sizeof(*ceiling), PU_LEVSPEC, 0); + P_AddThinker(&ceiling->thinker); + sec->specialdata = ceiling; + ceiling->thinker.function.acp1 = (actionf_p1) T_MoveCeiling; + ceiling->sector = sec; + ceiling->crush = false; + + switch (type) + { + case fastCrushAndRaise: + ceiling->crush = true; + ceiling->topheight = sec->ceilingheight; + ceiling->bottomheight = sec->floorheight + (8 * FRACUNIT); + ceiling->direction = -1; + ceiling->speed = CEILSPEED * 2; + break; + + case silentCrushAndRaise: + case crushAndRaise: + ceiling->crush = true; + ceiling->topheight = sec->ceilingheight; + case lowerAndCrush: + case lowerToFloor: + ceiling->bottomheight = sec->floorheight; + if (type != lowerToFloor) + ceiling->bottomheight += 8 * FRACUNIT; + ceiling->direction = -1; + ceiling->speed = CEILSPEED; + break; + + case raiseToHighest: + ceiling->topheight = P_FindHighestCeilingSurrounding(sec); + ceiling->direction = 1; + ceiling->speed = CEILSPEED; + break; + } + + ceiling->tag = sec->tag; + ceiling->type = type; + P_AddActiveCeiling(ceiling); } return rtn; } @@ -237,88 +229,82 @@ EV_DoCeiling // // Add an active ceiling // -void P_AddActiveCeiling(ceiling_t* c) +void P_AddActiveCeiling(ceiling_t *c) { - int i; - - for (i = 0; i < MAXCEILINGS;i++) + int i; + + for (i = 0; i < MAXCEILINGS; i++) { - if (activeceilings[i] == NULL) - { - activeceilings[i] = c; - return; - } + if (activeceilings[i] == NULL) + { + activeceilings[i] = c; + return; + } } } - // // Remove a ceiling's thinker // -void P_RemoveActiveCeiling(ceiling_t* c) +void P_RemoveActiveCeiling(ceiling_t *c) { - int i; - - for (i = 0;i < MAXCEILINGS;i++) + int i; + + for (i = 0; i < MAXCEILINGS; i++) { - if (activeceilings[i] == c) - { - activeceilings[i]->sector->specialdata = NULL; - P_RemoveThinker (&activeceilings[i]->thinker); - activeceilings[i] = NULL; - break; - } + if (activeceilings[i] == c) + { + activeceilings[i]->sector->specialdata = NULL; + P_RemoveThinker(&activeceilings[i]->thinker); + activeceilings[i] = NULL; + break; + } } } - // // Restart a ceiling that's in-stasis // -void P_ActivateInStasisCeiling(line_t* line) +void P_ActivateInStasisCeiling(line_t *line) { - int i; - - for (i = 0;i < MAXCEILINGS;i++) + int i; + + for (i = 0; i < MAXCEILINGS; i++) { - if (activeceilings[i] - && (activeceilings[i]->tag == line->tag) - && (activeceilings[i]->direction == 0)) - { - activeceilings[i]->direction = activeceilings[i]->olddirection; - activeceilings[i]->thinker.function.acp1 - = (actionf_p1)T_MoveCeiling; - } + if (activeceilings[i] && (activeceilings[i]->tag == line->tag) && + (activeceilings[i]->direction == 0)) + { + activeceilings[i]->direction = activeceilings[i]->olddirection; + activeceilings[i]->thinker.function.acp1 = (actionf_p1) T_MoveCeiling; + } } } - // // EV_CeilingCrushStop // Stop a ceiling from crushing! // -int EV_CeilingCrushStop(line_t *line) +int EV_CeilingCrushStop(line_t *line) { - int i; - int rtn; - + int i; + int rtn; + rtn = 0; - for (i = 0;i < MAXCEILINGS;i++) + for (i = 0; i < MAXCEILINGS; i++) { - if (activeceilings[i] - && (activeceilings[i]->tag == line->tag) - && (activeceilings[i]->direction != 0)) - { - activeceilings[i]->olddirection = activeceilings[i]->direction; - activeceilings[i]->thinker.function.acv = (actionf_v)NULL; - activeceilings[i]->direction = 0; // in-stasis - rtn = 1; - } + if (activeceilings[i] && (activeceilings[i]->tag == line->tag) && + (activeceilings[i]->direction != 0)) + { + activeceilings[i]->olddirection = activeceilings[i]->direction; + activeceilings[i]->thinker.function.acv = (actionf_v) NULL; + activeceilings[i]->direction = 0; // in-stasis + rtn = 1; + } } - + return rtn; } diff --git a/src/doom/p_doors.c b/src/doom/p_doors.c index 1667de7c2b..72154a7de6 100644 --- a/src/doom/p_doors.c +++ b/src/doom/p_doors.c @@ -16,7 +16,6 @@ // - #include "z_zone.h" #include "doomdef.h" #include "p_local.h" @@ -54,134 +53,130 @@ slidename_t slideFrameNames[MAXSLIDEDOORS] = // // T_VerticalDoor // -void T_VerticalDoor (vldoor_t* door) +void T_VerticalDoor(vldoor_t *door) { - result_e res; - - switch(door->direction) + result_e res; + + switch (door->direction) { - case 0: - // WAITING - if (!--door->topcountdown) - { - switch(door->type) - { - case vld_blazeRaise: - door->direction = -1; // time to go back down - S_StartSound(&door->sector->soundorg, sfx_bdcls); - break; - - case vld_normal: - door->direction = -1; // time to go back down - S_StartSound(&door->sector->soundorg, sfx_dorcls); - break; - - case vld_close30ThenOpen: - door->direction = 1; - S_StartSound(&door->sector->soundorg, sfx_doropn); - break; - - default: - break; - } - } - break; - - case 2: - // INITIAL WAIT - if (!--door->topcountdown) - { - switch(door->type) - { - case vld_raiseIn5Mins: - door->direction = 1; - door->type = vld_normal; - S_StartSound(&door->sector->soundorg, sfx_doropn); - break; - - default: - break; - } - } - break; - - case -1: - // DOWN - res = T_MovePlane(door->sector, - door->speed, - door->sector->floorheight, - false,1,door->direction); - if (res == pastdest) - { - switch(door->type) - { - case vld_blazeRaise: - case vld_blazeClose: - door->sector->specialdata = NULL; - P_RemoveThinker (&door->thinker); // unlink and free - S_StartSound(&door->sector->soundorg, sfx_bdcls); - break; - - case vld_normal: - case vld_close: - door->sector->specialdata = NULL; - P_RemoveThinker (&door->thinker); // unlink and free - break; - - case vld_close30ThenOpen: - door->direction = 0; - door->topcountdown = TICRATE*30; - break; - - default: - break; - } - } - else if (res == crushed) - { - switch(door->type) - { - case vld_blazeClose: - case vld_close: // DO NOT GO BACK UP! - break; - - default: - door->direction = 1; - S_StartSound(&door->sector->soundorg, sfx_doropn); - break; - } - } - break; - - case 1: - // UP - res = T_MovePlane(door->sector, - door->speed, - door->topheight, - false,1,door->direction); - - if (res == pastdest) - { - switch(door->type) - { - case vld_blazeRaise: - case vld_normal: - door->direction = 0; // wait at top - door->topcountdown = door->topwait; - break; - - case vld_close30ThenOpen: - case vld_blazeOpen: - case vld_open: - door->sector->specialdata = NULL; - P_RemoveThinker (&door->thinker); // unlink and free - break; - - default: - break; - } - } - break; + case 0: + // WAITING + if (!--door->topcountdown) + { + switch (door->type) + { + case vld_blazeRaise: + door->direction = -1; // time to go back down + S_StartSound(&door->sector->soundorg, sfx_bdcls); + break; + + case vld_normal: + door->direction = -1; // time to go back down + S_StartSound(&door->sector->soundorg, sfx_dorcls); + break; + + case vld_close30ThenOpen: + door->direction = 1; + S_StartSound(&door->sector->soundorg, sfx_doropn); + break; + + default: + break; + } + } + break; + + case 2: + // INITIAL WAIT + if (!--door->topcountdown) + { + switch (door->type) + { + case vld_raiseIn5Mins: + door->direction = 1; + door->type = vld_normal; + S_StartSound(&door->sector->soundorg, sfx_doropn); + break; + + default: + break; + } + } + break; + + case -1: + // DOWN + res = T_MovePlane(door->sector, door->speed, door->sector->floorheight, false, + 1, door->direction); + if (res == pastdest) + { + switch (door->type) + { + case vld_blazeRaise: + case vld_blazeClose: + door->sector->specialdata = NULL; + P_RemoveThinker(&door->thinker); // unlink and free + S_StartSound(&door->sector->soundorg, sfx_bdcls); + break; + + case vld_normal: + case vld_close: + door->sector->specialdata = NULL; + P_RemoveThinker(&door->thinker); // unlink and free + break; + + case vld_close30ThenOpen: + door->direction = 0; + door->topcountdown = TICRATE * 30; + break; + + default: + break; + } + } + else if (res == crushed) + { + switch (door->type) + { + case vld_blazeClose: + case vld_close: // DO NOT GO BACK UP! + break; + + default: + door->direction = 1; + S_StartSound(&door->sector->soundorg, sfx_doropn); + break; + } + } + break; + + case 1: + // UP + res = T_MovePlane(door->sector, door->speed, door->topheight, false, 1, + door->direction); + + if (res == pastdest) + { + switch (door->type) + { + case vld_blazeRaise: + case vld_normal: + door->direction = 0; // wait at top + door->topcountdown = door->topwait; + break; + + case vld_close30ThenOpen: + case vld_blazeOpen: + case vld_open: + door->sector->specialdata = NULL; + P_RemoveThinker(&door->thinker); // unlink and free + break; + + default: + break; + } + } + break; } } @@ -191,134 +186,125 @@ void T_VerticalDoor (vldoor_t* door) // Move a locked door up/down // -int -EV_DoLockedDoor -( line_t* line, - vldoor_e type, - mobj_t* thing ) +int EV_DoLockedDoor(line_t *line, vldoor_e type, mobj_t *thing) { - player_t* p; - + player_t *p; + p = thing->player; - + if (!p) - return 0; - - switch(line->special) + return 0; + + switch (line->special) { - case 99: // Blue Lock - case 133: - if (!p->cards[it_bluecard] && !p->cards[it_blueskull]) - { - p->message = PD_BLUEO; - S_StartSound(NULL,sfx_oof); - return 0; - } - break; - - case 134: // Red Lock - case 135: - if (!p->cards[it_redcard] && !p->cards[it_redskull]) - { - p->message = PD_REDO; - S_StartSound(NULL,sfx_oof); - return 0; - } - break; - - case 136: // Yellow Lock - case 137: - if (!p->cards[it_yellowcard] && - !p->cards[it_yellowskull]) - { - p->message = PD_YELLOWO; - S_StartSound(NULL,sfx_oof); - return 0; - } - break; + case 99: // Blue Lock + case 133: + if (!p->cards[it_bluecard] && !p->cards[it_blueskull]) + { + p->message = PD_BLUEO; + S_StartSound(NULL, sfx_oof); + return 0; + } + break; + + case 134: // Red Lock + case 135: + if (!p->cards[it_redcard] && !p->cards[it_redskull]) + { + p->message = PD_REDO; + S_StartSound(NULL, sfx_oof); + return 0; + } + break; + + case 136: // Yellow Lock + case 137: + if (!p->cards[it_yellowcard] && !p->cards[it_yellowskull]) + { + p->message = PD_YELLOWO; + S_StartSound(NULL, sfx_oof); + return 0; + } + break; } - return EV_DoDoor(line,type); + return EV_DoDoor(line, type); } -int -EV_DoDoor -( line_t* line, - vldoor_e type ) +int EV_DoDoor(line_t *line, vldoor_e type) { - int secnum,rtn; - sector_t* sec; - vldoor_t* door; - + int secnum, rtn; + sector_t *sec; + vldoor_t *door; + secnum = -1; rtn = 0; - - while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) { - sec = §ors[secnum]; - if (sec->specialdata) - continue; - - - // new door thinker - rtn = 1; - door = Z_Malloc (sizeof(*door), PU_LEVSPEC, 0); - P_AddThinker (&door->thinker); - sec->specialdata = door; - - door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; - door->sector = sec; - door->type = type; - door->topwait = VDOORWAIT; - door->speed = VDOORSPEED; - - switch(type) - { - case vld_blazeClose: - door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; - door->direction = -1; - door->speed = VDOORSPEED * 4; - S_StartSound(&door->sector->soundorg, sfx_bdcls); - break; - - case vld_close: - door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; - door->direction = -1; - S_StartSound(&door->sector->soundorg, sfx_dorcls); - break; - - case vld_close30ThenOpen: - door->topheight = sec->ceilingheight; - door->direction = -1; - S_StartSound(&door->sector->soundorg, sfx_dorcls); - break; - - case vld_blazeRaise: - case vld_blazeOpen: - door->direction = 1; - door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; - door->speed = VDOORSPEED * 4; - if (door->topheight != sec->ceilingheight) - S_StartSound(&door->sector->soundorg, sfx_bdopn); - break; - - case vld_normal: - case vld_open: - door->direction = 1; - door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; - if (door->topheight != sec->ceilingheight) - S_StartSound(&door->sector->soundorg, sfx_doropn); - break; - - default: - break; - } - + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + + // new door thinker + rtn = 1; + door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + P_AddThinker(&door->thinker); + sec->specialdata = door; + + door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; + door->sector = sec; + door->type = type; + door->topwait = VDOORWAIT; + door->speed = VDOORSPEED; + + switch (type) + { + case vld_blazeClose: + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->direction = -1; + door->speed = VDOORSPEED * 4; + S_StartSound(&door->sector->soundorg, sfx_bdcls); + break; + + case vld_close: + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->direction = -1; + S_StartSound(&door->sector->soundorg, sfx_dorcls); + break; + + case vld_close30ThenOpen: + door->topheight = sec->ceilingheight; + door->direction = -1; + S_StartSound(&door->sector->soundorg, sfx_dorcls); + break; + + case vld_blazeRaise: + case vld_blazeOpen: + door->direction = 1; + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->speed = VDOORSPEED * 4; + if (door->topheight != sec->ceilingheight) + S_StartSound(&door->sector->soundorg, sfx_bdopn); + break; + + case vld_normal: + case vld_open: + door->direction = 1; + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + if (door->topheight != sec->ceilingheight) + S_StartSound(&door->sector->soundorg, sfx_doropn); + break; + + default: + break; + } } return rtn; } @@ -327,151 +313,147 @@ EV_DoDoor // // EV_VerticalDoor : open a door manually, no tag value // -void -EV_VerticalDoor -( line_t* line, - mobj_t* thing ) +void EV_VerticalDoor(line_t *line, mobj_t *thing) { - player_t* player; - sector_t* sec; - vldoor_t* door; - int side; - - side = 0; // only front sides can be used + player_t *player; + sector_t *sec; + vldoor_t *door; + int side; + + side = 0; // only front sides can be used // Check for locks player = thing->player; - - switch(line->special) + + switch (line->special) { - case 26: // Blue Lock - case 32: - if ( !player ) - return; - - if (!player->cards[it_bluecard] && !player->cards[it_blueskull]) - { - player->message = PD_BLUEK; - S_StartSound(NULL,sfx_oof); - return; - } - break; - - case 27: // Yellow Lock - case 34: - if ( !player ) - return; - - if (!player->cards[it_yellowcard] && - !player->cards[it_yellowskull]) - { - player->message = PD_YELLOWK; - S_StartSound(NULL,sfx_oof); - return; - } - break; - - case 28: // Red Lock - case 33: - if ( !player ) - return; - - if (!player->cards[it_redcard] && !player->cards[it_redskull]) - { - player->message = PD_REDK; - S_StartSound(NULL,sfx_oof); - return; - } - break; + case 26: // Blue Lock + case 32: + if (!player) + return; + + if (!player->cards[it_bluecard] && !player->cards[it_blueskull]) + { + player->message = PD_BLUEK; + S_StartSound(NULL, sfx_oof); + return; + } + break; + + case 27: // Yellow Lock + case 34: + if (!player) + return; + + if (!player->cards[it_yellowcard] && !player->cards[it_yellowskull]) + { + player->message = PD_YELLOWK; + S_StartSound(NULL, sfx_oof); + return; + } + break; + + case 28: // Red Lock + case 33: + if (!player) + return; + + if (!player->cards[it_redcard] && !player->cards[it_redskull]) + { + player->message = PD_REDK; + S_StartSound(NULL, sfx_oof); + return; + } + break; } - + // if the sector has an active thinker, use it - if (line->sidenum[side^1] == -1) + if (line->sidenum[side ^ 1] == -1) { I_Error("EV_VerticalDoor: DR special type on 1-sided linedef"); } - sec = sides[ line->sidenum[side^1]] .sector; + sec = sides[line->sidenum[side ^ 1]].sector; if (sec->specialdata) { - door = sec->specialdata; - switch(line->special) - { - case 1: // ONLY FOR "RAISE" DOORS, NOT "OPEN"s - case 26: - case 27: - case 28: - case 117: - if (door->direction == -1) - door->direction = 1; // go back up - else - { - if (!thing->player) - return; // JDC: bad guys never close doors - - // When is a door not a door? - // In Vanilla, door->direction is set, even though - // "specialdata" might not actually point at a door. - - if (door->thinker.function.acp1 == (actionf_p1) T_VerticalDoor) - { - door->direction = -1; // start going down immediately - } - else if (door->thinker.function.acp1 == (actionf_p1) T_PlatRaise) - { - // Erm, this is a plat, not a door. - // This notably causes a problem in ep1-0500.lmp where - // a plat and a door are cross-referenced; the door - // doesn't open on 64-bit. - // The direction field in vldoor_t corresponds to the wait - // field in plat_t. Let's set that to -1 instead. - - plat_t *plat; - - plat = (plat_t *) door; - plat->wait = -1; - } + door = sec->specialdata; + switch (line->special) + { + case 1: // ONLY FOR "RAISE" DOORS, NOT "OPEN"s + case 26: + case 27: + case 28: + case 117: + if (door->direction == -1) + door->direction = 1; // go back up else { - // This isn't a door OR a plat. Now we're in trouble. - - fprintf(stderr, "EV_VerticalDoor: Tried to close " - "something that wasn't a door.\n"); - - // Try closing it anyway. At least it will work on 32-bit - // machines. - - door->direction = -1; + if (!thing->player) + return; // JDC: bad guys never close doors + + // When is a door not a door? + // In Vanilla, door->direction is set, even though + // "specialdata" might not actually point at a door. + + if (door->thinker.function.acp1 == (actionf_p1) T_VerticalDoor) + { + door->direction = -1; // start going down immediately + } + else if (door->thinker.function.acp1 == (actionf_p1) T_PlatRaise) + { + // Erm, this is a plat, not a door. + // This notably causes a problem in ep1-0500.lmp where + // a plat and a door are cross-referenced; the door + // doesn't open on 64-bit. + // The direction field in vldoor_t corresponds to the wait + // field in plat_t. Let's set that to -1 instead. + + plat_t *plat; + + plat = (plat_t *) door; + plat->wait = -1; + } + else + { + // This isn't a door OR a plat. Now we're in trouble. + + fprintf(stderr, "EV_VerticalDoor: Tried to close " + "something that wasn't a door.\n"); + + // Try closing it anyway. At least it will work on 32-bit + // machines. + + door->direction = -1; + } } - } - return; - } + return; + } } - + // for proper sound - switch(line->special) + switch (line->special) { - case 117: // BLAZING DOOR RAISE - case 118: // BLAZING DOOR OPEN - S_StartSound(&sec->soundorg,sfx_bdopn); - break; - - case 1: // NORMAL DOOR SOUND - case 31: - S_StartSound(&sec->soundorg,sfx_doropn); - break; - - default: // LOCKED DOOR SOUND - S_StartSound(&sec->soundorg,sfx_doropn); - break; + case 117: // BLAZING DOOR RAISE + case 118: // BLAZING DOOR OPEN + S_StartSound(&sec->soundorg, sfx_bdopn); + break; + + case 1: // NORMAL DOOR SOUND + case 31: + S_StartSound(&sec->soundorg, sfx_doropn); + break; + + default: // LOCKED DOOR SOUND + S_StartSound(&sec->soundorg, sfx_doropn); + break; } - - + + // new door thinker - door = Z_Malloc (sizeof(*door), PU_LEVSPEC, 0); - P_AddThinker (&door->thinker); + door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + P_AddThinker(&door->thinker); sec->specialdata = door; door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; door->sector = sec; @@ -479,55 +461,55 @@ EV_VerticalDoor door->speed = VDOORSPEED; door->topwait = VDOORWAIT; - switch(line->special) + switch (line->special) { - case 1: - case 26: - case 27: - case 28: - door->type = vld_normal; - break; - - case 31: - case 32: - case 33: - case 34: - door->type = vld_open; - line->special = 0; - break; - - case 117: // blazing door raise - door->type = vld_blazeRaise; - door->speed = VDOORSPEED*4; - break; - case 118: // blazing door open - door->type = vld_blazeOpen; - line->special = 0; - door->speed = VDOORSPEED*4; - break; + case 1: + case 26: + case 27: + case 28: + door->type = vld_normal; + break; + + case 31: + case 32: + case 33: + case 34: + door->type = vld_open; + line->special = 0; + break; + + case 117: // blazing door raise + door->type = vld_blazeRaise; + door->speed = VDOORSPEED * 4; + break; + case 118: // blazing door open + door->type = vld_blazeOpen; + line->special = 0; + door->speed = VDOORSPEED * 4; + break; } - + // find the top and bottom of the movement range door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; + door->topheight -= 4 * FRACUNIT; } // // Spawn a door that closes after 30 seconds // -void P_SpawnDoorCloseIn30 (sector_t* sec) +void P_SpawnDoorCloseIn30(sector_t *sec) { - vldoor_t* door; - - door = Z_Malloc ( sizeof(*door), PU_LEVSPEC, 0); + vldoor_t *door; - P_AddThinker (&door->thinker); + door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + + P_AddThinker(&door->thinker); sec->specialdata = door; sec->special = 0; - door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; door->sector = sec; door->direction = 0; door->type = vld_normal; @@ -538,27 +520,24 @@ void P_SpawnDoorCloseIn30 (sector_t* sec) // // Spawn a door that opens after 5 minutes // -void -P_SpawnDoorRaiseIn5Mins -( sector_t* sec, - int secnum ) +void P_SpawnDoorRaiseIn5Mins(sector_t *sec, int secnum) { - vldoor_t* door; - - door = Z_Malloc ( sizeof(*door), PU_LEVSPEC, 0); - - P_AddThinker (&door->thinker); + vldoor_t *door; + + door = Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + + P_AddThinker(&door->thinker); sec->specialdata = door; sec->special = 0; - door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; door->sector = sec; door->direction = 2; door->type = vld_raiseIn5Mins; door->speed = VDOORSPEED; door->topheight = P_FindLowestCeilingSurrounding(sec); - door->topheight -= 4*FRACUNIT; + door->topheight -= 4 * FRACUNIT; door->topwait = VDOORWAIT; door->topcountdown = 5 * 60 * TICRATE; } diff --git a/src/doom/p_enemy.c b/src/doom/p_enemy.c index e4b5963960..b772e8c8b8 100644 --- a/src/doom/p_enemy.c +++ b/src/doom/p_enemy.c @@ -58,9 +58,8 @@ typedef enum // // P_NewChaseDir related LUT. // -dirtype_t opposite[] = {DI_WEST, DI_SOUTHWEST, DI_SOUTH, - DI_SOUTHEAST, DI_EAST, DI_NORTHEAST, - DI_NORTH, DI_NORTHWEST, DI_NODIR}; +dirtype_t opposite[] = {DI_WEST, DI_SOUTHWEST, DI_SOUTH, DI_SOUTHEAST, DI_EAST, + DI_NORTHEAST, DI_NORTH, DI_NORTHWEST, DI_NODIR}; dirtype_t diags[] = {DI_NORTHWEST, DI_NORTHEAST, DI_SOUTHWEST, DI_SOUTHEAST}; @@ -87,8 +86,6 @@ mobj_t *soundtarget; void P_RecursiveSound(sector_t *sec, int soundblocks) { - int i; - line_t *check; sector_t *other; // wake up all monsters in this sector @@ -101,9 +98,9 @@ void P_RecursiveSound(sector_t *sec, int soundblocks) sec->soundtraversed = soundblocks + 1; sec->soundtarget = soundtarget; - for (i = 0; i < sec->linecount; i++) + for (int i = 0; i < sec->linecount; i++) { - check = sec->lines[i]; + line_t *check = sec->lines[i]; if (!(check->flags & ML_TWOSIDED)) continue; @@ -190,8 +187,7 @@ boolean P_CheckMissileRange(mobj_t *actor) return false; // do not attack yet // OPTIMIZE: get this from a global checksight - dist = P_AproxDistance(actor->x - actor->target->x, - actor->y - actor->target->y) - + dist = P_AproxDistance(actor->x - actor->target->x, actor->y - actor->target->y) - 64 * FRACUNIT; if (!actor->info->meleestate) @@ -199,23 +195,7 @@ boolean P_CheckMissileRange(mobj_t *actor) dist >>= FRACBITS; - if (actor->type == MT_VILE) - { - if (dist > 14 * 64) - return false; // too far away - } - - - if (actor->type == MT_UNDEAD) - { - if (dist < 196) - return false; // close for fist attack - dist >>= 1; - } - - - if (actor->type == MT_CYBORG || actor->type == MT_SPIDER || - actor->type == MT_SKULL) + if (actor->type == MT_CYBORG || actor->type == MT_SPIDER || actor->type == MT_SKULL) { dist >>= 1; } @@ -246,8 +226,6 @@ boolean P_Move(mobj_t *actor) fixed_t tryx; fixed_t tryy; - line_t *ld; - // warning: 'catch', 'throw', and 'try' // are all C++ reserved words boolean try_ok; @@ -286,7 +264,7 @@ boolean P_Move(mobj_t *actor) good = false; while (numspechit--) { - ld = spechit[numspechit]; + line_t *ld = spechit[numspechit]; // if the special is not a door // that can be opened, // return false @@ -490,14 +468,13 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround) if (!allaround) { - an = R_PointToAngle2(actor->x, actor->y, player->mo->x, - player->mo->y) - + an = R_PointToAngle2(actor->x, actor->y, player->mo->x, player->mo->y) - actor->angle; if (an > ANG90 && an < ANG270) { - dist = P_AproxDistance(player->mo->x - actor->x, - player->mo->y - actor->y); + dist = + P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y); // if real close, react anyway if (dist > MELEERANGE) continue; // behind back @@ -512,39 +489,6 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround) } -// -// A_KeenDie -// DOOM II special, map 32. -// Uses special tag 666. -// -void A_KeenDie(mobj_t *mo) -{ - thinker_t *th; - mobj_t *mo2; - line_t junk; - - A_Fall(mo); - - // scan the remaining thinkers - // to see if all Keens are dead - for (th = thinkercap.next; th != &thinkercap; th = th->next) - { - if (th->function.acp1 != (actionf_p1) P_MobjThinker) - continue; - - mo2 = (mobj_t *) th; - if (mo2 != mo && mo2->type == mo->type && mo2->health > 0) - { - // other Keen not dead - return; - } - } - - junk.tag = 666; - EV_DoDoor(&junk, vld_open); -} - - // // ACTION ROUTINES // @@ -760,64 +704,22 @@ void A_PosAttack(mobj_t *actor) void A_SPosAttack(mobj_t *actor) { - int i; - int angle; - int bangle; - int damage; - int slope; - if (!actor->target) return; S_StartSound(actor, sfx_shotgn); A_FaceTarget(actor); - bangle = actor->angle; - slope = P_AimLineAttack(actor, bangle, MISSILERANGE); + int bangle = actor->angle; + int slope = P_AimLineAttack(actor, bangle, MISSILERANGE); - for (i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { - angle = bangle + (P_SubRandom() << 20); - damage = ((P_Random() % 5) + 1) * 3; + int angle = bangle + (P_SubRandom() << 20); + int damage = ((P_Random() % 5) + 1) * 3; P_LineAttack(actor, angle, MISSILERANGE, slope, damage); } } -void A_CPosAttack(mobj_t *actor) -{ - int angle; - int bangle; - int damage; - int slope; - - if (!actor->target) - return; - - S_StartSound(actor, sfx_shotgn); - A_FaceTarget(actor); - bangle = actor->angle; - slope = P_AimLineAttack(actor, bangle, MISSILERANGE); - - angle = bangle + (P_SubRandom() << 20); - damage = ((P_Random() % 5) + 1) * 3; - P_LineAttack(actor, angle, MISSILERANGE, slope, damage); -} - -void A_CPosRefire(mobj_t *actor) -{ - // keep firing unless target got out of sight - A_FaceTarget(actor); - - if (P_Random() < 40) - return; - - if (!actor->target || actor->target->health <= 0 || - !P_CheckSight(actor, actor->target)) - { - P_SetMobjState(actor, actor->info->seestate); - } -} - - void A_SpidRefire(mobj_t *actor) { // keep firing unless target got out of sight @@ -833,25 +735,11 @@ void A_SpidRefire(mobj_t *actor) } } -void A_BspiAttack(mobj_t *actor) -{ - if (!actor->target) - return; - - A_FaceTarget(actor); - - // launch a missile - P_SpawnMissile(actor, actor->target, MT_ARACHPLAZ); -} - - // // A_TroopAttack // void A_TroopAttack(mobj_t *actor) { - int damage; - if (!actor->target) return; @@ -859,7 +747,7 @@ void A_TroopAttack(mobj_t *actor) if (P_CheckMeleeRange(actor)) { S_StartSound(actor, sfx_claw); - damage = (P_Random() % 8 + 1) * 3; + int damage = (P_Random() % 8 + 1) * 3; P_DamageMobj(actor->target, actor, actor, damage); return; } @@ -872,8 +760,6 @@ void A_TroopAttack(mobj_t *actor) void A_SargAttack(mobj_t *actor) { - int damage; - if (!actor->target) return; @@ -882,22 +768,20 @@ void A_SargAttack(mobj_t *actor) if (!P_CheckMeleeRange(actor)) return; - damage = ((P_Random() % 10) + 1) * 4; + int damage = ((P_Random() % 10) + 1) * 4; P_LineAttack(actor, actor->angle, MELEERANGE, 0, damage); } void A_HeadAttack(mobj_t *actor) { - int damage; - if (!actor->target) return; A_FaceTarget(actor); if (P_CheckMeleeRange(actor)) { - damage = (P_Random() % 6 + 1) * 10; + int damage = (P_Random() % 6 + 1) * 10; P_DamageMobj(actor->target, actor, actor, damage); return; } @@ -918,15 +802,13 @@ void A_CyberAttack(mobj_t *actor) void A_BruisAttack(mobj_t *actor) { - int damage; - if (!actor->target) return; if (P_CheckMeleeRange(actor)) { S_StartSound(actor, sfx_claw); - damage = (P_Random() % 8 + 1) * 10; + int damage = (P_Random() % 8 + 1) * 10; P_DamageMobj(actor->target, actor, actor, damage); return; } @@ -936,238 +818,6 @@ void A_BruisAttack(mobj_t *actor) } -// -// A_SkelMissile -// -void A_SkelMissile(mobj_t *actor) -{ - mobj_t *mo; - - if (!actor->target) - return; - - A_FaceTarget(actor); - actor->z += 16 * FRACUNIT; // so missile spawns higher - mo = P_SpawnMissile(actor, actor->target, MT_TRACER); - actor->z -= 16 * FRACUNIT; // back to normal - - mo->x += mo->momx; - mo->y += mo->momy; - mo->tracer = actor->target; -} - -int TRACEANGLE = 0xc000000; - -void A_Tracer(mobj_t *actor) -{ - angle_t exact; - fixed_t dist; - fixed_t slope; - mobj_t *dest; - mobj_t *th; - - if (gametic & 3) - return; - - // spawn a puff of smoke behind the rocket - P_SpawnPuff(actor->x, actor->y, actor->z); - - th = P_SpawnMobj(actor->x - actor->momx, actor->y - actor->momy, actor->z, - MT_SMOKE); - - th->momz = FRACUNIT; - th->tics -= P_Random() & 3; - if (th->tics < 1) - th->tics = 1; - - // adjust direction - dest = actor->tracer; - - if (!dest || dest->health <= 0) - return; - - // change angle - exact = R_PointToAngle2(actor->x, actor->y, dest->x, dest->y); - - if (exact != actor->angle) - { - if (exact - actor->angle > 0x80000000) - { - actor->angle -= TRACEANGLE; - if (exact - actor->angle < 0x80000000) - actor->angle = exact; - } - else - { - actor->angle += TRACEANGLE; - if (exact - actor->angle > 0x80000000) - actor->angle = exact; - } - } - - exact = actor->angle >> ANGLETOFINESHIFT; - actor->momx = FixedMul(actor->info->speed, finecosine[exact]); - actor->momy = FixedMul(actor->info->speed, finesine[exact]); - - // change slope - dist = P_AproxDistance(dest->x - actor->x, dest->y - actor->y); - - dist = dist / actor->info->speed; - - if (dist < 1) - dist = 1; - slope = (dest->z + 40 * FRACUNIT - actor->z) / dist; - - if (slope < actor->momz) - actor->momz -= FRACUNIT / 8; - else - actor->momz += FRACUNIT / 8; -} - - -void A_SkelWhoosh(mobj_t *actor) -{ - if (!actor->target) - return; - A_FaceTarget(actor); - S_StartSound(actor, sfx_skeswg); -} - -void A_SkelFist(mobj_t *actor) -{ - int damage; - - if (!actor->target) - return; - - A_FaceTarget(actor); - - if (P_CheckMeleeRange(actor)) - { - damage = ((P_Random() % 10) + 1) * 6; - S_StartSound(actor, sfx_skepch); - P_DamageMobj(actor->target, actor, actor, damage); - } -} - - -// -// PIT_VileCheck -// Detect a corpse that could be raised. -// -mobj_t *corpsehit; -mobj_t *vileobj; -fixed_t viletryx; -fixed_t viletryy; - -boolean PIT_VileCheck(mobj_t *thing) -{ - int maxdist; - boolean check; - - if (!(thing->flags & MF_CORPSE)) - return true; // not a monster - - if (thing->tics != -1) - return true; // not lying still yet - - if (thing->info->raisestate == S_NULL) - return true; // monster doesn't have a raise state - - maxdist = thing->info->radius + mobjinfo[MT_VILE].radius; - - if (abs(thing->x - viletryx) > maxdist || - abs(thing->y - viletryy) > maxdist) - return true; // not actually touching - - corpsehit = thing; - corpsehit->momx = corpsehit->momy = 0; - corpsehit->height <<= 2; - check = P_CheckPosition(corpsehit, corpsehit->x, corpsehit->y); - corpsehit->height >>= 2; - - if (!check) - return true; // doesn't fit here - - return false; // got one, so stop checking -} - - -// -// A_VileChase -// Check for ressurecting a body -// -void A_VileChase(mobj_t *actor) -{ - int xl; - int xh; - int yl; - int yh; - - int bx; - int by; - - mobjinfo_t *info; - mobj_t *temp; - - if (actor->movedir != DI_NODIR) - { - // check for corpses to raise - viletryx = actor->x + actor->info->speed * xspeed[actor->movedir]; - viletryy = actor->y + actor->info->speed * yspeed[actor->movedir]; - - xl = (viletryx - bmaporgx - MAXRADIUS * 2) >> MAPBLOCKSHIFT; - xh = (viletryx - bmaporgx + MAXRADIUS * 2) >> MAPBLOCKSHIFT; - yl = (viletryy - bmaporgy - MAXRADIUS * 2) >> MAPBLOCKSHIFT; - yh = (viletryy - bmaporgy + MAXRADIUS * 2) >> MAPBLOCKSHIFT; - - vileobj = actor; - for (bx = xl; bx <= xh; bx++) - { - for (by = yl; by <= yh; by++) - { - // Call PIT_VileCheck to check - // whether object is a corpse - // that canbe raised. - if (!P_BlockThingsIterator(bx, by, PIT_VileCheck)) - { - // got one! - temp = actor->target; - actor->target = corpsehit; - A_FaceTarget(actor); - actor->target = temp; - - P_SetMobjState(actor, S_VILE_HEAL1); - S_StartSound(corpsehit, sfx_slop); - info = corpsehit->info; - - P_SetMobjState(corpsehit, info->raisestate); - corpsehit->height <<= 2; - corpsehit->flags = info->flags; - corpsehit->health = info->spawnhealth; - corpsehit->target = NULL; - - return; - } - } - } - } - - // Return to normal attack. - A_Chase(actor); -} - - -// -// A_VileStart -// -void A_VileStart(mobj_t *actor) -{ - S_StartSound(actor, sfx_vilatk); -} - - -// // A_Fire // Keep fire in front of player unless out of sight // @@ -1211,141 +861,6 @@ void A_Fire(mobj_t *actor) } -// -// A_VileTarget -// Spawn the hellfire -// -void A_VileTarget(mobj_t *actor) -{ - mobj_t *fog; - - if (!actor->target) - return; - - A_FaceTarget(actor); - - fog = P_SpawnMobj(actor->target->x, actor->target->x, actor->target->z, - MT_FIRE); - - actor->tracer = fog; - fog->target = actor; - fog->tracer = actor->target; - A_Fire(fog); -} - - -// -// A_VileAttack -// -void A_VileAttack(mobj_t *actor) -{ - mobj_t *fire; - int an; - - if (!actor->target) - return; - - A_FaceTarget(actor); - - if (!P_CheckSight(actor, actor->target)) - return; - - S_StartSound(actor, sfx_barexp); - P_DamageMobj(actor->target, actor, actor, 20); - actor->target->momz = 1000 * FRACUNIT / actor->target->info->mass; - - an = actor->angle >> ANGLETOFINESHIFT; - - fire = actor->tracer; - - if (!fire) - return; - - // move the fire between the vile and the player - fire->x = actor->target->x - FixedMul(24 * FRACUNIT, finecosine[an]); - fire->y = actor->target->y - FixedMul(24 * FRACUNIT, finesine[an]); - P_RadiusAttack(fire, actor, 70); -} - - -// -// Mancubus attack, -// firing three missiles (bruisers) -// in three different directions? -// Doesn't look like it. -// -#define FATSPREAD (ANG90 / 8) - -void A_FatRaise(mobj_t *actor) -{ - A_FaceTarget(actor); - S_StartSound(actor, sfx_manatk); -} - - -void A_FatAttack1(mobj_t *actor) -{ - mobj_t *mo; - mobj_t *target; - int an; - - A_FaceTarget(actor); - - // Change direction to ... - actor->angle += FATSPREAD; - target = P_SubstNullMobj(actor->target); - P_SpawnMissile(actor, target, MT_FATSHOT); - - mo = P_SpawnMissile(actor, target, MT_FATSHOT); - mo->angle += FATSPREAD; - an = mo->angle >> ANGLETOFINESHIFT; - mo->momx = FixedMul(mo->info->speed, finecosine[an]); - mo->momy = FixedMul(mo->info->speed, finesine[an]); -} - -void A_FatAttack2(mobj_t *actor) -{ - mobj_t *mo; - mobj_t *target; - int an; - - A_FaceTarget(actor); - // Now here choose opposite deviation. - actor->angle -= FATSPREAD; - target = P_SubstNullMobj(actor->target); - P_SpawnMissile(actor, target, MT_FATSHOT); - - mo = P_SpawnMissile(actor, target, MT_FATSHOT); - mo->angle -= FATSPREAD * 2; - an = mo->angle >> ANGLETOFINESHIFT; - mo->momx = FixedMul(mo->info->speed, finecosine[an]); - mo->momy = FixedMul(mo->info->speed, finesine[an]); -} - -void A_FatAttack3(mobj_t *actor) -{ - mobj_t *mo; - mobj_t *target; - int an; - - A_FaceTarget(actor); - - target = P_SubstNullMobj(actor->target); - - mo = P_SpawnMissile(actor, target, MT_FATSHOT); - mo->angle -= FATSPREAD / 2; - an = mo->angle >> ANGLETOFINESHIFT; - mo->momx = FixedMul(mo->info->speed, finecosine[an]); - mo->momy = FixedMul(mo->info->speed, finesine[an]); - - mo = P_SpawnMissile(actor, target, MT_FATSHOT); - mo->angle += FATSPREAD / 2; - an = mo->angle >> ANGLETOFINESHIFT; - mo->momx = FixedMul(mo->info->speed, finecosine[an]); - mo->momy = FixedMul(mo->info->speed, finesine[an]); -} - - // // SkullAttack // Fly at the player like a missile. @@ -1378,88 +893,6 @@ void A_SkullAttack(mobj_t *actor) } -// -// A_PainShootSkull -// Spawn a lost soul and launch it at the target -// -void A_PainShootSkull(mobj_t *actor, angle_t angle) -{ - fixed_t x; - fixed_t y; - fixed_t z; - - mobj_t *newmobj; - angle_t an; - int prestep; - int count; - thinker_t *currentthinker; - - // count total number of skull currently on the level - count = 0; - - currentthinker = thinkercap.next; - while (currentthinker != &thinkercap) - { - if ((currentthinker->function.acp1 == (actionf_p1) P_MobjThinker) && - ((mobj_t *) currentthinker)->type == MT_SKULL) - count++; - currentthinker = currentthinker->next; - } - - // if there are allready 20 skulls on the level, - // don't spit another one - if (count > 20) - return; - - - // okay, there's playe for another one - an = angle >> ANGLETOFINESHIFT; - - prestep = 4 * FRACUNIT + - 3 * (actor->info->radius + mobjinfo[MT_SKULL].radius) / 2; - - x = actor->x + FixedMul(prestep, finecosine[an]); - y = actor->y + FixedMul(prestep, finesine[an]); - z = actor->z + 8 * FRACUNIT; - - newmobj = P_SpawnMobj(x, y, z, MT_SKULL); - - // Check for movements. - if (!P_TryMove(newmobj, newmobj->x, newmobj->y)) - { - // kill it immediately - P_DamageMobj(newmobj, actor, actor, 10000); - return; - } - - newmobj->target = actor->target; - A_SkullAttack(newmobj); -} - - -// -// A_PainAttack -// Spawn a lost soul and launch it at the target -// -void A_PainAttack(mobj_t *actor) -{ - if (!actor->target) - return; - - A_FaceTarget(actor); - A_PainShootSkull(actor, actor->angle); -} - - -void A_PainDie(mobj_t *actor) -{ - A_Fall(actor); - A_PainShootSkull(actor, actor->angle + ANG90); - A_PainShootSkull(actor, actor->angle + ANG180); - A_PainShootSkull(actor, actor->angle + ANG270); -} - - void A_Scream(mobj_t *actor) { int sound; @@ -1626,12 +1059,6 @@ void A_Metal(mobj_t *mo) A_Chase(mo); } -void A_BabyMetal(mobj_t *mo) -{ - S_StartSound(mo, sfx_bspwlk); - A_Chase(mo); -} - void A_OpenShotgun2(player_t *player, pspdef_t *psp) { S_StartSound(player->mo, sfx_dbopn); @@ -1650,199 +1077,13 @@ void A_CloseShotgun2(player_t *player, pspdef_t *psp) A_ReFire(player, psp); } - -mobj_t *braintargets[32]; -int numbraintargets; -int braintargeton = 0; - -void A_BrainAwake(mobj_t *mo) -{ - thinker_t *thinker; - mobj_t *m; - - // find all the target spots - numbraintargets = 0; - braintargeton = 0; - - for (thinker = thinkercap.next; thinker != &thinkercap; - thinker = thinker->next) - { - if (thinker->function.acp1 != (actionf_p1) P_MobjThinker) - continue; // not a mobj - - m = (mobj_t *) thinker; - - if (m->type == MT_BOSSTARGET) - { - braintargets[numbraintargets] = m; - numbraintargets++; - } - } - - S_StartSound(NULL, sfx_bossit); -} - - -void A_BrainPain(mobj_t *mo) -{ - S_StartSound(NULL, sfx_bospn); -} - - -void A_BrainScream(mobj_t *mo) -{ - int x; - int y; - int z; - mobj_t *th; - - for (x = mo->x - 196 * FRACUNIT; x < mo->x + 320 * FRACUNIT; - x += FRACUNIT * 8) - { - y = mo->y - 320 * FRACUNIT; - z = 128 + P_Random() * 2 * FRACUNIT; - th = P_SpawnMobj(x, y, z, MT_ROCKET); - th->momz = P_Random() * 512; - - P_SetMobjState(th, S_BRAINEXPLODE1); - - th->tics -= P_Random() & 7; - if (th->tics < 1) - th->tics = 1; - } - - S_StartSound(NULL, sfx_bosdth); -} - - -void A_BrainExplode(mobj_t *mo) -{ - int x; - int y; - int z; - mobj_t *th; - - x = mo->x + P_SubRandom() * 2048; - y = mo->y; - z = 128 + P_Random() * 2 * FRACUNIT; - th = P_SpawnMobj(x, y, z, MT_ROCKET); - th->momz = P_Random() * 512; - - P_SetMobjState(th, S_BRAINEXPLODE1); - - th->tics -= P_Random() & 7; - if (th->tics < 1) - th->tics = 1; -} - - -void A_BrainDie(mobj_t *mo) -{ - G_ExitLevel(); -} - -void A_BrainSpit(mobj_t *mo) -{ - mobj_t *targ; - mobj_t *newmobj; - - static int easy = 0; - - easy ^= 1; - if (gameskill <= sk_easy && (!easy)) - return; - - // shoot a cube at current target - targ = braintargets[braintargeton]; - if (numbraintargets == 0) - { - I_Error("A_BrainSpit: numbraintargets was 0 (vanilla crashes here)"); - } - braintargeton = (braintargeton + 1) % numbraintargets; - - // spawn brain missile - newmobj = P_SpawnMissile(mo, targ, MT_SPAWNSHOT); - newmobj->target = targ; - newmobj->reactiontime = - ((targ->y - mo->y) / newmobj->momy) / newmobj->state->tics; - - S_StartSound(NULL, sfx_bospit); -} - - -void A_SpawnFly(mobj_t *mo); - -// travelling cube sound -void A_SpawnSound(mobj_t *mo) -{ - S_StartSound(mo, sfx_boscub); - A_SpawnFly(mo); -} - -void A_SpawnFly(mobj_t *mo) -{ - mobj_t *newmobj; - mobj_t *fog; - mobj_t *targ; - int r; - mobjtype_t type; - - if (--mo->reactiontime) - return; // still flying - - targ = P_SubstNullMobj(mo->target); - - // First spawn teleport fog. - fog = P_SpawnMobj(targ->x, targ->y, targ->z, MT_SPAWNFIRE); - S_StartSound(fog, sfx_telept); - - // Randomly select monster to spawn. - r = P_Random(); - - // Probability distribution (kind of :), - // decreasing likelihood. - if (r < 50) - type = MT_TROOP; - else if (r < 90) - type = MT_SERGEANT; - else if (r < 120) - type = MT_SHADOWS; - else if (r < 130) - type = MT_PAIN; - else if (r < 160) - type = MT_HEAD; - else if (r < 162) - type = MT_VILE; - else if (r < 172) - type = MT_UNDEAD; - else if (r < 192) - type = MT_BABY; - else if (r < 222) - type = MT_FATSO; - else if (r < 246) - type = MT_KNIGHT; - else - type = MT_BRUISER; - - newmobj = P_SpawnMobj(targ->x, targ->y, targ->z, type); - if (P_LookForPlayers(newmobj, true)) - P_SetMobjState(newmobj, newmobj->info->seestate); - - // telefrag anything in this spot - P_TeleportMove(newmobj, newmobj->x, newmobj->y); - - // remove self (i.e., cube). - P_RemoveMobj(mo); -} - - void A_PlayerScream(mobj_t *mo) { // Default death sound. int sound = sfx_pldeth; - + // This is DOOM II feature but let's keep it :-) - // If the player dies with less than 50% health without gibbing + // If the player dies with less than 50% health without gibbing if (mo->health < -50) { sound = sfx_pdiehi; diff --git a/src/doom/p_floor.c b/src/doom/p_floor.c index 8b90674b2c..6e1dc9cec4 100644 --- a/src/doom/p_floor.c +++ b/src/doom/p_floor.c @@ -39,8 +39,8 @@ // // Move a plane (floor or ceiling) and check for crushing // -result_e T_MovePlane(sector_t *sector, fixed_t speed, fixed_t dest, - boolean crush, int floorOrCeiling, int direction) +result_e T_MovePlane(sector_t *sector, fixed_t speed, fixed_t dest, boolean crush, + int floorOrCeiling, int direction) { boolean flag; fixed_t lastpos; @@ -197,8 +197,8 @@ void T_MoveFloor(floormove_t *floor) { result_e res; - res = T_MovePlane(floor->sector, floor->speed, floor->floordestheight, - floor->crush, 0, floor->direction); + res = T_MovePlane(floor->sector, floor->speed, floor->floordestheight, floor->crush, + 0, floor->direction); if (!(leveltime & 7)) S_StartSound(&floor->sector->soundorg, sfx_stnmov); @@ -299,47 +299,41 @@ int EV_DoFloor(line_t *line, floor_e floortype) floor->floordestheight = P_FindLowestCeilingSurrounding(sec); if (floor->floordestheight > sec->ceilingheight) floor->floordestheight = sec->ceilingheight; - floor->floordestheight -= - (8 * FRACUNIT) * (floortype == raiseFloorCrush); + floor->floordestheight -= (8 * FRACUNIT) * (floortype == raiseFloorCrush); break; case raiseFloorTurbo: floor->direction = 1; floor->sector = sec; floor->speed = FLOORSPEED * 4; - floor->floordestheight = - P_FindNextHighestFloor(sec, sec->floorheight); + floor->floordestheight = P_FindNextHighestFloor(sec, sec->floorheight); break; case raiseFloorToNearest: floor->direction = 1; floor->sector = sec; floor->speed = FLOORSPEED; - floor->floordestheight = - P_FindNextHighestFloor(sec, sec->floorheight); + floor->floordestheight = P_FindNextHighestFloor(sec, sec->floorheight); break; case raiseFloor24: floor->direction = 1; floor->sector = sec; floor->speed = FLOORSPEED; - floor->floordestheight = - floor->sector->floorheight + 24 * FRACUNIT; + floor->floordestheight = floor->sector->floorheight + 24 * FRACUNIT; break; case raiseFloor512: floor->direction = 1; floor->sector = sec; floor->speed = FLOORSPEED; - floor->floordestheight = - floor->sector->floorheight + 512 * FRACUNIT; + floor->floordestheight = floor->sector->floorheight + 512 * FRACUNIT; break; case raiseFloor24AndChange: floor->direction = 1; floor->sector = sec; floor->speed = FLOORSPEED; - floor->floordestheight = - floor->sector->floorheight + 24 * FRACUNIT; + floor->floordestheight = floor->sector->floorheight + 24 * FRACUNIT; sec->floorpic = line->frontsector->floorpic; sec->special = line->frontsector->special; break; diff --git a/src/doom/p_inter.c b/src/doom/p_inter.c index 9d98cb7b6e..d2431ef04c 100644 --- a/src/doom/p_inter.c +++ b/src/doom/p_inter.c @@ -110,8 +110,7 @@ boolean P_GiveAmmo(player_t *player, ammotype_t ammo, int num) break; case am_shell: - if (player->readyweapon == wp_fist || - player->readyweapon == wp_pistol) + if (player->readyweapon == wp_fist || player->readyweapon == wp_pistol) { if (player->weaponowned[wp_shotgun]) player->pendingweapon = wp_shotgun; @@ -119,8 +118,7 @@ boolean P_GiveAmmo(player_t *player, ammotype_t ammo, int num) break; case am_cell: - if (player->readyweapon == wp_fist || - player->readyweapon == wp_pistol) + if (player->readyweapon == wp_fist || player->readyweapon == wp_pistol) { if (player->weaponowned[wp_plasma]) player->pendingweapon = wp_plasma; @@ -554,8 +552,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher) break; case SPR_MGUN: - if (!P_GiveWeapon(player, wp_chaingun, - (special->flags & MF_DROPPED) != 0)) + if (!P_GiveWeapon(player, wp_chaingun, (special->flags & MF_DROPPED) != 0)) return; player->message = GOTCHAINGUN; sound = sfx_wpnup; @@ -583,8 +580,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher) break; case SPR_SHOT: - if (!P_GiveWeapon(player, wp_shotgun, - (special->flags & MF_DROPPED) != 0)) + if (!P_GiveWeapon(player, wp_shotgun, (special->flags & MF_DROPPED) != 0)) return; player->message = GOTSHOTGUN; sound = sfx_wpnup; @@ -661,8 +657,7 @@ void P_KillMobj(mobj_t *source, mobj_t *target) } } - if (target->health < -target->info->spawnhealth && - target->info->xdeathstate) + if (target->health < -target->info->spawnhealth && target->info->xdeathstate) { P_SetMobjState(target, target->info->xdeathstate); } @@ -680,7 +675,6 @@ void P_KillMobj(mobj_t *source, mobj_t *target) // during the death frame of a thing. switch (target->type) { - case MT_WOLFSS: case MT_POSSESSED: item = MT_CLIP; break; @@ -688,11 +682,6 @@ void P_KillMobj(mobj_t *source, mobj_t *target) case MT_SHOTGUY: item = MT_SHOTGUN; break; - - case MT_CHAINGUY: - item = MT_CHAINGUN; - break; - default: return; } @@ -741,8 +730,7 @@ void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, int damage) // inflict thrust and push the victim out of reach, // thus kick away unless using the chainsaw. if (inflictor && !(target->flags & MF_NOCLIP) && - (!source || !source->player || - source->player->readyweapon != wp_chainsaw)) + (!source || !source->player || source->player->readyweapon != wp_chainsaw)) { ang = R_PointToAngle2(inflictor->x, inflictor->y, target->x, target->y); @@ -765,8 +753,7 @@ void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, int damage) if (player) { // end of game hell hack - if (target->subsector->sector->special == 11 && - damage >= target->health) + if (target->subsector->sector->special == 11 && damage >= target->health) { damage = target->health - 1; } @@ -774,8 +761,8 @@ void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, int damage) // Below certain threshold, // ignore damage in GOD mode, or with INVUL power. - if (damage < 1000 && ((player->cheats & CF_GODMODE) || - player->powers[pw_invulnerability])) + if (damage < 1000 && + ((player->cheats & CF_GODMODE) || player->powers[pw_invulnerability])) { return; } @@ -820,8 +807,7 @@ void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, int damage) return; } - if ((P_Random() < target->info->painchance) && - !(target->flags & MF_SKULLFLY)) + if ((P_Random() < target->info->painchance) && !(target->flags & MF_SKULLFLY)) { target->flags |= MF_JUSTHIT; // fight back! @@ -830,8 +816,7 @@ void P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, int damage) target->reactiontime = 0; // we're awake now... - if ((!target->threshold || target->type == MT_VILE) && source && - (source != target) && source->type != MT_VILE) + if ((!target->threshold) && source && (source != target)) { // if not intent on another player, // chase after this one diff --git a/src/doom/p_lights.c b/src/doom/p_lights.c index 863338dcf3..3afb2d9631 100644 --- a/src/doom/p_lights.c +++ b/src/doom/p_lights.c @@ -18,7 +18,6 @@ // - #include "z_zone.h" #include "m_random.h" @@ -36,49 +35,47 @@ // // T_FireFlicker // -void T_FireFlicker (fireflicker_t* flick) +void T_FireFlicker(fireflicker_t *flick) { - int amount; - + int amount; + if (--flick->count) - return; - - amount = (P_Random()&3)*16; - + return; + + amount = (P_Random() & 3) * 16; + if (flick->sector->lightlevel - amount < flick->minlight) - flick->sector->lightlevel = flick->minlight; + flick->sector->lightlevel = flick->minlight; else - flick->sector->lightlevel = flick->maxlight - amount; + flick->sector->lightlevel = flick->maxlight - amount; flick->count = 4; } - // // P_SpawnFireFlicker // -void P_SpawnFireFlicker (sector_t* sector) +void P_SpawnFireFlicker(sector_t *sector) { - fireflicker_t* flick; - + fireflicker_t *flick; + // Note that we are resetting sector attributes. // Nothing special about it during gameplay. - sector->special = 0; - - flick = Z_Malloc ( sizeof(*flick), PU_LEVSPEC, 0); + sector->special = 0; - P_AddThinker (&flick->thinker); + flick = Z_Malloc(sizeof(*flick), PU_LEVSPEC, 0); + + P_AddThinker(&flick->thinker); flick->thinker.function.acp1 = (actionf_p1) T_FireFlicker; flick->sector = sector; flick->maxlight = sector->lightlevel; - flick->minlight = P_FindMinSurroundingLight(sector,sector->lightlevel)+16; + flick->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel) + 16; flick->count = 4; } - // // BROKEN LIGHT FLASHING // @@ -88,55 +85,51 @@ void P_SpawnFireFlicker (sector_t* sector) // T_LightFlash // Do flashing lights. // -void T_LightFlash (lightflash_t* flash) +void T_LightFlash(lightflash_t *flash) { if (--flash->count) - return; - + return; + if (flash->sector->lightlevel == flash->maxlight) { - flash-> sector->lightlevel = flash->minlight; - flash->count = (P_Random()&flash->mintime)+1; + flash->sector->lightlevel = flash->minlight; + flash->count = (P_Random() & flash->mintime) + 1; } else { - flash-> sector->lightlevel = flash->maxlight; - flash->count = (P_Random()&flash->maxtime)+1; + flash->sector->lightlevel = flash->maxlight; + flash->count = (P_Random() & flash->maxtime) + 1; } - } - - // // P_SpawnLightFlash // After the map has been loaded, scan each sector // for specials that spawn thinkers // -void P_SpawnLightFlash (sector_t* sector) +void P_SpawnLightFlash(sector_t *sector) { - lightflash_t* flash; + lightflash_t *flash; // nothing special about it during gameplay - sector->special = 0; - - flash = Z_Malloc ( sizeof(*flash), PU_LEVSPEC, 0); + sector->special = 0; + + flash = Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0); - P_AddThinker (&flash->thinker); + P_AddThinker(&flash->thinker); flash->thinker.function.acp1 = (actionf_p1) T_LightFlash; flash->sector = sector; flash->maxlight = sector->lightlevel; - flash->minlight = P_FindMinSurroundingLight(sector,sector->lightlevel); + flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); flash->maxtime = 64; flash->mintime = 7; - flash->count = (P_Random()&flash->maxtime)+1; + flash->count = (P_Random() & flash->maxtime) + 1; } - // // STROBE LIGHT FLASHING // @@ -145,42 +138,36 @@ void P_SpawnLightFlash (sector_t* sector) // // T_StrobeFlash // -void T_StrobeFlash (strobe_t* flash) +void T_StrobeFlash(strobe_t *flash) { if (--flash->count) - return; - + return; + if (flash->sector->lightlevel == flash->minlight) { - flash-> sector->lightlevel = flash->maxlight; - flash->count = flash->brighttime; + flash->sector->lightlevel = flash->maxlight; + flash->count = flash->brighttime; } else { - flash-> sector->lightlevel = flash->minlight; - flash->count =flash->darktime; + flash->sector->lightlevel = flash->minlight; + flash->count = flash->darktime; } - } - // // P_SpawnStrobeFlash // After the map has been loaded, scan each sector // for specials that spawn thinkers // -void -P_SpawnStrobeFlash -( sector_t* sector, - int fastOrSlow, - int inSync ) +void P_SpawnStrobeFlash(sector_t *sector, int fastOrSlow, int inSync) { - strobe_t* flash; - - flash = Z_Malloc ( sizeof(*flash), PU_LEVSPEC, 0); + strobe_t *flash; + + flash = Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0); - P_AddThinker (&flash->thinker); + P_AddThinker(&flash->thinker); flash->sector = sector; flash->darktime = fastOrSlow; @@ -188,71 +175,70 @@ P_SpawnStrobeFlash flash->thinker.function.acp1 = (actionf_p1) T_StrobeFlash; flash->maxlight = sector->lightlevel; flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); - + if (flash->minlight == flash->maxlight) - flash->minlight = 0; + flash->minlight = 0; // nothing special about it during gameplay - sector->special = 0; + sector->special = 0; if (!inSync) - flash->count = (P_Random()&7)+1; + flash->count = (P_Random() & 7) + 1; else - flash->count = 1; + flash->count = 1; } // // Start strobing lights (usually from a trigger) // -void EV_StartLightStrobing(line_t* line) +void EV_StartLightStrobing(line_t *line) { - int secnum; - sector_t* sec; - + int secnum; + sector_t *sec; + secnum = -1; - while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) { - sec = §ors[secnum]; - if (sec->specialdata) - continue; - - P_SpawnStrobeFlash (sec,SLOWDARK, 0); + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + P_SpawnStrobeFlash(sec, SLOWDARK, 0); } } - // // TURN LINE'S TAG LIGHTS OFF // -void EV_TurnTagLightsOff(line_t* line) +void EV_TurnTagLightsOff(line_t *line) { - int i; - int j; - int min; - sector_t* sector; - sector_t* tsec; - line_t* templine; - + int i; + int j; + int min; + sector_t *sector; + sector_t *tsec; + line_t *templine; + sector = sectors; - - for (j = 0;j < numsectors; j++, sector++) + + for (j = 0; j < numsectors; j++, sector++) { - if (sector->tag == line->tag) - { - min = sector->lightlevel; - for (i = 0;i < sector->linecount; i++) - { - templine = sector->lines[i]; - tsec = getNextSector(templine,sector); - if (!tsec) - continue; - if (tsec->lightlevel < min) - min = tsec->lightlevel; - } - sector->lightlevel = min; - } + if (sector->tag == line->tag) + { + min = sector->lightlevel; + for (i = 0; i < sector->linecount; i++) + { + templine = sector->lines[i]; + tsec = getNextSector(templine, sector); + if (!tsec) + continue; + if (tsec->lightlevel < min) + min = tsec->lightlevel; + } + sector->lightlevel = min; + } } } @@ -260,91 +246,87 @@ void EV_TurnTagLightsOff(line_t* line) // // TURN LINE'S TAG LIGHTS ON // -void -EV_LightTurnOn -( line_t* line, - int bright ) +void EV_LightTurnOn(line_t *line, int bright) { - int i; - int j; - sector_t* sector; - sector_t* temp; - line_t* templine; - + int i; + int j; + sector_t *sector; + sector_t *temp; + line_t *templine; + sector = sectors; - - for (i=0;itag == line->tag) - { - // bright = 0 means to search - // for highest light level - // surrounding sector - if (!bright) - { - for (j = 0;j < sector->linecount; j++) - { - templine = sector->lines[j]; - temp = getNextSector(templine,sector); - - if (!temp) - continue; - - if (temp->lightlevel > bright) - bright = temp->lightlevel; - } - } - sector-> lightlevel = bright; - } + if (sector->tag == line->tag) + { + // bright = 0 means to search + // for highest light level + // surrounding sector + if (!bright) + { + for (j = 0; j < sector->linecount; j++) + { + templine = sector->lines[j]; + temp = getNextSector(templine, sector); + + if (!temp) + continue; + + if (temp->lightlevel > bright) + bright = temp->lightlevel; + } + } + sector->lightlevel = bright; + } } } - + // // Spawn glowing light // -void T_Glow(glow_t* g) +void T_Glow(glow_t *g) { - switch(g->direction) + switch (g->direction) { - case -1: - // DOWN - g->sector->lightlevel -= GLOWSPEED; - if (g->sector->lightlevel <= g->minlight) - { - g->sector->lightlevel += GLOWSPEED; - g->direction = 1; - } - break; - - case 1: - // UP - g->sector->lightlevel += GLOWSPEED; - if (g->sector->lightlevel >= g->maxlight) - { - g->sector->lightlevel -= GLOWSPEED; - g->direction = -1; - } - break; + case -1: + // DOWN + g->sector->lightlevel -= GLOWSPEED; + if (g->sector->lightlevel <= g->minlight) + { + g->sector->lightlevel += GLOWSPEED; + g->direction = 1; + } + break; + + case 1: + // UP + g->sector->lightlevel += GLOWSPEED; + if (g->sector->lightlevel >= g->maxlight) + { + g->sector->lightlevel -= GLOWSPEED; + g->direction = -1; + } + break; } } -void P_SpawnGlowingLight(sector_t* sector) +void P_SpawnGlowingLight(sector_t *sector) { - glow_t* g; - - g = Z_Malloc( sizeof(*g), PU_LEVSPEC, 0); + glow_t *g; + + g = Z_Malloc(sizeof(*g), PU_LEVSPEC, 0); P_AddThinker(&g->thinker); g->sector = sector; - g->minlight = P_FindMinSurroundingLight(sector,sector->lightlevel); + g->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); g->maxlight = sector->lightlevel; g->thinker.function.acp1 = (actionf_p1) T_Glow; g->direction = -1; sector->special = 0; } - diff --git a/src/doom/p_map.c b/src/doom/p_map.c index 2a916ee9a0..e69ea32bd4 100644 --- a/src/doom/p_map.c +++ b/src/doom/p_map.c @@ -197,10 +197,8 @@ static void SpechitOverrun(line_t *ld); // boolean PIT_CheckLine(line_t *ld) { - if (tmbbox[BOXRIGHT] <= ld->bbox[BOXLEFT] || - tmbbox[BOXLEFT] >= ld->bbox[BOXRIGHT] || - tmbbox[BOXTOP] <= ld->bbox[BOXBOTTOM] || - tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP]) + if (tmbbox[BOXRIGHT] <= ld->bbox[BOXLEFT] || tmbbox[BOXLEFT] >= ld->bbox[BOXRIGHT] || + tmbbox[BOXTOP] <= ld->bbox[BOXBOTTOM] || tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP]) return true; if (P_BoxOnLineSide(tmbbox, ld) != -1) @@ -310,11 +308,7 @@ boolean PIT_CheckThing(mobj_t *thing) if (tmthing->z + tmthing->height < thing->z) return true; // underneath - if (tmthing->target && - (tmthing->target->type == thing->type || - (tmthing->target->type == MT_KNIGHT && - thing->type == MT_BRUISER) || - (tmthing->target->type == MT_BRUISER && thing->type == MT_KNIGHT))) + if (tmthing->target && (tmthing->target->type == thing->type)) { // Don't hit same species as originator. if (thing == tmthing->target) @@ -481,12 +475,10 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y) floatok = true; - if (!(thing->flags & MF_TELEPORT) && - tmceilingz - thing->z < thing->height) + if (!(thing->flags & MF_TELEPORT) && tmceilingz - thing->z < thing->height) return false; // mobj must lower itself to fit - if (!(thing->flags & MF_TELEPORT) && - tmfloorz - thing->z > 24 * FRACUNIT) + if (!(thing->flags & MF_TELEPORT) && tmfloorz - thing->z > 24 * FRACUNIT) return false; // too big a step up if (!(thing->flags & (MF_DROPOFF | MF_FLOAT)) && @@ -743,12 +735,12 @@ void P_SlideMove(mobj_t *mo) bestslidefrac = FRACUNIT + 1; - P_PathTraverse(leadx, leady, leadx + mo->momx, leady + mo->momy, - PT_ADDLINES, PTR_SlideTraverse); - P_PathTraverse(trailx, leady, trailx + mo->momx, leady + mo->momy, - PT_ADDLINES, PTR_SlideTraverse); - P_PathTraverse(leadx, traily, leadx + mo->momx, traily + mo->momy, - PT_ADDLINES, PTR_SlideTraverse); + P_PathTraverse(leadx, leady, leadx + mo->momx, leady + mo->momy, PT_ADDLINES, + PTR_SlideTraverse); + P_PathTraverse(trailx, leady, trailx + mo->momx, leady + mo->momy, PT_ADDLINES, + PTR_SlideTraverse); + P_PathTraverse(leadx, traily, leadx + mo->momx, traily + mo->momy, PT_ADDLINES, + PTR_SlideTraverse); // move up to the wall if (bestslidefrac == FRACUNIT + 1) @@ -1060,8 +1052,7 @@ fixed_t P_AimLineAttack(mobj_t *t1, angle_t angle, fixed_t distance) attackrange = distance; linetarget = NULL; - P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS, - PTR_AimTraverse); + P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS, PTR_AimTraverse); if (linetarget) return aimslope; @@ -1075,8 +1066,7 @@ fixed_t P_AimLineAttack(mobj_t *t1, angle_t angle, fixed_t distance) // If damage == 0, it is just a test trace // that will leave linetarget set. // -void P_LineAttack(mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, - int damage) +void P_LineAttack(mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, int damage) { fixed_t x2; fixed_t y2; @@ -1090,8 +1080,7 @@ void P_LineAttack(mobj_t *t1, angle_t angle, fixed_t distance, fixed_t slope, attackrange = distance; aimslope = slope; - P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS, - PTR_ShootTraverse); + P_PathTraverse(t1->x, t1->y, x2, y2, PT_ADDLINES | PT_ADDTHINGS, PTR_ShootTraverse); } @@ -1302,8 +1291,7 @@ boolean PIT_ChangeSector(mobj_t *thing) P_DamageMobj(thing, NULL, NULL, 10); // spray blood in a random direction - mo = P_SpawnMobj(thing->x, thing->y, thing->z + thing->height / 2, - MT_BLOOD); + mo = P_SpawnMobj(thing->x, thing->y, thing->z + thing->height / 2, MT_BLOOD); mo->momx = P_SubRandom() << 12; mo->momy = P_SubRandom() << 12; @@ -1327,8 +1315,7 @@ boolean P_ChangeSector(sector_t *sector, boolean crunch) // re-check heights for all things near the moving sector for (x = sector->blockbox[BOXLEFT]; x <= sector->blockbox[BOXRIGHT]; x++) - for (y = sector->blockbox[BOXBOTTOM]; y <= sector->blockbox[BOXTOP]; - y++) + for (y = sector->blockbox[BOXBOTTOM]; y <= sector->blockbox[BOXTOP]; y++) P_BlockThingsIterator(x, y, PIT_ChangeSector); diff --git a/src/doom/p_maputl.c b/src/doom/p_maputl.c index cfbe06eff3..6067e9ed05 100644 --- a/src/doom/p_maputl.c +++ b/src/doom/p_maputl.c @@ -15,13 +15,12 @@ // // DESCRIPTION: // Movement/collision utility functions, -// as used by function in p_map.c. +// as used by function in p_map.c. // BLOCKMAP Iterator functions, // and some PIT_* functions to use for iteration. // - #include @@ -41,16 +40,13 @@ // Gives an estimation of distance (not exact) // -fixed_t -P_AproxDistance -( fixed_t dx, - fixed_t dy ) +fixed_t P_AproxDistance(fixed_t dx, fixed_t dy) { dx = abs(dx); dy = abs(dy); if (dx < dy) - return dx+dy-(dx>>1); - return dx+dy-(dy>>1); + return dx + dy - (dx >> 1); + return dx + dy - (dy >> 1); } @@ -58,93 +54,85 @@ P_AproxDistance // P_PointOnLineSide // Returns 0 or 1 // -int -P_PointOnLineSide -( fixed_t x, - fixed_t y, - line_t* line ) +int P_PointOnLineSide(fixed_t x, fixed_t y, line_t *line) { - fixed_t dx; - fixed_t dy; - fixed_t left; - fixed_t right; - + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + if (!line->dx) { - if (x <= line->v1->x) - return line->dy > 0; - - return line->dy < 0; + if (x <= line->v1->x) + return line->dy > 0; + + return line->dy < 0; } if (!line->dy) { - if (y <= line->v1->y) - return line->dx < 0; - - return line->dx > 0; + if (y <= line->v1->y) + return line->dx < 0; + + return line->dx > 0; } - + dx = (x - line->v1->x); dy = (y - line->v1->y); - - left = FixedMul ( line->dy>>FRACBITS , dx ); - right = FixedMul ( dy , line->dx>>FRACBITS ); - + + left = FixedMul(line->dy >> FRACBITS, dx); + right = FixedMul(dy, line->dx >> FRACBITS); + if (right < left) - return 0; // front side - return 1; // back side + return 0; // front side + return 1; // back side } - // // P_BoxOnLineSide // Considers the line to be infinite // Returns side 0 or 1, -1 if box crosses the line. // -int -P_BoxOnLineSide -( fixed_t* tmbox, - line_t* ld ) +int P_BoxOnLineSide(fixed_t *tmbox, line_t *ld) { - int p1 = 0; - int p2 = 0; - + int p1 = 0; + int p2 = 0; + switch (ld->slopetype) { - case ST_HORIZONTAL: - p1 = tmbox[BOXTOP] > ld->v1->y; - p2 = tmbox[BOXBOTTOM] > ld->v1->y; - if (ld->dx < 0) - { - p1 ^= 1; - p2 ^= 1; - } - break; - - case ST_VERTICAL: - p1 = tmbox[BOXRIGHT] < ld->v1->x; - p2 = tmbox[BOXLEFT] < ld->v1->x; - if (ld->dy < 0) - { - p1 ^= 1; - p2 ^= 1; - } - break; - - case ST_POSITIVE: - p1 = P_PointOnLineSide (tmbox[BOXLEFT], tmbox[BOXTOP], ld); - p2 = P_PointOnLineSide (tmbox[BOXRIGHT], tmbox[BOXBOTTOM], ld); - break; - - case ST_NEGATIVE: - p1 = P_PointOnLineSide (tmbox[BOXRIGHT], tmbox[BOXTOP], ld); - p2 = P_PointOnLineSide (tmbox[BOXLEFT], tmbox[BOXBOTTOM], ld); - break; + case ST_HORIZONTAL: + p1 = tmbox[BOXTOP] > ld->v1->y; + p2 = tmbox[BOXBOTTOM] > ld->v1->y; + if (ld->dx < 0) + { + p1 ^= 1; + p2 ^= 1; + } + break; + + case ST_VERTICAL: + p1 = tmbox[BOXRIGHT] < ld->v1->x; + p2 = tmbox[BOXLEFT] < ld->v1->x; + if (ld->dy < 0) + { + p1 ^= 1; + p2 ^= 1; + } + break; + + case ST_POSITIVE: + p1 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXTOP], ld); + p2 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXBOTTOM], ld); + break; + + case ST_NEGATIVE: + p1 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXTOP], ld); + p2 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXBOTTOM], ld); + break; } if (p1 == p2) - return p1; + return p1; return -1; } @@ -153,60 +141,52 @@ P_BoxOnLineSide // P_PointOnDivlineSide // Returns 0 or 1. // -int -P_PointOnDivlineSide -( fixed_t x, - fixed_t y, - divline_t* line ) +int P_PointOnDivlineSide(fixed_t x, fixed_t y, divline_t *line) { - fixed_t dx; - fixed_t dy; - fixed_t left; - fixed_t right; - + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + if (!line->dx) { - if (x <= line->x) - return line->dy > 0; - - return line->dy < 0; + if (x <= line->x) + return line->dy > 0; + + return line->dy < 0; } if (!line->dy) { - if (y <= line->y) - return line->dx < 0; + if (y <= line->y) + return line->dx < 0; - return line->dx > 0; + return line->dx > 0; } - + dx = (x - line->x); dy = (y - line->y); - + // try to quickly decide by looking at sign bits - if ( (line->dy ^ line->dx ^ dx ^ dy)&0x80000000 ) + if ((line->dy ^ line->dx ^ dx ^ dy) & 0x80000000) { - if ( (line->dy ^ dx) & 0x80000000 ) - return 1; // (left is negative) - return 0; + if ((line->dy ^ dx) & 0x80000000) + return 1; // (left is negative) + return 0; } - - left = FixedMul ( line->dy>>8, dx>>8 ); - right = FixedMul ( dy>>8 , line->dx>>8 ); - + + left = FixedMul(line->dy >> 8, dx >> 8); + right = FixedMul(dy >> 8, line->dx >> 8); + if (right < left) - return 0; // front side - return 1; // back side + return 0; // front side + return 1; // back side } - // // P_MakeDivline // -void -P_MakeDivline -( line_t* li, - divline_t* dl ) +void P_MakeDivline(line_t *li, divline_t *dl) { dl->x = li->v1->x; dl->y = li->v1->y; @@ -215,7 +195,6 @@ P_MakeDivline } - // // P_InterceptVector // Returns the fractional intercept point @@ -223,60 +202,55 @@ P_MakeDivline // This is only called by the addthings // and addlines traversers. // -fixed_t -P_InterceptVector -( divline_t* v2, - divline_t* v1 ) +fixed_t P_InterceptVector(divline_t *v2, divline_t *v1) { #if 1 - fixed_t frac; - fixed_t num; - fixed_t den; - - den = FixedMul (v1->dy>>8,v2->dx) - FixedMul(v1->dx>>8,v2->dy); + fixed_t frac; + fixed_t num; + fixed_t den; + + den = FixedMul(v1->dy >> 8, v2->dx) - FixedMul(v1->dx >> 8, v2->dy); if (den == 0) - return 0; + return 0; // I_Error ("P_InterceptVector: parallel"); - - num = - FixedMul ( (v1->x - v2->x)>>8 ,v1->dy ) - +FixedMul ( (v2->y - v1->y)>>8, v1->dx ); - frac = FixedDiv (num , den); + num = FixedMul((v1->x - v2->x) >> 8, v1->dy) + FixedMul((v2->y - v1->y) >> 8, v1->dx); + + frac = FixedDiv(num, den); return frac; -#else // UNUSED, float debug. - float frac; - float num; - float den; - float v1x; - float v1y; - float v1dx; - float v1dy; - float v2x; - float v2y; - float v2dx; - float v2dy; - - v1x = (float)v1->x/FRACUNIT; - v1y = (float)v1->y/FRACUNIT; - v1dx = (float)v1->dx/FRACUNIT; - v1dy = (float)v1->dy/FRACUNIT; - v2x = (float)v2->x/FRACUNIT; - v2y = (float)v2->y/FRACUNIT; - v2dx = (float)v2->dx/FRACUNIT; - v2dy = (float)v2->dy/FRACUNIT; - - den = v1dy*v2dx - v1dx*v2dy; +#else // UNUSED, float debug. + float frac; + float num; + float den; + float v1x; + float v1y; + float v1dx; + float v1dy; + float v2x; + float v2y; + float v2dx; + float v2dy; + + v1x = (float) v1->x / FRACUNIT; + v1y = (float) v1->y / FRACUNIT; + v1dx = (float) v1->dx / FRACUNIT; + v1dy = (float) v1->dy / FRACUNIT; + v2x = (float) v2->x / FRACUNIT; + v2y = (float) v2->y / FRACUNIT; + v2dx = (float) v2->dx / FRACUNIT; + v2dy = (float) v2->dy / FRACUNIT; + + den = v1dy * v2dx - v1dx * v2dy; if (den == 0) - return 0; // parallel - - num = (v1x - v2x)*v1dy + (v2y - v1y)*v1dx; + return 0; // parallel + + num = (v1x - v2x) * v1dy + (v2y - v1y) * v1dx; frac = num / den; - return frac*FRACUNIT; + return frac * FRACUNIT; #endif } @@ -290,40 +264,40 @@ P_InterceptVector fixed_t opentop; fixed_t openbottom; fixed_t openrange; -fixed_t lowfloor; +fixed_t lowfloor; -void P_LineOpening (line_t* linedef) +void P_LineOpening(line_t *linedef) { - sector_t* front; - sector_t* back; - + sector_t *front; + sector_t *back; + if (linedef->sidenum[1] == -1) { - // single sided line - openrange = 0; - return; + // single sided line + openrange = 0; + return; } - + front = linedef->frontsector; back = linedef->backsector; - + if (front->ceilingheight < back->ceilingheight) - opentop = front->ceilingheight; + opentop = front->ceilingheight; else - opentop = back->ceilingheight; + opentop = back->ceilingheight; if (front->floorheight > back->floorheight) { - openbottom = front->floorheight; - lowfloor = back->floorheight; + openbottom = front->floorheight; + lowfloor = back->floorheight; } else { - openbottom = back->floorheight; - lowfloor = front->floorheight; + openbottom = back->floorheight; + lowfloor = front->floorheight; } - + openrange = opentop - openbottom; } @@ -340,44 +314,43 @@ void P_LineOpening (line_t* linedef) // lookups maintaining lists ot things inside // these structures need to be updated. // -void P_UnsetThingPosition (mobj_t* thing) +void P_UnsetThingPosition(mobj_t *thing) { - int blockx; - int blocky; - - if ( ! (thing->flags & MF_NOSECTOR) ) - { - // inert things don't need to be in blockmap? - // unlink from subsector - if (thing->snext) - thing->snext->sprev = thing->sprev; - - if (thing->sprev) - thing->sprev->snext = thing->snext; - else - thing->subsector->sector->thinglist = thing->snext; - } - - if ( ! (thing->flags & MF_NOBLOCKMAP) ) - { - // inert things don't need to be in blockmap - // unlink from block map - if (thing->bnext) - thing->bnext->bprev = thing->bprev; - - if (thing->bprev) - thing->bprev->bnext = thing->bnext; - else - { - blockx = (thing->x - bmaporgx)>>MAPBLOCKSHIFT; - blocky = (thing->y - bmaporgy)>>MAPBLOCKSHIFT; - - if (blockx>=0 && blockx < bmapwidth - && blocky>=0 && blocky bnext; - } - } + int blockx; + int blocky; + + if (!(thing->flags & MF_NOSECTOR)) + { + // inert things don't need to be in blockmap? + // unlink from subsector + if (thing->snext) + thing->snext->sprev = thing->sprev; + + if (thing->sprev) + thing->sprev->snext = thing->snext; + else + thing->subsector->sector->thinglist = thing->snext; + } + + if (!(thing->flags & MF_NOBLOCKMAP)) + { + // inert things don't need to be in blockmap + // unlink from block map + if (thing->bnext) + thing->bnext->bprev = thing->bprev; + + if (thing->bprev) + thing->bprev->bnext = thing->bnext; + else + { + blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT; + blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT; + + if (blockx >= 0 && blockx < bmapwidth && blocky >= 0 && blocky < bmapheight) + { + blocklinks[blocky * bmapwidth + blockx] = thing->bnext; + } + } } } @@ -388,65 +361,60 @@ void P_UnsetThingPosition (mobj_t* thing) // based on it's x y. // Sets thing->subsector properly // -void -P_SetThingPosition (mobj_t* thing) +void P_SetThingPosition(mobj_t *thing) { - subsector_t* ss; - sector_t* sec; - int blockx; - int blocky; - mobj_t** link; + subsector_t *ss; + sector_t *sec; + int blockx; + int blocky; + mobj_t **link; + - // link into subsector - ss = R_PointInSubsector (thing->x,thing->y); + ss = R_PointInSubsector(thing->x, thing->y); thing->subsector = ss; - - if ( ! (thing->flags & MF_NOSECTOR) ) + + if (!(thing->flags & MF_NOSECTOR)) { - // invisible things don't go into the sector links - sec = ss->sector; - - thing->sprev = NULL; - thing->snext = sec->thinglist; + // invisible things don't go into the sector links + sec = ss->sector; - if (sec->thinglist) - sec->thinglist->sprev = thing; + thing->sprev = NULL; + thing->snext = sec->thinglist; - sec->thinglist = thing; + if (sec->thinglist) + sec->thinglist->sprev = thing; + + sec->thinglist = thing; } - + // link into blockmap - if ( ! (thing->flags & MF_NOBLOCKMAP) ) - { - // inert things don't need to be in blockmap - blockx = (thing->x - bmaporgx)>>MAPBLOCKSHIFT; - blocky = (thing->y - bmaporgy)>>MAPBLOCKSHIFT; - - if (blockx>=0 - && blockx < bmapwidth - && blocky>=0 - && blocky < bmapheight) - { - link = &blocklinks[blocky*bmapwidth+blockx]; - thing->bprev = NULL; - thing->bnext = *link; - if (*link) - (*link)->bprev = thing; - - *link = thing; - } - else - { - // thing is off the map - thing->bnext = thing->bprev = NULL; - } + if (!(thing->flags & MF_NOBLOCKMAP)) + { + // inert things don't need to be in blockmap + blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT; + blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT; + + if (blockx >= 0 && blockx < bmapwidth && blocky >= 0 && blocky < bmapheight) + { + link = &blocklinks[blocky * bmapwidth + blockx]; + thing->bprev = NULL; + thing->bnext = *link; + if (*link) + (*link)->bprev = thing; + + *link = thing; + } + else + { + // thing is off the map + thing->bnext = thing->bprev = NULL; + } } } - // // BLOCK MAP ITERATORS // For each line/thing in the given mapblock, @@ -464,86 +432,69 @@ P_SetThingPosition (mobj_t* thing) // to P_BlockLinesIterator, then make one or more calls // to it. // -boolean -P_BlockLinesIterator -( int x, - int y, - boolean(*func)(line_t*) ) +boolean P_BlockLinesIterator(int x, int y, boolean (*func)(line_t *)) { - int offset; - short* list; - line_t* ld; - - if (x<0 - || y<0 - || x>=bmapwidth - || y>=bmapheight) + int offset; + short *list; + line_t *ld; + + if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight) { - return true; + return true; } - - offset = y*bmapwidth+x; - - offset = *(blockmap+offset); - for ( list = blockmaplump+offset ; *list != -1 ; list++) + offset = y * bmapwidth + x; + + offset = *(blockmap + offset); + + for (list = blockmaplump + offset; *list != -1; list++) { - ld = &lines[*list]; + ld = &lines[*list]; - if (ld->validcount == validcount) - continue; // line has already been checked + if (ld->validcount == validcount) + continue; // line has already been checked - ld->validcount = validcount; - - if ( !func(ld) ) - return false; + ld->validcount = validcount; + + if (!func(ld)) + return false; } - return true; // everything was checked + return true; // everything was checked } // // P_BlockThingsIterator // -boolean -P_BlockThingsIterator -( int x, - int y, - boolean(*func)(mobj_t*) ) +boolean P_BlockThingsIterator(int x, int y, boolean (*func)(mobj_t *)) { - mobj_t* mobj; + mobj_t *mobj; - if ( x<0 - || y<0 - || x>=bmapwidth - || y>=bmapheight) + if (x < 0 || y < 0 || x >= bmapwidth || y >= bmapheight) { return true; } - LINKED_LIST_CHECK_NO_CYCLE(mobj_t, blocklinks[y*bmapwidth+x], bnext); + LINKED_LIST_CHECK_NO_CYCLE(mobj_t, blocklinks[y * bmapwidth + x], bnext); - for (mobj = blocklinks[y*bmapwidth+x] ; - mobj ; - mobj = mobj->bnext) + for (mobj = blocklinks[y * bmapwidth + x]; mobj; mobj = mobj->bnext) { - if (!func( mobj ) ) + if (!func(mobj)) return false; } return true; } - // // INTERCEPT ROUTINES // -intercept_t intercepts[MAXINTERCEPTS]; -intercept_t* intercept_p; +intercept_t intercepts[MAXINTERCEPTS]; +intercept_t *intercept_p; -divline_t trace; -boolean earlyout; -int ptflags; +divline_t trace; +boolean earlyout; +int ptflags; static void InterceptsOverrun(int num_intercepts, intercept_t *intercept); @@ -557,113 +508,107 @@ static void InterceptsOverrun(int num_intercepts, intercept_t *intercept); // are on opposite sides of the trace. // Returns true if earlyout and a solid line hit. // -boolean -PIT_AddLineIntercepts (line_t* ld) +boolean PIT_AddLineIntercepts(line_t *ld) { - int s1; - int s2; - fixed_t frac; - divline_t dl; - + int s1; + int s2; + fixed_t frac; + divline_t dl; + // avoid precision problems with two routines - if ( trace.dx > FRACUNIT*16 - || trace.dy > FRACUNIT*16 - || trace.dx < -FRACUNIT*16 - || trace.dy < -FRACUNIT*16) + if (trace.dx > FRACUNIT * 16 || trace.dy > FRACUNIT * 16 || + trace.dx < -FRACUNIT * 16 || trace.dy < -FRACUNIT * 16) { - s1 = P_PointOnDivlineSide (ld->v1->x, ld->v1->y, &trace); - s2 = P_PointOnDivlineSide (ld->v2->x, ld->v2->y, &trace); + s1 = P_PointOnDivlineSide(ld->v1->x, ld->v1->y, &trace); + s2 = P_PointOnDivlineSide(ld->v2->x, ld->v2->y, &trace); } else { - s1 = P_PointOnLineSide (trace.x, trace.y, ld); - s2 = P_PointOnLineSide (trace.x+trace.dx, trace.y+trace.dy, ld); + s1 = P_PointOnLineSide(trace.x, trace.y, ld); + s2 = P_PointOnLineSide(trace.x + trace.dx, trace.y + trace.dy, ld); } - + if (s1 == s2) - return true; // line isn't crossed - + return true; // line isn't crossed + // hit the line - P_MakeDivline (ld, &dl); - frac = P_InterceptVector (&trace, &dl); + P_MakeDivline(ld, &dl); + frac = P_InterceptVector(&trace, &dl); if (frac < 0) - return true; // behind source - + return true; // behind source + // try to early out the check - if (earlyout - && frac < FRACUNIT - && !ld->backsector) + if (earlyout && frac < FRACUNIT && !ld->backsector) { - return false; // stop checking + return false; // stop checking } - - + + intercept_p->frac = frac; intercept_p->isaline = true; intercept_p->d.line = ld; InterceptsOverrun(intercept_p - intercepts, intercept_p); intercept_p++; - return true; // continue + return true; // continue } - // // PIT_AddThingIntercepts // -boolean PIT_AddThingIntercepts (mobj_t* thing) +boolean PIT_AddThingIntercepts(mobj_t *thing) { - fixed_t x1; - fixed_t y1; - fixed_t x2; - fixed_t y2; - - int s1; - int s2; - - boolean tracepositive; - - divline_t dl; - - fixed_t frac; - - tracepositive = (trace.dx ^ trace.dy)>0; - + fixed_t x1; + fixed_t y1; + fixed_t x2; + fixed_t y2; + + int s1; + int s2; + + boolean tracepositive; + + divline_t dl; + + fixed_t frac; + + tracepositive = (trace.dx ^ trace.dy) > 0; + // check a corner to corner crossection for hit if (tracepositive) { - x1 = thing->x - thing->radius; - y1 = thing->y + thing->radius; - - x2 = thing->x + thing->radius; - y2 = thing->y - thing->radius; + x1 = thing->x - thing->radius; + y1 = thing->y + thing->radius; + + x2 = thing->x + thing->radius; + y2 = thing->y - thing->radius; } else { - x1 = thing->x - thing->radius; - y1 = thing->y - thing->radius; - - x2 = thing->x + thing->radius; - y2 = thing->y + thing->radius; + x1 = thing->x - thing->radius; + y1 = thing->y - thing->radius; + + x2 = thing->x + thing->radius; + y2 = thing->y + thing->radius; } - - s1 = P_PointOnDivlineSide (x1, y1, &trace); - s2 = P_PointOnDivlineSide (x2, y2, &trace); + + s1 = P_PointOnDivlineSide(x1, y1, &trace); + s2 = P_PointOnDivlineSide(x2, y2, &trace); if (s1 == s2) - return true; // line isn't crossed - + return true; // line isn't crossed + dl.x = x1; dl.y = y1; - dl.dx = x2-x1; - dl.dy = y2-y1; - - frac = P_InterceptVector (&trace, &dl); + dl.dx = x2 - x1; + dl.dy = y2 - y1; + + frac = P_InterceptVector(&trace, &dl); if (frac < 0) - return true; // behind source + return true; // behind source intercept_p->frac = frac; intercept_p->isaline = false; @@ -671,7 +616,7 @@ boolean PIT_AddThingIntercepts (mobj_t* thing) InterceptsOverrun(intercept_p - intercepts, intercept_p); intercept_p++; - return true; // keep going + return true; // keep going } @@ -679,37 +624,34 @@ boolean PIT_AddThingIntercepts (mobj_t* thing) // P_TraverseIntercepts // Returns true if the traverser function returns true // for all lines. -// -boolean -P_TraverseIntercepts -( traverser_t func, - fixed_t maxfrac ) +// +boolean P_TraverseIntercepts(traverser_t func, fixed_t maxfrac) { - int count; - fixed_t dist; - intercept_t* scan; - intercept_t* in; - + int count; + fixed_t dist; + intercept_t *scan; + intercept_t *in; + count = intercept_p - intercepts; - - in = 0; // shut up compiler warning - + + in = 0; // shut up compiler warning + while (count--) { - dist = INT_MAX; - for (scan = intercepts ; scanfrac < dist) - { - dist = scan->frac; - in = scan; - } - } - - if (dist > maxfrac) - return true; // checked everything in range - -#if 0 // UNUSED + dist = INT_MAX; + for (scan = intercepts; scan < intercept_p; scan++) + { + if (scan->frac < dist) + { + dist = scan->frac; + in = scan; + } + } + + if (dist > maxfrac) + return true; // checked everything in range + +#if 0 // UNUSED { // don't check these yet, there may be others inserted in = scan = intercepts; @@ -721,18 +663,18 @@ P_TraverseIntercepts } #endif - if ( !func (in) ) - return false; // don't bother going farther + if (!func(in)) + return false; // don't bother going farther - in->frac = INT_MAX; + in->frac = INT_MAX; } - - return true; // everything was traversed + + return true; // everything was traversed } // Intercepts Overrun emulation, from PrBoom-plus. -// Thanks to Andrey Budko (entryway) for researching this and his +// Thanks to Andrey Budko (entryway) for researching this and his // implementation of Intercepts Overrun emulation in PrBoom-plus // which this is based on. @@ -751,31 +693,30 @@ typedef struct // playerstarts, which is effectively an array of 16-bit integers and // must be treated differently. -static intercepts_overrun_t intercepts_overrun[] = -{ - {4, NULL, false}, - {4, NULL, /* &earlyout, */ false}, - {4, NULL, /* &intercept_p, */ false}, - {4, &lowfloor, false}, - {4, &openbottom, false}, - {4, &opentop, false}, - {4, &openrange, false}, - {4, NULL, false}, - {120, NULL, /* &activeplats, */ false}, - {8, NULL, false}, - {4, &bulletslope, false}, - {4, NULL, /* &swingx, */ false}, - {4, NULL, /* &swingy, */ false}, - {4, NULL, false}, - {40, &playerstarts, true}, - {4, NULL, /* &blocklinks, */ false}, - {4, &bmapwidth, false}, - {4, NULL, /* &blockmap, */ false}, - {4, &bmaporgx, false}, - {4, &bmaporgy, false}, - {4, NULL, /* &blockmaplump, */ false}, - {4, &bmapheight, false}, - {0, NULL, false}, +static intercepts_overrun_t intercepts_overrun[] = { + {4, NULL, false}, + {4, NULL, /* &earlyout, */ false}, + {4, NULL, /* &intercept_p, */ false}, + {4, &lowfloor, false}, + {4, &openbottom, false}, + {4, &opentop, false}, + {4, &openrange, false}, + {4, NULL, false}, + {120, NULL, /* &activeplats, */ false}, + {8, NULL, false}, + {4, &bulletslope, false}, + {4, NULL, /* &swingx, */ false}, + {4, NULL, /* &swingy, */ false}, + {4, NULL, false}, + {40, &playerstarts, true}, + {4, NULL, /* &blocklinks, */ false}, + {4, &bmapwidth, false}, + {4, NULL, /* &blockmap, */ false}, + {4, &bmaporgx, false}, + {4, &bmaporgy, false}, + {4, NULL, /* &blockmaplump, */ false}, + {4, &bmapheight, false}, + {0, NULL, false}, }; // Overwrite a specific memory location with a value. @@ -842,7 +783,7 @@ static void InterceptsOverrun(int num_intercepts, intercept_t *intercept) // the values from the intercept structure. // // Note: the ->d.{thing,line} member should really have its - // address translated into the correct address value for + // address translated into the correct address value for // Vanilla Doom. InterceptsMemoryOverrun(location, intercept->frac); @@ -858,46 +799,40 @@ static void InterceptsOverrun(int num_intercepts, intercept_t *intercept) // Returns true if the traverser function returns true // for all lines. // -boolean -P_PathTraverse -( fixed_t x1, - fixed_t y1, - fixed_t x2, - fixed_t y2, - int flags, - boolean (*trav) (intercept_t *)) +boolean P_PathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2, int flags, + boolean (*trav)(intercept_t *)) { - fixed_t xt1; - fixed_t yt1; - fixed_t xt2; - fixed_t yt2; - - fixed_t xstep; - fixed_t ystep; - - fixed_t partial; - - fixed_t xintercept; - fixed_t yintercept; - - int mapx; - int mapy; - - int mapxstep; - int mapystep; - - int count; - + fixed_t xt1; + fixed_t yt1; + fixed_t xt2; + fixed_t yt2; + + fixed_t xstep; + fixed_t ystep; + + fixed_t partial; + + fixed_t xintercept; + fixed_t yintercept; + + int mapx; + int mapy; + + int mapxstep; + int mapystep; + + int count; + earlyout = (flags & PT_EARLYOUT) != 0; - + validcount++; intercept_p = intercepts; - - if ( ((x1-bmaporgx)&(MAPBLOCKSIZE-1)) == 0) - x1 += FRACUNIT; // don't side exactly on a line - - if ( ((y1-bmaporgy)&(MAPBLOCKSIZE-1)) == 0) - y1 += FRACUNIT; // don't side exactly on a line + + if (((x1 - bmaporgx) & (MAPBLOCKSIZE - 1)) == 0) + x1 += FRACUNIT; // don't side exactly on a line + + if (((y1 - bmaporgy) & (MAPBLOCKSIZE - 1)) == 0) + y1 += FRACUNIT; // don't side exactly on a line trace.x = x1; trace.y = y1; @@ -906,94 +841,92 @@ P_PathTraverse x1 -= bmaporgx; y1 -= bmaporgy; - xt1 = x1>>MAPBLOCKSHIFT; - yt1 = y1>>MAPBLOCKSHIFT; + xt1 = x1 >> MAPBLOCKSHIFT; + yt1 = y1 >> MAPBLOCKSHIFT; x2 -= bmaporgx; y2 -= bmaporgy; - xt2 = x2>>MAPBLOCKSHIFT; - yt2 = y2>>MAPBLOCKSHIFT; + xt2 = x2 >> MAPBLOCKSHIFT; + yt2 = y2 >> MAPBLOCKSHIFT; if (xt2 > xt1) { - mapxstep = 1; - partial = FRACUNIT - ((x1>>MAPBTOFRAC)&(FRACUNIT-1)); - ystep = FixedDiv (y2-y1,abs(x2-x1)); + mapxstep = 1; + partial = FRACUNIT - ((x1 >> MAPBTOFRAC) & (FRACUNIT - 1)); + ystep = FixedDiv(y2 - y1, abs(x2 - x1)); } else if (xt2 < xt1) { - mapxstep = -1; - partial = (x1>>MAPBTOFRAC)&(FRACUNIT-1); - ystep = FixedDiv (y2-y1,abs(x2-x1)); + mapxstep = -1; + partial = (x1 >> MAPBTOFRAC) & (FRACUNIT - 1); + ystep = FixedDiv(y2 - y1, abs(x2 - x1)); } else { - mapxstep = 0; - partial = FRACUNIT; - ystep = 256*FRACUNIT; - } + mapxstep = 0; + partial = FRACUNIT; + ystep = 256 * FRACUNIT; + } + + yintercept = (y1 >> MAPBTOFRAC) + FixedMul(partial, ystep); - yintercept = (y1>>MAPBTOFRAC) + FixedMul (partial, ystep); - if (yt2 > yt1) { - mapystep = 1; - partial = FRACUNIT - ((y1>>MAPBTOFRAC)&(FRACUNIT-1)); - xstep = FixedDiv (x2-x1,abs(y2-y1)); + mapystep = 1; + partial = FRACUNIT - ((y1 >> MAPBTOFRAC) & (FRACUNIT - 1)); + xstep = FixedDiv(x2 - x1, abs(y2 - y1)); } else if (yt2 < yt1) { - mapystep = -1; - partial = (y1>>MAPBTOFRAC)&(FRACUNIT-1); - xstep = FixedDiv (x2-x1,abs(y2-y1)); + mapystep = -1; + partial = (y1 >> MAPBTOFRAC) & (FRACUNIT - 1); + xstep = FixedDiv(x2 - x1, abs(y2 - y1)); } else { - mapystep = 0; - partial = FRACUNIT; - xstep = 256*FRACUNIT; - } - xintercept = (x1>>MAPBTOFRAC) + FixedMul (partial, xstep); - + mapystep = 0; + partial = FRACUNIT; + xstep = 256 * FRACUNIT; + } + xintercept = (x1 >> MAPBTOFRAC) + FixedMul(partial, xstep); + // Step through map blocks. // Count is present to prevent a round off error // from skipping the break. mapx = xt1; mapy = yt1; - - for (count = 0 ; count < 64 ; count++) - { - if (flags & PT_ADDLINES) - { - if (!P_BlockLinesIterator (mapx, mapy,PIT_AddLineIntercepts)) - return false; // early out - } - - if (flags & PT_ADDTHINGS) - { - if (!P_BlockThingsIterator (mapx, mapy,PIT_AddThingIntercepts)) - return false; // early out - } - - if (mapx == xt2 - && mapy == yt2) - { - break; - } - - if ( (yintercept >> FRACBITS) == mapy) - { - yintercept += ystep; - mapx += mapxstep; - } - else if ( (xintercept >> FRACBITS) == mapx) - { - xintercept += xstep; - mapy += mapystep; - } - + + for (count = 0; count < 64; count++) + { + if (flags & PT_ADDLINES) + { + if (!P_BlockLinesIterator(mapx, mapy, PIT_AddLineIntercepts)) + return false; // early out + } + + if (flags & PT_ADDTHINGS) + { + if (!P_BlockThingsIterator(mapx, mapy, PIT_AddThingIntercepts)) + return false; // early out + } + + if (mapx == xt2 && mapy == yt2) + { + break; + } + + if ((yintercept >> FRACBITS) == mapy) + { + yintercept += ystep; + mapx += mapxstep; + } + else if ((xintercept >> FRACBITS) == mapx) + { + xintercept += xstep; + mapy += mapystep; + } } // go through the sorted list - return P_TraverseIntercepts ( trav, FRACUNIT ); + return P_TraverseIntercepts(trav, FRACUNIT); } diff --git a/src/doom/p_mobj.c b/src/doom/p_mobj.c index 7b130b1fd5..20668adf40 100644 --- a/src/doom/p_mobj.c +++ b/src/doom/p_mobj.c @@ -218,14 +218,12 @@ void P_XYMovement(mobj_t *mo) } } - if (mo->momx > -STOPSPEED && mo->momx < STOPSPEED && - mo->momy > -STOPSPEED && mo->momy < STOPSPEED && - (!player || - (player->cmd.forwardmove == 0 && player->cmd.sidemove == 0))) + if (mo->momx > -STOPSPEED && mo->momx < STOPSPEED && mo->momy > -STOPSPEED && + mo->momy < STOPSPEED && + (!player || (player->cmd.forwardmove == 0 && player->cmd.sidemove == 0))) { // if in a walking frame, stop moving - if (player && - (unsigned) ((player->mo->state - states) - S_PLAY_RUN1) < 4) + if (player && (unsigned) ((player->mo->state - states) - S_PLAY_RUN1) < 4) P_SetMobjState(player->mo, S_PLAY); mo->momx = 0; @@ -251,8 +249,7 @@ void P_ZMovement(mobj_t *mo) { mo->player->viewheight -= mo->floorz - mo->z; - mo->player->deltaviewheight = - (VIEWHEIGHT - mo->player->viewheight) >> 3; + mo->player->deltaviewheight = (VIEWHEIGHT - mo->player->viewheight) >> 3; } // adjust height @@ -263,8 +260,7 @@ void P_ZMovement(mobj_t *mo) // float down towards target if too close if (!(mo->flags & MF_SKULLFLY) && !(mo->flags & MF_INFLOAT)) { - dist = - P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y); + dist = P_AproxDistance(mo->x - mo->target->x, mo->y - mo->target->y); delta = (mo->target->z + (mo->height >> 1)) - mo->z; @@ -359,8 +355,7 @@ void P_NightmareRespawn(mobj_t *mobj) // spawn a teleport fog at old spot // because of removal of the body? - mo = P_SpawnMobj(mobj->x, mobj->y, mobj->subsector->sector->floorheight, - MT_TFOG); + mo = P_SpawnMobj(mobj->x, mobj->y, mobj->subsector->sector->floorheight, MT_TFOG); // initiate teleport sound S_StartSound(mo, sfx_telept); @@ -749,8 +744,8 @@ void P_SpawnMapThing(mapthing_t *mthing) break; if (i == NUMMOBJTYPES) - I_Error("P_SpawnMapThing: Unknown type %i at (%i, %i)", mthing->type, - mthing->x, mthing->y); + I_Error("P_SpawnMapThing: Unknown type %i at (%i, %i)", mthing->type, mthing->x, + mthing->y); // don't spawn keycards and players in deathmatch if (deathmatch && mobjinfo[i].flags & MF_NOTDMATCH) diff --git a/src/doom/p_plats.c b/src/doom/p_plats.c index 9e773d55cb..fa79ca89e4 100644 --- a/src/doom/p_plats.c +++ b/src/doom/p_plats.c @@ -35,88 +35,83 @@ #include "sounds.h" -plat_t* activeplats[MAXPLATS]; - +plat_t *activeplats[MAXPLATS]; // // Move a plat up and down // -void T_PlatRaise(plat_t* plat) +void T_PlatRaise(plat_t *plat) { - result_e res; - - switch(plat->status) + result_e res; + + switch (plat->status) { - case up: - res = T_MovePlane(plat->sector, - plat->speed, - plat->high, - plat->crush,0,1); - - if (plat->type == raiseAndChange - || plat->type == raiseToNearestAndChange) - { - if (!(leveltime&7)) - S_StartSound(&plat->sector->soundorg, sfx_stnmov); - } - - - if (res == crushed && (!plat->crush)) - { - plat->count = plat->wait; - plat->status = down; - S_StartSound(&plat->sector->soundorg, sfx_pstart); - } - else - { - if (res == pastdest) - { - plat->count = plat->wait; - plat->status = waiting; - S_StartSound(&plat->sector->soundorg, sfx_pstop); - - switch(plat->type) - { - case blazeDWUS: - case downWaitUpStay: - P_RemoveActivePlat(plat); - break; - - case raiseAndChange: - case raiseToNearestAndChange: - P_RemoveActivePlat(plat); - break; - - default: - break; - } - } - } - break; - - case down: - res = T_MovePlane(plat->sector,plat->speed,plat->low,false,0,-1); - - if (res == pastdest) - { - plat->count = plat->wait; - plat->status = waiting; - S_StartSound(&plat->sector->soundorg,sfx_pstop); - } - break; - - case waiting: - if (!--plat->count) - { - if (plat->sector->floorheight == plat->low) - plat->status = up; - else - plat->status = down; - S_StartSound(&plat->sector->soundorg,sfx_pstart); - } - case in_stasis: - break; + case up: + res = T_MovePlane(plat->sector, plat->speed, plat->high, plat->crush, 0, 1); + + if (plat->type == raiseAndChange || plat->type == raiseToNearestAndChange) + { + if (!(leveltime & 7)) + S_StartSound(&plat->sector->soundorg, sfx_stnmov); + } + + + if (res == crushed && (!plat->crush)) + { + plat->count = plat->wait; + plat->status = down; + S_StartSound(&plat->sector->soundorg, sfx_pstart); + } + else + { + if (res == pastdest) + { + plat->count = plat->wait; + plat->status = waiting; + S_StartSound(&plat->sector->soundorg, sfx_pstop); + + switch (plat->type) + { + case blazeDWUS: + case downWaitUpStay: + P_RemoveActivePlat(plat); + break; + + case raiseAndChange: + case raiseToNearestAndChange: + P_RemoveActivePlat(plat); + break; + + default: + break; + } + } + } + break; + + case down: + res = T_MovePlane(plat->sector, plat->speed, plat->low, false, 0, -1); + + if (res == pastdest) + { + plat->count = plat->wait; + plat->status = waiting; + S_StartSound(&plat->sector->soundorg, sfx_pstop); + } + break; + + case waiting: + if (!--plat->count) + { + if (plat->sector->floorheight == plat->low) + plat->status = up; + else + plat->status = down; + S_StartSound(&plat->sector->soundorg, sfx_pstart); + } + case in_stasis: + break; } } @@ -125,180 +120,172 @@ void T_PlatRaise(plat_t* plat) // Do Platforms // "amount" is only used for SOME platforms. // -int -EV_DoPlat -( line_t* line, - plattype_e type, - int amount ) +int EV_DoPlat(line_t *line, plattype_e type, int amount) { - plat_t* plat; - int secnum; - int rtn; - sector_t* sec; - + plat_t *plat; + int secnum; + int rtn; + sector_t *sec; + secnum = -1; rtn = 0; - + // Activate all plats that are in_stasis - switch(type) + switch (type) { - case perpetualRaise: - P_ActivateInStasis(line->tag); - break; - - default: - break; + case perpetualRaise: + P_ActivateInStasis(line->tag); + break; + + default: + break; } - - while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0) + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) { - sec = §ors[secnum]; - - if (sec->specialdata) - continue; - - // Find lowest & highest floors around sector - rtn = 1; - plat = Z_Malloc( sizeof(*plat), PU_LEVSPEC, 0); - P_AddThinker(&plat->thinker); - - plat->type = type; - plat->sector = sec; - plat->sector->specialdata = plat; - plat->thinker.function.acp1 = (actionf_p1) T_PlatRaise; - plat->crush = false; - plat->tag = line->tag; - - switch(type) - { - case raiseToNearestAndChange: - plat->speed = PLATSPEED/2; - sec->floorpic = sides[line->sidenum[0]].sector->floorpic; - plat->high = P_FindNextHighestFloor(sec,sec->floorheight); - plat->wait = 0; - plat->status = up; - // NO MORE DAMAGE, IF APPLICABLE - sec->special = 0; - - S_StartSound(&sec->soundorg,sfx_stnmov); - break; - - case raiseAndChange: - plat->speed = PLATSPEED/2; - sec->floorpic = sides[line->sidenum[0]].sector->floorpic; - plat->high = sec->floorheight + amount*FRACUNIT; - plat->wait = 0; - plat->status = up; - - S_StartSound(&sec->soundorg,sfx_stnmov); - break; - - case downWaitUpStay: - plat->speed = PLATSPEED * 4; - plat->low = P_FindLowestFloorSurrounding(sec); - - if (plat->low > sec->floorheight) - plat->low = sec->floorheight; - - plat->high = sec->floorheight; - plat->wait = TICRATE*PLATWAIT; - plat->status = down; - S_StartSound(&sec->soundorg,sfx_pstart); - break; - - case blazeDWUS: - plat->speed = PLATSPEED * 8; - plat->low = P_FindLowestFloorSurrounding(sec); - - if (plat->low > sec->floorheight) - plat->low = sec->floorheight; - - plat->high = sec->floorheight; - plat->wait = TICRATE*PLATWAIT; - plat->status = down; - S_StartSound(&sec->soundorg,sfx_pstart); - break; - - case perpetualRaise: - plat->speed = PLATSPEED; - plat->low = P_FindLowestFloorSurrounding(sec); - - if (plat->low > sec->floorheight) - plat->low = sec->floorheight; - - plat->high = P_FindHighestFloorSurrounding(sec); - - if (plat->high < sec->floorheight) - plat->high = sec->floorheight; - - plat->wait = TICRATE*PLATWAIT; - plat->status = P_Random()&1; - - S_StartSound(&sec->soundorg,sfx_pstart); - break; - } - P_AddActivePlat(plat); + sec = §ors[secnum]; + + if (sec->specialdata) + continue; + + // Find lowest & highest floors around sector + rtn = 1; + plat = Z_Malloc(sizeof(*plat), PU_LEVSPEC, 0); + P_AddThinker(&plat->thinker); + + plat->type = type; + plat->sector = sec; + plat->sector->specialdata = plat; + plat->thinker.function.acp1 = (actionf_p1) T_PlatRaise; + plat->crush = false; + plat->tag = line->tag; + + switch (type) + { + case raiseToNearestAndChange: + plat->speed = PLATSPEED / 2; + sec->floorpic = sides[line->sidenum[0]].sector->floorpic; + plat->high = P_FindNextHighestFloor(sec, sec->floorheight); + plat->wait = 0; + plat->status = up; + // NO MORE DAMAGE, IF APPLICABLE + sec->special = 0; + + S_StartSound(&sec->soundorg, sfx_stnmov); + break; + + case raiseAndChange: + plat->speed = PLATSPEED / 2; + sec->floorpic = sides[line->sidenum[0]].sector->floorpic; + plat->high = sec->floorheight + amount * FRACUNIT; + plat->wait = 0; + plat->status = up; + + S_StartSound(&sec->soundorg, sfx_stnmov); + break; + + case downWaitUpStay: + plat->speed = PLATSPEED * 4; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = sec->floorheight; + plat->wait = TICRATE * PLATWAIT; + plat->status = down; + S_StartSound(&sec->soundorg, sfx_pstart); + break; + + case blazeDWUS: + plat->speed = PLATSPEED * 8; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = sec->floorheight; + plat->wait = TICRATE * PLATWAIT; + plat->status = down; + S_StartSound(&sec->soundorg, sfx_pstart); + break; + + case perpetualRaise: + plat->speed = PLATSPEED; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = P_FindHighestFloorSurrounding(sec); + + if (plat->high < sec->floorheight) + plat->high = sec->floorheight; + + plat->wait = TICRATE * PLATWAIT; + plat->status = P_Random() & 1; + + S_StartSound(&sec->soundorg, sfx_pstart); + break; + } + P_AddActivePlat(plat); } return rtn; } - void P_ActivateInStasis(int tag) { - int i; - - for (i = 0;i < MAXPLATS;i++) - if (activeplats[i] - && (activeplats[i])->tag == tag - && (activeplats[i])->status == in_stasis) - { - (activeplats[i])->status = (activeplats[i])->oldstatus; - (activeplats[i])->thinker.function.acp1 - = (actionf_p1) T_PlatRaise; - } + int i; + + for (i = 0; i < MAXPLATS; i++) + if (activeplats[i] && (activeplats[i])->tag == tag && + (activeplats[i])->status == in_stasis) + { + (activeplats[i])->status = (activeplats[i])->oldstatus; + (activeplats[i])->thinker.function.acp1 = (actionf_p1) T_PlatRaise; + } } -void EV_StopPlat(line_t* line) +void EV_StopPlat(line_t *line) { - int j; - - for (j = 0;j < MAXPLATS;j++) - if (activeplats[j] - && ((activeplats[j])->status != in_stasis) - && ((activeplats[j])->tag == line->tag)) - { - (activeplats[j])->oldstatus = (activeplats[j])->status; - (activeplats[j])->status = in_stasis; - (activeplats[j])->thinker.function.acv = (actionf_v)NULL; - } + int j; + + for (j = 0; j < MAXPLATS; j++) + if (activeplats[j] && ((activeplats[j])->status != in_stasis) && + ((activeplats[j])->tag == line->tag)) + { + (activeplats[j])->oldstatus = (activeplats[j])->status; + (activeplats[j])->status = in_stasis; + (activeplats[j])->thinker.function.acv = (actionf_v) NULL; + } } -void P_AddActivePlat(plat_t* plat) +void P_AddActivePlat(plat_t *plat) { - int i; - - for (i = 0;i < MAXPLATS;i++) - if (activeplats[i] == NULL) - { - activeplats[i] = plat; - return; - } - I_Error ("P_AddActivePlat: no more plats!"); + int i; + + for (i = 0; i < MAXPLATS; i++) + if (activeplats[i] == NULL) + { + activeplats[i] = plat; + return; + } + I_Error("P_AddActivePlat: no more plats!"); } -void P_RemoveActivePlat(plat_t* plat) +void P_RemoveActivePlat(plat_t *plat) { - int i; - for (i = 0;i < MAXPLATS;i++) - if (plat == activeplats[i]) - { - (activeplats[i])->sector->specialdata = NULL; - P_RemoveThinker(&(activeplats[i])->thinker); - activeplats[i] = NULL; - - return; - } - I_Error ("P_RemoveActivePlat: can't find plat!"); + int i; + for (i = 0; i < MAXPLATS; i++) + if (plat == activeplats[i]) + { + (activeplats[i])->sector->specialdata = NULL; + P_RemoveThinker(&(activeplats[i])->thinker); + activeplats[i] = NULL; + + return; + } + I_Error("P_RemoveActivePlat: can't find plat!"); } diff --git a/src/doom/p_pspr.c b/src/doom/p_pspr.c index cfaae96524..2674d4b576 100644 --- a/src/doom/p_pspr.c +++ b/src/doom/p_pspr.c @@ -33,113 +33,81 @@ #include "p_pspr.h" -#define LOWERSPEED FRACUNIT*6 -#define RAISESPEED FRACUNIT*6 - -#define WEAPONBOTTOM 128*FRACUNIT -#define WEAPONTOP 32*FRACUNIT +#define LOWERSPEED FRACUNIT * 6 +#define RAISESPEED FRACUNIT * 6 +#define WEAPONBOTTOM 128 * FRACUNIT +#define WEAPONTOP 32 * FRACUNIT // // P_SetPsprite // -void -P_SetPsprite -( player_t* player, - int position, - statenum_t stnum ) +void P_SetPsprite(player_t *player, int position, statenum_t stnum) { - pspdef_t* psp; - state_t* state; - + pspdef_t *psp; + state_t *state; + psp = &player->psprites[position]; - + do { - if (!stnum) - { - // object removed itself - psp->state = NULL; - break; - } - - state = &states[stnum]; - psp->state = state; - psp->tics = state->tics; // could be 0 - - if (state->misc1) - { - // coordinate set - psp->sx = state->misc1 << FRACBITS; - psp->sy = state->misc2 << FRACBITS; - } - - // Call action routine. - // Modified handling. - if (state->action.acp2) - { - state->action.acp2(player, psp); - if (!psp->state) - break; - } - - stnum = psp->state->nextstate; - + if (!stnum) + { + // object removed itself + psp->state = NULL; + break; + } + + state = &states[stnum]; + psp->state = state; + psp->tics = state->tics; // could be 0 + + if (state->misc1) + { + // coordinate set + psp->sx = state->misc1 << FRACBITS; + psp->sy = state->misc2 << FRACBITS; + } + + // Call action routine. + // Modified handling. + if (state->action.acp2) + { + state->action.acp2(player, psp); + if (!psp->state) + break; + } + + stnum = psp->state->nextstate; + } while (!psp->tics); // an initial state of 0 could cycle through } - -// -// P_CalcSwing -// -fixed_t swingx; -fixed_t swingy; - -void P_CalcSwing (player_t* player) -{ - fixed_t swing; - int angle; - - // OPTIMIZE: tablify this. - // A LUT would allow for different modes, - // and add flexibility. - - swing = player->bob; - - angle = (FINEANGLES/70*leveltime)&FINEMASK; - swingx = FixedMul ( swing, finesine[angle]); - - angle = (FINEANGLES/70*leveltime+FINEANGLES/2)&FINEMASK; - swingy = -FixedMul ( swingx, finesine[angle]); -} - - - // // P_BringUpWeapon // Starts bringing the pending weapon up // from the bottom of the screen. // Uses player // -void P_BringUpWeapon (player_t* player) +void P_BringUpWeapon(player_t *player) { - statenum_t newstate; - + statenum_t newstate; + if (player->pendingweapon == wp_nochange) - player->pendingweapon = player->readyweapon; - + player->pendingweapon = player->readyweapon; + if (player->pendingweapon == wp_chainsaw) - S_StartSound (player->mo, sfx_sawup); - + S_StartSound(player->mo, sfx_sawup); + newstate = weaponinfo[player->pendingweapon].upstate; player->pendingweapon = wp_nochange; player->psprites[ps_weapon].sy = WEAPONBOTTOM; - P_SetPsprite (player, ps_weapon, newstate); + P_SetPsprite(player, ps_weapon, newstate); } // @@ -147,109 +115,100 @@ void P_BringUpWeapon (player_t* player) // Returns true if there is enough ammo to shoot. // If not, selects the next weapon to use. // -boolean P_CheckAmmo (player_t* player) +boolean P_CheckAmmo(player_t *player) { - ammotype_t ammo; - int count; + ammotype_t ammo; + int count; ammo = weaponinfo[player->readyweapon].ammo; // Minimal amount for one shot varies. if (player->readyweapon == wp_bfg) - count = BFG_CELLS_PER_SHOT; + count = BFG_CELLS_PER_SHOT; else if (player->readyweapon == wp_supershotgun) - count = 2; // Double barrel. + count = 2; // Double barrel. else - count = 1; // Regular. + count = 1; // Regular. // Some do not need ammunition anyway. // Return if current ammunition sufficient. if (ammo == am_noammo || player->ammo[ammo] >= count) - return true; - + return true; + // Out of ammo, pick a weapon to change to. // Preferences are set here. do { - if (player->weaponowned[wp_plasma] && player->ammo[am_cell]) - { - player->pendingweapon = wp_plasma; - } - else if (player->weaponowned[wp_chaingun] - && player->ammo[am_clip]) - { - player->pendingweapon = wp_chaingun; - } - else if (player->weaponowned[wp_shotgun] - && player->ammo[am_shell]) - { - player->pendingweapon = wp_shotgun; - } - else if (player->ammo[am_clip]) - { - player->pendingweapon = wp_pistol; - } - else if (player->weaponowned[wp_chainsaw]) - { - player->pendingweapon = wp_chainsaw; - } - else if (player->weaponowned[wp_missile] - && player->ammo[am_misl]) - { - player->pendingweapon = wp_missile; - } - else if (player->weaponowned[wp_bfg] && player->ammo[am_cell]>40) - { - player->pendingweapon = wp_bfg; - } - else - { - // If everything fails. - player->pendingweapon = wp_fist; - } - + if (player->weaponowned[wp_plasma] && player->ammo[am_cell]) + { + player->pendingweapon = wp_plasma; + } + else if (player->weaponowned[wp_chaingun] && player->ammo[am_clip]) + { + player->pendingweapon = wp_chaingun; + } + else if (player->weaponowned[wp_shotgun] && player->ammo[am_shell]) + { + player->pendingweapon = wp_shotgun; + } + else if (player->ammo[am_clip]) + { + player->pendingweapon = wp_pistol; + } + else if (player->weaponowned[wp_chainsaw]) + { + player->pendingweapon = wp_chainsaw; + } + else if (player->weaponowned[wp_missile] && player->ammo[am_misl]) + { + player->pendingweapon = wp_missile; + } + else if (player->weaponowned[wp_bfg] && player->ammo[am_cell] > 40) + { + player->pendingweapon = wp_bfg; + } + else + { + // If everything fails. + player->pendingweapon = wp_fist; + } + } while (player->pendingweapon == wp_nochange); // Now set appropriate weapon overlay. - P_SetPsprite (player, - ps_weapon, - weaponinfo[player->readyweapon].downstate); + P_SetPsprite(player, ps_weapon, weaponinfo[player->readyweapon].downstate); - return false; + return false; } // // P_FireWeapon. // -void P_FireWeapon (player_t* player) +void P_FireWeapon(player_t *player) { - statenum_t newstate; - - if (!P_CheckAmmo (player)) - return; - - P_SetMobjState (player->mo, S_PLAY_ATK1); + statenum_t newstate; + + if (!P_CheckAmmo(player)) + return; + + P_SetMobjState(player->mo, S_PLAY_ATK1); newstate = weaponinfo[player->readyweapon].atkstate; - P_SetPsprite (player, ps_weapon, newstate); - P_NoiseAlert (player->mo, player->mo); + P_SetPsprite(player, ps_weapon, newstate); + P_NoiseAlert(player->mo, player->mo); } - // // P_DropWeapon // Player died, so put the weapon away. // -void P_DropWeapon (player_t* player) +void P_DropWeapon(player_t *player) { - P_SetPsprite (player, - ps_weapon, - weaponinfo[player->readyweapon].downstate); + P_SetPsprite(player, ps_weapon, weaponinfo[player->readyweapon].downstate); } - // // A_WeaponReady // The player can fire the weapon @@ -257,96 +216,84 @@ void P_DropWeapon (player_t* player) // Follows after getting weapon up, // or after previous attack/fire sequence. // -void -A_WeaponReady -( player_t* player, - pspdef_t* psp ) -{ - statenum_t newstate; - int angle; - +void A_WeaponReady(player_t *player, pspdef_t *psp) +{ + statenum_t newstate; + int angle; + // get out of attack state - if (player->mo->state == &states[S_PLAY_ATK1] - || player->mo->state == &states[S_PLAY_ATK2] ) + if (player->mo->state == &states[S_PLAY_ATK1] || + player->mo->state == &states[S_PLAY_ATK2]) { - P_SetMobjState (player->mo, S_PLAY); + P_SetMobjState(player->mo, S_PLAY); } - - if (player->readyweapon == wp_chainsaw - && psp->state == &states[S_SAW]) + + if (player->readyweapon == wp_chainsaw && psp->state == &states[S_SAW]) { - S_StartSound (player->mo, sfx_sawidl); + S_StartSound(player->mo, sfx_sawidl); } - + // check for change // if player is dead, put the weapon away if (player->pendingweapon != wp_nochange || !player->health) { - // change weapon - // (pending weapon should allready be validated) - newstate = weaponinfo[player->readyweapon].downstate; - P_SetPsprite (player, ps_weapon, newstate); - return; + // change weapon + // (pending weapon should allready be validated) + newstate = weaponinfo[player->readyweapon].downstate; + P_SetPsprite(player, ps_weapon, newstate); + return; } - + // check for fire // the missile launcher and bfg do not auto fire if (player->cmd.buttons & BT_ATTACK) { - if ( !player->attackdown - || (player->readyweapon != wp_missile - && player->readyweapon != wp_bfg) ) - { - player->attackdown = true; - P_FireWeapon (player); - return; - } + if (!player->attackdown || + (player->readyweapon != wp_missile && player->readyweapon != wp_bfg)) + { + player->attackdown = true; + P_FireWeapon(player); + return; + } } else - player->attackdown = false; - + player->attackdown = false; + // bob the weapon based on movement speed - angle = (128*leveltime)&FINEMASK; - psp->sx = FRACUNIT + FixedMul (player->bob, finecosine[angle]); - angle &= FINEANGLES/2-1; - psp->sy = WEAPONTOP + FixedMul (player->bob, finesine[angle]); + angle = (128 * leveltime) & FINEMASK; + psp->sx = FRACUNIT + FixedMul(player->bob, finecosine[angle]); + angle &= FINEANGLES / 2 - 1; + psp->sy = WEAPONTOP + FixedMul(player->bob, finesine[angle]); } - // // A_ReFire // The player can re-fire the weapon // without lowering it entirely. // -void A_ReFire -( player_t* player, - pspdef_t* psp ) +void A_ReFire(player_t *player, pspdef_t *psp) { - + // check for fire // (if a weaponchange is pending, let it go through instead) - if ( (player->cmd.buttons & BT_ATTACK) - && player->pendingweapon == wp_nochange - && player->health) + if ((player->cmd.buttons & BT_ATTACK) && player->pendingweapon == wp_nochange && + player->health) { - player->refire++; - P_FireWeapon (player); + player->refire++; + P_FireWeapon(player); } else { - player->refire = 0; - P_CheckAmmo (player); + player->refire = 0; + P_CheckAmmo(player); } } -void -A_CheckReload -( player_t* player, - pspdef_t* psp ) +void A_CheckReload(player_t *player, pspdef_t *psp) { - P_CheckAmmo (player); + P_CheckAmmo(player); #if 0 if (player->ammo[am_shell]<2) P_SetPsprite (player, ps_weapon, S_DSNR1); @@ -354,87 +301,75 @@ A_CheckReload } - // // A_Lower // Lowers current weapon, // and changes weapon at bottom. // -void -A_Lower -( player_t* player, - pspdef_t* psp ) -{ +void A_Lower(player_t *player, pspdef_t *psp) +{ psp->sy += LOWERSPEED; // Is already down. - if (psp->sy < WEAPONBOTTOM ) - return; + if (psp->sy < WEAPONBOTTOM) + return; // Player is dead. if (player->playerstate == PST_DEAD) { - psp->sy = WEAPONBOTTOM; + psp->sy = WEAPONBOTTOM; - // don't bring weapon back up - return; + // don't bring weapon back up + return; } - + // The old weapon has been lowered off the screen, // so change the weapon and start raising it if (!player->health) { - // Player is dead, so keep the weapon off screen. - P_SetPsprite (player, ps_weapon, S_NULL); - return; + // Player is dead, so keep the weapon off screen. + P_SetPsprite(player, ps_weapon, S_NULL); + return; } - - player->readyweapon = player->pendingweapon; - P_BringUpWeapon (player); + player->readyweapon = player->pendingweapon; + + P_BringUpWeapon(player); } // // A_Raise // -void -A_Raise -( player_t* player, - pspdef_t* psp ) +void A_Raise(player_t *player, pspdef_t *psp) { - statenum_t newstate; - + statenum_t newstate; + psp->sy -= RAISESPEED; - if (psp->sy > WEAPONTOP ) - return; - + if (psp->sy > WEAPONTOP) + return; + psp->sy = WEAPONTOP; - + // The weapon has been raised all the way, // so change to the ready state. newstate = weaponinfo[player->readyweapon].readystate; - P_SetPsprite (player, ps_weapon, newstate); + P_SetPsprite(player, ps_weapon, newstate); } - // // A_GunFlash // -void -A_GunFlash -( player_t* player, - pspdef_t* psp ) +void A_GunFlash(player_t *player, pspdef_t *psp) { - P_SetMobjState (player->mo, S_PLAY_ATK2); - P_SetPsprite (player,ps_flash,weaponinfo[player->readyweapon].flashstate); + P_SetMobjState(player->mo, S_PLAY_ATK2); + P_SetPsprite(player, ps_flash, weaponinfo[player->readyweapon].flashstate); } - // // WEAPON ATTACKS // @@ -443,33 +378,28 @@ A_GunFlash // // A_Punch // -void -A_Punch -( player_t* player, - pspdef_t* psp ) +void A_Punch(player_t *player, pspdef_t *psp) { - angle_t angle; - int damage; - int slope; - - damage = (P_Random ()%10+1)<<1; + angle_t angle; + int damage; + int slope; - if (player->powers[pw_strength]) - damage *= 10; + damage = (P_Random() % 10 + 1) << 1; + + if (player->powers[pw_strength]) + damage *= 10; angle = player->mo->angle; angle += P_SubRandom() << 18; - slope = P_AimLineAttack (player->mo, angle, MELEERANGE); - P_LineAttack (player->mo, angle, MELEERANGE, slope, damage); + slope = P_AimLineAttack(player->mo, angle, MELEERANGE); + P_LineAttack(player->mo, angle, MELEERANGE, slope, damage); // turn to face target if (linetarget) { - S_StartSound (player->mo, sfx_punch); - player->mo->angle = R_PointToAngle2 (player->mo->x, - player->mo->y, - linetarget->x, - linetarget->y); + S_StartSound(player->mo, sfx_punch); + player->mo->angle = + R_PointToAngle2(player->mo->x, player->mo->y, linetarget->x, linetarget->y); } } @@ -477,46 +407,42 @@ A_Punch // // A_Saw // -void -A_Saw -( player_t* player, - pspdef_t* psp ) +void A_Saw(player_t *player, pspdef_t *psp) { - angle_t angle; - int damage; - int slope; + angle_t angle; + int damage; + int slope; - damage = 2*(P_Random ()%10+1); + damage = 2 * (P_Random() % 10 + 1); angle = player->mo->angle; angle += P_SubRandom() << 18; - + // use meleerange + 1 se the puff doesn't skip the flash - slope = P_AimLineAttack (player->mo, angle, MELEERANGE+1); - P_LineAttack (player->mo, angle, MELEERANGE+1, slope, damage); + slope = P_AimLineAttack(player->mo, angle, MELEERANGE + 1); + P_LineAttack(player->mo, angle, MELEERANGE + 1, slope, damage); if (!linetarget) { - S_StartSound (player->mo, sfx_sawful); - return; + S_StartSound(player->mo, sfx_sawful); + return; } - S_StartSound (player->mo, sfx_sawhit); - + S_StartSound(player->mo, sfx_sawhit); + // turn to face target - angle = R_PointToAngle2 (player->mo->x, player->mo->y, - linetarget->x, linetarget->y); + angle = R_PointToAngle2(player->mo->x, player->mo->y, linetarget->x, linetarget->y); if (angle - player->mo->angle > ANG180) { - if ((signed int) (angle - player->mo->angle) < -ANG90/20) - player->mo->angle = angle + ANG90/21; - else - player->mo->angle -= ANG90/20; + if ((signed int) (angle - player->mo->angle) < -ANG90 / 20) + player->mo->angle = angle + ANG90 / 21; + else + player->mo->angle -= ANG90 / 20; } else { - if (angle - player->mo->angle > ANG90/20) - player->mo->angle = angle - ANG90/21; - else - player->mo->angle += ANG90/20; + if (angle - player->mo->angle > ANG90 / 20) + player->mo->angle = angle - ANG90 / 21; + else + player->mo->angle += ANG90 / 20; } player->mo->flags |= MF_JUSTATTACKED; } @@ -543,75 +469,62 @@ static void DecreaseAmmo(player_t *player, int ammonum, int amount) // // A_FireMissile // -void -A_FireMissile -( player_t* player, - pspdef_t* psp ) +void A_FireMissile(player_t *player, pspdef_t *psp) { DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - P_SpawnPlayerMissile (player->mo, MT_ROCKET); + P_SpawnPlayerMissile(player->mo, MT_ROCKET); } // // A_FireBFG // -void -A_FireBFG -( player_t* player, - pspdef_t* psp ) +void A_FireBFG(player_t *player, pspdef_t *psp) { - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, - BFG_CELLS_PER_SHOT); - P_SpawnPlayerMissile (player->mo, MT_BFG); + DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, BFG_CELLS_PER_SHOT); + P_SpawnPlayerMissile(player->mo, MT_BFG); } - // // A_FirePlasma // -void -A_FirePlasma -( player_t* player, - pspdef_t* psp ) +void A_FirePlasma(player_t *player, pspdef_t *psp) { DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate+(P_Random ()&1) ); + P_SetPsprite(player, ps_flash, + weaponinfo[player->readyweapon].flashstate + (P_Random() & 1)); - P_SpawnPlayerMissile (player->mo, MT_PLASMA); + P_SpawnPlayerMissile(player->mo, MT_PLASMA); } - // // P_BulletSlope // Sets a slope so a near miss is at aproximately // the height of the intended target // -fixed_t bulletslope; +fixed_t bulletslope; -void P_BulletSlope (mobj_t* mo) +void P_BulletSlope(mobj_t *mo) { - angle_t an; - + angle_t an; + // see which target is to be aimed at an = mo->angle; - bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT); + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); if (!linetarget) { - an += 1<<26; - bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT); - if (!linetarget) - { - an -= 2<<26; - bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT); - } + an += 1 << 26; + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); + if (!linetarget) + { + an -= 2 << 26; + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); + } } } @@ -619,106 +532,85 @@ void P_BulletSlope (mobj_t* mo) // // P_GunShot // -void -P_GunShot -( mobj_t* mo, - boolean accurate ) +void P_GunShot(mobj_t *mo, boolean accurate) { - angle_t angle; - int damage; - - damage = 5*(P_Random ()%3+1); + angle_t angle; + int damage; + + damage = 5 * (P_Random() % 3 + 1); angle = mo->angle; if (!accurate) - angle += P_SubRandom() << 18; + angle += P_SubRandom() << 18; - P_LineAttack (mo, angle, MISSILERANGE, bulletslope, damage); + P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage); } // // A_FirePistol // -void -A_FirePistol -( player_t* player, - pspdef_t* psp ) +void A_FirePistol(player_t *player, pspdef_t *psp) { - S_StartSound (player->mo, sfx_pistol); + S_StartSound(player->mo, sfx_pistol); - P_SetMobjState (player->mo, S_PLAY_ATK2); + P_SetMobjState(player->mo, S_PLAY_ATK2); DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); + P_SetPsprite(player, ps_flash, weaponinfo[player->readyweapon].flashstate); - P_BulletSlope (player->mo); - P_GunShot (player->mo, !player->refire); + P_BulletSlope(player->mo); + P_GunShot(player->mo, !player->refire); } // // A_FireShotgun // -void -A_FireShotgun -( player_t* player, - pspdef_t* psp ) +void A_FireShotgun(player_t *player, pspdef_t *psp) { - int i; - - S_StartSound (player->mo, sfx_shotgn); - P_SetMobjState (player->mo, S_PLAY_ATK2); + int i; + + S_StartSound(player->mo, sfx_shotgn); + P_SetMobjState(player->mo, S_PLAY_ATK2); DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); + P_SetPsprite(player, ps_flash, weaponinfo[player->readyweapon].flashstate); - P_BulletSlope (player->mo); - - for (i=0 ; i<7 ; i++) - P_GunShot (player->mo, false); -} + P_BulletSlope(player->mo); + for (i = 0; i < 7; i++) + P_GunShot(player->mo, false); +} // // A_FireShotgun2 // -void -A_FireShotgun2 -( player_t* player, - pspdef_t* psp ) +void A_FireShotgun2(player_t *player, pspdef_t *psp) { - int i; - angle_t angle; - int damage; - - - S_StartSound (player->mo, sfx_dshtgn); - P_SetMobjState (player->mo, S_PLAY_ATK2); + int i; + angle_t angle; + int damage; + + + S_StartSound(player->mo, sfx_dshtgn); + P_SetMobjState(player->mo, S_PLAY_ATK2); DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 2); - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); + P_SetPsprite(player, ps_flash, weaponinfo[player->readyweapon].flashstate); + + P_BulletSlope(player->mo); - P_BulletSlope (player->mo); - - for (i=0 ; i<20 ; i++) + for (i = 0; i < 20; i++) { - damage = 5*(P_Random ()%3+1); - angle = player->mo->angle; - angle += P_SubRandom() << ANGLETOFINESHIFT; - P_LineAttack (player->mo, - angle, - MISSILERANGE, - bulletslope + (P_SubRandom() << 5), damage); + damage = 5 * (P_Random() % 3 + 1); + angle = player->mo->angle; + angle += P_SubRandom() << ANGLETOFINESHIFT; + P_LineAttack(player->mo, angle, MISSILERANGE, bulletslope + (P_SubRandom() << 5), + damage); } } @@ -726,46 +618,40 @@ A_FireShotgun2 // // A_FireCGun // -void -A_FireCGun -( player_t* player, - pspdef_t* psp ) +void A_FireCGun(player_t *player, pspdef_t *psp) { - S_StartSound (player->mo, sfx_pistol); + S_StartSound(player->mo, sfx_pistol); if (!player->ammo[weaponinfo[player->readyweapon].ammo]) - return; - - P_SetMobjState (player->mo, S_PLAY_ATK2); + return; + + P_SetMobjState(player->mo, S_PLAY_ATK2); DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate - + psp->state - - &states[S_CHAIN1] ); + P_SetPsprite(player, ps_flash, + weaponinfo[player->readyweapon].flashstate + psp->state - + &states[S_CHAIN1]); - P_BulletSlope (player->mo); - - P_GunShot (player->mo, !player->refire); -} + P_BulletSlope(player->mo); + P_GunShot(player->mo, !player->refire); +} // // ? // -void A_Light0 (player_t *player, pspdef_t *psp) +void A_Light0(player_t *player, pspdef_t *psp) { player->extralight = 0; } -void A_Light1 (player_t *player, pspdef_t *psp) +void A_Light1(player_t *player, pspdef_t *psp) { player->extralight = 1; } -void A_Light2 (player_t *player, pspdef_t *psp) +void A_Light2(player_t *player, pspdef_t *psp) { player->extralight = 2; } @@ -775,35 +661,33 @@ void A_Light2 (player_t *player, pspdef_t *psp) // A_BFGSpray // Spawn a BFG explosion on every monster in view // -void A_BFGSpray (mobj_t* mo) +void A_BFGSpray(mobj_t *mo) { - int i; - int j; - int damage; - angle_t an; - + int i; + int j; + int damage; + angle_t an; + // offset angles from its attack angle - for (i=0 ; i<40 ; i++) + for (i = 0; i < 40; i++) { - an = mo->angle - ANG90/2 + ANG90/40*i; + an = mo->angle - ANG90 / 2 + ANG90 / 40 * i; - // mo->target is the originator (player) - // of the missile - P_AimLineAttack (mo->target, an, 16*64*FRACUNIT); + // mo->target is the originator (player) + // of the missile + P_AimLineAttack(mo->target, an, 16 * 64 * FRACUNIT); - if (!linetarget) - continue; + if (!linetarget) + continue; - P_SpawnMobj (linetarget->x, - linetarget->y, - linetarget->z + (linetarget->height>>2), - MT_EXTRABFG); - - damage = 0; - for (j=0;j<15;j++) - damage += (P_Random()&7) + 1; + P_SpawnMobj(linetarget->x, linetarget->y, + linetarget->z + (linetarget->height >> 2), MT_EXTRABFG); - P_DamageMobj (linetarget, mo->target,mo->target, damage); + damage = 0; + for (j = 0; j < 15; j++) + damage += (P_Random() & 7) + 1; + + P_DamageMobj(linetarget, mo->target, mo->target, damage); } } @@ -811,65 +695,57 @@ void A_BFGSpray (mobj_t* mo) // // A_BFGsound // -void -A_BFGsound -( player_t* player, - pspdef_t* psp ) +void A_BFGsound(player_t *player, pspdef_t *psp) { - S_StartSound (player->mo, sfx_bfg); + S_StartSound(player->mo, sfx_bfg); } - // // P_SetupPsprites // Called at start of level for each player. // -void P_SetupPsprites (player_t* player) +void P_SetupPsprites(player_t *player) { - int i; - + int i; + // remove all psprites - for (i=0 ; ipsprites[i].state = NULL; - + for (i = 0; i < NUMPSPRITES; i++) + player->psprites[i].state = NULL; + // spawn the gun player->pendingweapon = player->readyweapon; - P_BringUpWeapon (player); + P_BringUpWeapon(player); } - - // // P_MovePsprites // Called every tic by player thinking routine. // -void P_MovePsprites (player_t* player) +void P_MovePsprites(player_t *player) { - int i; - pspdef_t* psp; - + int i; + pspdef_t *psp; + psp = &player->psprites[0]; - for (i=0 ; istate) - { - // drop tic count and possibly change state - - // a -1 tic count never changes - if (psp->tics != -1) - { - psp->tics--; - if (!psp->tics) - P_SetPsprite (player, i, psp->state->nextstate); - } - } + // a null state means not active + if (psp->state) + { + // drop tic count and possibly change state + + // a -1 tic count never changes + if (psp->tics != -1) + { + psp->tics--; + if (!psp->tics) + P_SetPsprite(player, i, psp->state->nextstate); + } + } } - + player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx; player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy; } - - diff --git a/src/doom/p_saveg.c b/src/doom/p_saveg.c index 41df455951..21afffe7ed 100644 --- a/src/doom/p_saveg.c +++ b/src/doom/p_saveg.c @@ -37,7 +37,7 @@ int savegamelength; boolean savegame_error; // Get the filename of a temporary file to write the savegame to. After -// the file has been successfully saved, it will be renamed to the +// the file has been successfully saved, it will be renamed to the // real file. char *P_TempSaveGameFile(void) @@ -153,7 +153,7 @@ static void saveg_read_pad(void) padding = (4 - (pos & 3)) & 3; - for (i=0; iarmortype = saveg_read32(); // int powers[NUMPOWERS]; - for (i=0; ipowers[i] = saveg_read32(); } // boolean cards[NUMCARDS]; - for (i=0; icards[i] = saveg_read32(); } @@ -684,7 +684,7 @@ static void saveg_read_player_t(player_t *str) str->backpack = saveg_read32(); // int frags[MAXPLAYERS]; - for (i=0; ifrags[i] = saveg_read32(); } @@ -696,19 +696,19 @@ static void saveg_read_player_t(player_t *str) str->pendingweapon = saveg_read_enum(); // boolean weaponowned[NUMWEAPONS]; - for (i=0; iweaponowned[i] = saveg_read32(); } // int ammo[NUMAMMO]; - for (i=0; iammo[i] = saveg_read32(); } // int maxammo[NUMAMMO]; - for (i=0; imaxammo[i] = saveg_read32(); } @@ -756,7 +756,7 @@ static void saveg_read_player_t(player_t *str) str->colormap = saveg_read32(); // pspdef_t psprites[NUMPSPRITES]; - for (i=0; ipsprites[i]); } @@ -800,13 +800,13 @@ static void saveg_write_player_t(player_t *str) saveg_write32(str->armortype); // int powers[NUMPOWERS]; - for (i=0; ipowers[i]); } // boolean cards[NUMCARDS]; - for (i=0; icards[i]); } @@ -815,7 +815,7 @@ static void saveg_write_player_t(player_t *str) saveg_write32(str->backpack); // int frags[MAXPLAYERS]; - for (i=0; ifrags[i]); } @@ -827,19 +827,19 @@ static void saveg_write_player_t(player_t *str) saveg_write_enum(str->pendingweapon); // boolean weaponowned[NUMWEAPONS]; - for (i=0; iweaponowned[i]); } // int ammo[NUMAMMO]; - for (i=0; iammo[i]); } // int maxammo[NUMAMMO]; - for (i=0; imaxammo[i]); } @@ -887,7 +887,7 @@ static void saveg_write_player_t(player_t *str) saveg_write32(str->colormap); // pspdef_t psprites[NUMPSPRITES]; - for (i=0; ipsprites[i]); } @@ -1342,25 +1342,25 @@ static void saveg_write_glow_t(glow_t *str) void P_WriteSaveGameHeader(char *description) { - char name[VERSIONSIZE]; - int i; - - for (i=0; description[i] != '\0'; ++i) + char name[VERSIONSIZE]; + int i; + + for (i = 0; description[i] != '\0'; ++i) saveg_write8(description[i]); - for (; i> 16) & 0xff); @@ -1368,49 +1368,49 @@ void P_WriteSaveGameHeader(char *description) saveg_write8(leveltime & 0xff); } -// +// // Read the header for a savegame // boolean P_ReadSaveGameHeader(void) { - int i; - byte a, b, c; - char vcheck[VERSIONSIZE]; + int i; + byte a, b, c; + char vcheck[VERSIONSIZE]; char read_vcheck[VERSIONSIZE]; - - // skip the description field - for (i=0; ifloorheight >> FRACBITS); - saveg_write16(sec->ceilingheight >> FRACBITS); - saveg_write16(sec->floorpic); - saveg_write16(sec->ceilingpic); - saveg_write16(sec->lightlevel); - saveg_write16(sec->special); // needed? - saveg_write16(sec->tag); // needed? + saveg_write16(sec->floorheight >> FRACBITS); + saveg_write16(sec->ceilingheight >> FRACBITS); + saveg_write16(sec->floorpic); + saveg_write16(sec->ceilingpic); + saveg_write16(sec->lightlevel); + saveg_write16(sec->special); // needed? + saveg_write16(sec->tag); // needed? } - + // do lines - for (i=0, li = lines ; iflags); - saveg_write16(li->special); - saveg_write16(li->tag); - for (j=0 ; j<2 ; j++) - { - if (li->sidenum[j] == -1) - continue; - - si = &sides[li->sidenum[j]]; - - saveg_write16(si->textureoffset >> FRACBITS); - saveg_write16(si->rowoffset >> FRACBITS); - saveg_write16(si->toptexture); - saveg_write16(si->bottomtexture); - saveg_write16(si->midtexture); - } + saveg_write16(li->flags); + saveg_write16(li->special); + saveg_write16(li->tag); + for (j = 0; j < 2; j++) + { + if (li->sidenum[j] == -1) + continue; + + si = &sides[li->sidenum[j]]; + + saveg_write16(si->textureoffset >> FRACBITS); + saveg_write16(si->rowoffset >> FRACBITS); + saveg_write16(si->toptexture); + saveg_write16(si->bottomtexture); + saveg_write16(si->midtexture); + } } } - // // P_UnArchiveWorld // -void P_UnArchiveWorld (void) +void P_UnArchiveWorld(void) { - int i; - int j; - sector_t* sec; - line_t* li; - side_t* si; - + int i; + int j; + sector_t *sec; + line_t *li; + side_t *si; + // do sectors - for (i=0, sec = sectors ; ifloorheight = saveg_read16() << FRACBITS; - sec->ceilingheight = saveg_read16() << FRACBITS; - sec->floorpic = saveg_read16(); - sec->ceilingpic = saveg_read16(); - sec->lightlevel = saveg_read16(); - sec->special = saveg_read16(); // needed? - sec->tag = saveg_read16(); // needed? - sec->specialdata = 0; - sec->soundtarget = 0; + sec->floorheight = saveg_read16() << FRACBITS; + sec->ceilingheight = saveg_read16() << FRACBITS; + sec->floorpic = saveg_read16(); + sec->ceilingpic = saveg_read16(); + sec->lightlevel = saveg_read16(); + sec->special = saveg_read16(); // needed? + sec->tag = saveg_read16(); // needed? + sec->specialdata = 0; + sec->soundtarget = 0; } - + // do lines - for (i=0, li = lines ; iflags = saveg_read16(); - li->special = saveg_read16(); - li->tag = saveg_read16(); - for (j=0 ; j<2 ; j++) - { - if (li->sidenum[j] == -1) - continue; - si = &sides[li->sidenum[j]]; - si->textureoffset = saveg_read16() << FRACBITS; - si->rowoffset = saveg_read16() << FRACBITS; - si->toptexture = saveg_read16(); - si->bottomtexture = saveg_read16(); - si->midtexture = saveg_read16(); - } + li->flags = saveg_read16(); + li->special = saveg_read16(); + li->tag = saveg_read16(); + for (j = 0; j < 2; j++) + { + if (li->sidenum[j] == -1) + continue; + si = &sides[li->sidenum[j]]; + si->textureoffset = saveg_read16() << FRACBITS; + si->rowoffset = saveg_read16() << FRACBITS; + si->toptexture = saveg_read16(); + si->bottomtexture = saveg_read16(); + si->midtexture = saveg_read16(); + } } } - - - // // Thinkers // @@ -1585,23 +1580,23 @@ typedef enum // // P_ArchiveThinkers // -void P_ArchiveThinkers (void) +void P_ArchiveThinkers(void) { - thinker_t* th; + thinker_t *th; // save off the current thinkers - for (th = thinkercap.next ; th != &thinkercap ; th=th->next) + for (th = thinkercap.next; th != &thinkercap; th = th->next) { - if (th->function.acp1 == (actionf_p1)P_MobjThinker) - { + if (th->function.acp1 == (actionf_p1) P_MobjThinker) + { saveg_write8(tc_mobj); - saveg_write_pad(); + saveg_write_pad(); saveg_write_mobj_t((mobj_t *) th); - continue; - } - - // I_Error ("P_ArchiveThinkers: Unknown thinker function"); + continue; + } + + // I_Error ("P_ArchiveThinkers: Unknown thinker function"); } // add a terminating marker @@ -1609,62 +1604,59 @@ void P_ArchiveThinkers (void) } - // // P_UnArchiveThinkers // -void P_UnArchiveThinkers (void) +void P_UnArchiveThinkers(void) { - byte tclass; - thinker_t* currentthinker; - thinker_t* next; - mobj_t* mobj; - + byte tclass; + thinker_t *currentthinker; + thinker_t *next; + mobj_t *mobj; + // remove all the current thinkers currentthinker = thinkercap.next; while (currentthinker != &thinkercap) { - next = currentthinker->next; - - if (currentthinker->function.acp1 == (actionf_p1)P_MobjThinker) - P_RemoveMobj ((mobj_t *)currentthinker); - else - Z_Free (currentthinker); - - currentthinker = next; + next = currentthinker->next; + + if (currentthinker->function.acp1 == (actionf_p1) P_MobjThinker) + P_RemoveMobj((mobj_t *) currentthinker); + else + Z_Free(currentthinker); + + currentthinker = next; } - P_InitThinkers (); - + P_InitThinkers(); + // read in saved thinkers while (1) { - tclass = saveg_read8(); - switch (tclass) - { - case tc_end: - return; // end of list - - case tc_mobj: - saveg_read_pad(); - mobj = Z_Malloc (sizeof(*mobj), PU_LEVEL, NULL); - saveg_read_mobj_t(mobj); - - mobj->target = NULL; - mobj->tracer = NULL; - P_SetThingPosition (mobj); - mobj->info = &mobjinfo[mobj->type]; - mobj->floorz = mobj->subsector->sector->floorheight; - mobj->ceilingz = mobj->subsector->sector->ceilingheight; - mobj->thinker.function.acp1 = (actionf_p1)P_MobjThinker; - P_AddThinker (&mobj->thinker); - break; - - default: - I_Error ("Unknown tclass %i in savegame",tclass); - } - + tclass = saveg_read8(); + switch (tclass) + { + case tc_end: + return; // end of list + + case tc_mobj: + saveg_read_pad(); + mobj = Z_Malloc(sizeof(*mobj), PU_LEVEL, NULL); + saveg_read_mobj_t(mobj); + + mobj->target = NULL; + mobj->tracer = NULL; + P_SetThingPosition(mobj); + mobj->info = &mobjinfo[mobj->type]; + mobj->floorz = mobj->subsector->sector->floorheight; + mobj->ceilingz = mobj->subsector->sector->ceilingheight; + mobj->thinker.function.acp1 = (actionf_p1) P_MobjThinker; + P_AddThinker(&mobj->thinker); + break; + + default: + I_Error("Unknown tclass %i in savegame", tclass); + } } - } @@ -1682,8 +1674,7 @@ enum tc_glow, tc_endspecials -} specials_e; - +} specials_e; // @@ -1697,191 +1688,188 @@ enum // T_Glow, (glow_t: sector_t *), // T_PlatRaise, (plat_t: sector_t *), - active list // -void P_ArchiveSpecials (void) +void P_ArchiveSpecials(void) { - thinker_t* th; - int i; - + thinker_t *th; + int i; + // save off the current thinkers - for (th = thinkercap.next ; th != &thinkercap ; th=th->next) + for (th = thinkercap.next; th != &thinkercap; th = th->next) { - if (th->function.acv == (actionf_v)NULL) - { - for (i = 0; i < MAXCEILINGS;i++) - if (activeceilings[i] == (ceiling_t *)th) - break; - - if (ifunction.acv == (actionf_v) NULL) + { + for (i = 0; i < MAXCEILINGS; i++) + if (activeceilings[i] == (ceiling_t *) th) + break; + + if (i < MAXCEILINGS) + { saveg_write8(tc_ceiling); - saveg_write_pad(); + saveg_write_pad(); saveg_write_ceiling_t((ceiling_t *) th); - } - continue; - } - - if (th->function.acp1 == (actionf_p1)T_MoveCeiling) - { + } + continue; + } + + if (th->function.acp1 == (actionf_p1) T_MoveCeiling) + { saveg_write8(tc_ceiling); - saveg_write_pad(); + saveg_write_pad(); saveg_write_ceiling_t((ceiling_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_VerticalDoor) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_VerticalDoor) + { saveg_write8(tc_door); - saveg_write_pad(); + saveg_write_pad(); saveg_write_vldoor_t((vldoor_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_MoveFloor) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_MoveFloor) + { saveg_write8(tc_floor); - saveg_write_pad(); + saveg_write_pad(); saveg_write_floormove_t((floormove_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_PlatRaise) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_PlatRaise) + { saveg_write8(tc_plat); - saveg_write_pad(); + saveg_write_pad(); saveg_write_plat_t((plat_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_LightFlash) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_LightFlash) + { saveg_write8(tc_flash); - saveg_write_pad(); + saveg_write_pad(); saveg_write_lightflash_t((lightflash_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_StrobeFlash) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_StrobeFlash) + { saveg_write8(tc_strobe); - saveg_write_pad(); + saveg_write_pad(); saveg_write_strobe_t((strobe_t *) th); - continue; - } - - if (th->function.acp1 == (actionf_p1)T_Glow) - { + continue; + } + + if (th->function.acp1 == (actionf_p1) T_Glow) + { saveg_write8(tc_glow); - saveg_write_pad(); + saveg_write_pad(); saveg_write_glow_t((glow_t *) th); - continue; - } + continue; + } } - + // add a terminating marker saveg_write8(tc_endspecials); - } // // P_UnArchiveSpecials // -void P_UnArchiveSpecials (void) +void P_UnArchiveSpecials(void) { - byte tclass; - ceiling_t* ceiling; - vldoor_t* door; - floormove_t* floor; - plat_t* plat; - lightflash_t* flash; - strobe_t* strobe; - glow_t* glow; - - + byte tclass; + ceiling_t *ceiling; + vldoor_t *door; + floormove_t *floor; + plat_t *plat; + lightflash_t *flash; + strobe_t *strobe; + glow_t *glow; + + // read in saved thinkers while (1) { - tclass = saveg_read8(); - - switch (tclass) - { - case tc_endspecials: - return; // end of list - - case tc_ceiling: - saveg_read_pad(); - ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVEL, NULL); - saveg_read_ceiling_t(ceiling); - ceiling->sector->specialdata = ceiling; - - if (ceiling->thinker.function.acp1) - ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling; - - P_AddThinker (&ceiling->thinker); - P_AddActiveCeiling(ceiling); - break; - - case tc_door: - saveg_read_pad(); - door = Z_Malloc (sizeof(*door), PU_LEVEL, NULL); - saveg_read_vldoor_t(door); - door->sector->specialdata = door; - door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; - P_AddThinker (&door->thinker); - break; - - case tc_floor: - saveg_read_pad(); - floor = Z_Malloc (sizeof(*floor), PU_LEVEL, NULL); - saveg_read_floormove_t(floor); - floor->sector->specialdata = floor; - floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; - P_AddThinker (&floor->thinker); - break; - - case tc_plat: - saveg_read_pad(); - plat = Z_Malloc (sizeof(*plat), PU_LEVEL, NULL); - saveg_read_plat_t(plat); - plat->sector->specialdata = plat; - - if (plat->thinker.function.acp1) - plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise; - - P_AddThinker (&plat->thinker); - P_AddActivePlat(plat); - break; - - case tc_flash: - saveg_read_pad(); - flash = Z_Malloc (sizeof(*flash), PU_LEVEL, NULL); - saveg_read_lightflash_t(flash); - flash->thinker.function.acp1 = (actionf_p1)T_LightFlash; - P_AddThinker (&flash->thinker); - break; - - case tc_strobe: - saveg_read_pad(); - strobe = Z_Malloc (sizeof(*strobe), PU_LEVEL, NULL); - saveg_read_strobe_t(strobe); - strobe->thinker.function.acp1 = (actionf_p1)T_StrobeFlash; - P_AddThinker (&strobe->thinker); - break; - - case tc_glow: - saveg_read_pad(); - glow = Z_Malloc (sizeof(*glow), PU_LEVEL, NULL); - saveg_read_glow_t(glow); - glow->thinker.function.acp1 = (actionf_p1)T_Glow; - P_AddThinker (&glow->thinker); - break; - - default: - I_Error ("P_UnarchiveSpecials:Unknown tclass %i " - "in savegame",tclass); - } - - } + tclass = saveg_read8(); + switch (tclass) + { + case tc_endspecials: + return; // end of list + + case tc_ceiling: + saveg_read_pad(); + ceiling = Z_Malloc(sizeof(*ceiling), PU_LEVEL, NULL); + saveg_read_ceiling_t(ceiling); + ceiling->sector->specialdata = ceiling; + + if (ceiling->thinker.function.acp1) + ceiling->thinker.function.acp1 = (actionf_p1) T_MoveCeiling; + + P_AddThinker(&ceiling->thinker); + P_AddActiveCeiling(ceiling); + break; + + case tc_door: + saveg_read_pad(); + door = Z_Malloc(sizeof(*door), PU_LEVEL, NULL); + saveg_read_vldoor_t(door); + door->sector->specialdata = door; + door->thinker.function.acp1 = (actionf_p1) T_VerticalDoor; + P_AddThinker(&door->thinker); + break; + + case tc_floor: + saveg_read_pad(); + floor = Z_Malloc(sizeof(*floor), PU_LEVEL, NULL); + saveg_read_floormove_t(floor); + floor->sector->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1) T_MoveFloor; + P_AddThinker(&floor->thinker); + break; + + case tc_plat: + saveg_read_pad(); + plat = Z_Malloc(sizeof(*plat), PU_LEVEL, NULL); + saveg_read_plat_t(plat); + plat->sector->specialdata = plat; + + if (plat->thinker.function.acp1) + plat->thinker.function.acp1 = (actionf_p1) T_PlatRaise; + + P_AddThinker(&plat->thinker); + P_AddActivePlat(plat); + break; + + case tc_flash: + saveg_read_pad(); + flash = Z_Malloc(sizeof(*flash), PU_LEVEL, NULL); + saveg_read_lightflash_t(flash); + flash->thinker.function.acp1 = (actionf_p1) T_LightFlash; + P_AddThinker(&flash->thinker); + break; + + case tc_strobe: + saveg_read_pad(); + strobe = Z_Malloc(sizeof(*strobe), PU_LEVEL, NULL); + saveg_read_strobe_t(strobe); + strobe->thinker.function.acp1 = (actionf_p1) T_StrobeFlash; + P_AddThinker(&strobe->thinker); + break; + + case tc_glow: + saveg_read_pad(); + glow = Z_Malloc(sizeof(*glow), PU_LEVEL, NULL); + saveg_read_glow_t(glow); + glow->thinker.function.acp1 = (actionf_p1) T_Glow; + P_AddThinker(&glow->thinker); + break; + + default: + I_Error("P_UnarchiveSpecials:Unknown tclass %i " + "in savegame", + tclass); + } + } } - diff --git a/src/doom/p_setup.c b/src/doom/p_setup.c index 480b926247..f8f6743f8b 100644 --- a/src/doom/p_setup.c +++ b/src/doom/p_setup.c @@ -18,7 +18,6 @@ // - #include #include @@ -42,35 +41,35 @@ #include "m_misc.h" -void P_SpawnMapThing (mapthing_t* mthing); +void P_SpawnMapThing(mapthing_t *mthing); // // MAP related Lookup tables. // Store VERTEXES, LINEDEFS, SIDEDEFS, etc. // -int numvertexes; -vertex_t* vertexes; +int numvertexes; +vertex_t *vertexes; -int numsegs; -seg_t* segs; +int numsegs; +seg_t *segs; -int numsectors; -sector_t* sectors; +int numsectors; +sector_t *sectors; -int numsubsectors; -subsector_t* subsectors; +int numsubsectors; +subsector_t *subsectors; -int numnodes; -node_t* nodes; +int numnodes; +node_t *nodes; -int numlines; -line_t* lines; +int numlines; +line_t *lines; -int numsides; -side_t* sides; +int numsides; +side_t *sides; -static int totallines; +static int totallines; // BLOCKMAP // Created from axis aligned bounding box @@ -80,16 +79,16 @@ static int totallines; // by spatial subdivision in 2D. // // Blockmap size. -int bmapwidth; -int bmapheight; // size in mapblocks -short* blockmap; // int for larger maps +int bmapwidth; +int bmapheight; // size in mapblocks +short *blockmap; // int for larger maps // offsets in blockmap are from here -short* blockmaplump; +short *blockmaplump; // origin of block map -fixed_t bmaporgx; -fixed_t bmaporgy; +fixed_t bmaporgx; +fixed_t bmaporgy; // for thing chains -mobj_t** blocklinks; +mobj_t **blocklinks; // REJECT @@ -99,143 +98,108 @@ mobj_t** blocklinks; // Without special effect, this could be // used as a PVS lookup as well. // -byte* rejectmatrix; +byte *rejectmatrix; // Maintain single and multi player starting spots. -#define MAX_DEATHMATCH_STARTS 10 - -mapthing_t deathmatchstarts[MAX_DEATHMATCH_STARTS]; -mapthing_t* deathmatch_p; -mapthing_t playerstarts[MAXPLAYERS]; -boolean playerstartsingame[MAXPLAYERS]; - - +#define MAX_DEATHMATCH_STARTS 10 +mapthing_t deathmatchstarts[MAX_DEATHMATCH_STARTS]; +mapthing_t *deathmatch_p; +mapthing_t playerstarts[MAXPLAYERS]; +boolean playerstartsingame[MAXPLAYERS]; // // P_LoadVertexes // -void P_LoadVertexes (int lump) +void P_LoadVertexes(int lump) { - byte* data; - int i; - mapvertex_t* ml; - vertex_t* li; + byte *data; + int i; + mapvertex_t *ml; + vertex_t *li; // Determine number of lumps: // total lump length / vertex record length. - numvertexes = W_LumpLength (lump) / sizeof(mapvertex_t); + numvertexes = W_LumpLength(lump) / sizeof(mapvertex_t); // Allocate zone memory for buffer. - vertexes = Z_Malloc (numvertexes*sizeof(vertex_t),PU_LEVEL,0); + vertexes = Z_Malloc(numvertexes * sizeof(vertex_t), PU_LEVEL, 0); // Load data into cache. - data = W_CacheLumpNum (lump, PU_STATIC); - - ml = (mapvertex_t *)data; + data = W_CacheLumpNum(lump, PU_STATIC); + + ml = (mapvertex_t *) data; li = vertexes; // Copy and convert vertex coordinates, // internal representation as fixed. - for (i=0 ; ix = SHORT(ml->x)<y = SHORT(ml->y)<x = SHORT(ml->x) << FRACBITS; + li->y = SHORT(ml->y) << FRACBITS; } // Free buffer memory. W_ReleaseLumpNum(lump); } -// -// GetSectorAtNullAddress -// -sector_t* GetSectorAtNullAddress(void) -{ - static boolean null_sector_is_initialized = false; - static sector_t null_sector; - - if (!null_sector_is_initialized) - { - memset(&null_sector, 0, sizeof(null_sector)); - I_GetMemoryValue(0, &null_sector.floorheight, 4); - I_GetMemoryValue(4, &null_sector.ceilingheight, 4); - null_sector_is_initialized = true; - } - - return &null_sector; -} - // // P_LoadSegs // -void P_LoadSegs (int lump) +void P_LoadSegs(int lump) { - byte* data; - int i; - mapseg_t* ml; - seg_t* li; - line_t* ldef; - int linedef; - int side; - int sidenum; - - numsegs = W_LumpLength (lump) / sizeof(mapseg_t); - segs = Z_Malloc (numsegs*sizeof(seg_t),PU_LEVEL,0); - memset (segs, 0, numsegs*sizeof(seg_t)); - data = W_CacheLumpNum (lump,PU_STATIC); - - ml = (mapseg_t *)data; + byte *data; + int i; + mapseg_t *ml; + seg_t *li; + line_t *ldef; + int linedef; + int side; + int sidenum; + + numsegs = W_LumpLength(lump) / sizeof(mapseg_t); + segs = Z_Malloc(numsegs * sizeof(seg_t), PU_LEVEL, 0); + memset(segs, 0, numsegs * sizeof(seg_t)); + data = W_CacheLumpNum(lump, PU_STATIC); + + ml = (mapseg_t *) data; li = segs; - for (i=0 ; iv1 = &vertexes[SHORT(ml->v1)]; - li->v2 = &vertexes[SHORT(ml->v2)]; + li->v1 = &vertexes[SHORT(ml->v1)]; + li->v2 = &vertexes[SHORT(ml->v2)]; - li->angle = (SHORT(ml->angle))<offset = (SHORT(ml->offset))<linedef); - ldef = &lines[linedef]; - li->linedef = ldef; - side = SHORT(ml->side); + li->angle = (SHORT(ml->angle)) << FRACBITS; + li->offset = (SHORT(ml->offset)) << FRACBITS; + linedef = SHORT(ml->linedef); + ldef = &lines[linedef]; + li->linedef = ldef; + side = SHORT(ml->side); // e6y: check for wrong indexes - if ((unsigned)ldef->sidenum[side] >= (unsigned)numsides) + if ((unsigned) ldef->sidenum[side] >= (unsigned) numsides) { - I_Error("P_LoadSegs: linedef %d for seg %d references a non-existent sidedef %d", - linedef, i, (unsigned)ldef->sidenum[side]); + I_Error("P_LoadSegs: linedef %d for seg %d references a " + "non-existent sidedef %d", + linedef, i, (unsigned) ldef->sidenum[side]); } - li->sidedef = &sides[ldef->sidenum[side]]; - li->frontsector = sides[ldef->sidenum[side]].sector; + li->sidedef = &sides[ldef->sidenum[side]]; + li->frontsector = sides[ldef->sidenum[side]].sector; - if (ldef-> flags & ML_TWOSIDED) + if (ldef->flags & ML_TWOSIDED) { sidenum = ldef->sidenum[side ^ 1]; - - // If the sidenum is out of range, this may be a "glass hack" - // impassible window. Point at side #0 (this may not be - // the correct Vanilla behavior; however, it seems to work for - // OTTAWAU.WAD, which is the one place I've seen this trick - // used). - - if (sidenum < 0 || sidenum >= numsides) - { - li->backsector = GetSectorAtNullAddress(); - } - else - { - li->backsector = sides[sidenum].sector; - } + li->backsector = sides[sidenum].sector; } else { - li->backsector = 0; + li->backsector = 0; } } - + W_ReleaseLumpNum(lump); } @@ -243,61 +207,60 @@ void P_LoadSegs (int lump) // // P_LoadSubsectors // -void P_LoadSubsectors (int lump) +void P_LoadSubsectors(int lump) { - byte* data; - int i; - mapsubsector_t* ms; - subsector_t* ss; - - numsubsectors = W_LumpLength (lump) / sizeof(mapsubsector_t); - subsectors = Z_Malloc (numsubsectors*sizeof(subsector_t),PU_LEVEL,0); - data = W_CacheLumpNum (lump,PU_STATIC); - - ms = (mapsubsector_t *)data; - memset (subsectors,0, numsubsectors*sizeof(subsector_t)); + byte *data; + int i; + mapsubsector_t *ms; + subsector_t *ss; + + numsubsectors = W_LumpLength(lump) / sizeof(mapsubsector_t); + subsectors = Z_Malloc(numsubsectors * sizeof(subsector_t), PU_LEVEL, 0); + data = W_CacheLumpNum(lump, PU_STATIC); + + ms = (mapsubsector_t *) data; + memset(subsectors, 0, numsubsectors * sizeof(subsector_t)); ss = subsectors; - - for (i=0 ; inumlines = SHORT(ms->numsegs); - ss->firstline = SHORT(ms->firstseg); + ss->numlines = SHORT(ms->numsegs); + ss->firstline = SHORT(ms->firstseg); } - + W_ReleaseLumpNum(lump); } - // // P_LoadSectors // -void P_LoadSectors (int lump) +void P_LoadSectors(int lump) { - byte* data; - int i; - mapsector_t* ms; - sector_t* ss; - - numsectors = W_LumpLength (lump) / sizeof(mapsector_t); - sectors = Z_Malloc (numsectors*sizeof(sector_t),PU_LEVEL,0); - memset (sectors, 0, numsectors*sizeof(sector_t)); - data = W_CacheLumpNum (lump,PU_STATIC); - - ms = (mapsector_t *)data; + byte *data; + int i; + mapsector_t *ms; + sector_t *ss; + + numsectors = W_LumpLength(lump) / sizeof(mapsector_t); + sectors = Z_Malloc(numsectors * sizeof(sector_t), PU_LEVEL, 0); + memset(sectors, 0, numsectors * sizeof(sector_t)); + data = W_CacheLumpNum(lump, PU_STATIC); + + ms = (mapsector_t *) data; ss = sectors; - for (i=0 ; ifloorheight = SHORT(ms->floorheight)<ceilingheight = SHORT(ms->ceilingheight)<floorpic = R_FlatNumForName(ms->floorpic); - ss->ceilingpic = R_FlatNumForName(ms->ceilingpic); - ss->lightlevel = SHORT(ms->lightlevel); - ss->special = SHORT(ms->special); - ss->tag = SHORT(ms->tag); - ss->thinglist = NULL; + ss->floorheight = SHORT(ms->floorheight) << FRACBITS; + ss->ceilingheight = SHORT(ms->ceilingheight) << FRACBITS; + ss->floorpic = R_FlatNumForName(ms->floorpic); + ss->ceilingpic = R_FlatNumForName(ms->ceilingpic); + ss->lightlevel = SHORT(ms->lightlevel); + ss->special = SHORT(ms->special); + ss->tag = SHORT(ms->tag); + ss->thinglist = NULL; } - + W_ReleaseLumpNum(lump); } @@ -305,36 +268,36 @@ void P_LoadSectors (int lump) // // P_LoadNodes // -void P_LoadNodes (int lump) +void P_LoadNodes(int lump) { - byte* data; - int i; - int j; - int k; - mapnode_t* mn; - node_t* no; - - numnodes = W_LumpLength (lump) / sizeof(mapnode_t); - nodes = Z_Malloc (numnodes*sizeof(node_t),PU_LEVEL,0); - data = W_CacheLumpNum (lump,PU_STATIC); - - mn = (mapnode_t *)data; + byte *data; + int i; + int j; + int k; + mapnode_t *mn; + node_t *no; + + numnodes = W_LumpLength(lump) / sizeof(mapnode_t); + nodes = Z_Malloc(numnodes * sizeof(node_t), PU_LEVEL, 0); + data = W_CacheLumpNum(lump, PU_STATIC); + + mn = (mapnode_t *) data; no = nodes; - - for (i=0 ; ix = SHORT(mn->x)<y = SHORT(mn->y)<dx = SHORT(mn->dx)<dy = SHORT(mn->dy)<children[j] = SHORT(mn->children[j]); - for (k=0 ; k<4 ; k++) - no->bbox[j][k] = SHORT(mn->bbox[j][k])<x = SHORT(mn->x) << FRACBITS; + no->y = SHORT(mn->y) << FRACBITS; + no->dx = SHORT(mn->dx) << FRACBITS; + no->dy = SHORT(mn->dy) << FRACBITS; + for (j = 0; j < 2; j++) + { + no->children[j] = SHORT(mn->children[j]); + for (k = 0; k < 4; k++) + no->bbox[j][k] = SHORT(mn->bbox[j][k]) << FRACBITS; + } } - + W_ReleaseLumpNum(lump); } @@ -342,28 +305,28 @@ void P_LoadNodes (int lump) // // P_LoadThings // -void P_LoadThings (int lump) +void P_LoadThings(int lump) { - byte *data; - int i; - mapthing_t *mt; - mapthing_t spawnthing; - int numthings; - - data = W_CacheLumpNum (lump,PU_STATIC); - numthings = W_LumpLength (lump) / sizeof(mapthing_t); - - mt = (mapthing_t *)data; - for (i=0 ; ix); - spawnthing.y = SHORT(mt->y); - spawnthing.angle = SHORT(mt->angle); - spawnthing.type = SHORT(mt->type); - spawnthing.options = SHORT(mt->options); - - P_SpawnMapThing(&spawnthing); + // Spawn all the stuff. + spawnthing.x = SHORT(mt->x); + spawnthing.y = SHORT(mt->y); + spawnthing.angle = SHORT(mt->angle); + spawnthing.type = SHORT(mt->type); + spawnthing.options = SHORT(mt->options); + + P_SpawnMapThing(&spawnthing); } if (!deathmatch) @@ -372,7 +335,9 @@ void P_LoadThings (int lump) { if (playeringame[i] && !playerstartsingame[i]) { - I_Error("P_LoadThings: Player %d start missing (vanilla crashes here)", i + 1); + I_Error("P_LoadThings: Player %d start missing (vanilla " + "crashes here)", + i + 1); } playerstartsingame[i] = false; } @@ -386,78 +351,78 @@ void P_LoadThings (int lump) // P_LoadLineDefs // Also counts secret lines for intermissions. // -void P_LoadLineDefs (int lump) +void P_LoadLineDefs(int lump) { - byte* data; - int i; - maplinedef_t* mld; - line_t* ld; - vertex_t* v1; - vertex_t* v2; - - numlines = W_LumpLength (lump) / sizeof(maplinedef_t); - lines = Z_Malloc (numlines*sizeof(line_t),PU_LEVEL,0); - memset (lines, 0, numlines*sizeof(line_t)); - data = W_CacheLumpNum (lump,PU_STATIC); - - mld = (maplinedef_t *)data; + byte *data; + int i; + maplinedef_t *mld; + line_t *ld; + vertex_t *v1; + vertex_t *v2; + + numlines = W_LumpLength(lump) / sizeof(maplinedef_t); + lines = Z_Malloc(numlines * sizeof(line_t), PU_LEVEL, 0); + memset(lines, 0, numlines * sizeof(line_t)); + data = W_CacheLumpNum(lump, PU_STATIC); + + mld = (maplinedef_t *) data; ld = lines; - for (i=0 ; iflags = SHORT(mld->flags); - ld->special = SHORT(mld->special); - ld->tag = SHORT(mld->tag); - v1 = ld->v1 = &vertexes[SHORT(mld->v1)]; - v2 = ld->v2 = &vertexes[SHORT(mld->v2)]; - ld->dx = v2->x - v1->x; - ld->dy = v2->y - v1->y; - - if (!ld->dx) - ld->slopetype = ST_VERTICAL; - else if (!ld->dy) - ld->slopetype = ST_HORIZONTAL; - else - { - if (FixedDiv (ld->dy , ld->dx) > 0) - ld->slopetype = ST_POSITIVE; - else - ld->slopetype = ST_NEGATIVE; - } - - if (v1->x < v2->x) - { - ld->bbox[BOXLEFT] = v1->x; - ld->bbox[BOXRIGHT] = v2->x; - } - else - { - ld->bbox[BOXLEFT] = v2->x; - ld->bbox[BOXRIGHT] = v1->x; - } - - if (v1->y < v2->y) - { - ld->bbox[BOXBOTTOM] = v1->y; - ld->bbox[BOXTOP] = v2->y; - } - else - { - ld->bbox[BOXBOTTOM] = v2->y; - ld->bbox[BOXTOP] = v1->y; - } - - ld->sidenum[0] = SHORT(mld->sidenum[0]); - ld->sidenum[1] = SHORT(mld->sidenum[1]); - - if (ld->sidenum[0] != -1) - ld->frontsector = sides[ld->sidenum[0]].sector; - else - ld->frontsector = 0; - - if (ld->sidenum[1] != -1) - ld->backsector = sides[ld->sidenum[1]].sector; - else - ld->backsector = 0; + ld->flags = SHORT(mld->flags); + ld->special = SHORT(mld->special); + ld->tag = SHORT(mld->tag); + v1 = ld->v1 = &vertexes[SHORT(mld->v1)]; + v2 = ld->v2 = &vertexes[SHORT(mld->v2)]; + ld->dx = v2->x - v1->x; + ld->dy = v2->y - v1->y; + + if (!ld->dx) + ld->slopetype = ST_VERTICAL; + else if (!ld->dy) + ld->slopetype = ST_HORIZONTAL; + else + { + if (FixedDiv(ld->dy, ld->dx) > 0) + ld->slopetype = ST_POSITIVE; + else + ld->slopetype = ST_NEGATIVE; + } + + if (v1->x < v2->x) + { + ld->bbox[BOXLEFT] = v1->x; + ld->bbox[BOXRIGHT] = v2->x; + } + else + { + ld->bbox[BOXLEFT] = v2->x; + ld->bbox[BOXRIGHT] = v1->x; + } + + if (v1->y < v2->y) + { + ld->bbox[BOXBOTTOM] = v1->y; + ld->bbox[BOXTOP] = v2->y; + } + else + { + ld->bbox[BOXBOTTOM] = v2->y; + ld->bbox[BOXTOP] = v1->y; + } + + ld->sidenum[0] = SHORT(mld->sidenum[0]); + ld->sidenum[1] = SHORT(mld->sidenum[1]); + + if (ld->sidenum[0] != -1) + ld->frontsector = sides[ld->sidenum[0]].sector; + else + ld->frontsector = 0; + + if (ld->sidenum[1] != -1) + ld->backsector = sides[ld->sidenum[1]].sector; + else + ld->backsector = 0; } W_ReleaseLumpNum(lump); @@ -467,28 +432,28 @@ void P_LoadLineDefs (int lump) // // P_LoadSideDefs // -void P_LoadSideDefs (int lump) +void P_LoadSideDefs(int lump) { - byte* data; - int i; - mapsidedef_t* msd; - side_t* sd; - - numsides = W_LumpLength (lump) / sizeof(mapsidedef_t); - sides = Z_Malloc (numsides*sizeof(side_t),PU_LEVEL,0); - memset (sides, 0, numsides*sizeof(side_t)); - data = W_CacheLumpNum (lump,PU_STATIC); - - msd = (mapsidedef_t *)data; + byte *data; + int i; + mapsidedef_t *msd; + side_t *sd; + + numsides = W_LumpLength(lump) / sizeof(mapsidedef_t); + sides = Z_Malloc(numsides * sizeof(side_t), PU_LEVEL, 0); + memset(sides, 0, numsides * sizeof(side_t)); + data = W_CacheLumpNum(lump, PU_STATIC); + + msd = (mapsidedef_t *) data; sd = sides; - for (i=0 ; itextureoffset = SHORT(msd->textureoffset)<rowoffset = SHORT(msd->rowoffset)<toptexture = R_TextureNumForName(msd->toptexture); - sd->bottomtexture = R_TextureNumForName(msd->bottomtexture); - sd->midtexture = R_TextureNumForName(msd->midtexture); - sd->sector = §ors[SHORT(msd->sector)]; + sd->textureoffset = SHORT(msd->textureoffset) << FRACBITS; + sd->rowoffset = SHORT(msd->rowoffset) << FRACBITS; + sd->toptexture = R_TextureNumForName(msd->toptexture); + sd->bottomtexture = R_TextureNumForName(msd->bottomtexture); + sd->midtexture = R_TextureNumForName(msd->midtexture); + sd->sector = §ors[SHORT(msd->sector)]; } W_ReleaseLumpNum(lump); @@ -498,7 +463,7 @@ void P_LoadSideDefs (int lump) // // P_LoadBlockMap // -void P_LoadBlockMap (int lump) +void P_LoadBlockMap(int lump) { int i; int count; @@ -506,25 +471,25 @@ void P_LoadBlockMap (int lump) lumplen = W_LumpLength(lump); count = lumplen / 2; - + blockmaplump = Z_Malloc(lumplen, PU_LEVEL, NULL); W_ReadLump(lump, blockmaplump); blockmap = blockmaplump + 4; // Swap all short integers to native byte ordering. - - for (i=0; ifirstline]; - ss->sector = seg->sidedef->sector; + seg = &segs[ss->firstline]; + ss->sector = seg->sidedef->sector; } // count number of lines in each sector li = lines; totallines = 0; - for (i=0 ; ifrontsector->linecount++; - - if (li->backsector && li->backsector != li->frontsector) - { - li->backsector->linecount++; - totallines++; - } + totallines++; + li->frontsector->linecount++; + + if (li->backsector && li->backsector != li->frontsector) + { + li->backsector->linecount++; + totallines++; + } } - // build line tables for each sector - linebuffer = Z_Malloc (totallines*sizeof(line_t *), PU_LEVEL, 0); + // build line tables for each sector + linebuffer = Z_Malloc(totallines * sizeof(line_t *), PU_LEVEL, 0); - for (i=0; ifrontsector != NULL) @@ -612,44 +576,43 @@ void P_GroupLines (void) ++sector->linecount; } } - + // Generate bounding boxes for sectors - + sector = sectors; - for (i=0 ; ilinecount; j++) - { + for (j = 0; j < sector->linecount; j++) + { li = sector->lines[j]; - M_AddToBox (bbox, li->v1->x, li->v1->y); - M_AddToBox (bbox, li->v2->x, li->v2->y); - } - - // set the degenmobj_t to the middle of the bounding box - sector->soundorg.x = (bbox[BOXRIGHT]+bbox[BOXLEFT])/2; - sector->soundorg.y = (bbox[BOXTOP]+bbox[BOXBOTTOM])/2; - - // adjust bounding box to map blocks - block = (bbox[BOXTOP]-bmaporgy+MAXRADIUS)>>MAPBLOCKSHIFT; - block = block >= bmapheight ? bmapheight-1 : block; - sector->blockbox[BOXTOP]=block; - - block = (bbox[BOXBOTTOM]-bmaporgy-MAXRADIUS)>>MAPBLOCKSHIFT; - block = block < 0 ? 0 : block; - sector->blockbox[BOXBOTTOM]=block; - - block = (bbox[BOXRIGHT]-bmaporgx+MAXRADIUS)>>MAPBLOCKSHIFT; - block = block >= bmapwidth ? bmapwidth-1 : block; - sector->blockbox[BOXRIGHT]=block; - - block = (bbox[BOXLEFT]-bmaporgx-MAXRADIUS)>>MAPBLOCKSHIFT; - block = block < 0 ? 0 : block; - sector->blockbox[BOXLEFT]=block; + M_AddToBox(bbox, li->v1->x, li->v1->y); + M_AddToBox(bbox, li->v2->x, li->v2->y); + } + + // set the degenmobj_t to the middle of the bounding box + sector->soundorg.x = (bbox[BOXRIGHT] + bbox[BOXLEFT]) / 2; + sector->soundorg.y = (bbox[BOXTOP] + bbox[BOXBOTTOM]) / 2; + + // adjust bounding box to map blocks + block = (bbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT; + block = block >= bmapheight ? bmapheight - 1 : block; + sector->blockbox[BOXTOP] = block; + + block = (bbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT; + block = block < 0 ? 0 : block; + sector->blockbox[BOXBOTTOM] = block; + + block = (bbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT; + block = block >= bmapwidth ? bmapwidth - 1 : block; + sector->blockbox[BOXRIGHT] = block; + + block = (bbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT; + block = block < 0 ? 0 : block; + sector->blockbox[BOXLEFT] = block; } - } // Pad the REJECT lump with extra data when the lump is too small, @@ -664,12 +627,11 @@ static void PadRejectArray(byte *array, unsigned int len) // Values to pad the REJECT array with: - unsigned int rejectpad[4] = - { - 0, // Size - 0, // Part of z_zone block header - 50, // PU_LEVEL - 0x1d4a11 // DOOM_CONST_ZONEID + unsigned int rejectpad[4] = { + 0, // Size + 0, // Part of z_zone block header + 50, // PU_LEVEL + 0x1d4a11 // DOOM_CONST_ZONEID }; rejectpad[0] = ((totallines * 4 + 3) & ~3) + 24; @@ -678,7 +640,7 @@ static void PadRejectArray(byte *array, unsigned int len) dest = array; - for (i=0; i> (byte_num * 8)) & 0xff; @@ -690,8 +652,8 @@ static void PadRejectArray(byte *array, unsigned int len) if (len > sizeof(rejectpad)) { - fprintf(stderr, "PadRejectArray: REJECT lump too short to pad! (%u > %i)\n", - len, (int) sizeof(rejectpad)); + fprintf(stderr, "PadRejectArray: REJECT lump too short to pad! (%u > %i)\n", len, + (int) sizeof(rejectpad)); // Pad remaining space with 0 (or 0xff, if specified on command line). @@ -742,39 +704,33 @@ lumpinfo_t *maplumpinfo; // // P_SetupLevel // -void -P_SetupLevel -( int episode, - int map, - int playermask, - skill_t skill) +void P_SetupLevel(int episode, int map, int playermask, skill_t skill) { - int i; - char lumpname[9]; - int lumpnum; - + int i; + char lumpname[9]; + int lumpnum; + totalkills = totalitems = totalsecret = wminfo.maxfrags = 0; wminfo.partime = 180; - for (i=0 ; id.line; - - // - // crosses a two sided line - // - P_LineOpening(li); - - if (openbottom >= opentop) // quick test for totally closed doors - return false; // stop - - if (li->frontsector->floorheight != li->backsector->floorheight) - { - slope = FixedDiv(openbottom - sightzstart, in->frac); - if (slope > bottomslope) - bottomslope = slope; - } - - if (li->frontsector->ceilingheight != li->backsector->ceilingheight) - { - slope = FixedDiv(opentop - sightzstart, in->frac); - if (slope < topslope) - topslope = slope; - } - - if (topslope <= bottomslope) - return false; // stop - - return true; // keep going -} - - // // P_DivlineSide // Returns side 0 (front), 1 (back), or 2 (on). @@ -144,8 +106,7 @@ fixed_t P_InterceptVector2(divline_t *v2, divline_t *v1) return 0; // I_Error ("P_InterceptVector: parallel"); - num = FixedMul((v1->x - v2->x) >> 8, v1->dy) + - FixedMul((v2->y - v1->y) >> 8, v1->dx); + num = FixedMul((v1->x - v2->x) >> 8, v1->dy) + FixedMul((v2->y - v1->y) >> 8, v1->dx); frac = FixedDiv(num, den); return frac; diff --git a/src/doom/p_spec.c b/src/doom/p_spec.c index 42559725e1..797a045273 100644 --- a/src/doom/p_spec.c +++ b/src/doom/p_spec.c @@ -170,8 +170,7 @@ void P_InitPicAnims(void) lastanim->numpics = lastanim->picnum - lastanim->basepic + 1; if (lastanim->numpics < 2) - I_Error("P_InitPicAnims: bad cycle from %s to %s", startname, - endname); + I_Error("P_InitPicAnims: bad cycle from %s to %s", startname, endname); lastanim->speed = animdefs[i].speed; lastanim++; @@ -474,9 +473,6 @@ void P_CrossSpecialLine(int linenum, int side, mobj_t *thing) case MT_BFG: case MT_TROOPSHOT: case MT_HEADSHOT: - case MT_BRUISERSHOT: - return; - default: break; } @@ -1060,8 +1056,7 @@ void P_UpdateSpecials(void) { for (i = anim->basepic; i < anim->basepic + anim->numpics; i++) { - pic = - anim->basepic + ((leveltime / anim->speed + i) % anim->numpics); + pic = anim->basepic + ((leveltime / anim->speed + i) % anim->numpics); if (anim->istexture) texturetranslation[i] = pic; else @@ -1125,8 +1120,8 @@ void P_UpdateSpecials(void) #define DONUT_FLOORHEIGHT_DEFAULT 0x00000000 #define DONUT_FLOORPIC_DEFAULT 0x16 -static void DonutOverrun(fixed_t *s3_floorheight, short *s3_floorpic, - line_t *line, sector_t *pillar_sector) +static void DonutOverrun(fixed_t *s3_floorheight, short *s3_floorpic, line_t *line, + sector_t *pillar_sector) { static int first = 1; static int tmp_s3_floorheight; @@ -1238,9 +1233,8 @@ int EV_DoDonut(line_t *line) if (s2 == NULL) { - fprintf(stderr, - "EV_DoDonut: linedef had no second sidedef! " - "Unexpected behavior may occur in Vanilla Doom. \n"); + fprintf(stderr, "EV_DoDonut: linedef had no second sidedef! " + "Unexpected behavior may occur in Vanilla Doom. \n"); break; } @@ -1259,10 +1253,9 @@ int EV_DoDonut(line_t *line) // s3->floorpic is a short at 0000:0008 // Trying to emulate - fprintf(stderr, - "EV_DoDonut: WARNING: emulating buffer overrun due to " - "NULL back sector. " - "Unexpected behavior may occur in Vanilla Doom.\n"); + fprintf(stderr, "EV_DoDonut: WARNING: emulating buffer overrun due to " + "NULL back sector. " + "Unexpected behavior may occur in Vanilla Doom.\n"); DonutOverrun(&s3_floorheight, &s3_floorpic, line, s1); } diff --git a/src/doom/p_switch.c b/src/doom/p_switch.c index cda05b7215..e93067c077 100644 --- a/src/doom/p_switch.c +++ b/src/doom/p_switch.c @@ -38,58 +38,57 @@ // // CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE // -switchlist_t alphSwitchList[] = -{ +switchlist_t alphSwitchList[] = { // Doom shareware episode 1 switches - {"SW1BRCOM", "SW2BRCOM", 1}, - {"SW1BRN1", "SW2BRN1", 1}, - {"SW1BRN2", "SW2BRN2", 1}, - {"SW1BRNGN", "SW2BRNGN", 1}, - {"SW1BROWN", "SW2BROWN", 1}, - {"SW1COMM", "SW2COMM", 1}, - {"SW1COMP", "SW2COMP", 1}, - {"SW1DIRT", "SW2DIRT", 1}, - {"SW1EXIT", "SW2EXIT", 1}, - {"SW1GRAY", "SW2GRAY", 1}, - {"SW1GRAY1", "SW2GRAY1", 1}, - {"SW1METAL", "SW2METAL", 1}, - {"SW1PIPE", "SW2PIPE", 1}, - {"SW1SLAD", "SW2SLAD", 1}, - {"SW1STARG", "SW2STARG", 1}, - {"SW1STON1", "SW2STON1", 1}, - {"SW1STON2", "SW2STON2", 1}, - {"SW1STONE", "SW2STONE", 1}, - {"SW1STRTN", "SW2STRTN", 1}, + {"SW1BRCOM", "SW2BRCOM", 1}, + {"SW1BRN1", "SW2BRN1", 1}, + {"SW1BRN2", "SW2BRN2", 1}, + {"SW1BRNGN", "SW2BRNGN", 1}, + {"SW1BROWN", "SW2BROWN", 1}, + {"SW1COMM", "SW2COMM", 1}, + {"SW1COMP", "SW2COMP", 1}, + {"SW1DIRT", "SW2DIRT", 1}, + {"SW1EXIT", "SW2EXIT", 1}, + {"SW1GRAY", "SW2GRAY", 1}, + {"SW1GRAY1", "SW2GRAY1", 1}, + {"SW1METAL", "SW2METAL", 1}, + {"SW1PIPE", "SW2PIPE", 1}, + {"SW1SLAD", "SW2SLAD", 1}, + {"SW1STARG", "SW2STARG", 1}, + {"SW1STON1", "SW2STON1", 1}, + {"SW1STON2", "SW2STON2", 1}, + {"SW1STONE", "SW2STONE", 1}, + {"SW1STRTN", "SW2STRTN", 1}, // Doom registered episodes 2&3 switches - {"SW1BLUE", "SW2BLUE", 2}, - {"SW1CMT", "SW2CMT", 2}, - {"SW1GARG", "SW2GARG", 2}, - {"SW1GSTON", "SW2GSTON", 2}, - {"SW1HOT", "SW2HOT", 2}, - {"SW1LION", "SW2LION", 2}, - {"SW1SATYR", "SW2SATYR", 2}, - {"SW1SKIN", "SW2SKIN", 2}, - {"SW1VINE", "SW2VINE", 2}, - {"SW1WOOD", "SW2WOOD", 2}, + {"SW1BLUE", "SW2BLUE", 2}, + {"SW1CMT", "SW2CMT", 2}, + {"SW1GARG", "SW2GARG", 2}, + {"SW1GSTON", "SW2GSTON", 2}, + {"SW1HOT", "SW2HOT", 2}, + {"SW1LION", "SW2LION", 2}, + {"SW1SATYR", "SW2SATYR", 2}, + {"SW1SKIN", "SW2SKIN", 2}, + {"SW1VINE", "SW2VINE", 2}, + {"SW1WOOD", "SW2WOOD", 2}, // Doom II switches - {"SW1PANEL", "SW2PANEL", 3}, - {"SW1ROCK", "SW2ROCK", 3}, - {"SW1MET2", "SW2MET2", 3}, - {"SW1WDMET", "SW2WDMET", 3}, - {"SW1BRIK", "SW2BRIK", 3}, - {"SW1MOD1", "SW2MOD1", 3}, - {"SW1ZIM", "SW2ZIM", 3}, - {"SW1STON6", "SW2STON6", 3}, - {"SW1TEK", "SW2TEK", 3}, - {"SW1MARB", "SW2MARB", 3}, - {"SW1SKULL", "SW2SKULL", 3}, + {"SW1PANEL", "SW2PANEL", 3}, + {"SW1ROCK", "SW2ROCK", 3}, + {"SW1MET2", "SW2MET2", 3}, + {"SW1WDMET", "SW2WDMET", 3}, + {"SW1BRIK", "SW2BRIK", 3}, + {"SW1MOD1", "SW2MOD1", 3}, + {"SW1ZIM", "SW2ZIM", 3}, + {"SW1STON6", "SW2STON6", 3}, + {"SW1TEK", "SW2TEK", 3}, + {"SW1MARB", "SW2MARB", 3}, + {"SW1SKULL", "SW2SKULL", 3}, }; -int switchlist[MAXSWITCHES * 2]; -int numswitches; -button_t buttonlist[MAXBUTTONS]; +int switchlist[MAXSWITCHES * 2]; +int numswitches; +button_t buttonlist[MAXBUTTONS]; // // P_InitSwitchList @@ -119,13 +118,11 @@ void P_InitSwitchList(void) for (i = 0; i < arrlen(alphSwitchList); i++) { - if (alphSwitchList[i].episode <= episode) - { - switchlist[slindex++] = - R_TextureNumForName(alphSwitchList[i].name1); - switchlist[slindex++] = - R_TextureNumForName(alphSwitchList[i].name2); - } + if (alphSwitchList[i].episode <= episode) + { + switchlist[slindex++] = R_TextureNumForName(alphSwitchList[i].name1); + switchlist[slindex++] = R_TextureNumForName(alphSwitchList[i].name2); + } } numswitches = slindex / 2; @@ -136,504 +133,481 @@ void P_InitSwitchList(void) // // Start a button counting down till it turns off. // -void -P_StartButton -( line_t* line, - bwhere_e w, - int texture, - int time ) +void P_StartButton(line_t *line, bwhere_e w, int texture, int time) { - int i; - + int i; + // See if button is already pressed - for (i = 0;i < MAXBUTTONS;i++) + for (i = 0; i < MAXBUTTONS; i++) { - if (buttonlist[i].btimer - && buttonlist[i].line == line) - { - - return; - } + if (buttonlist[i].btimer && buttonlist[i].line == line) + { + + return; + } } - - - for (i = 0;i < MAXBUTTONS;i++) + + for (i = 0; i < MAXBUTTONS; i++) { - if (!buttonlist[i].btimer) - { - buttonlist[i].line = line; - buttonlist[i].where = w; - buttonlist[i].btexture = texture; - buttonlist[i].btimer = time; - buttonlist[i].soundorg = &line->frontsector->soundorg; - return; - } + if (!buttonlist[i].btimer) + { + buttonlist[i].line = line; + buttonlist[i].where = w; + buttonlist[i].btexture = texture; + buttonlist[i].btimer = time; + buttonlist[i].soundorg = &line->frontsector->soundorg; + return; + } } - + I_Error("P_StartButton: no button slots left!"); } - - - // // Function that changes wall texture. // Tell it if switch is ok to use again (1=yes, it's a button). // -void -P_ChangeSwitchTexture -( line_t* line, - int useAgain ) +void P_ChangeSwitchTexture(line_t *line, int useAgain) { - int texTop; - int texMid; - int texBot; - int i; - int sound; - + int texTop; + int texMid; + int texBot; + int i; + int sound; + if (!useAgain) - line->special = 0; + line->special = 0; texTop = sides[line->sidenum[0]].toptexture; texMid = sides[line->sidenum[0]].midtexture; texBot = sides[line->sidenum[0]].bottomtexture; - + sound = sfx_swtchn; // EXIT SWITCH? - if (line->special == 11) - sound = sfx_swtchx; - - for (i = 0;i < numswitches*2;i++) + if (line->special == 11) + sound = sfx_swtchx; + + for (i = 0; i < numswitches * 2; i++) { - if (switchlist[i] == texTop) - { - S_StartSound(buttonlist->soundorg,sound); - sides[line->sidenum[0]].toptexture = switchlist[i^1]; - - if (useAgain) - P_StartButton(line,top,switchlist[i],BUTTONTIME); - - return; - } - else - { - if (switchlist[i] == texMid) - { - S_StartSound(buttonlist->soundorg,sound); - sides[line->sidenum[0]].midtexture = switchlist[i^1]; - - if (useAgain) - P_StartButton(line, middle,switchlist[i],BUTTONTIME); - - return; - } - else - { - if (switchlist[i] == texBot) - { - S_StartSound(buttonlist->soundorg,sound); - sides[line->sidenum[0]].bottomtexture = switchlist[i^1]; - - if (useAgain) - P_StartButton(line, bottom,switchlist[i],BUTTONTIME); - - return; - } - } - } + if (switchlist[i] == texTop) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].toptexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, top, switchlist[i], BUTTONTIME); + + return; + } + else + { + if (switchlist[i] == texMid) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].midtexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, middle, switchlist[i], BUTTONTIME); + + return; + } + else + { + if (switchlist[i] == texBot) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].bottomtexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, bottom, switchlist[i], BUTTONTIME); + + return; + } + } + } } } - - - - // // P_UseSpecialLine // Called when a thing uses a special line. // Only the front sides of lines are usable. // -boolean -P_UseSpecialLine -( mobj_t* thing, - line_t* line, - int side ) -{ +boolean P_UseSpecialLine(mobj_t *thing, line_t *line, int side) +{ // Err... // Use the back sides of VERY SPECIAL lines... if (side) { - switch(line->special) - { - case 124: - // Sliding door open&close - // UNUSED? - break; - - default: - return false; - break; - } + switch (line->special) + { + case 124: + // Sliding door open&close + // UNUSED? + break; + + default: + return false; + break; + } } - + // Switches that other things can activate. if (!thing->player) { - // never open secret doors - if (line->flags & ML_SECRET) - return false; - - switch(line->special) - { - case 1: // MANUAL DOOR RAISE - case 32: // MANUAL BLUE - case 33: // MANUAL RED - case 34: // MANUAL YELLOW - break; - - default: - return false; - break; - } + // never open secret doors + if (line->flags & ML_SECRET) + return false; + + switch (line->special) + { + case 1: // MANUAL DOOR RAISE + case 32: // MANUAL BLUE + case 33: // MANUAL RED + case 34: // MANUAL YELLOW + break; + + default: + return false; + break; + } } - - // do something + + // do something switch (line->special) { - // MANUALS - case 1: // Vertical Door - case 26: // Blue Door/Locked - case 27: // Yellow Door /Locked - case 28: // Red Door /Locked - - case 31: // Manual door open - case 32: // Blue locked door open - case 33: // Red locked door open - case 34: // Yellow locked door open - - case 117: // Blazing door raise - case 118: // Blazing door open - EV_VerticalDoor (line, thing); - break; - - //UNUSED - Door Slide Open&Close - // case 124: - // EV_SlidingDoor (line, thing); - // break; - - // SWITCHES - case 7: - // Build Stairs - if (EV_BuildStairs(line,build8)) - P_ChangeSwitchTexture(line,0); - break; - - case 9: - // Change Donut - if (EV_DoDonut(line)) - P_ChangeSwitchTexture(line,0); - break; - - case 11: - // Exit level - P_ChangeSwitchTexture(line,0); - G_ExitLevel (); - break; - - case 14: - // Raise Floor 32 and change texture - if (EV_DoPlat(line,raiseAndChange,32)) - P_ChangeSwitchTexture(line,0); - break; - - case 15: - // Raise Floor 24 and change texture - if (EV_DoPlat(line,raiseAndChange,24)) - P_ChangeSwitchTexture(line,0); - break; - - case 18: - // Raise Floor to next highest floor - if (EV_DoFloor(line, raiseFloorToNearest)) - P_ChangeSwitchTexture(line,0); - break; - - case 20: - // Raise Plat next highest floor and change texture - if (EV_DoPlat(line,raiseToNearestAndChange,0)) - P_ChangeSwitchTexture(line,0); - break; - - case 21: - // PlatDownWaitUpStay - if (EV_DoPlat(line,downWaitUpStay,0)) - P_ChangeSwitchTexture(line,0); - break; - - case 23: - // Lower Floor to Lowest - if (EV_DoFloor(line,lowerFloorToLowest)) - P_ChangeSwitchTexture(line,0); - break; - - case 29: - // Raise Door - if (EV_DoDoor(line,vld_normal)) - P_ChangeSwitchTexture(line,0); - break; - - case 41: - // Lower Ceiling to Floor - if (EV_DoCeiling(line,lowerToFloor)) - P_ChangeSwitchTexture(line,0); - break; - - case 71: - // Turbo Lower Floor - if (EV_DoFloor(line,turboLower)) - P_ChangeSwitchTexture(line,0); - break; - - case 49: - // Ceiling Crush And Raise - if (EV_DoCeiling(line,crushAndRaise)) - P_ChangeSwitchTexture(line,0); - break; - - case 50: - // Close Door - if (EV_DoDoor(line,vld_close)) - P_ChangeSwitchTexture(line,0); - break; - - case 51: - // Secret EXIT - P_ChangeSwitchTexture(line,0); - G_SecretExitLevel (); - break; - - case 55: - // Raise Floor Crush - if (EV_DoFloor(line,raiseFloorCrush)) - P_ChangeSwitchTexture(line,0); - break; - - case 101: - // Raise Floor - if (EV_DoFloor(line,raiseFloor)) - P_ChangeSwitchTexture(line,0); - break; - - case 102: - // Lower Floor to Surrounding floor height - if (EV_DoFloor(line,lowerFloor)) - P_ChangeSwitchTexture(line,0); - break; - - case 103: - // Open Door - if (EV_DoDoor(line,vld_open)) - P_ChangeSwitchTexture(line,0); - break; - - case 111: - // Blazing Door Raise (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeRaise)) - P_ChangeSwitchTexture(line,0); - break; - - case 112: - // Blazing Door Open (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeOpen)) - P_ChangeSwitchTexture(line,0); - break; - - case 113: - // Blazing Door Close (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeClose)) - P_ChangeSwitchTexture(line,0); - break; - - case 122: - // Blazing PlatDownWaitUpStay - if (EV_DoPlat(line,blazeDWUS,0)) - P_ChangeSwitchTexture(line,0); - break; - - case 127: - // Build Stairs Turbo 16 - if (EV_BuildStairs(line,turbo16)) - P_ChangeSwitchTexture(line,0); - break; - - case 131: - // Raise Floor Turbo - if (EV_DoFloor(line,raiseFloorTurbo)) - P_ChangeSwitchTexture(line,0); - break; - - case 133: - // BlzOpenDoor BLUE - case 135: - // BlzOpenDoor RED - case 137: - // BlzOpenDoor YELLOW - if (EV_DoLockedDoor (line,vld_blazeOpen,thing)) - P_ChangeSwitchTexture(line,0); - break; - - case 140: - // Raise Floor 512 - if (EV_DoFloor(line,raiseFloor512)) - P_ChangeSwitchTexture(line,0); - break; - - // BUTTONS - case 42: - // Close Door - if (EV_DoDoor(line,vld_close)) - P_ChangeSwitchTexture(line,1); - break; - - case 43: - // Lower Ceiling to Floor - if (EV_DoCeiling(line,lowerToFloor)) - P_ChangeSwitchTexture(line,1); - break; - - case 45: - // Lower Floor to Surrounding floor height - if (EV_DoFloor(line,lowerFloor)) - P_ChangeSwitchTexture(line,1); - break; - - case 60: - // Lower Floor to Lowest - if (EV_DoFloor(line,lowerFloorToLowest)) - P_ChangeSwitchTexture(line,1); - break; - - case 61: - // Open Door - if (EV_DoDoor(line,vld_open)) - P_ChangeSwitchTexture(line,1); - break; - - case 62: - // PlatDownWaitUpStay - if (EV_DoPlat(line,downWaitUpStay,1)) - P_ChangeSwitchTexture(line,1); - break; - - case 63: - // Raise Door - if (EV_DoDoor(line,vld_normal)) - P_ChangeSwitchTexture(line,1); - break; - - case 64: - // Raise Floor to ceiling - if (EV_DoFloor(line,raiseFloor)) - P_ChangeSwitchTexture(line,1); - break; - - case 66: - // Raise Floor 24 and change texture - if (EV_DoPlat(line,raiseAndChange,24)) - P_ChangeSwitchTexture(line,1); - break; - - case 67: - // Raise Floor 32 and change texture - if (EV_DoPlat(line,raiseAndChange,32)) - P_ChangeSwitchTexture(line,1); - break; - - case 65: - // Raise Floor Crush - if (EV_DoFloor(line,raiseFloorCrush)) - P_ChangeSwitchTexture(line,1); - break; - - case 68: - // Raise Plat to next highest floor and change texture - if (EV_DoPlat(line,raiseToNearestAndChange,0)) - P_ChangeSwitchTexture(line,1); - break; - - case 69: - // Raise Floor to next highest floor - if (EV_DoFloor(line, raiseFloorToNearest)) - P_ChangeSwitchTexture(line,1); - break; - - case 70: - // Turbo Lower Floor - if (EV_DoFloor(line,turboLower)) - P_ChangeSwitchTexture(line,1); - break; - - case 114: - // Blazing Door Raise (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeRaise)) - P_ChangeSwitchTexture(line,1); - break; - - case 115: - // Blazing Door Open (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeOpen)) - P_ChangeSwitchTexture(line,1); - break; - - case 116: - // Blazing Door Close (faster than TURBO!) - if (EV_DoDoor (line,vld_blazeClose)) - P_ChangeSwitchTexture(line,1); - break; - - case 123: - // Blazing PlatDownWaitUpStay - if (EV_DoPlat(line,blazeDWUS,0)) - P_ChangeSwitchTexture(line,1); - break; - - case 132: - // Raise Floor Turbo - if (EV_DoFloor(line,raiseFloorTurbo)) - P_ChangeSwitchTexture(line,1); - break; - - case 99: - // BlzOpenDoor BLUE - case 134: - // BlzOpenDoor RED - case 136: - // BlzOpenDoor YELLOW - if (EV_DoLockedDoor (line,vld_blazeOpen,thing)) - P_ChangeSwitchTexture(line,1); - break; - - case 138: - // Light Turn On - EV_LightTurnOn(line,255); - P_ChangeSwitchTexture(line,1); - break; - - case 139: - // Light Turn Off - EV_LightTurnOn(line,35); - P_ChangeSwitchTexture(line,1); - break; - + // MANUALS + case 1: // Vertical Door + case 26: // Blue Door/Locked + case 27: // Yellow Door /Locked + case 28: // Red Door /Locked + + case 31: // Manual door open + case 32: // Blue locked door open + case 33: // Red locked door open + case 34: // Yellow locked door open + + case 117: // Blazing door raise + case 118: // Blazing door open + EV_VerticalDoor(line, thing); + break; + + //UNUSED - Door Slide Open&Close + // case 124: + // EV_SlidingDoor (line, thing); + // break; + + // SWITCHES + case 7: + // Build Stairs + if (EV_BuildStairs(line, build8)) + P_ChangeSwitchTexture(line, 0); + break; + + case 9: + // Change Donut + if (EV_DoDonut(line)) + P_ChangeSwitchTexture(line, 0); + break; + + case 11: + // Exit level + P_ChangeSwitchTexture(line, 0); + G_ExitLevel(); + break; + + case 14: + // Raise Floor 32 and change texture + if (EV_DoPlat(line, raiseAndChange, 32)) + P_ChangeSwitchTexture(line, 0); + break; + + case 15: + // Raise Floor 24 and change texture + if (EV_DoPlat(line, raiseAndChange, 24)) + P_ChangeSwitchTexture(line, 0); + break; + + case 18: + // Raise Floor to next highest floor + if (EV_DoFloor(line, raiseFloorToNearest)) + P_ChangeSwitchTexture(line, 0); + break; + + case 20: + // Raise Plat next highest floor and change texture + if (EV_DoPlat(line, raiseToNearestAndChange, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 21: + // PlatDownWaitUpStay + if (EV_DoPlat(line, downWaitUpStay, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 23: + // Lower Floor to Lowest + if (EV_DoFloor(line, lowerFloorToLowest)) + P_ChangeSwitchTexture(line, 0); + break; + + case 29: + // Raise Door + if (EV_DoDoor(line, vld_normal)) + P_ChangeSwitchTexture(line, 0); + break; + + case 41: + // Lower Ceiling to Floor + if (EV_DoCeiling(line, lowerToFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 71: + // Turbo Lower Floor + if (EV_DoFloor(line, turboLower)) + P_ChangeSwitchTexture(line, 0); + break; + + case 49: + // Ceiling Crush And Raise + if (EV_DoCeiling(line, crushAndRaise)) + P_ChangeSwitchTexture(line, 0); + break; + + case 50: + // Close Door + if (EV_DoDoor(line, vld_close)) + P_ChangeSwitchTexture(line, 0); + break; + + case 51: + // Secret EXIT + P_ChangeSwitchTexture(line, 0); + G_SecretExitLevel(); + break; + + case 55: + // Raise Floor Crush + if (EV_DoFloor(line, raiseFloorCrush)) + P_ChangeSwitchTexture(line, 0); + break; + + case 101: + // Raise Floor + if (EV_DoFloor(line, raiseFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 102: + // Lower Floor to Surrounding floor height + if (EV_DoFloor(line, lowerFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 103: + // Open Door + if (EV_DoDoor(line, vld_open)) + P_ChangeSwitchTexture(line, 0); + break; + + case 111: + // Blazing Door Raise (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeRaise)) + P_ChangeSwitchTexture(line, 0); + break; + + case 112: + // Blazing Door Open (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeOpen)) + P_ChangeSwitchTexture(line, 0); + break; + + case 113: + // Blazing Door Close (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeClose)) + P_ChangeSwitchTexture(line, 0); + break; + + case 122: + // Blazing PlatDownWaitUpStay + if (EV_DoPlat(line, blazeDWUS, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 127: + // Build Stairs Turbo 16 + if (EV_BuildStairs(line, turbo16)) + P_ChangeSwitchTexture(line, 0); + break; + + case 131: + // Raise Floor Turbo + if (EV_DoFloor(line, raiseFloorTurbo)) + P_ChangeSwitchTexture(line, 0); + break; + + case 133: + // BlzOpenDoor BLUE + case 135: + // BlzOpenDoor RED + case 137: + // BlzOpenDoor YELLOW + if (EV_DoLockedDoor(line, vld_blazeOpen, thing)) + P_ChangeSwitchTexture(line, 0); + break; + + case 140: + // Raise Floor 512 + if (EV_DoFloor(line, raiseFloor512)) + P_ChangeSwitchTexture(line, 0); + break; + + // BUTTONS + case 42: + // Close Door + if (EV_DoDoor(line, vld_close)) + P_ChangeSwitchTexture(line, 1); + break; + + case 43: + // Lower Ceiling to Floor + if (EV_DoCeiling(line, lowerToFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 45: + // Lower Floor to Surrounding floor height + if (EV_DoFloor(line, lowerFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 60: + // Lower Floor to Lowest + if (EV_DoFloor(line, lowerFloorToLowest)) + P_ChangeSwitchTexture(line, 1); + break; + + case 61: + // Open Door + if (EV_DoDoor(line, vld_open)) + P_ChangeSwitchTexture(line, 1); + break; + + case 62: + // PlatDownWaitUpStay + if (EV_DoPlat(line, downWaitUpStay, 1)) + P_ChangeSwitchTexture(line, 1); + break; + + case 63: + // Raise Door + if (EV_DoDoor(line, vld_normal)) + P_ChangeSwitchTexture(line, 1); + break; + + case 64: + // Raise Floor to ceiling + if (EV_DoFloor(line, raiseFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 66: + // Raise Floor 24 and change texture + if (EV_DoPlat(line, raiseAndChange, 24)) + P_ChangeSwitchTexture(line, 1); + break; + + case 67: + // Raise Floor 32 and change texture + if (EV_DoPlat(line, raiseAndChange, 32)) + P_ChangeSwitchTexture(line, 1); + break; + + case 65: + // Raise Floor Crush + if (EV_DoFloor(line, raiseFloorCrush)) + P_ChangeSwitchTexture(line, 1); + break; + + case 68: + // Raise Plat to next highest floor and change texture + if (EV_DoPlat(line, raiseToNearestAndChange, 0)) + P_ChangeSwitchTexture(line, 1); + break; + + case 69: + // Raise Floor to next highest floor + if (EV_DoFloor(line, raiseFloorToNearest)) + P_ChangeSwitchTexture(line, 1); + break; + + case 70: + // Turbo Lower Floor + if (EV_DoFloor(line, turboLower)) + P_ChangeSwitchTexture(line, 1); + break; + + case 114: + // Blazing Door Raise (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeRaise)) + P_ChangeSwitchTexture(line, 1); + break; + + case 115: + // Blazing Door Open (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeOpen)) + P_ChangeSwitchTexture(line, 1); + break; + + case 116: + // Blazing Door Close (faster than TURBO!) + if (EV_DoDoor(line, vld_blazeClose)) + P_ChangeSwitchTexture(line, 1); + break; + + case 123: + // Blazing PlatDownWaitUpStay + if (EV_DoPlat(line, blazeDWUS, 0)) + P_ChangeSwitchTexture(line, 1); + break; + + case 132: + // Raise Floor Turbo + if (EV_DoFloor(line, raiseFloorTurbo)) + P_ChangeSwitchTexture(line, 1); + break; + + case 99: + // BlzOpenDoor BLUE + case 134: + // BlzOpenDoor RED + case 136: + // BlzOpenDoor YELLOW + if (EV_DoLockedDoor(line, vld_blazeOpen, thing)) + P_ChangeSwitchTexture(line, 1); + break; + + case 138: + // Light Turn On + EV_LightTurnOn(line, 255); + P_ChangeSwitchTexture(line, 1); + break; + + case 139: + // Light Turn Off + EV_LightTurnOn(line, 35); + P_ChangeSwitchTexture(line, 1); + break; } - + return true; } - diff --git a/src/doom/p_telept.c b/src/doom/p_telept.c index 81983cecef..b7d9fa4e79 100644 --- a/src/doom/p_telept.c +++ b/src/doom/p_telept.c @@ -97,8 +97,8 @@ int EV_Teleport(line_t *line, int side, mobj_t *thing) fog = P_SpawnMobj(oldx, oldy, oldz, MT_TFOG); S_StartSound(fog, sfx_telept); an = m->angle >> ANGLETOFINESHIFT; - fog = P_SpawnMobj(m->x + 20 * finecosine[an], - m->y + 20 * finesine[an], thing->z, MT_TFOG); + fog = P_SpawnMobj(m->x + 20 * finecosine[an], m->y + 20 * finesine[an], + thing->z, MT_TFOG); // emit sound, where? S_StartSound(fog, sfx_telept); diff --git a/src/doom/p_tick.c b/src/doom/p_tick.c index 5a93b80f13..53cf2f3c5a 100644 --- a/src/doom/p_tick.c +++ b/src/doom/p_tick.c @@ -24,7 +24,7 @@ #include "doomstat.h" -int leveltime; +int leveltime; // // THINKERS @@ -35,27 +35,24 @@ int leveltime; // - // Both the head and tail of the thinker list. -thinker_t thinkercap; +thinker_t thinkercap; // // P_InitThinkers // -void P_InitThinkers (void) +void P_InitThinkers(void) { - thinkercap.prev = thinkercap.next = &thinkercap; + thinkercap.prev = thinkercap.next = &thinkercap; } - - // // P_AddThinker // Adds a new thinker at the end of the list. // -void P_AddThinker (thinker_t* thinker) +void P_AddThinker(thinker_t *thinker) { thinkercap.prev->next = thinker; thinker->next = &thinkercap; @@ -64,90 +61,74 @@ void P_AddThinker (thinker_t* thinker) } - // // P_RemoveThinker // Deallocation is lazy -- it will not actually be freed // until its thinking turn comes up. // -void P_RemoveThinker (thinker_t* thinker) -{ - // FIXME: NOP. - thinker->function.acv = (actionf_v)(-1); -} - - - -// -// P_AllocateThinker -// Allocates memory and adds a new thinker at the end of the list. -// -void P_AllocateThinker (thinker_t* thinker) +void P_RemoveThinker(thinker_t *thinker) { + // FIXME: NOP. + thinker->function.acv = (actionf_v)(-1); } - // // P_RunThinkers // -void P_RunThinkers (void) +void P_RunThinkers(void) { thinker_t *currentthinker, *nextthinker; currentthinker = thinkercap.next; while (currentthinker != &thinkercap) { - if ( currentthinker->function.acv == (actionf_v)(-1) ) - { - // time to remove it + if (currentthinker->function.acv == (actionf_v)(-1)) + { + // time to remove it nextthinker = currentthinker->next; - currentthinker->next->prev = currentthinker->prev; - currentthinker->prev->next = currentthinker->next; - Z_Free(currentthinker); - } - else - { - if (currentthinker->function.acp1) - currentthinker->function.acp1 (currentthinker); + currentthinker->next->prev = currentthinker->prev; + currentthinker->prev->next = currentthinker->next; + Z_Free(currentthinker); + } + else + { + if (currentthinker->function.acp1) + currentthinker->function.acp1(currentthinker); nextthinker = currentthinker->next; - } - currentthinker = nextthinker; + } + currentthinker = nextthinker; } } - // // P_Ticker // -void P_Ticker (void) +void P_Ticker(void) { - int i; - + int i; + // run the tic if (paused) - return; - + return; + // pause if in menu and at least one tic has been run - if ( !netgame - && menuactive - && !demoplayback - && players[consoleplayer].viewz != 1) + if (!netgame && menuactive && !demoplayback && players[consoleplayer].viewz != 1) { - return; + return; } - - - for (i=0 ; i>= ANGLETOFINESHIFT; - - player->mo->momx += FixedMul(move,finecosine[angle]); - player->mo->momy += FixedMul(move,finesine[angle]); -} - + player->mo->momx += FixedMul(move, finecosine[angle]); + player->mo->momy += FixedMul(move, finesine[angle]); +} // // P_CalcHeight // Calculate the walking / running height adjustment // -void P_CalcHeight (player_t* player) +void P_CalcHeight(player_t *player) { - int angle; - fixed_t bob; - + int angle; + fixed_t bob; + // Regular movement bobbing // (needs to be calculated for gun swing // even if not on ground) // OPTIMIZE: tablify angle // Note: a LUT allows for effects // like a ramp with low health. - player->bob = - FixedMul (player->mo->momx, player->mo->momx) - + FixedMul (player->mo->momy,player->mo->momy); - + player->bob = FixedMul(player->mo->momx, player->mo->momx) + + FixedMul(player->mo->momy, player->mo->momy); + player->bob >>= 2; - if (player->bob>MAXBOB) - player->bob = MAXBOB; + if (player->bob > MAXBOB) + player->bob = MAXBOB; if ((player->cheats & CF_NOMOMENTUM) || !onground) { - player->viewz = player->mo->z + VIEWHEIGHT; + player->viewz = player->mo->z + VIEWHEIGHT; - if (player->viewz > player->mo->ceilingz-4*FRACUNIT) - player->viewz = player->mo->ceilingz-4*FRACUNIT; + if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT) + player->viewz = player->mo->ceilingz - 4 * FRACUNIT; - player->viewz = player->mo->z + player->viewheight; - return; + player->viewz = player->mo->z + player->viewheight; + return; } - - angle = (FINEANGLES/20*leveltime)&FINEMASK; - bob = FixedMul ( player->bob/2, finesine[angle]); - + angle = (FINEANGLES / 20 * leveltime) & FINEMASK; + bob = FixedMul(player->bob / 2, finesine[angle]); + + // move viewheight if (player->playerstate == PST_LIVE) { - player->viewheight += player->deltaviewheight; - - if (player->viewheight > VIEWHEIGHT) - { - player->viewheight = VIEWHEIGHT; - player->deltaviewheight = 0; - } - - if (player->viewheight < VIEWHEIGHT/2) - { - player->viewheight = VIEWHEIGHT/2; - if (player->deltaviewheight <= 0) - player->deltaviewheight = 1; - } - - if (player->deltaviewheight) - { - player->deltaviewheight += FRACUNIT/4; - if (!player->deltaviewheight) - player->deltaviewheight = 1; - } + player->viewheight += player->deltaviewheight; + + if (player->viewheight > VIEWHEIGHT) + { + player->viewheight = VIEWHEIGHT; + player->deltaviewheight = 0; + } + + if (player->viewheight < VIEWHEIGHT / 2) + { + player->viewheight = VIEWHEIGHT / 2; + if (player->deltaviewheight <= 0) + player->deltaviewheight = 1; + } + + if (player->deltaviewheight) + { + player->deltaviewheight += FRACUNIT / 4; + if (!player->deltaviewheight) + player->deltaviewheight = 1; + } } player->viewz = player->mo->z + player->viewheight + bob; - if (player->viewz > player->mo->ceilingz-4*FRACUNIT) - player->viewz = player->mo->ceilingz-4*FRACUNIT; + if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT) + player->viewz = player->mo->ceilingz - 4 * FRACUNIT; } - // // P_MovePlayer // -void P_MovePlayer (player_t* player) +void P_MovePlayer(player_t *player) { - ticcmd_t* cmd; - + ticcmd_t *cmd; + cmd = &player->cmd; - - player->mo->angle += (cmd->angleturn<mo->angle += (cmd->angleturn << FRACBITS); // Do not let the player control movement // if not onground. onground = (player->mo->z <= player->mo->floorz); - + if (cmd->forwardmove && onground) - P_Thrust (player, player->mo->angle, cmd->forwardmove*2048); - + P_Thrust(player, player->mo->angle, cmd->forwardmove * 2048); + if (cmd->sidemove && onground) - P_Thrust (player, player->mo->angle-ANG90, cmd->sidemove*2048); + P_Thrust(player, player->mo->angle - ANG90, cmd->sidemove * 2048); - if ( (cmd->forwardmove || cmd->sidemove) - && player->mo->state == &states[S_PLAY] ) + if ((cmd->forwardmove || cmd->sidemove) && player->mo->state == &states[S_PLAY]) { - P_SetMobjState (player->mo, S_PLAY_RUN1); + P_SetMobjState(player->mo, S_PLAY_RUN1); } -} - +} // @@ -170,193 +157,185 @@ void P_MovePlayer (player_t* player) // Fall on your face when dying. // Decrease POV height to floor height. // -#define ANG5 (ANG90/18) +#define ANG5 (ANG90 / 18) -void P_DeathThink (player_t* player) +void P_DeathThink(player_t *player) { - angle_t angle; - angle_t delta; + angle_t angle; + angle_t delta; + + P_MovePsprites(player); - P_MovePsprites (player); - // fall to the ground - if (player->viewheight > 6*FRACUNIT) - player->viewheight -= FRACUNIT; + if (player->viewheight > 6 * FRACUNIT) + player->viewheight -= FRACUNIT; - if (player->viewheight < 6*FRACUNIT) - player->viewheight = 6*FRACUNIT; + if (player->viewheight < 6 * FRACUNIT) + player->viewheight = 6 * FRACUNIT; player->deltaviewheight = 0; onground = (player->mo->z <= player->mo->floorz); - P_CalcHeight (player); - + P_CalcHeight(player); + if (player->attacker && player->attacker != player->mo) { - angle = R_PointToAngle2 (player->mo->x, - player->mo->y, - player->attacker->x, - player->attacker->y); - - delta = angle - player->mo->angle; - - if (delta < ANG5 || delta > (unsigned)-ANG5) - { - // Looking at killer, - // so fade damage flash down. - player->mo->angle = angle; - - if (player->damagecount) - player->damagecount--; - } - else if (delta < ANG180) - player->mo->angle += ANG5; - else - player->mo->angle -= ANG5; + angle = R_PointToAngle2(player->mo->x, player->mo->y, player->attacker->x, + player->attacker->y); + + delta = angle - player->mo->angle; + + if (delta < ANG5 || delta > (unsigned) -ANG5) + { + // Looking at killer, + // so fade damage flash down. + player->mo->angle = angle; + + if (player->damagecount) + player->damagecount--; + } + else if (delta < ANG180) + player->mo->angle += ANG5; + else + player->mo->angle -= ANG5; } else if (player->damagecount) - player->damagecount--; - + player->damagecount--; + if (player->cmd.buttons & BT_USE) - player->playerstate = PST_REBORN; + player->playerstate = PST_REBORN; } - // // P_PlayerThink // -void P_PlayerThink (player_t* player) +void P_PlayerThink(player_t *player) { - ticcmd_t* cmd; - weapontype_t newweapon; - + ticcmd_t *cmd; + weapontype_t newweapon; + // fixme: do this in the cheat code if (player->cheats & CF_NOCLIP) - player->mo->flags |= MF_NOCLIP; + player->mo->flags |= MF_NOCLIP; else - player->mo->flags &= ~MF_NOCLIP; - + player->mo->flags &= ~MF_NOCLIP; + // chain saw run forward cmd = &player->cmd; if (player->mo->flags & MF_JUSTATTACKED) { - cmd->angleturn = 0; - cmd->forwardmove = 0xc800/512; - cmd->sidemove = 0; - player->mo->flags &= ~MF_JUSTATTACKED; + cmd->angleturn = 0; + cmd->forwardmove = 0xc800 / 512; + cmd->sidemove = 0; + player->mo->flags &= ~MF_JUSTATTACKED; } - - + + if (player->playerstate == PST_DEAD) { - P_DeathThink (player); - return; + P_DeathThink(player); + return; } - + // Move around. // Reactiontime is used to prevent movement // for a bit after a teleport. if (player->mo->reactiontime) - player->mo->reactiontime--; + player->mo->reactiontime--; else - P_MovePlayer (player); - - P_CalcHeight (player); + P_MovePlayer(player); + + P_CalcHeight(player); if (player->mo->subsector->sector->special) - P_PlayerInSpecialSector (player); - + P_PlayerInSpecialSector(player); + // Check for weapon change. // A special event has no other buttons. if (cmd->buttons & BT_SPECIAL) - cmd->buttons = 0; - + cmd->buttons = 0; + if (cmd->buttons & BT_CHANGE) { - // The actual changing of the weapon is done - // when the weapon psprite can do it - // (read: not in the middle of an attack). - newweapon = (cmd->buttons&BT_WEAPONMASK)>>BT_WEAPONSHIFT; - - if (newweapon == wp_fist - && player->weaponowned[wp_chainsaw] - && !(player->readyweapon == wp_chainsaw - && player->powers[pw_strength])) - { - newweapon = wp_chainsaw; - } - - if (player->weaponowned[newweapon] && newweapon != player->readyweapon) - { - player->pendingweapon = newweapon; - } + // The actual changing of the weapon is done + // when the weapon psprite can do it + // (read: not in the middle of an attack). + newweapon = (cmd->buttons & BT_WEAPONMASK) >> BT_WEAPONSHIFT; + + if (newweapon == wp_fist && player->weaponowned[wp_chainsaw] && + !(player->readyweapon == wp_chainsaw && player->powers[pw_strength])) + { + newweapon = wp_chainsaw; + } + + if (player->weaponowned[newweapon] && newweapon != player->readyweapon) + { + player->pendingweapon = newweapon; + } } - + // check for use if (cmd->buttons & BT_USE) { - if (!player->usedown) - { - P_UseLines (player); - player->usedown = true; - } + if (!player->usedown) + { + P_UseLines(player); + player->usedown = true; + } } else - player->usedown = false; - + player->usedown = false; + // cycle psprites - P_MovePsprites (player); - + P_MovePsprites(player); + // Counters, time dependend power ups. // Strength counts up to diminish fade. if (player->powers[pw_strength]) - player->powers[pw_strength]++; - + player->powers[pw_strength]++; + if (player->powers[pw_invulnerability]) - player->powers[pw_invulnerability]--; + player->powers[pw_invulnerability]--; if (player->powers[pw_invisibility]) - if (! --player->powers[pw_invisibility] ) - player->mo->flags &= ~MF_SHADOW; - + if (!--player->powers[pw_invisibility]) + player->mo->flags &= ~MF_SHADOW; + if (player->powers[pw_infrared]) - player->powers[pw_infrared]--; - + player->powers[pw_infrared]--; + if (player->powers[pw_ironfeet]) - player->powers[pw_ironfeet]--; - + player->powers[pw_ironfeet]--; + if (player->damagecount) - player->damagecount--; - + player->damagecount--; + if (player->bonuscount) - player->bonuscount--; + player->bonuscount--; + - // Handling colormaps. if (player->powers[pw_invulnerability]) { - if (player->powers[pw_invulnerability] > 4*32 - || (player->powers[pw_invulnerability]&8) ) - player->fixedcolormap = INVERSECOLORMAP; - else - player->fixedcolormap = 0; + if (player->powers[pw_invulnerability] > 4 * 32 || + (player->powers[pw_invulnerability] & 8)) + player->fixedcolormap = INVERSECOLORMAP; + else + player->fixedcolormap = 0; } - else if (player->powers[pw_infrared]) + else if (player->powers[pw_infrared]) { - if (player->powers[pw_infrared] > 4*32 - || (player->powers[pw_infrared]&8) ) - { - // almost full bright - player->fixedcolormap = 1; - } - else - player->fixedcolormap = 0; + if (player->powers[pw_infrared] > 4 * 32 || (player->powers[pw_infrared] & 8)) + { + // almost full bright + player->fixedcolormap = 1; + } + else + player->fixedcolormap = 0; } else - player->fixedcolormap = 0; + player->fixedcolormap = 0; } - - diff --git a/src/doom/r_bsp.c b/src/doom/r_bsp.c index 755d2eefc6..5e8590343b 100644 --- a/src/doom/r_bsp.c +++ b/src/doom/r_bsp.c @@ -17,8 +17,6 @@ // - - #include "doomdef.h" #include "m_bbox.h" @@ -36,61 +34,52 @@ //#include "r_local.h" +seg_t *curline; +side_t *sidedef; +line_t *linedef; +sector_t *frontsector; +sector_t *backsector; -seg_t* curline; -side_t* sidedef; -line_t* linedef; -sector_t* frontsector; -sector_t* backsector; - -drawseg_t drawsegs[MAXDRAWSEGS]; -drawseg_t* ds_p; - - -void -R_StoreWallRange -( int start, - int stop ); +drawseg_t drawsegs[MAXDRAWSEGS]; +drawseg_t *ds_p; +void R_StoreWallRange(int start, int stop); // // R_ClearDrawSegs // -void R_ClearDrawSegs (void) +void R_ClearDrawSegs(void) { ds_p = drawsegs; } - // // ClipWallSegment // Clips the given range of columns // and includes it in the new clip list. // -typedef struct +typedef struct { - int first; + int first; int last; - + } cliprange_t; // We must expand MAXSEGS to the theoretical limit of the number of solidsegs // that can be generated in a scene by the DOOM engine. This was determined by // Lee Killough during BOOM development to be a function of the screensize. // The simplest thing we can do, other than fix this bug, is to let the game -// render overage and then bomb out by detecting the overflow after the +// render overage and then bomb out by detecting the overflow after the // fact. -haleyjd //#define MAXSEGS 32 #define MAXSEGS (SCREENWIDTH / 2 + 1) // newend is one past the last valid seg -cliprange_t* newend; -cliprange_t solidsegs[MAXSEGS]; - - +cliprange_t *newend; +cliprange_t solidsegs[MAXSEGS]; // @@ -98,93 +87,89 @@ cliprange_t solidsegs[MAXSEGS]; // Does handle solid walls, // e.g. single sided LineDefs (middle texture) // that entirely block the view. -// -void -R_ClipSolidWallSegment -( int first, - int last ) +// +void R_ClipSolidWallSegment(int first, int last) { - cliprange_t* next; - cliprange_t* start; + cliprange_t *next; + cliprange_t *start; // Find the first range that touches the range // (adjacent pixels are touching). start = solidsegs; - while (start->last < first-1) - start++; + while (start->last < first - 1) + start++; if (first < start->first) { - if (last < start->first-1) - { - // Post is entirely visible (above start), - // so insert a new clippost. - R_StoreWallRange (first, last); - next = newend; - newend++; - - while (next != start) - { - *next = *(next-1); - next--; - } - next->first = first; - next->last = last; - return; - } - - // There is a fragment above *start. - R_StoreWallRange (first, start->first - 1); - // Now adjust the clip size. - start->first = first; + if (last < start->first - 1) + { + // Post is entirely visible (above start), + // so insert a new clippost. + R_StoreWallRange(first, last); + next = newend; + newend++; + + while (next != start) + { + *next = *(next - 1); + next--; + } + next->first = first; + next->last = last; + return; + } + + // There is a fragment above *start. + R_StoreWallRange(first, start->first - 1); + // Now adjust the clip size. + start->first = first; } // Bottom contained in start? if (last <= start->last) - return; - + return; + next = start; - while (last >= (next+1)->first-1) + while (last >= (next + 1)->first - 1) { - // There is a fragment between two posts. - R_StoreWallRange (next->last + 1, (next+1)->first - 1); - next++; - - if (last <= next->last) - { - // Bottom is contained in next. - // Adjust the clip size. - start->last = next->last; - goto crunch; - } + // There is a fragment between two posts. + R_StoreWallRange(next->last + 1, (next + 1)->first - 1); + next++; + + if (last <= next->last) + { + // Bottom is contained in next. + // Adjust the clip size. + start->last = next->last; + goto crunch; + } } - + // There is a fragment after *next. - R_StoreWallRange (next->last + 1, last); + R_StoreWallRange(next->last + 1, last); // Adjust the clip size. start->last = last; - + // Remove start+1 to next from the clip list, // because start now covers their area. - crunch: +crunch: if (next == start) { - // Post just extended past the bottom of one post. - return; + // Post just extended past the bottom of one post. + return; } - + while (next++ != newend) { - // Remove a post. - *++start = *next; + // Remove a post. + *++start = *next; } - newend = start+1; + newend = start + 1; } - // // R_ClipPassWallSegment // Clips the given range of columns, @@ -192,62 +177,58 @@ R_ClipSolidWallSegment // Does handle windows, // e.g. LineDefs with upper and lower texture. // -void -R_ClipPassWallSegment -( int first, - int last ) +void R_ClipPassWallSegment(int first, int last) { - cliprange_t* start; + cliprange_t *start; // Find the first range that touches the range // (adjacent pixels are touching). start = solidsegs; - while (start->last < first-1) - start++; + while (start->last < first - 1) + start++; if (first < start->first) { - if (last < start->first-1) - { - // Post is entirely visible (above start). - R_StoreWallRange (first, last); - return; - } - - // There is a fragment above *start. - R_StoreWallRange (first, start->first - 1); + if (last < start->first - 1) + { + // Post is entirely visible (above start). + R_StoreWallRange(first, last); + return; + } + + // There is a fragment above *start. + R_StoreWallRange(first, start->first - 1); } // Bottom contained in start? if (last <= start->last) - return; - - while (last >= (start+1)->first-1) + return; + + while (last >= (start + 1)->first - 1) { - // There is a fragment between two posts. - R_StoreWallRange (start->last + 1, (start+1)->first - 1); - start++; - - if (last <= start->last) - return; + // There is a fragment between two posts. + R_StoreWallRange(start->last + 1, (start + 1)->first - 1); + start++; + + if (last <= start->last) + return; } - + // There is a fragment after *next. - R_StoreWallRange (start->last + 1, last); + R_StoreWallRange(start->last + 1, last); } - // // R_ClearClipSegs // -void R_ClearClipSegs (void) +void R_ClearClipSegs(void) { solidsegs[0].first = -0x7fffffff; solidsegs[0].last = -1; solidsegs[1].first = viewwidth; solidsegs[1].last = 0x7fffffff; - newend = solidsegs+2; + newend = solidsegs + 2; } // @@ -255,103 +236,103 @@ void R_ClearClipSegs (void) // Clips the given segment // and adds any visible pieces to the line list. // -void R_AddLine (seg_t* line) +void R_AddLine(seg_t *line) { - int x1; - int x2; - angle_t angle1; - angle_t angle2; - angle_t span; - angle_t tspan; - + int x1; + int x2; + angle_t angle1; + angle_t angle2; + angle_t span; + angle_t tspan; + curline = line; // OPTIMIZE: quickly reject orthogonal back sides. - angle1 = R_PointToAngle (line->v1->x, line->v1->y); - angle2 = R_PointToAngle (line->v2->x, line->v2->y); - + angle1 = R_PointToAngle(line->v1->x, line->v1->y); + angle2 = R_PointToAngle(line->v2->x, line->v2->y); + // Clip to view edges. // OPTIMIZE: make constant out of 2*clipangle (FIELDOFVIEW). span = angle1 - angle2; - + // Back side? I.e. backface culling? if (span >= ANG180) - return; + return; // Global angle needed by segcalc. rw_angle1 = angle1; angle1 -= viewangle; angle2 -= viewangle; - + tspan = angle1 + clipangle; - if (tspan > 2*clipangle) + if (tspan > 2 * clipangle) { - tspan -= 2*clipangle; + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return; - // Totally off the left edge? - if (tspan >= span) - return; - - angle1 = clipangle; + angle1 = clipangle; } tspan = clipangle - angle2; - if (tspan > 2*clipangle) + if (tspan > 2 * clipangle) { - tspan -= 2*clipangle; + tspan -= 2 * clipangle; - // Totally off the left edge? - if (tspan >= span) - return; - angle2 = -clipangle; + // Totally off the left edge? + if (tspan >= span) + return; + angle2 = -clipangle; } - + // The seg is in the view range, // but not necessarily visible. - angle1 = (angle1+ANG90)>>ANGLETOFINESHIFT; - angle2 = (angle2+ANG90)>>ANGLETOFINESHIFT; + angle1 = (angle1 + ANG90) >> ANGLETOFINESHIFT; + angle2 = (angle2 + ANG90) >> ANGLETOFINESHIFT; x1 = viewangletox[angle1]; x2 = viewangletox[angle2]; // Does not cross a pixel? if (x1 == x2) - return; - + return; + backsector = line->backsector; // Single sided line? if (!backsector) - goto clipsolid; + goto clipsolid; // Closed door. - if (backsector->ceilingheight <= frontsector->floorheight - || backsector->floorheight >= frontsector->ceilingheight) - goto clipsolid; + if (backsector->ceilingheight <= frontsector->floorheight || + backsector->floorheight >= frontsector->ceilingheight) + goto clipsolid; // Window. - if (backsector->ceilingheight != frontsector->ceilingheight - || backsector->floorheight != frontsector->floorheight) - goto clippass; - + if (backsector->ceilingheight != frontsector->ceilingheight || + backsector->floorheight != frontsector->floorheight) + goto clippass; + // Reject empty lines used for triggers // and special events. // Identical floor and ceiling on both sides, // identical light levels on both sides, // and no middle texture. - if (backsector->ceilingpic == frontsector->ceilingpic - && backsector->floorpic == frontsector->floorpic - && backsector->lightlevel == frontsector->lightlevel - && curline->sidedef->midtexture == 0) + if (backsector->ceilingpic == frontsector->ceilingpic && + backsector->floorpic == frontsector->floorpic && + backsector->lightlevel == frontsector->lightlevel && + curline->sidedef->midtexture == 0) { - return; + return; } - - - clippass: - R_ClipPassWallSegment (x1, x2-1); + + +clippass: + R_ClipPassWallSegment(x1, x2 - 1); return; - - clipsolid: - R_ClipSolidWallSegment (x1, x2-1); + +clipsolid: + R_ClipSolidWallSegment(x1, x2 - 1); } @@ -361,149 +342,134 @@ void R_AddLine (seg_t* line) // Returns true // if some part of the bbox might be visible. // -int checkcoord[12][4] = -{ - {3,0,2,1}, - {3,0,2,0}, - {3,1,2,0}, - {0}, - {2,0,2,1}, - {0,0,0,0}, - {3,1,3,0}, - {0}, - {2,0,3,1}, - {2,1,3,1}, - {2,1,3,0} -}; - - -boolean R_CheckBBox (fixed_t* bspcoord) +int checkcoord[12][4] = {{3, 0, 2, 1}, {3, 0, 2, 0}, {3, 1, 2, 0}, {0}, + {2, 0, 2, 1}, {0, 0, 0, 0}, {3, 1, 3, 0}, {0}, + {2, 0, 3, 1}, {2, 1, 3, 1}, {2, 1, 3, 0}}; + + +boolean R_CheckBBox(fixed_t *bspcoord) { - int boxx; - int boxy; - int boxpos; - - fixed_t x1; - fixed_t y1; - fixed_t x2; - fixed_t y2; - - angle_t angle1; - angle_t angle2; - angle_t span; - angle_t tspan; - - cliprange_t* start; - - int sx1; - int sx2; - + int boxx; + int boxy; + int boxpos; + + fixed_t x1; + fixed_t y1; + fixed_t x2; + fixed_t y2; + + angle_t angle1; + angle_t angle2; + angle_t span; + angle_t tspan; + + cliprange_t *start; + + int sx1; + int sx2; + // Find the corners of the box // that define the edges from current viewpoint. if (viewx <= bspcoord[BOXLEFT]) - boxx = 0; + boxx = 0; else if (viewx < bspcoord[BOXRIGHT]) - boxx = 1; + boxx = 1; else - boxx = 2; - + boxx = 2; + if (viewy >= bspcoord[BOXTOP]) - boxy = 0; + boxy = 0; else if (viewy > bspcoord[BOXBOTTOM]) - boxy = 1; + boxy = 1; else - boxy = 2; - - boxpos = (boxy<<2)+boxx; + boxy = 2; + + boxpos = (boxy << 2) + boxx; if (boxpos == 5) - return true; - + return true; + x1 = bspcoord[checkcoord[boxpos][0]]; y1 = bspcoord[checkcoord[boxpos][1]]; x2 = bspcoord[checkcoord[boxpos][2]]; y2 = bspcoord[checkcoord[boxpos][3]]; - + // check clip list for an open space - angle1 = R_PointToAngle (x1, y1) - viewangle; - angle2 = R_PointToAngle (x2, y2) - viewangle; - + angle1 = R_PointToAngle(x1, y1) - viewangle; + angle2 = R_PointToAngle(x2, y2) - viewangle; + span = angle1 - angle2; // Sitting on a line? if (span >= ANG180) - return true; - + return true; + tspan = angle1 + clipangle; - if (tspan > 2*clipangle) + if (tspan > 2 * clipangle) { - tspan -= 2*clipangle; + tspan -= 2 * clipangle; - // Totally off the left edge? - if (tspan >= span) - return false; + // Totally off the left edge? + if (tspan >= span) + return false; - angle1 = clipangle; + angle1 = clipangle; } tspan = clipangle - angle2; - if (tspan > 2*clipangle) + if (tspan > 2 * clipangle) { - tspan -= 2*clipangle; + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return false; - // Totally off the left edge? - if (tspan >= span) - return false; - - angle2 = -clipangle; + angle2 = -clipangle; } // Find the first clippost // that touches the source post // (adjacent pixels are touching). - angle1 = (angle1+ANG90)>>ANGLETOFINESHIFT; - angle2 = (angle2+ANG90)>>ANGLETOFINESHIFT; + angle1 = (angle1 + ANG90) >> ANGLETOFINESHIFT; + angle2 = (angle2 + ANG90) >> ANGLETOFINESHIFT; sx1 = viewangletox[angle1]; sx2 = viewangletox[angle2]; // Does not cross a pixel. if (sx1 == sx2) - return false; + return false; sx2--; - + start = solidsegs; while (start->last < sx2) - start++; - - if (sx1 >= start->first - && sx2 <= start->last) + start++; + + if (sx1 >= start->first && sx2 <= start->last) { - // The clippost contains the new span. - return false; + // The clippost contains the new span. + return false; } return true; } - // // R_Subsector // Determine floor/ceiling planes. // Add sprites of things in sector. // Draw one or more line segments. // -void R_Subsector (int num) +void R_Subsector(int num) { - int count; - seg_t* line; - subsector_t* sub; - + int count; + seg_t *line; + subsector_t *sub; + #ifdef RANGECHECK - if (num>=numsubsectors) - I_Error ("R_Subsector: ss %i with numss = %i", - num, - numsubsectors); + if (num >= numsubsectors) + I_Error("R_Subsector: ss %i with numss = %i", num, numsubsectors); #endif sscount++; @@ -514,70 +480,63 @@ void R_Subsector (int num) if (frontsector->floorheight < viewz) { - floorplane = R_FindPlane (frontsector->floorheight, - frontsector->floorpic, - frontsector->lightlevel); + floorplane = R_FindPlane(frontsector->floorheight, frontsector->floorpic, + frontsector->lightlevel); } else - floorplane = NULL; - - if (frontsector->ceilingheight > viewz - || frontsector->ceilingpic == skyflatnum) + floorplane = NULL; + + if (frontsector->ceilingheight > viewz || frontsector->ceilingpic == skyflatnum) { - ceilingplane = R_FindPlane (frontsector->ceilingheight, - frontsector->ceilingpic, - frontsector->lightlevel); + ceilingplane = R_FindPlane(frontsector->ceilingheight, frontsector->ceilingpic, + frontsector->lightlevel); } else - ceilingplane = NULL; - - R_AddSprites (frontsector); + ceilingplane = NULL; + + R_AddSprites(frontsector); while (count--) { - R_AddLine (line); - line++; + R_AddLine(line); + line++; } // check for solidsegs overflow - extremely unsatisfactory! - if(newend > &solidsegs[32]) + if (newend > &solidsegs[32]) I_Error("R_Subsector: solidsegs overflow (vanilla may crash here)\n"); } - - // // RenderBSPNode // Renders all subsectors below a given node, // traversing subtree recursively. // Just call with BSP root. -void R_RenderBSPNode (int bspnum) +void R_RenderBSPNode(int bspnum) { - node_t* bsp; - int side; + node_t *bsp; + int side; // Found a subsector? if (bspnum & NF_SUBSECTOR) { - if (bspnum == -1) - R_Subsector (0); - else - R_Subsector (bspnum&(~NF_SUBSECTOR)); - return; + if (bspnum == -1) + R_Subsector(0); + else + R_Subsector(bspnum & (~NF_SUBSECTOR)); + return; } - + bsp = &nodes[bspnum]; - + // Decide which side the view point is on. - side = R_PointOnSide (viewx, viewy, bsp); + side = R_PointOnSide(viewx, viewy, bsp); // Recursively divide front space. - R_RenderBSPNode (bsp->children[side]); + R_RenderBSPNode(bsp->children[side]); // Possibly divide back space. - if (R_CheckBBox (bsp->bbox[side^1])) - R_RenderBSPNode (bsp->children[side^1]); + if (R_CheckBBox(bsp->bbox[side ^ 1])) + R_RenderBSPNode(bsp->children[side ^ 1]); } - - diff --git a/src/doom/r_data.c b/src/doom/r_data.c index 90aa0140af..d58c0dc4ce 100644 --- a/src/doom/r_data.c +++ b/src/doom/r_data.c @@ -41,8 +41,7 @@ // is stored in vertical runs of opaque pixels (posts). // A column is composed of zero or more posts, // a patch or sprite is composed of zero or more columns. -// - +// // @@ -53,13 +52,12 @@ // into the rectangular texture space using origin // and possibly other attributes. // -typedef PACKED_STRUCT ( -{ - short originx; - short originy; - short patch; - short stepdir; - short colormap; +typedef PACKED_STRUCT({ + short originx; + short originy; + short patch; + short stepdir; + short colormap; }) mappatch_t; @@ -68,15 +66,14 @@ typedef PACKED_STRUCT ( // A DOOM wall texture is a list of patches // which are to be combined in a predefined order. // -typedef PACKED_STRUCT ( -{ - char name[8]; - int masked; - short width; - short height; - int obsolete; - short patchcount; - mappatch_t patches[1]; +typedef PACKED_STRUCT({ + char name[8]; + int masked; + short width; + short height; + int obsolete; + short patchcount; + mappatch_t patches[1]; }) maptexture_t; @@ -88,9 +85,9 @@ typedef struct // Block origin (allways UL), // which has allready accounted // for the internal origin of the patch. - short originx; - short originy; - int patch; + short originx; + short originy; + int patch; } texpatch_t; @@ -103,61 +100,60 @@ typedef struct texture_s texture_t; struct texture_s { // Keep name for switch changing, etc. - char name[8]; - short width; - short height; + char name[8]; + short width; + short height; // Index in textures list - int index; + int index; // Next in hash table chain - texture_t *next; - + texture_t *next; + // All the patches[patchcount] // are drawn back to front into the cached texture. - short patchcount; - texpatch_t patches[1]; + short patchcount; + texpatch_t patches[1]; }; +int firstflat; +int lastflat; +int numflats; -int firstflat; -int lastflat; -int numflats; - -int firstpatch; -int lastpatch; -int numpatches; +int firstpatch; +int lastpatch; +int numpatches; -int firstspritelump; -int lastspritelump; -int numspritelumps; +int firstspritelump; +int lastspritelump; +int numspritelumps; -int numtextures; -texture_t** textures; -texture_t** textures_hashtable; +int numtextures; +texture_t **textures; +texture_t **textures_hashtable; -int* texturewidthmask; +int *texturewidthmask; // needed for texture pegging -fixed_t* textureheight; -int* texturecompositesize; -short** texturecolumnlump; -unsigned short** texturecolumnofs; -byte** texturecomposite; +fixed_t *textureheight; +int *texturecompositesize; +short **texturecolumnlump; +unsigned short **texturecolumnofs; +byte **texturecomposite; // for global animation -int* flattranslation; -int* texturetranslation; +int *flattranslation; +int *texturetranslation; // needed for pre rendering -fixed_t* spritewidth; -fixed_t* spriteoffset; -fixed_t* spritetopoffset; +fixed_t *spritewidth; +fixed_t *spriteoffset; +fixed_t *spritetopoffset; -lighttable_t *colormaps; +lighttable_t *colormaps; // @@ -173,223 +169,199 @@ lighttable_t *colormaps; // - // // R_DrawColumnInCache // Clip and draw a column // from a patch into a cached post. // -void -R_DrawColumnInCache -( column_t* patch, - byte* cache, - int originy, - int cacheheight ) +void R_DrawColumnInCache(column_t *patch, byte *cache, int originy, int cacheheight) { - int count; - int position; - byte* source; + int count; + int position; + byte *source; while (patch->topdelta != 0xff) { - source = (byte *)patch + 3; - count = patch->length; - position = originy + patch->topdelta; - - if (position < 0) - { - count += position; - position = 0; - } - - if (position + count > cacheheight) - count = cacheheight - position; - - if (count > 0) - memcpy (cache + position, source, count); - - patch = (column_t *)( (byte *)patch + patch->length + 4); + source = (byte *) patch + 3; + count = patch->length; + position = originy + patch->topdelta; + + if (position < 0) + { + count += position; + position = 0; + } + + if (position + count > cacheheight) + count = cacheheight - position; + + if (count > 0) + memcpy(cache + position, source, count); + + patch = (column_t *) ((byte *) patch + patch->length + 4); } } - // // R_GenerateComposite // Using the texture definition, // the composite texture is created from the patches, // and each column is cached. // -void R_GenerateComposite (int texnum) +void R_GenerateComposite(int texnum) { - byte* block; - texture_t* texture; - texpatch_t* patch; - patch_t* realpatch; - int x; - int x1; - int x2; - int i; - column_t* patchcol; - short* collump; - unsigned short* colofs; - + byte *block; + texture_t *texture; + texpatch_t *patch; + patch_t *realpatch; + int x; + int x1; + int x2; + int i; + column_t *patchcol; + short *collump; + unsigned short *colofs; + texture = textures[texnum]; - block = Z_Malloc (texturecompositesize[texnum], - PU_STATIC, - &texturecomposite[texnum]); + block = Z_Malloc(texturecompositesize[texnum], PU_STATIC, &texturecomposite[texnum]); collump = texturecolumnlump[texnum]; colofs = texturecolumnofs[texnum]; - + // Composite the columns together. - for (i=0 , patch = texture->patches; - ipatchcount; - i++, patch++) + for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++) { - realpatch = W_CacheLumpNum (patch->patch, PU_CACHE); - x1 = patch->originx; - x2 = x1 + SHORT(realpatch->width); - - if (x1<0) - x = 0; - else - x = x1; - - if (x2 > texture->width) - x2 = texture->width; - - for ( ; x= 0) - continue; - - patchcol = (column_t *)((byte *)realpatch - + LONG(realpatch->columnofs[x-x1])); - R_DrawColumnInCache (patchcol, - block + colofs[x], - patch->originy, - texture->height); - } - + realpatch = W_CacheLumpNum(patch->patch, PU_CACHE); + x1 = patch->originx; + x2 = x1 + SHORT(realpatch->width); + + if (x1 < 0) + x = 0; + else + x = x1; + + if (x2 > texture->width) + x2 = texture->width; + + for (; x < x2; x++) + { + // Column does not have multiple patches? + if (collump[x] >= 0) + continue; + + patchcol = + (column_t *) ((byte *) realpatch + LONG(realpatch->columnofs[x - x1])); + R_DrawColumnInCache(patchcol, block + colofs[x], patch->originy, + texture->height); + } } // Now that the texture has been built in column cache, // it is purgable from zone memory. - Z_ChangeTag (block, PU_CACHE); + Z_ChangeTag(block, PU_CACHE); } - // // R_GenerateLookup // -void R_GenerateLookup (int texnum) +void R_GenerateLookup(int texnum) { - texture_t* texture; - byte* patchcount; // patchcount[texture->width] - texpatch_t* patch; - patch_t* realpatch; - int x; - int x1; - int x2; - int i; - short* collump; - unsigned short* colofs; - + texture_t *texture; + byte *patchcount; // patchcount[texture->width] + texpatch_t *patch; + patch_t *realpatch; + int x; + int x1; + int x2; + int i; + short *collump; + unsigned short *colofs; + texture = textures[texnum]; // Composited texture not created yet. texturecomposite[texnum] = 0; - + texturecompositesize[texnum] = 0; collump = texturecolumnlump[texnum]; colofs = texturecolumnofs[texnum]; - + // Now count the number of columns // that are covered by more than one patch. // Fill in the lump / offset, so columns // with only a single patch are all done. patchcount = (byte *) Z_Malloc(texture->width, PU_STATIC, &patchcount); - memset (patchcount, 0, texture->width); + memset(patchcount, 0, texture->width); - for (i=0 , patch = texture->patches; - ipatchcount; - i++, patch++) + for (i = 0, patch = texture->patches; i < texture->patchcount; i++, patch++) { - realpatch = W_CacheLumpNum (patch->patch, PU_CACHE); - x1 = patch->originx; - x2 = x1 + SHORT(realpatch->width); - - if (x1 < 0) - x = 0; - else - x = x1; - - if (x2 > texture->width) - x2 = texture->width; - for ( ; xpatch; - colofs[x] = LONG(realpatch->columnofs[x-x1])+3; - } + realpatch = W_CacheLumpNum(patch->patch, PU_CACHE); + x1 = patch->originx; + x2 = x1 + SHORT(realpatch->width); + + if (x1 < 0) + x = 0; + else + x = x1; + + if (x2 > texture->width) + x2 = texture->width; + for (; x < x2; x++) + { + patchcount[x]++; + collump[x] = patch->patch; + colofs[x] = LONG(realpatch->columnofs[x - x1]) + 3; + } } - - for (x=0 ; xwidth ; x++) + + for (x = 0; x < texture->width; x++) { - if (!patchcount[x]) - { - printf ("R_GenerateLookup: column without a patch (%s)\n", - texture->name); - return; - } - // I_Error ("R_GenerateLookup: column without a patch"); - - if (patchcount[x] > 1) - { - // Use the cached block. - collump[x] = -1; - colofs[x] = texturecompositesize[texnum]; - - if (texturecompositesize[texnum] > 0x10000-texture->height) - { - I_Error ("R_GenerateLookup: texture %i is >64k", - texnum); - } - - texturecompositesize[texnum] += texture->height; - } + if (!patchcount[x]) + { + printf("R_GenerateLookup: column without a patch (%s)\n", texture->name); + return; + } + // I_Error ("R_GenerateLookup: column without a patch"); + + if (patchcount[x] > 1) + { + // Use the cached block. + collump[x] = -1; + colofs[x] = texturecompositesize[texnum]; + + if (texturecompositesize[texnum] > 0x10000 - texture->height) + { + I_Error("R_GenerateLookup: texture %i is >64k", texnum); + } + + texturecompositesize[texnum] += texture->height; + } } Z_Free(patchcount); } - - // // R_GetColumn // -byte* -R_GetColumn -( int tex, - int col ) +byte *R_GetColumn(int tex, int col) { - int lump; - int ofs; - + int lump; + int ofs; + col &= texturewidthmask[tex]; lump = texturecolumnlump[tex][col]; ofs = texturecolumnofs[tex][col]; - + if (lump > 0) - return (byte *)W_CacheLumpNum(lump,PU_CACHE)+ofs; + return (byte *) W_CacheLumpNum(lump, PU_CACHE) + ofs; if (!texturecomposite[tex]) - R_GenerateComposite (tex); + R_GenerateComposite(tex); return texturecomposite[tex] + ofs; } @@ -401,14 +373,13 @@ static void GenerateTextureHashTable(void) int i; int key; - textures_hashtable - = Z_Malloc(sizeof(texture_t *) * numtextures, PU_STATIC, 0); + textures_hashtable = Z_Malloc(sizeof(texture_t *) * numtextures, PU_STATIC, 0); memset(textures_hashtable, 0, sizeof(texture_t *) * numtextures); // Add all textures to hash table - for (i=0; i maxoff) - I_Error ("R_InitTextures: bad texture directory"); - - mtexture = (maptexture_t *) ( (byte *)maptex + offset); - - texture = textures[i] = - Z_Malloc (sizeof(texture_t) - + sizeof(texpatch_t)*(SHORT(mtexture->patchcount)-1), - PU_STATIC, 0); - - texture->width = SHORT(mtexture->width); - texture->height = SHORT(mtexture->height); - texture->patchcount = SHORT(mtexture->patchcount); - - memcpy (texture->name, mtexture->name, sizeof(texture->name)); - mpatch = &mtexture->patches[0]; - patch = &texture->patches[0]; - - for (j=0 ; jpatchcount ; j++, mpatch++, patch++) - { - patch->originx = SHORT(mpatch->originx); - patch->originy = SHORT(mpatch->originy); - patch->patch = patchlookup[SHORT(mpatch->patch)]; - if (patch->patch == -1) - { - I_Error ("R_InitTextures: Missing patch in texture %s", - texture->name); - } - } - texturecolumnlump[i] = Z_Malloc (texture->width*sizeof(**texturecolumnlump), PU_STATIC,0); - texturecolumnofs[i] = Z_Malloc (texture->width*sizeof(**texturecolumnofs), PU_STATIC,0); - - j = 1; - while (j*2 <= texture->width) - j<<=1; - - texturewidthmask[i] = j-1; - textureheight[i] = texture->height< maxoff) + I_Error("R_InitTextures: bad texture directory"); + + mtexture = (maptexture_t *) ((byte *) maptex + offset); + + texture = textures[i] = Z_Malloc( + sizeof(texture_t) + sizeof(texpatch_t) * (SHORT(mtexture->patchcount) - 1), + PU_STATIC, 0); + + texture->width = SHORT(mtexture->width); + texture->height = SHORT(mtexture->height); + texture->patchcount = SHORT(mtexture->patchcount); + + memcpy(texture->name, mtexture->name, sizeof(texture->name)); + mpatch = &mtexture->patches[0]; + patch = &texture->patches[0]; + + for (j = 0; j < texture->patchcount; j++, mpatch++, patch++) + { + patch->originx = SHORT(mpatch->originx); + patch->originy = SHORT(mpatch->originy); + patch->patch = patchlookup[SHORT(mpatch->patch)]; + if (patch->patch == -1) + { + I_Error("R_InitTextures: Missing patch in texture %s", texture->name); + } + } + texturecolumnlump[i] = + Z_Malloc(texture->width * sizeof(**texturecolumnlump), PU_STATIC, 0); + texturecolumnofs[i] = + Z_Malloc(texture->width * sizeof(**texturecolumnofs), PU_STATIC, 0); + + j = 1; + while (j * 2 <= texture->width) + j <<= 1; + + texturewidthmask[i] = j - 1; + textureheight[i] = texture->height << FRACBITS; } Z_Free(patchlookup); @@ -599,39 +570,39 @@ void R_InitTextures (void) W_ReleaseLumpName("TEXTURE1"); if (maptex2) W_ReleaseLumpName("TEXTURE2"); - - // Precalculate whatever possible. - for (i=0 ; iwidth)<leftoffset)<topoffset)<width) << FRACBITS; + spriteoffset[i] = SHORT(patch->leftoffset) << FRACBITS; + spritetopoffset[i] = SHORT(patch->topoffset) << FRACBITS; } } - // // R_InitColormaps // -void R_InitColormaps (void) +void R_InitColormaps(void) { - int lump; + int lump; - // Load in the light tables, + // Load in the light tables, // 256 byte align tables. lump = W_GetNumForName("COLORMAP"); colormaps = W_CacheLumpNum(lump, PU_STATIC); } - // // R_InitData // Locates all the lumps // that will be used by all views // Must be called after W_Init. // -void R_InitData (void) +void R_InitData(void) { - R_InitTextures (); - printf ("."); - R_InitFlats (); - printf ("."); - R_InitSpriteLumps (); - printf ("."); - R_InitColormaps (); + R_InitTextures(); + printf("."); + R_InitFlats(); + printf("."); + R_InitSpriteLumps(); + printf("."); + R_InitColormaps(); } - // // R_FlatNumForName // Retrieval, get a flat number for a flat name. // int R_FlatNumForName(const char *name) { - int i; - char namet[9]; - - i = W_CheckNumForName (name); + int i = W_CheckNumForName(name); if (i == -1) { - namet[8] = 0; - memcpy (namet, name,8); - I_Error ("R_FlatNumForName: %s not found",namet); + char namet[9]; + namet[8] = 0; + memcpy(namet, name, 8); + I_Error("R_FlatNumForName: %s not found", namet); } return i - firstflat; } - - // // R_CheckTextureNumForName // Check whether texture is available. @@ -736,26 +697,25 @@ int R_CheckTextureNumForName(const char *name) int key; // "NoTexture" marker. - if (name[0] == '-') - return 0; - + if (name[0] == '-') + return 0; + key = W_LumpNameHash(name) % numtextures; - texture=textures_hashtable[key]; - + texture = textures_hashtable[key]; + while (texture != NULL) { - if (!strncasecmp (texture->name, name, 8) ) - return texture->index; + if (!strncasecmp(texture->name, name, 8)) + return texture->index; texture = texture->next; } - + return -1; } - // // R_TextureNumForName // Calls R_CheckTextureNumForName, @@ -763,80 +723,77 @@ int R_CheckTextureNumForName(const char *name) // int R_TextureNumForName(const char *name) { - int i; - - i = R_CheckTextureNumForName (name); + int i; + + i = R_CheckTextureNumForName(name); - if (i==-1) + if (i == -1) { - I_Error ("R_TextureNumForName: %s not found", - name); + I_Error("R_TextureNumForName: %s not found", name); } return i; } - - // // R_PrecacheLevel // Preloads all relevant graphics for the level. // -int flatmemory; -int texturememory; -int spritememory; +int flatmemory; +int texturememory; +int spritememory; -void R_PrecacheLevel (void) +void R_PrecacheLevel(void) { - char* flatpresent; - char* texturepresent; - char* spritepresent; - - int i; - int j; - int k; - int lump; - - texture_t* texture; - thinker_t* th; - spriteframe_t* sf; + char *flatpresent; + char *texturepresent; + char *spritepresent; + + int i; + int j; + int k; + int lump; + + texture_t *texture; + thinker_t *th; + spriteframe_t *sf; if (demoplayback) - return; - + return; + // Precache flats. flatpresent = Z_Malloc(numflats, PU_STATIC, NULL); - memset (flatpresent,0,numflats); + memset(flatpresent, 0, numflats); - for (i=0 ; isize; - W_CacheLumpNum(lump, PU_CACHE); - } + if (flatpresent[i]) + { + lump = firstflat + i; + flatmemory += lumpinfo[lump]->size; + W_CacheLumpNum(lump, PU_CACHE); + } } Z_Free(flatpresent); - + // Precache textures. texturepresent = Z_Malloc(numtextures, PU_STATIC, NULL); - memset (texturepresent,0, numtextures); - - for (i=0 ; ipatchcount ; j++) - { - lump = texture->patches[j].patch; - texturememory += lumpinfo[lump]->size; - W_CacheLumpNum(lump , PU_CACHE); - } + if (!texturepresent[i]) + continue; + + texture = textures[i]; + + for (j = 0; j < texture->patchcount; j++) + { + lump = texture->patches[j].patch; + texturememory += lumpinfo[lump]->size; + W_CacheLumpNum(lump, PU_CACHE); + } } Z_Free(texturepresent); - + // Precache sprites. spritepresent = Z_Malloc(numsprites, PU_STATIC, NULL); - memset (spritepresent,0, numsprites); - - for (th = thinkercap.next ; th != &thinkercap ; th=th->next) + memset(spritepresent, 0, numsprites); + + for (th = thinkercap.next; th != &thinkercap; th = th->next) { - if (th->function.acp1 == (actionf_p1)P_MobjThinker) - spritepresent[((mobj_t *)th)->sprite] = 1; + if (th->function.acp1 == (actionf_p1) P_MobjThinker) + spritepresent[((mobj_t *) th)->sprite] = 1; } - + spritememory = 0; - for (i=0 ; ilump[k]; - spritememory += lumpinfo[lump]->size; - W_CacheLumpNum(lump , PU_CACHE); - } - } + if (!spritepresent[i]) + continue; + + for (j = 0; j < sprites[i].numframes; j++) + { + sf = &sprites[i].spriteframes[j]; + for (k = 0; k < 8; k++) + { + lump = firstspritelump + sf->lump[k]; + spritememory += lumpinfo[lump]->size; + W_CacheLumpNum(lump, PU_CACHE); + } + } } Z_Free(spritepresent); } - - - - diff --git a/src/doom/r_draw.c b/src/doom/r_draw.c index 6ce2b05f04..0b194a8f4f 100644 --- a/src/doom/r_draw.c +++ b/src/doom/r_draw.c @@ -19,8 +19,6 @@ // - - #include "doomdef.h" #include "i_system.h" @@ -37,11 +35,11 @@ // ? -#define MAXWIDTH 1120 -#define MAXHEIGHT 832 +#define MAXWIDTH 1120 +#define MAXHEIGHT 832 // status bar height at bottom of screen -#define SBARHEIGHT 32 +#define SBARHEIGHT 32 // // All drawing to the view buffer is accomplished in this file. @@ -53,22 +51,22 @@ // -byte* viewimage; -int viewwidth; -int scaledviewwidth; -int viewheight; -int viewwindowx; -int viewwindowy; -pixel_t* ylookup[MAXHEIGHT]; -int columnofs[MAXWIDTH]; +byte *viewimage; +int viewwidth; +int scaledviewwidth; +int viewheight; +int viewwindowx; +int viewwindowy; +pixel_t *ylookup[MAXHEIGHT]; +int columnofs[MAXWIDTH]; // Color tables for different players, // translate a limited part to another // (color ramps used for suit colors). // -byte translations[3][256]; - -// Backing buffer containing the bezel drawn around the screen and +byte translations[3][256]; + +// Backing buffer containing the bezel drawn around the screen and // surrounding background. static pixel_t *background_buffer = NULL; @@ -78,18 +76,18 @@ static pixel_t *background_buffer = NULL; // R_DrawColumn // Source is the top of the column to scale. // -lighttable_t* dc_colormap; -int dc_x; -int dc_yl; -int dc_yh; -fixed_t dc_iscale; -fixed_t dc_texturemid; +lighttable_t *dc_colormap; +int dc_x; +int dc_yl; +int dc_yh; +fixed_t dc_iscale; +fixed_t dc_texturemid; -// first pixel in a column (possibly virtual) -byte* dc_source; +// first pixel in a column (possibly virtual) +byte *dc_source; -// just for profiling -int dccount; +// just for profiling +int dccount; // // A column is a vertical slice/span from a wall texture that, @@ -97,52 +95,49 @@ int dccount; // will always have constant z depth. // Thus a special case loop for very fast rendering can // be used. It has also been used with Wolfenstein 3D. -// -void R_DrawColumn (void) -{ - int count; - pixel_t* dest; - fixed_t frac; - fixed_t fracstep; - - count = dc_yh - dc_yl; +// +void R_DrawColumn(void) +{ + int count; + pixel_t *dest; + fixed_t frac; + fixed_t fracstep; + + count = dc_yh - dc_yl; // Zero length, column does not exceed a pixel. - if (count < 0) - return; - -#ifdef RANGECHECK - if ((unsigned)dc_x >= SCREENWIDTH - || dc_yl < 0 - || dc_yh >= SCREENHEIGHT) - I_Error ("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); -#endif + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned) dc_x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) + I_Error("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); +#endif // Framebuffer destination address. // Use ylookup LUT to avoid multiply with ScreenWidth. - // Use columnofs LUT for subwindows? - dest = ylookup[dc_yl] + columnofs[dc_x]; + // Use columnofs LUT for subwindows? + dest = ylookup[dc_yl] + columnofs[dc_x]; // Determine scaling, // which is the only mapping to be done. - fracstep = dc_iscale; - frac = dc_texturemid + (dc_yl-centery)*fracstep; + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; // Inner loop that does the actual texture mapping, // e.g. a DDA-lile scaling. // This is as fast as it gets. - do + do { - // Re-map color indices from wall texture column - // using a lighting/special effects LUT. - *dest = dc_colormap[dc_source[(frac>>FRACBITS)&127]]; - - dest += SCREENWIDTH; - frac += fracstep; - - } while (count--); -} + // Re-map color indices from wall texture column + // using a lighting/special effects LUT. + *dest = dc_colormap[dc_source[(frac >> FRACBITS) & 127]]; + + dest += SCREENWIDTH; + frac += fracstep; + } while (count--); +} // UNUSED. @@ -204,47 +199,45 @@ void R_DrawColumn (void) #endif -void R_DrawColumnLow (void) -{ - int count; - pixel_t* dest; - pixel_t* dest2; - fixed_t frac; - fixed_t fracstep; - int x; - - count = dc_yh - dc_yl; +void R_DrawColumnLow(void) +{ + int count; + pixel_t *dest; + pixel_t *dest2; + fixed_t frac; + fixed_t fracstep; + int x; + + count = dc_yh - dc_yl; // Zero length. - if (count < 0) - return; - -#ifdef RANGECHECK - if ((unsigned)dc_x >= SCREENWIDTH - || dc_yl < 0 - || dc_yh >= SCREENHEIGHT) + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned) dc_x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) { - - I_Error ("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); + + I_Error("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); } - // dccount++; -#endif + // dccount++; +#endif // Blocky mode, need to multiply by 2. x = dc_x << 1; - + dest = ylookup[dc_yl] + columnofs[x]; - dest2 = ylookup[dc_yl] + columnofs[x+1]; - - fracstep = dc_iscale; - frac = dc_texturemid + (dc_yl-centery)*fracstep; - - do + dest2 = ylookup[dc_yl] + columnofs[x + 1]; + + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; + + do { - // Hack. Does not work corretly. - *dest2 = *dest = dc_colormap[dc_source[(frac>>FRACBITS)&127]]; - dest += SCREENWIDTH; - dest2 += SCREENWIDTH; - frac += fracstep; + // Hack. Does not work corretly. + *dest2 = *dest = dc_colormap[dc_source[(frac >> FRACBITS) & 127]]; + dest += SCREENWIDTH; + dest2 += SCREENWIDTH; + frac += fracstep; } while (count--); } @@ -253,22 +246,20 @@ void R_DrawColumnLow (void) // // Spectre/Invisibility. // -#define FUZZTABLE 50 -#define FUZZOFF (SCREENWIDTH) +#define FUZZTABLE 50 +#define FUZZOFF (SCREENWIDTH) -int fuzzoffset[FUZZTABLE] = -{ - FUZZOFF,-FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, - FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, - FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF, - FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, - FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF, - FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF, - FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF -}; +int fuzzoffset[FUZZTABLE] = { + FUZZOFF, -FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, + FUZZOFF, -FUZZOFF, FUZZOFF, FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, FUZZOFF, + FUZZOFF, -FUZZOFF, -FUZZOFF, -FUZZOFF, -FUZZOFF, FUZZOFF, -FUZZOFF, -FUZZOFF, + FUZZOFF, FUZZOFF, FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, + FUZZOFF, -FUZZOFF, -FUZZOFF, FUZZOFF, FUZZOFF, -FUZZOFF, -FUZZOFF, -FUZZOFF, + -FUZZOFF, FUZZOFF, FUZZOFF, FUZZOFF, FUZZOFF, -FUZZOFF, FUZZOFF, FUZZOFF, + -FUZZOFF, FUZZOFF}; -int fuzzpos = 0; +int fuzzpos = 0; // @@ -279,118 +270,111 @@ int fuzzpos = 0; // could create the SHADOW effect, // i.e. spectres and invisible players. // -void R_DrawFuzzColumn (void) -{ - int count; - pixel_t* dest; +void R_DrawFuzzColumn(void) +{ + int count; + pixel_t *dest; - // Adjust borders. Low... - if (!dc_yl) - dc_yl = 1; + // Adjust borders. Low... + if (!dc_yl) + dc_yl = 1; // .. and high. - if (dc_yh == viewheight-1) - dc_yh = viewheight - 2; - - count = dc_yh - dc_yl; + if (dc_yh == viewheight - 1) + dc_yh = viewheight - 2; + + count = dc_yh - dc_yl; // Zero length. - if (count < 0) - return; + if (count < 0) + return; -#ifdef RANGECHECK - if ((unsigned)dc_x >= SCREENWIDTH - || dc_yl < 0 || dc_yh >= SCREENHEIGHT) +#ifdef RANGECHECK + if ((unsigned) dc_x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) { - I_Error ("R_DrawFuzzColumn: %i to %i at %i", - dc_yl, dc_yh, dc_x); + I_Error("R_DrawFuzzColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); } #endif - + dest = ylookup[dc_yl] + columnofs[dc_x]; // Looks like an attempt at dithering, // using the colormap #6 (of 0-31, a bit // brighter than average). - do + do { - // Lookup framebuffer, and retrieve - // a pixel that is either one column - // left or right of the current one. - // Add index from colormap to index. - *dest = colormaps[6*256+dest[fuzzoffset[fuzzpos]]]; - - // Clamp table lookup index. - if (++fuzzpos == FUZZTABLE) - fuzzpos = 0; - - dest += SCREENWIDTH; - } while (count--); -} + // Lookup framebuffer, and retrieve + // a pixel that is either one column + // left or right of the current one. + // Add index from colormap to index. + *dest = colormaps[6 * 256 + dest[fuzzoffset[fuzzpos]]]; + + // Clamp table lookup index. + if (++fuzzpos == FUZZTABLE) + fuzzpos = 0; + + dest += SCREENWIDTH; + } while (count--); +} // low detail mode version - -void R_DrawFuzzColumnLow (void) -{ - int count; - pixel_t* dest; - pixel_t* dest2; + +void R_DrawFuzzColumnLow(void) +{ + int count; + pixel_t *dest; + pixel_t *dest2; int x; - // Adjust borders. Low... - if (!dc_yl) - dc_yl = 1; + // Adjust borders. Low... + if (!dc_yl) + dc_yl = 1; // .. and high. - if (dc_yh == viewheight-1) - dc_yh = viewheight - 2; - - count = dc_yh - dc_yl; + if (dc_yh == viewheight - 1) + dc_yh = viewheight - 2; + + count = dc_yh - dc_yl; // Zero length. - if (count < 0) - return; + if (count < 0) + return; // low detail mode, need to multiply by 2 - + x = dc_x << 1; - -#ifdef RANGECHECK - if ((unsigned)x >= SCREENWIDTH - || dc_yl < 0 || dc_yh >= SCREENHEIGHT) + +#ifdef RANGECHECK + if ((unsigned) x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) { - I_Error ("R_DrawFuzzColumn: %i to %i at %i", - dc_yl, dc_yh, dc_x); + I_Error("R_DrawFuzzColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); } #endif - + dest = ylookup[dc_yl] + columnofs[x]; - dest2 = ylookup[dc_yl] + columnofs[x+1]; + dest2 = ylookup[dc_yl] + columnofs[x + 1]; // Looks like an attempt at dithering, // using the colormap #6 (of 0-31, a bit // brighter than average). - do + do { - // Lookup framebuffer, and retrieve - // a pixel that is either one column - // left or right of the current one. - // Add index from colormap to index. - *dest = colormaps[6*256+dest[fuzzoffset[fuzzpos]]]; - *dest2 = colormaps[6*256+dest2[fuzzoffset[fuzzpos]]]; - - // Clamp table lookup index. - if (++fuzzpos == FUZZTABLE) - fuzzpos = 0; - - dest += SCREENWIDTH; - dest2 += SCREENWIDTH; - } while (count--); -} - - - - + // Lookup framebuffer, and retrieve + // a pixel that is either one column + // left or right of the current one. + // Add index from colormap to index. + *dest = colormaps[6 * 256 + dest[fuzzoffset[fuzzpos]]]; + *dest2 = colormaps[6 * 256 + dest2[fuzzoffset[fuzzpos]]]; + + // Clamp table lookup index. + if (++fuzzpos == FUZZTABLE) + fuzzpos = 0; + + dest += SCREENWIDTH; + dest2 += SCREENWIDTH; + } while (count--); +} + // // R_DrawTranslatedColumn @@ -401,106 +385,98 @@ void R_DrawFuzzColumnLow (void) // of the BaronOfHell, the HellKnight, uses // identical sprites, kinda brightened up. // -byte* dc_translation; -byte* translationtables; +byte *dc_translation; +byte *translationtables; -void R_DrawTranslatedColumn (void) -{ - int count; - pixel_t* dest; - fixed_t frac; - fixed_t fracstep; - - count = dc_yh - dc_yl; - if (count < 0) - return; - -#ifdef RANGECHECK - if ((unsigned)dc_x >= SCREENWIDTH - || dc_yl < 0 - || dc_yh >= SCREENHEIGHT) +void R_DrawTranslatedColumn(void) +{ + int count; + pixel_t *dest; + fixed_t frac; + fixed_t fracstep; + + count = dc_yh - dc_yl; + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned) dc_x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) { - I_Error ( "R_DrawColumn: %i to %i at %i", - dc_yl, dc_yh, dc_x); + I_Error("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); } - -#endif + +#endif - dest = ylookup[dc_yl] + columnofs[dc_x]; + dest = ylookup[dc_yl] + columnofs[dc_x]; // Looks familiar. - fracstep = dc_iscale; - frac = dc_texturemid + (dc_yl-centery)*fracstep; + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; // Here we do an additional index re-mapping. - do + do { - // Translation tables are used - // to map certain colorramps to other ones, - // used with PLAY sprites. - // Thus the "green" ramp of the player 0 sprite - // is mapped to gray, red, black/indigo. - *dest = dc_colormap[dc_translation[dc_source[frac>>FRACBITS]]]; - dest += SCREENWIDTH; - - frac += fracstep; - } while (count--); -} + // Translation tables are used + // to map certain colorramps to other ones, + // used with PLAY sprites. + // Thus the "green" ramp of the player 0 sprite + // is mapped to gray, red, black/indigo. + *dest = dc_colormap[dc_translation[dc_source[frac >> FRACBITS]]]; + dest += SCREENWIDTH; + + frac += fracstep; + } while (count--); +} -void R_DrawTranslatedColumnLow (void) -{ - int count; - pixel_t* dest; - pixel_t* dest2; - fixed_t frac; - fixed_t fracstep; - int x; - - count = dc_yh - dc_yl; - if (count < 0) - return; +void R_DrawTranslatedColumnLow(void) +{ + int count; + pixel_t *dest; + pixel_t *dest2; + fixed_t frac; + fixed_t fracstep; + int x; + + count = dc_yh - dc_yl; + if (count < 0) + return; // low detail, need to scale by 2 x = dc_x << 1; - -#ifdef RANGECHECK - if ((unsigned)x >= SCREENWIDTH - || dc_yl < 0 - || dc_yh >= SCREENHEIGHT) + +#ifdef RANGECHECK + if ((unsigned) x >= SCREENWIDTH || dc_yl < 0 || dc_yh >= SCREENHEIGHT) { - I_Error ( "R_DrawColumn: %i to %i at %i", - dc_yl, dc_yh, x); + I_Error("R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, x); } - -#endif + +#endif - dest = ylookup[dc_yl] + columnofs[x]; - dest2 = ylookup[dc_yl] + columnofs[x+1]; + dest = ylookup[dc_yl] + columnofs[x]; + dest2 = ylookup[dc_yl] + columnofs[x + 1]; // Looks familiar. - fracstep = dc_iscale; - frac = dc_texturemid + (dc_yl-centery)*fracstep; + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; // Here we do an additional index re-mapping. - do + do { - // Translation tables are used - // to map certain colorramps to other ones, - // used with PLAY sprites. - // Thus the "green" ramp of the player 0 sprite - // is mapped to gray, red, black/indigo. - *dest = dc_colormap[dc_translation[dc_source[frac>>FRACBITS]]]; - *dest2 = dc_colormap[dc_translation[dc_source[frac>>FRACBITS]]]; - dest += SCREENWIDTH; - dest2 += SCREENWIDTH; - - frac += fracstep; - } while (count--); -} - - + // Translation tables are used + // to map certain colorramps to other ones, + // used with PLAY sprites. + // Thus the "green" ramp of the player 0 sprite + // is mapped to gray, red, black/indigo. + *dest = dc_colormap[dc_translation[dc_source[frac >> FRACBITS]]]; + *dest2 = dc_colormap[dc_translation[dc_source[frac >> FRACBITS]]]; + dest += SCREENWIDTH; + dest2 += SCREENWIDTH; + + frac += fracstep; + } while (count--); +} // @@ -510,36 +486,34 @@ void R_DrawTranslatedColumnLow (void) // Assumes a given structure of the PLAYPAL. // Could be read from a lump instead. // -void R_InitTranslationTables (void) +void R_InitTranslationTables(void) { - int i; - - translationtables = Z_Malloc (256*3, PU_STATIC, 0); - + int i; + + translationtables = Z_Malloc(256 * 3, PU_STATIC, 0); + // translate just the 16 green colors - for (i=0 ; i<256 ; i++) + for (i = 0; i < 256; i++) { - if (i >= 0x70 && i<= 0x7f) - { - // map green ramp to gray, brown, red - translationtables[i] = 0x60 + (i&0xf); - translationtables [i+256] = 0x40 + (i&0xf); - translationtables [i+512] = 0x20 + (i&0xf); - } - else - { - // Keep all other colors as is. - translationtables[i] = translationtables[i+256] - = translationtables[i+512] = i; - } + if (i >= 0x70 && i <= 0x7f) + { + // map green ramp to gray, brown, red + translationtables[i] = 0x60 + (i & 0xf); + translationtables[i + 256] = 0x40 + (i & 0xf); + translationtables[i + 512] = 0x20 + (i & 0xf); + } + else + { + // Keep all other colors as is. + translationtables[i] = translationtables[i + 256] = + translationtables[i + 512] = i; + } } } - - // -// R_DrawSpan +// R_DrawSpan // With DOOM style restrictions on view orientation, // the floors and ceilings consist of horizontal slices // or spans with constant z depth. @@ -550,28 +524,28 @@ void R_InitTranslationTables (void) // In consequence, flats are not stored by column (like walls), // and the inner loop has to step in texture space u and v. // -int ds_y; -int ds_x1; -int ds_x2; +int ds_y; +int ds_x1; +int ds_x2; -lighttable_t* ds_colormap; +lighttable_t *ds_colormap; -fixed_t ds_xfrac; -fixed_t ds_yfrac; -fixed_t ds_xstep; -fixed_t ds_ystep; +fixed_t ds_xfrac; +fixed_t ds_yfrac; +fixed_t ds_xstep; +fixed_t ds_ystep; -// start of a 64*64 tile image -byte* ds_source; +// start of a 64*64 tile image +byte *ds_source; // just for profiling -int dscount; +int dscount; // // Draws the actual span. -void R_DrawSpan (void) -{ +void R_DrawSpan(void) +{ unsigned int position, step; pixel_t *dest; int count; @@ -579,13 +553,10 @@ void R_DrawSpan (void) unsigned int xtemp, ytemp; #ifdef RANGECHECK - if (ds_x2 < ds_x1 - || ds_x1<0 - || ds_x2>=SCREENWIDTH - || (unsigned)ds_y>SCREENHEIGHT) + if (ds_x2 < ds_x1 || ds_x1 < 0 || ds_x2 >= SCREENWIDTH || + (unsigned) ds_y > SCREENHEIGHT) { - I_Error( "R_DrawSpan: %i to %i at %i", - ds_x1,ds_x2,ds_y); + I_Error("R_DrawSpan: %i to %i at %i", ds_x1, ds_x2, ds_y); } // dscount++; #endif @@ -595,10 +566,8 @@ void R_DrawSpan (void) // each 16-bit part, the top 6 bits are the integer part and the // bottom 10 bits are the fractional part of the pixel position. - position = ((ds_xfrac << 10) & 0xffff0000) - | ((ds_yfrac >> 6) & 0x0000ffff); - step = ((ds_xstep << 10) & 0xffff0000) - | ((ds_ystep >> 6) & 0x0000ffff); + position = ((ds_xfrac << 10) & 0xffff0000) | ((ds_yfrac >> 6) & 0x0000ffff); + step = ((ds_xstep << 10) & 0xffff0000) | ((ds_ystep >> 6) & 0x0000ffff); dest = ylookup[ds_y] + columnofs[ds_x1]; @@ -607,14 +576,14 @@ void R_DrawSpan (void) do { - // Calculate current texture index in u,v. + // Calculate current texture index in u,v. ytemp = (position >> 4) & 0x0fc0; xtemp = (position >> 26); spot = xtemp | ytemp; - // Lookup pixel from flat texture tile, - // re-index using light/colormap. - *dest++ = ds_colormap[ds_source[spot]]; + // Lookup pixel from flat texture tile, + // re-index using light/colormap. + *dest++ = ds_colormap[ds_source[spot]]; position += step; @@ -622,7 +591,6 @@ void R_DrawSpan (void) } - // UNUSED. // Loop unrolled by 4. #if 0 @@ -692,14 +660,14 @@ void R_DrawSpan (void) *dest++ = colormap[source[spot]]; count--; } -} +} #endif // // Again.. // -void R_DrawSpanLow (void) +void R_DrawSpanLow(void) { unsigned int position, step; unsigned int xtemp, ytemp; @@ -708,21 +676,16 @@ void R_DrawSpanLow (void) int spot; #ifdef RANGECHECK - if (ds_x2 < ds_x1 - || ds_x1<0 - || ds_x2>=SCREENWIDTH - || (unsigned)ds_y>SCREENHEIGHT) + if (ds_x2 < ds_x1 || ds_x1 < 0 || ds_x2 >= SCREENWIDTH || + (unsigned) ds_y > SCREENHEIGHT) { - I_Error( "R_DrawSpan: %i to %i at %i", - ds_x1,ds_x2,ds_y); + I_Error("R_DrawSpan: %i to %i at %i", ds_x1, ds_x2, ds_y); } -// dscount++; +// dscount++; #endif - position = ((ds_xfrac << 10) & 0xffff0000) - | ((ds_yfrac >> 6) & 0x0000ffff); - step = ((ds_xstep << 10) & 0xffff0000) - | ((ds_ystep >> 6) & 0x0000ffff); + position = ((ds_xfrac << 10) & 0xffff0000) | ((ds_yfrac >> 6) & 0x0000ffff); + step = ((ds_xstep << 10) & 0xffff0000) | ((ds_ystep >> 6) & 0x0000ffff); count = (ds_x2 - ds_x1); @@ -734,56 +697,51 @@ void R_DrawSpanLow (void) do { - // Calculate current texture index in u,v. + // Calculate current texture index in u,v. ytemp = (position >> 4) & 0x0fc0; xtemp = (position >> 26); spot = xtemp | ytemp; - // Lowres/blocky mode does it twice, - // while scale is adjusted appropriately. - *dest++ = ds_colormap[ds_source[spot]]; - *dest++ = ds_colormap[ds_source[spot]]; + // Lowres/blocky mode does it twice, + // while scale is adjusted appropriately. + *dest++ = ds_colormap[ds_source[spot]]; + *dest++ = ds_colormap[ds_source[spot]]; - position += step; + position += step; } while (count--); } // -// R_InitBuffer +// R_InitBuffer // Creats lookup tables that avoid // multiplies and other hazzles // for getting the framebuffer address // of a pixel to draw. // -void -R_InitBuffer -( int width, - int height ) -{ - int i; +void R_InitBuffer(int width, int height) +{ + int i; // Handle resize, // e.g. smaller view windows // with border and/or status bar. - viewwindowx = (SCREENWIDTH-width) >> 1; + viewwindowx = (SCREENWIDTH - width) >> 1; // Column offset. For windows. - for (i=0 ; i> 1; + if (width == SCREENWIDTH) + viewwindowy = 0; + else + viewwindowy = (SCREENHEIGHT - SBARHEIGHT - height) >> 1; // Preclaculate all row offsets. - for (i=0 ; i #include @@ -36,103 +33,75 @@ #include "r_sky.h" - - - // Fineangles in the SCREENWIDTH wide window. -#define FIELDOFVIEW 2048 - +#define FIELDOFVIEW 2048 -int viewangleoffset; +int viewangleoffset; // increment every time a check is made -int validcount = 1; +int validcount = 1; -lighttable_t* fixedcolormap; +lighttable_t *fixedcolormap; -int centerx; -int centery; +int centerx; +int centery; -fixed_t centerxfrac; -fixed_t centeryfrac; -fixed_t projection; +fixed_t centerxfrac; +fixed_t centeryfrac; +fixed_t projection; // just for profiling purposes -int framecount; +int framecount; -int sscount; -int linecount; -int loopcount; +int sscount; +int linecount; +int loopcount; -fixed_t viewx; -fixed_t viewy; -fixed_t viewz; +fixed_t viewx; +fixed_t viewy; +fixed_t viewz; -angle_t viewangle; +angle_t viewangle; -fixed_t viewcos; -fixed_t viewsin; +fixed_t viewcos; +fixed_t viewsin; -player_t* viewplayer; +player_t *viewplayer; // 0 = high, 1 = low -int detailshift; +int detailshift; // // precalculated math tables // -angle_t clipangle; +angle_t clipangle; // The viewangletox[viewangle + FINEANGLES/4] lookup // maps the visible view angles to screen X coordinates, // flattening the arc to a flat projection plane. -// There will be many angles mapped to the same X. -int viewangletox[FINEANGLES/2]; +// There will be many angles mapped to the same X. +int viewangletox[FINEANGLES / 2]; // The xtoviewangleangle[] table maps a screen pixel // to the lowest viewangle that maps back to x ranges // from clipangle to -clipangle. -angle_t xtoviewangle[SCREENWIDTH+1]; +angle_t xtoviewangle[SCREENWIDTH + 1]; -lighttable_t* scalelight[LIGHTLEVELS][MAXLIGHTSCALE]; -lighttable_t* scalelightfixed[MAXLIGHTSCALE]; -lighttable_t* zlight[LIGHTLEVELS][MAXLIGHTZ]; +lighttable_t *scalelight[LIGHTLEVELS][MAXLIGHTSCALE]; +lighttable_t *scalelightfixed[MAXLIGHTSCALE]; +lighttable_t *zlight[LIGHTLEVELS][MAXLIGHTZ]; // bumped light from gun blasts -int extralight; - - +int extralight; -void (*colfunc) (void); -void (*basecolfunc) (void); -void (*fuzzcolfunc) (void); -void (*transcolfunc) (void); -void (*spanfunc) (void); - - -// -// R_AddPointToBox -// Expand a given bbox -// so that it encloses a given point. -// -void -R_AddPointToBox -( int x, - int y, - fixed_t* box ) -{ - if (x< box[BOXLEFT]) - box[BOXLEFT] = x; - if (x> box[BOXRIGHT]) - box[BOXRIGHT] = x; - if (y< box[BOXBOTTOM]) - box[BOXBOTTOM] = y; - if (y> box[BOXTOP]) - box[BOXTOP] = y; -} +void (*colfunc)(void); +void (*basecolfunc)(void); +void (*fuzzcolfunc)(void); +void (*transcolfunc)(void); +void (*spanfunc)(void); // @@ -141,119 +110,111 @@ R_AddPointToBox // check point against partition plane. // Returns side 0 (front) or 1 (back). // -int -R_PointOnSide -( fixed_t x, - fixed_t y, - node_t* node ) +int R_PointOnSide(fixed_t x, fixed_t y, node_t *node) { - fixed_t dx; - fixed_t dy; - fixed_t left; - fixed_t right; - + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + if (!node->dx) { - if (x <= node->x) - return node->dy > 0; - - return node->dy < 0; + if (x <= node->x) + return node->dy > 0; + + return node->dy < 0; } if (!node->dy) { - if (y <= node->y) - return node->dx < 0; - - return node->dx > 0; + if (y <= node->y) + return node->dx < 0; + + return node->dx > 0; } - + dx = (x - node->x); dy = (y - node->y); - + // Try to quickly decide by looking at sign bits. - if ( (node->dy ^ node->dx ^ dx ^ dy)&0x80000000 ) + if ((node->dy ^ node->dx ^ dx ^ dy) & 0x80000000) { - if ( (node->dy ^ dx) & 0x80000000 ) - { - // (left is negative) - return 1; - } - return 0; + if ((node->dy ^ dx) & 0x80000000) + { + // (left is negative) + return 1; + } + return 0; } - left = FixedMul ( node->dy>>FRACBITS , dx ); - right = FixedMul ( dy , node->dx>>FRACBITS ); - + left = FixedMul(node->dy >> FRACBITS, dx); + right = FixedMul(dy, node->dx >> FRACBITS); + if (right < left) { - // front side - return 0; + // front side + return 0; } // back side - return 1; + return 1; } -int -R_PointOnSegSide -( fixed_t x, - fixed_t y, - seg_t* line ) +int R_PointOnSegSide(fixed_t x, fixed_t y, seg_t *line) { - fixed_t lx; - fixed_t ly; - fixed_t ldx; - fixed_t ldy; - fixed_t dx; - fixed_t dy; - fixed_t left; - fixed_t right; - + fixed_t lx; + fixed_t ly; + fixed_t ldx; + fixed_t ldy; + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + lx = line->v1->x; ly = line->v1->y; - + ldx = line->v2->x - lx; ldy = line->v2->y - ly; - + if (!ldx) { - if (x <= lx) - return ldy > 0; - - return ldy < 0; + if (x <= lx) + return ldy > 0; + + return ldy < 0; } if (!ldy) { - if (y <= ly) - return ldx < 0; - - return ldx > 0; + if (y <= ly) + return ldx < 0; + + return ldx > 0; } - + dx = (x - lx); dy = (y - ly); - + // Try to quickly decide by looking at sign bits. - if ( (ldy ^ ldx ^ dx ^ dy)&0x80000000 ) + if ((ldy ^ ldx ^ dx ^ dy) & 0x80000000) { - if ( (ldy ^ dx) & 0x80000000 ) - { - // (left is negative) - return 1; - } - return 0; + if ((ldy ^ dx) & 0x80000000) + { + // (left is negative) + return 1; + } + return 0; } - left = FixedMul ( ldy>>FRACBITS , dx ); - right = FixedMul ( dy , ldx>>FRACBITS ); - + left = FixedMul(ldy >> FRACBITS, dx); + right = FixedMul(dy, ldx >> FRACBITS); + if (right < left) { - // front side - return 0; + // front side + return 0; } // back side - return 1; + return 1; } @@ -269,128 +230,115 @@ R_PointOnSegSide // - - -angle_t -R_PointToAngle -( fixed_t x, - fixed_t y ) -{ +angle_t R_PointToAngle(fixed_t x, fixed_t y) +{ x -= viewx; y -= viewy; - - if ( (!x) && (!y) ) - return 0; - if (x>= 0) + if ((!x) && (!y)) + return 0; + + if (x >= 0) { - // x >=0 - if (y>= 0) - { - // y>= 0 - - if (x>y) - { - // octant 0 - return tantoangle[ SlopeDiv(y,x)]; - } - else - { - // octant 1 - return ANG90-1-tantoangle[ SlopeDiv(x,y)]; - } - } - else - { - // y<0 - y = -y; - - if (x>y) - { - // octant 8 - return -tantoangle[SlopeDiv(y,x)]; - } - else - { - // octant 7 - return ANG270+tantoangle[ SlopeDiv(x,y)]; - } - } + // x >=0 + if (y >= 0) + { + // y>= 0 + + if (x > y) + { + // octant 0 + return tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 1 + return ANG90 - 1 - tantoangle[SlopeDiv(x, y)]; + } + } + else + { + // y<0 + y = -y; + + if (x > y) + { + // octant 8 + return -tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 7 + return ANG270 + tantoangle[SlopeDiv(x, y)]; + } + } } else { - // x<0 - x = -x; - - if (y>= 0) - { - // y>= 0 - if (x>y) - { - // octant 3 - return ANG180-1-tantoangle[ SlopeDiv(y,x)]; - } - else - { - // octant 2 - return ANG90+ tantoangle[ SlopeDiv(x,y)]; - } - } - else - { - // y<0 - y = -y; - - if (x>y) - { - // octant 4 - return ANG180+tantoangle[ SlopeDiv(y,x)]; - } - else - { - // octant 5 - return ANG270-1-tantoangle[ SlopeDiv(x,y)]; - } - } + // x<0 + x = -x; + + if (y >= 0) + { + // y>= 0 + if (x > y) + { + // octant 3 + return ANG180 - 1 - tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 2 + return ANG90 + tantoangle[SlopeDiv(x, y)]; + } + } + else + { + // y<0 + y = -y; + + if (x > y) + { + // octant 4 + return ANG180 + tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 5 + return ANG270 - 1 - tantoangle[SlopeDiv(x, y)]; + } + } } return 0; } -angle_t -R_PointToAngle2 -( fixed_t x1, - fixed_t y1, - fixed_t x2, - fixed_t y2 ) -{ +angle_t R_PointToAngle2(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2) +{ viewx = x1; viewy = y1; - - return R_PointToAngle (x2, y2); + + return R_PointToAngle(x2, y2); } -fixed_t -R_PointToDist -( fixed_t x, - fixed_t y ) +fixed_t R_PointToDist(fixed_t x, fixed_t y) { - int angle; - fixed_t dx; - fixed_t dy; - fixed_t temp; - fixed_t dist; - fixed_t frac; - + int angle; + fixed_t dx; + fixed_t dy; + fixed_t temp; + fixed_t dist; + fixed_t frac; + dx = abs(x - viewx); dy = abs(y - viewy); - - if (dy>dx) + + if (dy > dx) { - temp = dx; - dx = dy; - dy = temp; + temp = dx; + dx = dy; + dy = temp; } // Fix crashes in udm1.wad @@ -401,24 +349,22 @@ R_PointToDist } else { - frac = 0; + frac = 0; } - - angle = (tantoangle[frac>>DBITS]+ANG90) >> ANGLETOFINESHIFT; + + angle = (tantoangle[frac >> DBITS] + ANG90) >> ANGLETOFINESHIFT; // use as cosine - dist = FixedDiv (dx, finesine[angle] ); - + dist = FixedDiv(dx, finesine[angle]); + return dist; } - - // // R_InitPointToAngle // -void R_InitPointToAngle (void) +void R_InitPointToAngle(void) { // UNUSED - now getting from tables.c #if 0 @@ -445,15 +391,15 @@ void R_InitPointToAngle (void) // at the given angle. // rw_distance must be calculated first. // -fixed_t R_ScaleFromGlobalAngle (angle_t visangle) +fixed_t R_ScaleFromGlobalAngle(angle_t visangle) { - fixed_t scale; - angle_t anglea; - angle_t angleb; - int sinea; - int sineb; - fixed_t num; - int den; + fixed_t scale; + angle_t anglea; + angle_t angleb; + int sinea; + int sineb; + fixed_t num; + int den; // UNUSED #if 0 @@ -472,36 +418,35 @@ fixed_t R_ScaleFromGlobalAngle (angle_t visangle) } #endif - anglea = ANG90 + (visangle-viewangle); - angleb = ANG90 + (visangle-rw_normalangle); + anglea = ANG90 + (visangle - viewangle); + angleb = ANG90 + (visangle - rw_normalangle); // both sines are allways positive - sinea = finesine[anglea>>ANGLETOFINESHIFT]; - sineb = finesine[angleb>>ANGLETOFINESHIFT]; - num = FixedMul(projection,sineb)<> ANGLETOFINESHIFT]; + sineb = finesine[angleb >> ANGLETOFINESHIFT]; + num = FixedMul(projection, sineb) << detailshift; + den = FixedMul(rw_distance, sinea); - if (den > num>>FRACBITS) + if (den > num >> FRACBITS) { - scale = FixedDiv (num, den); + scale = FixedDiv(num, den); - if (scale > 64*FRACUNIT) - scale = 64*FRACUNIT; - else if (scale < 256) - scale = 256; + if (scale > 64 * FRACUNIT) + scale = 64 * FRACUNIT; + else if (scale < 256) + scale = 256; } else - scale = 64*FRACUNIT; - + scale = 64 * FRACUNIT; + return scale; } - // // R_InitTables // -void R_InitTables (void) +void R_InitTables(void) { // UNUSED: now getting from tables.c #if 0 @@ -528,131 +473,122 @@ void R_InitTables (void) finesine[i] = t; } #endif - } - // // R_InitTextureMapping // -void R_InitTextureMapping (void) +void R_InitTextureMapping(void) { - int i; - int x; - int t; - fixed_t focallength; - + int i; + int x; + int t; + fixed_t focallength; + // Use tangent table to generate viewangletox: // viewangletox will give the next greatest x // after the view angle. // // Calc focallength // so FIELDOFVIEW angles covers SCREENWIDTH. - focallength = FixedDiv (centerxfrac, - finetangent[FINEANGLES/4+FIELDOFVIEW/2] ); - - for (i=0 ; i FRACUNIT*2) - t = -1; - else if (finetangent[i] < -FRACUNIT*2) - t = viewwidth+1; - else - { - t = FixedMul (finetangent[i], focallength); - t = (centerxfrac - t+FRACUNIT-1)>>FRACBITS; - - if (t < -1) - t = -1; - else if (t>viewwidth+1) - t = viewwidth+1; - } - viewangletox[i] = t; + if (finetangent[i] > FRACUNIT * 2) + t = -1; + else if (finetangent[i] < -FRACUNIT * 2) + t = viewwidth + 1; + else + { + t = FixedMul(finetangent[i], focallength); + t = (centerxfrac - t + FRACUNIT - 1) >> FRACBITS; + + if (t < -1) + t = -1; + else if (t > viewwidth + 1) + t = viewwidth + 1; + } + viewangletox[i] = t; } - + // Scan viewangletox[] to generate xtoviewangle[]: // xtoviewangle will give the smallest view angle - // that maps to x. - for (x=0;x<=viewwidth;x++) + // that maps to x. + for (x = 0; x <= viewwidth; x++) { - i = 0; - while (viewangletox[i]>x) - i++; - xtoviewangle[x] = (i< x) + i++; + xtoviewangle[x] = (i << ANGLETOFINESHIFT) - ANG90; } - + // Take out the fencepost cases from viewangletox. - for (i=0 ; i>= LIGHTSCALESHIFT; - level = startmap - scale/DISTMAP; - - if (level < 0) - level = 0; - - if (level >= NUMCOLORMAPS) - level = NUMCOLORMAPS-1; - - zlight[i][j] = colormaps + level*256; - } + int startmap = ((LIGHTLEVELS - 1 - i) * 2) * NUMCOLORMAPS / LIGHTLEVELS; + for (j = 0; j < MAXLIGHTZ; j++) + { + scale = FixedDiv((SCREENWIDTH / 2 * FRACUNIT), (j + 1) << LIGHTZSHIFT); + scale >>= LIGHTSCALESHIFT; + level = startmap - scale / DISTMAP; + + if (level < 0) + level = 0; + + if (level >= NUMCOLORMAPS) + level = NUMCOLORMAPS - 1; + + zlight[i][j] = colormaps + level * 256; + } } } - // // R_SetViewSize // Do not really change anything here, // because it might be in the middle of a refresh. // The change will take effect next refresh. // -boolean setsizeneeded; -int setblocks; -int setdetail; +boolean setsizeneeded; +int setblocks; +int setdetail; -void -R_SetViewSize -( int blocks, - int detail ) +void R_SetViewSize(int blocks, int detail) { setsizeneeded = true; setblocks = blocks; @@ -663,125 +599,120 @@ R_SetViewSize // // R_ExecuteSetViewSize // -void R_ExecuteSetViewSize (void) +void R_ExecuteSetViewSize(void) { - fixed_t cosadj; - fixed_t dy; - int i; - int j; - int level; - int startmap; + fixed_t cosadj; + fixed_t dy; + int level; setsizeneeded = false; if (setblocks == 11) { - scaledviewwidth = SCREENWIDTH; - viewheight = SCREENHEIGHT; + scaledviewwidth = SCREENWIDTH; + viewheight = SCREENHEIGHT; } else { - scaledviewwidth = setblocks*32; - viewheight = (setblocks*168/10)&~7; + scaledviewwidth = setblocks * 32; + viewheight = (setblocks * 168 / 10) & ~7; } - + detailshift = setdetail; - viewwidth = scaledviewwidth>>detailshift; - - centery = viewheight/2; - centerx = viewwidth/2; - centerxfrac = centerx<> detailshift; + + centery = viewheight / 2; + centerx = viewwidth / 2; + centerxfrac = centerx << FRACBITS; + centeryfrac = centery << FRACBITS; projection = centerxfrac; if (!detailshift) { - colfunc = basecolfunc = R_DrawColumn; - fuzzcolfunc = R_DrawFuzzColumn; - transcolfunc = R_DrawTranslatedColumn; - spanfunc = R_DrawSpan; + colfunc = basecolfunc = R_DrawColumn; + fuzzcolfunc = R_DrawFuzzColumn; + transcolfunc = R_DrawTranslatedColumn; + spanfunc = R_DrawSpan; } else { - colfunc = basecolfunc = R_DrawColumnLow; - fuzzcolfunc = R_DrawFuzzColumnLow; - transcolfunc = R_DrawTranslatedColumnLow; - spanfunc = R_DrawSpanLow; + colfunc = basecolfunc = R_DrawColumnLow; + fuzzcolfunc = R_DrawFuzzColumnLow; + transcolfunc = R_DrawTranslatedColumnLow; + spanfunc = R_DrawSpanLow; } - R_InitBuffer (scaledviewwidth, viewheight); - - R_InitTextureMapping (); - + R_InitBuffer(scaledviewwidth, viewheight); + + R_InitTextureMapping(); + // psprite scales - pspritescale = FRACUNIT*viewwidth/SCREENWIDTH; - pspriteiscale = FRACUNIT*SCREENWIDTH/viewwidth; - + pspritescale = FRACUNIT * viewwidth / SCREENWIDTH; + pspriteiscale = FRACUNIT * SCREENWIDTH / viewwidth; + // thing clipping - for (i=0 ; i>ANGLETOFINESHIFT]); - distscale[i] = FixedDiv (FRACUNIT,cosadj); + cosadj = abs(finecosine[xtoviewangle[i] >> ANGLETOFINESHIFT]); + distscale[i] = FixedDiv(FRACUNIT, cosadj); } - + // Calculate the light levels to use // for each level / scale combination. - for (i=0 ; i< LIGHTLEVELS ; i++) + for (int i = 0; i < LIGHTLEVELS; i++) { - startmap = ((LIGHTLEVELS-1-i)*2)*NUMCOLORMAPS/LIGHTLEVELS; - for (j=0 ; j= NUMCOLORMAPS) - level = NUMCOLORMAPS-1; - - scalelight[i][j] = colormaps + level*256; - } + int startmap = ((LIGHTLEVELS - 1 - i) * 2) * NUMCOLORMAPS / LIGHTLEVELS; + for (int j = 0; j < MAXLIGHTSCALE; j++) + { + level = startmap - j * SCREENWIDTH / (viewwidth << detailshift) / DISTMAP; + + if (level < 0) + level = 0; + + if (level >= NUMCOLORMAPS) + level = NUMCOLORMAPS - 1; + + scalelight[i][j] = colormaps + level * 256; + } } } - // // R_Init // - -void R_Init (void) +void R_Init(void) { - R_InitData (); - printf ("."); - R_InitPointToAngle (); - printf ("."); - R_InitTables (); + R_InitData(); + printf("."); + R_InitPointToAngle(); + printf("."); + R_InitTables(); // viewwidth / viewheight / detailLevel are set by the defaults - printf ("."); - - R_SetViewSize (screenblocks, detailLevel); - R_InitPlanes (); - printf ("."); - R_InitLightTables (); - printf ("."); - R_InitSkyMap (); - R_InitTranslationTables (); - printf ("."); - + printf("."); + + R_SetViewSize(screenblocks, detailLevel); + R_InitPlanes(); + printf("."); + R_InitLightTables(); + printf("."); + R_InitSkyMap(); + R_InitTranslationTables(); + printf("."); + framecount = 0; } @@ -789,40 +720,31 @@ void R_Init (void) // // R_PointInSubsector // -subsector_t* -R_PointInSubsector -( fixed_t x, - fixed_t y ) +subsector_t *R_PointInSubsector(fixed_t x, fixed_t y) { - node_t* node; - int side; - int nodenum; - // single subsector is a special case - if (!numnodes) - return subsectors; - - nodenum = numnodes-1; + if (!numnodes) + return subsectors; + + int nodenum = numnodes - 1; - while (! (nodenum & NF_SUBSECTOR) ) + while (!(nodenum & NF_SUBSECTOR)) { - node = &nodes[nodenum]; - side = R_PointOnSide (x, y, node); - nodenum = node->children[side]; + node_t *node = &nodes[nodenum]; + int side = R_PointOnSide(x, y, node); + nodenum = node->children[side]; } - + return &subsectors[nodenum & ~NF_SUBSECTOR]; } - // // R_SetupFrame // -void R_SetupFrame (player_t* player) -{ - int i; - +void R_SetupFrame(player_t *player) +{ + viewplayer = player; viewx = player->mo->x; viewy = player->mo->y; @@ -830,61 +752,58 @@ void R_SetupFrame (player_t* player) extralight = player->extralight; viewz = player->viewz; - - viewsin = finesine[viewangle>>ANGLETOFINESHIFT]; - viewcos = finecosine[viewangle>>ANGLETOFINESHIFT]; - + + viewsin = finesine[viewangle >> ANGLETOFINESHIFT]; + viewcos = finecosine[viewangle >> ANGLETOFINESHIFT]; + sscount = 0; - + if (player->fixedcolormap) { - fixedcolormap = - colormaps - + player->fixedcolormap*256; - - walllights = scalelightfixed; + fixedcolormap = colormaps + player->fixedcolormap * 256; - for (i=0 ; i= viewwidth - || y > viewheight) + if (x2 < x1 || x1 < 0 || x2 >= viewwidth || y > viewheight) { - I_Error ("R_MapPlane: %i, %i at %i",x1,x2,y); + I_Error("R_MapPlane: %i, %i at %i", x1, x2, y); } #endif if (planeheight != cachedheight[y]) { - cachedheight[y] = planeheight; - distance = cacheddistance[y] = FixedMul (planeheight, yslope[y]); - ds_xstep = cachedxstep[y] = FixedMul (distance,basexscale); - ds_ystep = cachedystep[y] = FixedMul (distance,baseyscale); + cachedheight[y] = planeheight; + distance = cacheddistance[y] = FixedMul(planeheight, yslope[y]); + ds_xstep = cachedxstep[y] = FixedMul(distance, basexscale); + ds_ystep = cachedystep[y] = FixedMul(distance, baseyscale); } else { - distance = cacheddistance[y]; - ds_xstep = cachedxstep[y]; - ds_ystep = cachedystep[y]; + distance = cacheddistance[y]; + ds_xstep = cachedxstep[y]; + ds_ystep = cachedystep[y]; } - - length = FixedMul (distance,distscale[x1]); - angle = (viewangle + xtoviewangle[x1])>>ANGLETOFINESHIFT; + + length = FixedMul(distance, distscale[x1]); + angle = (viewangle + xtoviewangle[x1]) >> ANGLETOFINESHIFT; ds_xfrac = viewx + FixedMul(finecosine[angle], length); ds_yfrac = -viewy - FixedMul(finesine[angle], length); if (fixedcolormap) - ds_colormap = fixedcolormap; + ds_colormap = fixedcolormap; else { - index = distance >> LIGHTZSHIFT; - - if (index >= MAXLIGHTZ ) - index = MAXLIGHTZ-1; + index = distance >> LIGHTZSHIFT; + + if (index >= MAXLIGHTZ) + index = MAXLIGHTZ - 1; - ds_colormap = planezlight[index]; + ds_colormap = planezlight[index]; } - + ds_y = y; ds_x1 = x1; ds_x2 = x2; // high or low detail - spanfunc (); + spanfunc(); } @@ -175,69 +166,62 @@ R_MapPlane // R_ClearPlanes // At begining of frame. // -void R_ClearPlanes (void) +void R_ClearPlanes(void) { - int i; - angle_t angle; - + int i; + angle_t angle; + // opening / clipping determination - for (i=0 ; i>ANGLETOFINESHIFT; - + angle = (viewangle - ANG90) >> ANGLETOFINESHIFT; + // scale will be unit scale at SCREENWIDTH/2 distance - basexscale = FixedDiv (finecosine[angle],centerxfrac); - baseyscale = -FixedDiv (finesine[angle],centerxfrac); + basexscale = FixedDiv(finecosine[angle], centerxfrac); + baseyscale = -FixedDiv(finesine[angle], centerxfrac); } - - // // R_FindPlane // -visplane_t* -R_FindPlane -( fixed_t height, - int picnum, - int lightlevel ) +visplane_t *R_FindPlane(fixed_t height, int picnum, int lightlevel) { - visplane_t* check; - + visplane_t *check; + if (picnum == skyflatnum) { - height = 0; // all skys map together - lightlevel = 0; + height = 0; // all skys map together + lightlevel = 0; } - - for (check=visplanes; checkheight - && picnum == check->picnum - && lightlevel == check->lightlevel) - { - break; - } + if (height == check->height && picnum == check->picnum && + lightlevel == check->lightlevel) + { + break; + } } - - + + if (check < lastvisplane) - return check; - + return check; + if (lastvisplane - visplanes == MAXVISPLANES) - I_Error ("R_FindPlane: no more visplanes"); - + I_Error("R_FindPlane: no more visplanes"); + lastvisplane++; check->height = height; @@ -245,9 +229,9 @@ R_FindPlane check->lightlevel = lightlevel; check->minx = SCREENWIDTH; check->maxx = -1; - - memset (check->top,0xff,sizeof(check->top)); - + + memset(check->top, 0xff, sizeof(check->top)); + return check; } @@ -255,67 +239,63 @@ R_FindPlane // // R_CheckPlane // -visplane_t* -R_CheckPlane -( visplane_t* pl, - int start, - int stop ) +visplane_t *R_CheckPlane(visplane_t *pl, int start, int stop) { - int intrl; - int intrh; - int unionl; - int unionh; - int x; - + int intrl; + int intrh; + int unionl; + int unionh; + int x; + if (start < pl->minx) { - intrl = pl->minx; - unionl = start; + intrl = pl->minx; + unionl = start; } else { - unionl = pl->minx; - intrl = start; + unionl = pl->minx; + intrl = start; } - + if (stop > pl->maxx) { - intrh = pl->maxx; - unionh = stop; + intrh = pl->maxx; + unionh = stop; } else { - unionh = pl->maxx; - intrh = stop; + unionh = pl->maxx; + intrh = stop; } - for (x=intrl ; x<= intrh ; x++) - if (pl->top[x] != 0xff) - break; + for (x = intrl; x <= intrh; x++) + if (pl->top[x] != 0xff) + break; if (x > intrh) { - pl->minx = unionl; - pl->maxx = unionh; + pl->minx = unionl; + pl->maxx = unionh; - // use the same one - return pl; + // use the same one + return pl; } - + // make a new visplane lastvisplane->height = pl->height; lastvisplane->picnum = pl->picnum; lastvisplane->lightlevel = pl->lightlevel; - + if (lastvisplane - visplanes == MAXVISPLANES) - I_Error ("R_CheckPlane: no more visplanes"); + I_Error("R_CheckPlane: no more visplanes"); pl = lastvisplane++; pl->minx = start; pl->maxx = stop; - memset (pl->top,0xff,sizeof(pl->top)); - + memset(pl->top, 0xff, sizeof(pl->top)); + return pl; } @@ -323,127 +303,114 @@ R_CheckPlane // // R_MakeSpans // -void -R_MakeSpans -( int x, - int t1, - int b1, - int t2, - int b2 ) +void R_MakeSpans(int x, int t1, int b1, int t2, int b2) { - while (t1 < t2 && t1<=b1) + while (t1 < t2 && t1 <= b1) { - R_MapPlane (t1,spanstart[t1],x-1); - t1++; + R_MapPlane(t1, spanstart[t1], x - 1); + t1++; } - while (b1 > b2 && b1>=t1) + while (b1 > b2 && b1 >= t1) { - R_MapPlane (b1,spanstart[b1],x-1); - b1--; + R_MapPlane(b1, spanstart[b1], x - 1); + b1--; } - - while (t2 < t1 && t2<=b2) + + while (t2 < t1 && t2 <= b2) { - spanstart[t2] = x; - t2++; + spanstart[t2] = x; + t2++; } - while (b2 > b1 && b2>=t2) + while (b2 > b1 && b2 >= t2) { - spanstart[b2] = x; - b2--; + spanstart[b2] = x; + b2--; } } - // // R_DrawPlanes // At the end of each frame. // -void R_DrawPlanes (void) +void R_DrawPlanes(void) { - visplane_t* pl; - int light; - int x; - int stop; - int angle; - int lumpnum; - + visplane_t *pl; + int light; + int x; + int stop; + int angle; + int lumpnum; + #ifdef RANGECHECK if (ds_p - drawsegs > MAXDRAWSEGS) - I_Error ("R_DrawPlanes: drawsegs overflow (%td)", - ds_p - drawsegs); - + I_Error("R_DrawPlanes: drawsegs overflow (%td)", ds_p - drawsegs); + if (lastvisplane - visplanes > MAXVISPLANES) - I_Error ("R_DrawPlanes: visplane overflow (%td)", - lastvisplane - visplanes); - + I_Error("R_DrawPlanes: visplane overflow (%td)", lastvisplane - visplanes); + if (lastopening - openings > MAXOPENINGS) - I_Error ("R_DrawPlanes: opening overflow (%td)", - lastopening - openings); + I_Error("R_DrawPlanes: opening overflow (%td)", lastopening - openings); #endif - for (pl = visplanes ; pl < lastvisplane ; pl++) + for (pl = visplanes; pl < lastvisplane; pl++) { - if (pl->minx > pl->maxx) - continue; - - - // sky flat - if (pl->picnum == skyflatnum) - { - dc_iscale = pspriteiscale>>detailshift; - - // Sky is allways drawn full bright, - // i.e. colormaps[0] is used. - // Because of this hack, sky is not affected - // by INVUL inverse mapping. - dc_colormap = colormaps; - dc_texturemid = skytexturemid; - for (x=pl->minx ; x <= pl->maxx ; x++) - { - dc_yl = pl->top[x]; - dc_yh = pl->bottom[x]; - - if (dc_yl <= dc_yh) - { - angle = (viewangle + xtoviewangle[x])>>ANGLETOSKYSHIFT; - dc_x = x; - dc_source = R_GetColumn(skytexture, angle); - colfunc (); - } - } - continue; - } - - // regular flat + if (pl->minx > pl->maxx) + continue; + + + // sky flat + if (pl->picnum == skyflatnum) + { + dc_iscale = pspriteiscale >> detailshift; + + // Sky is allways drawn full bright, + // i.e. colormaps[0] is used. + // Because of this hack, sky is not affected + // by INVUL inverse mapping. + dc_colormap = colormaps; + dc_texturemid = skytexturemid; + for (x = pl->minx; x <= pl->maxx; x++) + { + dc_yl = pl->top[x]; + dc_yh = pl->bottom[x]; + + if (dc_yl <= dc_yh) + { + angle = (viewangle + xtoviewangle[x]) >> ANGLETOSKYSHIFT; + dc_x = x; + dc_source = R_GetColumn(skytexture, angle); + colfunc(); + } + } + continue; + } + + // regular flat lumpnum = firstflat + flattranslation[pl->picnum]; - ds_source = W_CacheLumpNum(lumpnum, PU_STATIC); - - planeheight = abs(pl->height-viewz); - light = (pl->lightlevel >> LIGHTSEGSHIFT)+extralight; - - if (light >= LIGHTLEVELS) - light = LIGHTLEVELS-1; - - if (light < 0) - light = 0; - - planezlight = zlight[light]; - - pl->top[pl->maxx+1] = 0xff; - pl->top[pl->minx-1] = 0xff; - - stop = pl->maxx + 1; - - for (x=pl->minx ; x<= stop ; x++) - { - R_MakeSpans(x,pl->top[x-1], - pl->bottom[x-1], - pl->top[x], - pl->bottom[x]); - } - + ds_source = W_CacheLumpNum(lumpnum, PU_STATIC); + + planeheight = abs(pl->height - viewz); + light = (pl->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (light >= LIGHTLEVELS) + light = LIGHTLEVELS - 1; + + if (light < 0) + light = 0; + + planezlight = zlight[light]; + + pl->top[pl->maxx + 1] = 0xff; + pl->top[pl->minx - 1] = 0xff; + + stop = pl->maxx + 1; + + for (x = pl->minx; x <= stop; x++) + { + R_MakeSpans(x, pl->top[x - 1], pl->bottom[x - 1], pl->top[x], pl->bottom[x]); + } + W_ReleaseLumpNum(lumpnum); } } diff --git a/src/doom/r_segs.c b/src/doom/r_segs.c index 06881a5207..44b13644f2 100644 --- a/src/doom/r_segs.c +++ b/src/doom/r_segs.c @@ -17,10 +17,6 @@ // - - - - #include #include @@ -36,73 +32,68 @@ // OPTIMIZE: closed two sided lines as single sided // True if any of the segs textures might be visible. -boolean segtextured; +boolean segtextured; // False if the back side is the same plane. -boolean markfloor; -boolean markceiling; +boolean markfloor; +boolean markceiling; -boolean maskedtexture; -int toptexture; -int bottomtexture; -int midtexture; +boolean maskedtexture; +int toptexture; +int bottomtexture; +int midtexture; -angle_t rw_normalangle; +angle_t rw_normalangle; // angle to line origin -int rw_angle1; +int rw_angle1; // // regular wall // -int rw_x; -int rw_stopx; -angle_t rw_centerangle; -fixed_t rw_offset; -fixed_t rw_distance; -fixed_t rw_scale; -fixed_t rw_scalestep; -fixed_t rw_midtexturemid; -fixed_t rw_toptexturemid; -fixed_t rw_bottomtexturemid; - -int worldtop; -int worldbottom; -int worldhigh; -int worldlow; +int rw_x; +int rw_stopx; +angle_t rw_centerangle; +fixed_t rw_offset; +fixed_t rw_distance; +fixed_t rw_scale; +fixed_t rw_scalestep; +fixed_t rw_midtexturemid; +fixed_t rw_toptexturemid; +fixed_t rw_bottomtexturemid; -fixed_t pixhigh; -fixed_t pixlow; -fixed_t pixhighstep; -fixed_t pixlowstep; +int worldtop; +int worldbottom; +int worldhigh; +int worldlow; -fixed_t topfrac; -fixed_t topstep; +fixed_t pixhigh; +fixed_t pixlow; +fixed_t pixhighstep; +fixed_t pixlowstep; -fixed_t bottomfrac; -fixed_t bottomstep; +fixed_t topfrac; +fixed_t topstep; +fixed_t bottomfrac; +fixed_t bottomstep; -lighttable_t** walllights; -short* maskedtexturecol; +lighttable_t **walllights; +short *maskedtexturecol; // // R_RenderMaskedSegRange // -void -R_RenderMaskedSegRange -( drawseg_t* ds, - int x1, - int x2 ) +void R_RenderMaskedSegRange(drawseg_t *ds, int x1, int x2) { - unsigned index; - column_t* col; - int lightnum; - int texnum; - + unsigned index; + column_t *col; + int lightnum; + int texnum; + // Calculate light table. // Use different light tables // for horizontal / vertical / diagonal. Diagonal? @@ -111,78 +102,76 @@ R_RenderMaskedSegRange frontsector = curline->frontsector; backsector = curline->backsector; texnum = texturetranslation[curline->sidedef->midtexture]; - - lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT)+extralight; + + lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT) + extralight; if (curline->v1->y == curline->v2->y) - lightnum--; + lightnum--; else if (curline->v1->x == curline->v2->x) - lightnum++; + lightnum++; - if (lightnum < 0) - walllights = scalelight[0]; + if (lightnum < 0) + walllights = scalelight[0]; else if (lightnum >= LIGHTLEVELS) - walllights = scalelight[LIGHTLEVELS-1]; + walllights = scalelight[LIGHTLEVELS - 1]; else - walllights = scalelight[lightnum]; + walllights = scalelight[lightnum]; maskedtexturecol = ds->maskedtexturecol; - rw_scalestep = ds->scalestep; - spryscale = ds->scale1 + (x1 - ds->x1)*rw_scalestep; + rw_scalestep = ds->scalestep; + spryscale = ds->scale1 + (x1 - ds->x1) * rw_scalestep; mfloorclip = ds->sprbottomclip; mceilingclip = ds->sprtopclip; - + // find positioning if (curline->linedef->flags & ML_DONTPEGBOTTOM) { - dc_texturemid = frontsector->floorheight > backsector->floorheight - ? frontsector->floorheight : backsector->floorheight; - dc_texturemid = dc_texturemid + textureheight[texnum] - viewz; + dc_texturemid = frontsector->floorheight > backsector->floorheight + ? frontsector->floorheight + : backsector->floorheight; + dc_texturemid = dc_texturemid + textureheight[texnum] - viewz; } else { - dc_texturemid =frontsector->ceilingheightceilingheight - ? frontsector->ceilingheight : backsector->ceilingheight; - dc_texturemid = dc_texturemid - viewz; + dc_texturemid = frontsector->ceilingheight < backsector->ceilingheight + ? frontsector->ceilingheight + : backsector->ceilingheight; + dc_texturemid = dc_texturemid - viewz; } dc_texturemid += curline->sidedef->rowoffset; - + if (fixedcolormap) - dc_colormap = fixedcolormap; - + dc_colormap = fixedcolormap; + // draw the columns - for (dc_x = x1 ; dc_x <= x2 ; dc_x++) + for (dc_x = x1; dc_x <= x2; dc_x++) { - // calculate lighting - if (maskedtexturecol[dc_x] != SHRT_MAX) - { - if (!fixedcolormap) - { - index = spryscale>>LIGHTSCALESHIFT; + // calculate lighting + if (maskedtexturecol[dc_x] != SHRT_MAX) + { + if (!fixedcolormap) + { + index = spryscale >> LIGHTSCALESHIFT; - if (index >= MAXLIGHTSCALE ) - index = MAXLIGHTSCALE-1; + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; - dc_colormap = walllights[index]; - } - - sprtopscreen = centeryfrac - FixedMul(dc_texturemid, spryscale); - dc_iscale = 0xffffffffu / (unsigned)spryscale; - - // draw the texture - col = (column_t *)( - (byte *)R_GetColumn(texnum,maskedtexturecol[dc_x]) -3); - - R_DrawMaskedColumn (col); - maskedtexturecol[dc_x] = SHRT_MAX; - } - spryscale += rw_scalestep; - } - -} + dc_colormap = walllights[index]; + } + sprtopscreen = centeryfrac - FixedMul(dc_texturemid, spryscale); + dc_iscale = 0xffffffffu / (unsigned) spryscale; + // draw the texture + col = (column_t *) ((byte *) R_GetColumn(texnum, maskedtexturecol[dc_x]) - 3); + + R_DrawMaskedColumn(col); + maskedtexturecol[dc_x] = SHRT_MAX; + } + spryscale += rw_scalestep; + } +} // @@ -193,174 +182,169 @@ R_RenderMaskedSegRange // textures. // CALLED: CORE LOOPING ROUTINE. // -#define HEIGHTBITS 12 -#define HEIGHTUNIT (1<>HEIGHTBITS; - - // no space above wall? - if (yl < ceilingclip[rw_x]+1) - yl = ceilingclip[rw_x]+1; - - if (markceiling) - { - top = ceilingclip[rw_x]+1; - bottom = yl-1; + // mark floor / ceiling areas + int yl = (topfrac + HEIGHTUNIT - 1) >> HEIGHTBITS; - if (bottom >= floorclip[rw_x]) - bottom = floorclip[rw_x]-1; + // no space above wall? + if (yl < ceilingclip[rw_x] + 1) + yl = ceilingclip[rw_x] + 1; - if (top <= bottom) - { - ceilingplane->top[rw_x] = top; - ceilingplane->bottom[rw_x] = bottom; - } - } - - yh = bottomfrac>>HEIGHTBITS; + if (markceiling) + { + top = ceilingclip[rw_x] + 1; + bottom = yl - 1; - if (yh >= floorclip[rw_x]) - yh = floorclip[rw_x]-1; + if (bottom >= floorclip[rw_x]) + bottom = floorclip[rw_x] - 1; - if (markfloor) - { - top = yh+1; - bottom = floorclip[rw_x]-1; - if (top <= ceilingclip[rw_x]) - top = ceilingclip[rw_x]+1; - if (top <= bottom) - { - floorplane->top[rw_x] = top; - floorplane->bottom[rw_x] = bottom; - } - } - - // texturecolumn and lighting are independent of wall tiers - if (segtextured) - { - // calculate texture offset - angle = (rw_centerangle + xtoviewangle[rw_x])>>ANGLETOFINESHIFT; - texturecolumn = rw_offset-FixedMul(finetangent[angle],rw_distance); - texturecolumn >>= FRACBITS; - // calculate lighting - index = rw_scale>>LIGHTSCALESHIFT; - - if (index >= MAXLIGHTSCALE ) - index = MAXLIGHTSCALE-1; - - dc_colormap = walllights[index]; - dc_x = rw_x; - dc_iscale = 0xffffffffu / (unsigned)rw_scale; - } + if (top <= bottom) + { + ceilingplane->top[rw_x] = top; + ceilingplane->bottom[rw_x] = bottom; + } + } + + int yh = bottomfrac >> HEIGHTBITS; + + if (yh >= floorclip[rw_x]) + yh = floorclip[rw_x] - 1; + + if (markfloor) + { + top = yh + 1; + bottom = floorclip[rw_x] - 1; + if (top <= ceilingclip[rw_x]) + top = ceilingclip[rw_x] + 1; + if (top <= bottom) + { + floorplane->top[rw_x] = top; + floorplane->bottom[rw_x] = bottom; + } + } + + // texturecolumn and lighting are independent of wall tiers + if (segtextured) + { + // calculate texture offset + angle = (rw_centerangle + xtoviewangle[rw_x]) >> ANGLETOFINESHIFT; + texturecolumn = rw_offset - FixedMul(finetangent[angle], rw_distance); + texturecolumn >>= FRACBITS; + // calculate lighting + index = rw_scale >> LIGHTSCALESHIFT; + + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; + + dc_colormap = walllights[index]; + dc_x = rw_x; + dc_iscale = 0xffffffffu / (unsigned) rw_scale; + } else { // purely to shut up the compiler texturecolumn = 0; } - - // draw the wall tiers - if (midtexture) - { - // single sided line - dc_yl = yl; - dc_yh = yh; - dc_texturemid = rw_midtexturemid; - dc_source = R_GetColumn(midtexture,texturecolumn); - colfunc (); - ceilingclip[rw_x] = viewheight; - floorclip[rw_x] = -1; - } - else - { - // two sided line - if (toptexture) - { - // top wall - mid = pixhigh>>HEIGHTBITS; - pixhigh += pixhighstep; - - if (mid >= floorclip[rw_x]) - mid = floorclip[rw_x]-1; - - if (mid >= yl) - { - dc_yl = yl; - dc_yh = mid; - dc_texturemid = rw_toptexturemid; - dc_source = R_GetColumn(toptexture,texturecolumn); - colfunc (); - ceilingclip[rw_x] = mid; - } - else - ceilingclip[rw_x] = yl-1; - } - else - { - // no top wall - if (markceiling) - ceilingclip[rw_x] = yl-1; - } - - if (bottomtexture) - { - // bottom wall - mid = (pixlow+HEIGHTUNIT-1)>>HEIGHTBITS; - pixlow += pixlowstep; - - // no space above wall? - if (mid <= ceilingclip[rw_x]) - mid = ceilingclip[rw_x]+1; - - if (mid <= yh) - { - dc_yl = mid; - dc_yh = yh; - dc_texturemid = rw_bottomtexturemid; - dc_source = R_GetColumn(bottomtexture, - texturecolumn); - colfunc (); - floorclip[rw_x] = mid; - } - else - floorclip[rw_x] = yh+1; - } - else - { - // no bottom wall - if (markfloor) - floorclip[rw_x] = yh+1; - } - - if (maskedtexture) - { - // save texturecol - // for backdrawing of masked mid texture - maskedtexturecol[rw_x] = texturecolumn; - } - } - - rw_scale += rw_scalestep; - topfrac += topstep; - bottomfrac += bottomstep; - } -} + // draw the wall tiers + if (midtexture) + { + // single sided line + dc_yl = yl; + dc_yh = yh; + dc_texturemid = rw_midtexturemid; + dc_source = R_GetColumn(midtexture, texturecolumn); + colfunc(); + ceilingclip[rw_x] = viewheight; + floorclip[rw_x] = -1; + } + else + { + // two sided line + if (toptexture) + { + // top wall + mid = pixhigh >> HEIGHTBITS; + pixhigh += pixhighstep; + + if (mid >= floorclip[rw_x]) + mid = floorclip[rw_x] - 1; + + if (mid >= yl) + { + dc_yl = yl; + dc_yh = mid; + dc_texturemid = rw_toptexturemid; + dc_source = R_GetColumn(toptexture, texturecolumn); + colfunc(); + ceilingclip[rw_x] = mid; + } + else + ceilingclip[rw_x] = yl - 1; + } + else + { + // no top wall + if (markceiling) + ceilingclip[rw_x] = yl - 1; + } + + if (bottomtexture) + { + // bottom wall + mid = (pixlow + HEIGHTUNIT - 1) >> HEIGHTBITS; + pixlow += pixlowstep; + + // no space above wall? + if (mid <= ceilingclip[rw_x]) + mid = ceilingclip[rw_x] + 1; + + if (mid <= yh) + { + dc_yl = mid; + dc_yh = yh; + dc_texturemid = rw_bottomtexturemid; + dc_source = R_GetColumn(bottomtexture, texturecolumn); + colfunc(); + floorclip[rw_x] = mid; + } + else + floorclip[rw_x] = yh + 1; + } + else + { + // no bottom wall + if (markfloor) + floorclip[rw_x] = yh + 1; + } + + if (maskedtexture) + { + // save texturecol + // for backdrawing of masked mid texture + maskedtexturecol[rw_x] = texturecolumn; + } + } + rw_scale += rw_scalestep; + topfrac += topstep; + bottomfrac += bottomstep; + } +} // @@ -368,63 +352,58 @@ void R_RenderSegLoop (void) // A wall segment will be drawn // between start and stop pixels (inclusive). // -void -R_StoreWallRange -( int start, - int stop ) +void R_StoreWallRange(int start, int stop) { - fixed_t hyp; - fixed_t sineval; - angle_t distangle, offsetangle; - fixed_t vtop; - int lightnum; + fixed_t hyp; + fixed_t sineval; + angle_t distangle, offsetangle; + fixed_t vtop; + int lightnum; // don't overflow and crash if (ds_p == &drawsegs[MAXDRAWSEGS]) - return; - + return; + #ifdef RANGECHECK - if (start >=viewwidth || start > stop) - I_Error ("Bad R_RenderWallRange: %i to %i", start , stop); + if (start >= viewwidth || start > stop) + I_Error("Bad R_RenderWallRange: %i to %i", start, stop); #endif - + sidedef = curline->sidedef; linedef = curline->linedef; // mark the segment as visible for auto map linedef->flags |= ML_MAPPED; - + // calculate rw_distance for scale calculation rw_normalangle = curline->angle + ANG90; - offsetangle = abs((int)rw_normalangle-(int)rw_angle1); - + offsetangle = abs((int) rw_normalangle - (int) rw_angle1); + if (offsetangle > ANG90) - offsetangle = ANG90; + offsetangle = ANG90; distangle = ANG90 - offsetangle; - hyp = R_PointToDist (curline->v1->x, curline->v1->y); - sineval = finesine[distangle>>ANGLETOFINESHIFT]; - rw_distance = FixedMul (hyp, sineval); - - + hyp = R_PointToDist(curline->v1->x, curline->v1->y); + sineval = finesine[distangle >> ANGLETOFINESHIFT]; + rw_distance = FixedMul(hyp, sineval); + + ds_p->x1 = rw_x = start; ds_p->x2 = stop; ds_p->curline = curline; - rw_stopx = stop+1; - + rw_stopx = stop + 1; + // calculate scale at both ends and step - ds_p->scale1 = rw_scale = - R_ScaleFromGlobalAngle (viewangle + xtoviewangle[start]); - - if (stop > start ) + ds_p->scale1 = rw_scale = R_ScaleFromGlobalAngle(viewangle + xtoviewangle[start]); + + if (stop > start) { - ds_p->scale2 = R_ScaleFromGlobalAngle (viewangle + xtoviewangle[stop]); - ds_p->scalestep = rw_scalestep = - (ds_p->scale2 - rw_scale) / (stop-start); + ds_p->scale2 = R_ScaleFromGlobalAngle(viewangle + xtoviewangle[stop]); + ds_p->scalestep = rw_scalestep = (ds_p->scale2 - rw_scale) / (stop - start); } else { - // UNUSED: try to fix the stretched line bug + // UNUSED: try to fix the stretched line bug #if 0 if (rw_distance < FRACUNIT/2) { @@ -439,305 +418,296 @@ R_StoreWallRange ds_p->scale1 = FixedDiv(projection, gxt-gyt)<scale2 = ds_p->scale1; + ds_p->scale2 = ds_p->scale1; } - + // calculate texture boundaries // and decide if floor / ceiling marks are needed worldtop = frontsector->ceilingheight - viewz; worldbottom = frontsector->floorheight - viewz; - + midtexture = toptexture = bottomtexture = maskedtexture = 0; ds_p->maskedtexturecol = NULL; - + if (!backsector) { - // single sided line - midtexture = texturetranslation[sidedef->midtexture]; - // a single sided line is terminal, so it must mark ends - markfloor = markceiling = true; - if (linedef->flags & ML_DONTPEGBOTTOM) - { - vtop = frontsector->floorheight + - textureheight[sidedef->midtexture]; - // bottom of texture at bottom - rw_midtexturemid = vtop - viewz; - } - else - { - // top of texture at top - rw_midtexturemid = worldtop; - } - rw_midtexturemid += sidedef->rowoffset; + // single sided line + midtexture = texturetranslation[sidedef->midtexture]; + // a single sided line is terminal, so it must mark ends + markfloor = markceiling = true; + if (linedef->flags & ML_DONTPEGBOTTOM) + { + vtop = frontsector->floorheight + textureheight[sidedef->midtexture]; + // bottom of texture at bottom + rw_midtexturemid = vtop - viewz; + } + else + { + // top of texture at top + rw_midtexturemid = worldtop; + } + rw_midtexturemid += sidedef->rowoffset; - ds_p->silhouette = SIL_BOTH; - ds_p->sprtopclip = screenheightarray; - ds_p->sprbottomclip = negonearray; - ds_p->bsilheight = INT_MAX; - ds_p->tsilheight = INT_MIN; + ds_p->silhouette = SIL_BOTH; + ds_p->sprtopclip = screenheightarray; + ds_p->sprbottomclip = negonearray; + ds_p->bsilheight = INT_MAX; + ds_p->tsilheight = INT_MIN; } else { - // two sided line - ds_p->sprtopclip = ds_p->sprbottomclip = NULL; - ds_p->silhouette = 0; - - if (frontsector->floorheight > backsector->floorheight) - { - ds_p->silhouette = SIL_BOTTOM; - ds_p->bsilheight = frontsector->floorheight; - } - else if (backsector->floorheight > viewz) - { - ds_p->silhouette = SIL_BOTTOM; - ds_p->bsilheight = INT_MAX; - // ds_p->sprbottomclip = negonearray; - } - - if (frontsector->ceilingheight < backsector->ceilingheight) - { - ds_p->silhouette |= SIL_TOP; - ds_p->tsilheight = frontsector->ceilingheight; - } - else if (backsector->ceilingheight < viewz) - { - ds_p->silhouette |= SIL_TOP; - ds_p->tsilheight = INT_MIN; - // ds_p->sprtopclip = screenheightarray; - } - - if (backsector->ceilingheight <= frontsector->floorheight) - { - ds_p->sprbottomclip = negonearray; - ds_p->bsilheight = INT_MAX; - ds_p->silhouette |= SIL_BOTTOM; - } - - if (backsector->floorheight >= frontsector->ceilingheight) - { - ds_p->sprtopclip = screenheightarray; - ds_p->tsilheight = INT_MIN; - ds_p->silhouette |= SIL_TOP; - } - - worldhigh = backsector->ceilingheight - viewz; - worldlow = backsector->floorheight - viewz; - - // hack to allow height changes in outdoor areas - if (frontsector->ceilingpic == skyflatnum - && backsector->ceilingpic == skyflatnum) - { - worldtop = worldhigh; - } - - - if (worldlow != worldbottom - || backsector->floorpic != frontsector->floorpic - || backsector->lightlevel != frontsector->lightlevel) - { - markfloor = true; - } - else - { - // same plane on both sides - markfloor = false; - } - - - if (worldhigh != worldtop - || backsector->ceilingpic != frontsector->ceilingpic - || backsector->lightlevel != frontsector->lightlevel) - { - markceiling = true; - } - else - { - // same plane on both sides - markceiling = false; - } - - if (backsector->ceilingheight <= frontsector->floorheight - || backsector->floorheight >= frontsector->ceilingheight) - { - // closed door - markceiling = markfloor = true; - } - + // two sided line + ds_p->sprtopclip = ds_p->sprbottomclip = NULL; + ds_p->silhouette = 0; - if (worldhigh < worldtop) - { - // top texture - toptexture = texturetranslation[sidedef->toptexture]; - if (linedef->flags & ML_DONTPEGTOP) - { - // top of texture at top - rw_toptexturemid = worldtop; - } - else - { - vtop = - backsector->ceilingheight - + textureheight[sidedef->toptexture]; - - // bottom of texture - rw_toptexturemid = vtop - viewz; - } - } - if (worldlow > worldbottom) - { - // bottom texture - bottomtexture = texturetranslation[sidedef->bottomtexture]; - - if (linedef->flags & ML_DONTPEGBOTTOM ) - { - // bottom of texture at bottom - // top of texture at top - rw_bottomtexturemid = worldtop; - } - else // top of texture at top - rw_bottomtexturemid = worldlow; - } - rw_toptexturemid += sidedef->rowoffset; - rw_bottomtexturemid += sidedef->rowoffset; - - // allocate space for masked texture tables - if (sidedef->midtexture) - { - // masked midtexture - maskedtexture = true; - ds_p->maskedtexturecol = maskedtexturecol = lastopening - rw_x; - lastopening += rw_stopx - rw_x; - } + if (frontsector->floorheight > backsector->floorheight) + { + ds_p->silhouette = SIL_BOTTOM; + ds_p->bsilheight = frontsector->floorheight; + } + else if (backsector->floorheight > viewz) + { + ds_p->silhouette = SIL_BOTTOM; + ds_p->bsilheight = INT_MAX; + // ds_p->sprbottomclip = negonearray; + } + + if (frontsector->ceilingheight < backsector->ceilingheight) + { + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = frontsector->ceilingheight; + } + else if (backsector->ceilingheight < viewz) + { + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = INT_MIN; + // ds_p->sprtopclip = screenheightarray; + } + + if (backsector->ceilingheight <= frontsector->floorheight) + { + ds_p->sprbottomclip = negonearray; + ds_p->bsilheight = INT_MAX; + ds_p->silhouette |= SIL_BOTTOM; + } + + if (backsector->floorheight >= frontsector->ceilingheight) + { + ds_p->sprtopclip = screenheightarray; + ds_p->tsilheight = INT_MIN; + ds_p->silhouette |= SIL_TOP; + } + + worldhigh = backsector->ceilingheight - viewz; + worldlow = backsector->floorheight - viewz; + + // hack to allow height changes in outdoor areas + if (frontsector->ceilingpic == skyflatnum && backsector->ceilingpic == skyflatnum) + { + worldtop = worldhigh; + } + + + if (worldlow != worldbottom || backsector->floorpic != frontsector->floorpic || + backsector->lightlevel != frontsector->lightlevel) + { + markfloor = true; + } + else + { + // same plane on both sides + markfloor = false; + } + + + if (worldhigh != worldtop || backsector->ceilingpic != frontsector->ceilingpic || + backsector->lightlevel != frontsector->lightlevel) + { + markceiling = true; + } + else + { + // same plane on both sides + markceiling = false; + } + + if (backsector->ceilingheight <= frontsector->floorheight || + backsector->floorheight >= frontsector->ceilingheight) + { + // closed door + markceiling = markfloor = true; + } + + + if (worldhigh < worldtop) + { + // top texture + toptexture = texturetranslation[sidedef->toptexture]; + if (linedef->flags & ML_DONTPEGTOP) + { + // top of texture at top + rw_toptexturemid = worldtop; + } + else + { + vtop = backsector->ceilingheight + textureheight[sidedef->toptexture]; + + // bottom of texture + rw_toptexturemid = vtop - viewz; + } + } + if (worldlow > worldbottom) + { + // bottom texture + bottomtexture = texturetranslation[sidedef->bottomtexture]; + + if (linedef->flags & ML_DONTPEGBOTTOM) + { + // bottom of texture at bottom + // top of texture at top + rw_bottomtexturemid = worldtop; + } + else // top of texture at top + rw_bottomtexturemid = worldlow; + } + rw_toptexturemid += sidedef->rowoffset; + rw_bottomtexturemid += sidedef->rowoffset; + + // allocate space for masked texture tables + if (sidedef->midtexture) + { + // masked midtexture + maskedtexture = true; + ds_p->maskedtexturecol = maskedtexturecol = lastopening - rw_x; + lastopening += rw_stopx - rw_x; + } } - + // calculate rw_offset (only needed for textured lines) segtextured = midtexture | toptexture | bottomtexture | maskedtexture; if (segtextured) { - offsetangle = rw_normalangle-rw_angle1; - - if (offsetangle > ANG180) - offsetangle = -offsetangle; - - if (offsetangle > ANG90) - offsetangle = ANG90; - - sineval = finesine[offsetangle >>ANGLETOFINESHIFT]; - rw_offset = FixedMul (hyp, sineval); - - if (rw_normalangle-rw_angle1 < ANG180) - rw_offset = -rw_offset; - - rw_offset += sidedef->textureoffset + curline->offset; - rw_centerangle = ANG90 + viewangle - rw_normalangle; - - // calculate light table - // use different light tables - // for horizontal / vertical / diagonal - // OPTIMIZE: get rid of LIGHTSEGSHIFT globally - if (!fixedcolormap) - { - lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT)+extralight; - - if (curline->v1->y == curline->v2->y) - lightnum--; - else if (curline->v1->x == curline->v2->x) - lightnum++; - - if (lightnum < 0) - walllights = scalelight[0]; - else if (lightnum >= LIGHTLEVELS) - walllights = scalelight[LIGHTLEVELS-1]; - else - walllights = scalelight[lightnum]; - } + offsetangle = rw_normalangle - rw_angle1; + + if (offsetangle > ANG180) + offsetangle = -offsetangle; + + if (offsetangle > ANG90) + offsetangle = ANG90; + + sineval = finesine[offsetangle >> ANGLETOFINESHIFT]; + rw_offset = FixedMul(hyp, sineval); + + if (rw_normalangle - rw_angle1 < ANG180) + rw_offset = -rw_offset; + + rw_offset += sidedef->textureoffset + curline->offset; + rw_centerangle = ANG90 + viewangle - rw_normalangle; + + // calculate light table + // use different light tables + // for horizontal / vertical / diagonal + // OPTIMIZE: get rid of LIGHTSEGSHIFT globally + if (!fixedcolormap) + { + lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (curline->v1->y == curline->v2->y) + lightnum--; + else if (curline->v1->x == curline->v2->x) + lightnum++; + + if (lightnum < 0) + walllights = scalelight[0]; + else if (lightnum >= LIGHTLEVELS) + walllights = scalelight[LIGHTLEVELS - 1]; + else + walllights = scalelight[lightnum]; + } } - + // if a floor / ceiling plane is on the wrong side // of the view plane, it is definitely invisible // and doesn't need to be marked. - - + + if (frontsector->floorheight >= viewz) { - // above view plane - markfloor = false; + // above view plane + markfloor = false; } - - if (frontsector->ceilingheight <= viewz - && frontsector->ceilingpic != skyflatnum) + + if (frontsector->ceilingheight <= viewz && frontsector->ceilingpic != skyflatnum) { - // below view plane - markceiling = false; + // below view plane + markceiling = false; } - + // calculate incremental stepping values for texture edges worldtop >>= 4; worldbottom >>= 4; - - topstep = -FixedMul (rw_scalestep, worldtop); - topfrac = (centeryfrac>>4) - FixedMul (worldtop, rw_scale); - bottomstep = -FixedMul (rw_scalestep,worldbottom); - bottomfrac = (centeryfrac>>4) - FixedMul (worldbottom, rw_scale); - + topstep = -FixedMul(rw_scalestep, worldtop); + topfrac = (centeryfrac >> 4) - FixedMul(worldtop, rw_scale); + + bottomstep = -FixedMul(rw_scalestep, worldbottom); + bottomfrac = (centeryfrac >> 4) - FixedMul(worldbottom, rw_scale); + if (backsector) - { - worldhigh >>= 4; - worldlow >>= 4; + { + worldhigh >>= 4; + worldlow >>= 4; - if (worldhigh < worldtop) - { - pixhigh = (centeryfrac>>4) - FixedMul (worldhigh, rw_scale); - pixhighstep = -FixedMul (rw_scalestep,worldhigh); - } - - if (worldlow > worldbottom) - { - pixlow = (centeryfrac>>4) - FixedMul (worldlow, rw_scale); - pixlowstep = -FixedMul (rw_scalestep,worldlow); - } + if (worldhigh < worldtop) + { + pixhigh = (centeryfrac >> 4) - FixedMul(worldhigh, rw_scale); + pixhighstep = -FixedMul(rw_scalestep, worldhigh); + } + + if (worldlow > worldbottom) + { + pixlow = (centeryfrac >> 4) - FixedMul(worldlow, rw_scale); + pixlowstep = -FixedMul(rw_scalestep, worldlow); + } } - + // render it if (markceiling) - ceilingplane = R_CheckPlane (ceilingplane, rw_x, rw_stopx-1); - + ceilingplane = R_CheckPlane(ceilingplane, rw_x, rw_stopx - 1); + if (markfloor) - floorplane = R_CheckPlane (floorplane, rw_x, rw_stopx-1); + floorplane = R_CheckPlane(floorplane, rw_x, rw_stopx - 1); + + R_RenderSegLoop(); - R_RenderSegLoop (); - // save sprite clipping info - if ( ((ds_p->silhouette & SIL_TOP) || maskedtexture) - && !ds_p->sprtopclip) + if (((ds_p->silhouette & SIL_TOP) || maskedtexture) && !ds_p->sprtopclip) { - memcpy (lastopening, ceilingclip+start, sizeof(*lastopening)*(rw_stopx-start)); - ds_p->sprtopclip = lastopening - start; - lastopening += rw_stopx - start; + memcpy(lastopening, ceilingclip + start, + sizeof(*lastopening) * (rw_stopx - start)); + ds_p->sprtopclip = lastopening - start; + lastopening += rw_stopx - start; } - - if ( ((ds_p->silhouette & SIL_BOTTOM) || maskedtexture) - && !ds_p->sprbottomclip) + + if (((ds_p->silhouette & SIL_BOTTOM) || maskedtexture) && !ds_p->sprbottomclip) { - memcpy (lastopening, floorclip+start, sizeof(*lastopening)*(rw_stopx-start)); - ds_p->sprbottomclip = lastopening - start; - lastopening += rw_stopx - start; + memcpy(lastopening, floorclip + start, sizeof(*lastopening) * (rw_stopx - start)); + ds_p->sprbottomclip = lastopening - start; + lastopening += rw_stopx - start; } - if (maskedtexture && !(ds_p->silhouette&SIL_TOP)) + if (maskedtexture && !(ds_p->silhouette & SIL_TOP)) { - ds_p->silhouette |= SIL_TOP; - ds_p->tsilheight = INT_MIN; + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = INT_MIN; } - if (maskedtexture && !(ds_p->silhouette&SIL_BOTTOM)) + if (maskedtexture && !(ds_p->silhouette & SIL_BOTTOM)) { - ds_p->silhouette |= SIL_BOTTOM; - ds_p->bsilheight = INT_MAX; + ds_p->silhouette |= SIL_BOTTOM; + ds_p->bsilheight = INT_MAX; } ds_p++; } - diff --git a/src/doom/r_sky.c b/src/doom/r_sky.c index bcd5a75bb5..46b6d968e3 100644 --- a/src/doom/r_sky.c +++ b/src/doom/r_sky.c @@ -17,9 +17,8 @@ // wall, wrapping around. A 1024 columns equal 360 degrees. // The default sky map is 256 columns and repeats 4 times // on a 320 screen? -// // - +// // Needed for FRACUNIT. @@ -34,19 +33,17 @@ // // sky mapping // -int skyflatnum; -int skytexture; -int skytexturemid; - +int skyflatnum; +int skytexture; +int skytexturemid; // // R_InitSkyMap // Called whenever the view size changes. // -void R_InitSkyMap (void) +void R_InitSkyMap(void) { - // skyflatnum = R_FlatNumForName ( SKYFLATNAME ); - skytexturemid = SCREENHEIGHT/2*FRACUNIT; + // skyflatnum = R_FlatNumForName ( SKYFLATNAME ); + skytexturemid = SCREENHEIGHT / 2 * FRACUNIT; } - diff --git a/src/doom/r_things.c b/src/doom/r_things.c index 90bb7642c0..91b61b98fb 100644 --- a/src/doom/r_things.c +++ b/src/doom/r_things.c @@ -17,8 +17,6 @@ // - - #include #include @@ -34,28 +32,13 @@ #include "doomstat.h" - -#define MINZ (FRACUNIT*4) -#define BASEYCENTER (SCREENHEIGHT/2) +#define MINZ (FRACUNIT * 4) +#define BASEYCENTER (SCREENHEIGHT / 2) //void R_DrawColumn (void); //void R_DrawFuzzColumn (void); - -typedef struct -{ - int x1; - int x2; - - int column; - int topclip; - int bottomclip; - -} maskdraw_t; - - - // // Sprite rotation 0 is facing the viewer, // rotation 1 is one angle turn CLOCKWISE around the axis. @@ -63,15 +46,15 @@ typedef struct // which increases counter clockwise (protractor). // There was a lot of stuff grabbed wrong, so I changed it... // -fixed_t pspritescale; -fixed_t pspriteiscale; +fixed_t pspritescale; +fixed_t pspriteiscale; -lighttable_t** spritelights; +lighttable_t **spritelights; // constant arrays // used for psprite clipping and initializing clipping -short negonearray[SCREENWIDTH]; -short screenheightarray[SCREENWIDTH]; +short negonearray[SCREENWIDTH]; +short screenheightarray[SCREENWIDTH]; // @@ -80,84 +63,77 @@ short screenheightarray[SCREENWIDTH]; // variables used to look up // and range check thing_t sprites patches -spritedef_t* sprites; -int numsprites; - -spriteframe_t sprtemp[29]; -int maxframe; -const char *spritename; - +spritedef_t *sprites; +int numsprites; +spriteframe_t sprtemp[29]; +int maxframe; +const char *spritename; // // R_InstallSpriteLump // Local function for R_InitSprites. // -void -R_InstallSpriteLump -( int lump, - unsigned frame, - unsigned rotation, - boolean flipped ) +void R_InstallSpriteLump(int lump, unsigned frame, unsigned rotation, boolean flipped) { - int r; - if (frame >= 29 || rotation > 8) - I_Error("R_InstallSpriteLump: " - "Bad frame characters in lump %i", lump); - - if ((int)frame > maxframe) - maxframe = frame; - + I_Error("R_InstallSpriteLump: " + "Bad frame characters in lump %i", + lump); + + if ((int) frame > maxframe) + maxframe = frame; + if (rotation == 0) { - // the lump should be used for all rotations - if (sprtemp[frame].rotate == false) - I_Error ("R_InitSprites: Sprite %s frame %c has " - "multip rot=0 lump", spritename, 'A'+frame); - - if (sprtemp[frame].rotate == true) - I_Error ("R_InitSprites: Sprite %s frame %c has rotations " - "and a rot=0 lump", spritename, 'A'+frame); - - sprtemp[frame].rotate = false; - for (r=0 ; r<8 ; r++) - { - sprtemp[frame].lump[r] = lump - firstspritelump; - sprtemp[frame].flip[r] = (byte)flipped; - } - return; + // the lump should be used for all rotations + if (sprtemp[frame].rotate == false) + I_Error("R_InitSprites: Sprite %s frame %c has " + "multip rot=0 lump", + spritename, 'A' + frame); + + if (sprtemp[frame].rotate == true) + I_Error("R_InitSprites: Sprite %s frame %c has rotations " + "and a rot=0 lump", + spritename, 'A' + frame); + + sprtemp[frame].rotate = false; + for (int r = 0; r < 8; r++) + { + sprtemp[frame].lump[r] = lump - firstspritelump; + sprtemp[frame].flip[r] = (byte) flipped; + } + return; } - + // the lump is only used for one rotation if (sprtemp[frame].rotate == false) - I_Error ("R_InitSprites: Sprite %s frame %c has rotations " - "and a rot=0 lump", spritename, 'A'+frame); - + I_Error("R_InitSprites: Sprite %s frame %c has rotations " + "and a rot=0 lump", + spritename, 'A' + frame); + sprtemp[frame].rotate = true; // make 0 based - rotation--; + rotation--; if (sprtemp[frame].lump[rotation] != -1) - I_Error ("R_InitSprites: Sprite %s : %c : %c " - "has two lumps mapped to it", - spritename, 'A'+frame, '1'+rotation); - + I_Error("R_InitSprites: Sprite %s : %c : %c " + "has two lumps mapped to it", + spritename, 'A' + frame, '1' + rotation); + sprtemp[frame].lump[rotation] = lump - firstspritelump; - sprtemp[frame].flip[rotation] = (byte)flipped; + sprtemp[frame].flip[rotation] = (byte) flipped; } - - // // R_InitSpriteDefs // Pass a null terminated list of sprite names // (4 chars exactly) to be used. // Builds the sprite rotation matrixes to account // for horizontally flipped sprites. -// Will report an error if the lumps are inconsistant. +// Will report an error if the lumps are inconsistant. // Only called at startup. // // Sprite lump names are 4 characters for the actor, @@ -167,119 +143,116 @@ R_InstallSpriteLump // The rotation character can be 0 to signify no rotations. // void R_InitSpriteDefs(const char **namelist) -{ +{ const char **check; - int i; - int l; - int frame; - int rotation; - int start; - int end; - int patched; - + int i; + int l; + int frame; + int rotation; + int start; + int end; + int patched; + // count the number of sprite names check = namelist; while (*check != NULL) - check++; + check++; + + numsprites = check - namelist; - numsprites = check-namelist; - if (!numsprites) - return; - - sprites = Z_Malloc(numsprites *sizeof(*sprites), PU_STATIC, NULL); - - start = firstspritelump-1; - end = lastspritelump+1; - + return; + + sprites = Z_Malloc(numsprites * sizeof(*sprites), PU_STATIC, NULL); + + start = firstspritelump - 1; + end = lastspritelump + 1; + // scan all the lump names for each of the names, // noting the highest frame letter. // Just compare 4 characters as ints - for (i=0 ; iname, spritename, 4)) - { - frame = lumpinfo[l]->name[4] - 'A'; - rotation = lumpinfo[l]->name[5] - '0'; - - if (modifiedgame) - patched = W_GetNumForName (lumpinfo[l]->name); - else - patched = l; - - R_InstallSpriteLump (patched, frame, rotation, false); - - if (lumpinfo[l]->name[6]) - { - frame = lumpinfo[l]->name[6] - 'A'; - rotation = lumpinfo[l]->name[7] - '0'; - R_InstallSpriteLump (l, frame, rotation, true); - } - } - } - - // check the frames that were found for completeness - if (maxframe == -1) - { - sprites[i].numframes = 0; - continue; - } - - maxframe++; - - for (frame = 0 ; frame < maxframe ; frame++) - { - switch ((int)sprtemp[frame].rotate) - { - case -1: - // no rotations were found for that frame at all - I_Error ("R_InitSprites: No patches found " - "for %s frame %c", spritename, frame+'A'); - break; - - case 0: - // only the first rotation is needed - break; - - case 1: - // must have all 8 frames - for (rotation=0 ; rotation<8 ; rotation++) - if (sprtemp[frame].lump[rotation] == -1) - I_Error ("R_InitSprites: Sprite %s frame %c " - "is missing rotations", - spritename, frame+'A'); - break; - } - } - - // allocate space for the frames present and copy sprtemp to it - sprites[i].numframes = maxframe; - sprites[i].spriteframes = - Z_Malloc (maxframe * sizeof(spriteframe_t), PU_STATIC, NULL); - memcpy (sprites[i].spriteframes, sprtemp, maxframe*sizeof(spriteframe_t)); + spritename = namelist[i]; + memset(sprtemp, -1, sizeof(sprtemp)); + + maxframe = -1; + + // scan the lumps, + // filling in the frames for whatever is found + for (l = start + 1; l < end; l++) + { + if (!strncasecmp(lumpinfo[l]->name, spritename, 4)) + { + frame = lumpinfo[l]->name[4] - 'A'; + rotation = lumpinfo[l]->name[5] - '0'; + + if (modifiedgame) + patched = W_GetNumForName(lumpinfo[l]->name); + else + patched = l; + + R_InstallSpriteLump(patched, frame, rotation, false); + + if (lumpinfo[l]->name[6]) + { + frame = lumpinfo[l]->name[6] - 'A'; + rotation = lumpinfo[l]->name[7] - '0'; + R_InstallSpriteLump(l, frame, rotation, true); + } + } + } + + // check the frames that were found for completeness + if (maxframe == -1) + { + sprites[i].numframes = 0; + continue; + } + + maxframe++; + + for (frame = 0; frame < maxframe; frame++) + { + switch ((int) sprtemp[frame].rotate) + { + case -1: + // no rotations were found for that frame at all + I_Error("R_InitSprites: No patches found " + "for %s frame %c", + spritename, frame + 'A'); + break; + + case 0: + // only the first rotation is needed + break; + + case 1: + // must have all 8 frames + for (rotation = 0; rotation < 8; rotation++) + if (sprtemp[frame].lump[rotation] == -1) + I_Error("R_InitSprites: Sprite %s frame %c " + "is missing rotations", + spritename, frame + 'A'); + break; + } + } + + // allocate space for the frames present and copy sprtemp to it + sprites[i].numframes = maxframe; + sprites[i].spriteframes = + Z_Malloc(maxframe * sizeof(spriteframe_t), PU_STATIC, NULL); + memcpy(sprites[i].spriteframes, sprtemp, maxframe * sizeof(spriteframe_t)); } - } - - // // GAME FUNCTIONS // -vissprite_t vissprites[MAXVISSPRITES]; -vissprite_t* vissprite_p; -int newvissprite; - +vissprite_t vissprites[MAXVISSPRITES]; +vissprite_t *vissprite_p; +int newvissprite; // @@ -288,23 +261,22 @@ int newvissprite; // void R_InitSprites(const char **namelist) { - int i; - - for (i=0 ; itopdelta != 0xff ; ) + + for (; column->topdelta != 0xff;) { - // calculate unclipped screen coordinates - // for post - topscreen = sprtopscreen + spryscale*column->topdelta; - bottomscreen = topscreen + spryscale*column->length; - - dc_yl = (topscreen+FRACUNIT-1)>>FRACBITS; - dc_yh = (bottomscreen-1)>>FRACBITS; - - if (dc_yh >= mfloorclip[dc_x]) - dc_yh = mfloorclip[dc_x]-1; - if (dc_yl <= mceilingclip[dc_x]) - dc_yl = mceilingclip[dc_x]+1; - - if (dc_yl <= dc_yh) - { - dc_source = (byte *)column + 3; - dc_texturemid = basetexturemid - (column->topdelta<topdelta; - - // Drawn by either R_DrawColumn - // or (SHADOW) R_DrawFuzzColumn. - colfunc (); - } - column = (column_t *)( (byte *)column + column->length + 4); + // calculate unclipped screen coordinates + // for post + int topscreen = sprtopscreen + spryscale * column->topdelta; + int bottomscreen = topscreen + spryscale * column->length; + + dc_yl = (topscreen + FRACUNIT - 1) >> FRACBITS; + dc_yh = (bottomscreen - 1) >> FRACBITS; + + if (dc_yh >= mfloorclip[dc_x]) + dc_yh = mfloorclip[dc_x] - 1; + if (dc_yl <= mceilingclip[dc_x]) + dc_yl = mceilingclip[dc_x] + 1; + + if (dc_yl <= dc_yh) + { + dc_source = (byte *) column + 3; + dc_texturemid = basetexturemid - (column->topdelta << FRACBITS); + // dc_source = (byte *)column + 3 - column->topdelta; + + // Drawn by either R_DrawColumn + // or (SHADOW) R_DrawFuzzColumn. + colfunc(); + } + column = (column_t *) ((byte *) column + column->length + 4); } - + dc_texturemid = basetexturemid; } - // // R_DrawVisSprite // mfloorclip and mceilingclip should also be set. // -void -R_DrawVisSprite -( vissprite_t* vis, - int x1, - int x2 ) +void R_DrawVisSprite(vissprite_t *vis, int x1, int x2) { - column_t* column; - int texturecolumn; - fixed_t frac; - patch_t* patch; - - - patch = W_CacheLumpNum (vis->patch+firstspritelump, PU_CACHE); + column_t *column; + int texturecolumn; + fixed_t frac; + patch_t *patch; + + + patch = W_CacheLumpNum(vis->patch + firstspritelump, PU_CACHE); dc_colormap = vis->colormap; - + if (!dc_colormap) { - // NULL colormap = shadow draw - colfunc = fuzzcolfunc; + // NULL colormap = shadow draw + colfunc = fuzzcolfunc; } else if (vis->mobjflags & MF_TRANSLATION) { - colfunc = transcolfunc; - dc_translation = translationtables - 256 + - ( (vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT-8) ); + colfunc = transcolfunc; + dc_translation = translationtables - 256 + + ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT - 8)); } - - dc_iscale = abs(vis->xiscale)>>detailshift; + + dc_iscale = abs(vis->xiscale) >> detailshift; dc_texturemid = vis->texturemid; frac = vis->startfrac; spryscale = vis->scale; - sprtopscreen = centeryfrac - FixedMul(dc_texturemid,spryscale); - - for (dc_x=vis->x1 ; dc_x<=vis->x2 ; dc_x++, frac += vis->xiscale) + sprtopscreen = centeryfrac - FixedMul(dc_texturemid, spryscale); + + for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale) { - texturecolumn = frac>>FRACBITS; + texturecolumn = frac >> FRACBITS; #ifdef RANGECHECK - if (texturecolumn < 0 || texturecolumn >= SHORT(patch->width)) - I_Error ("R_DrawSpriteRange: bad texturecolumn"); + if (texturecolumn < 0 || texturecolumn >= SHORT(patch->width)) + I_Error("R_DrawSpriteRange: bad texturecolumn"); #endif - column = (column_t *) ((byte *)patch + - LONG(patch->columnofs[texturecolumn])); - R_DrawMaskedColumn (column); + column = (column_t *) ((byte *) patch + LONG(patch->columnofs[texturecolumn])); + R_DrawMaskedColumn(column); } colfunc = basecolfunc; } - // // R_ProjectSprite // Generates a vissprite for a thing // if it might be visible. // -void R_ProjectSprite (mobj_t* thing) +void R_ProjectSprite(mobj_t *thing) { - fixed_t tr_x; - fixed_t tr_y; - - fixed_t gxt; - fixed_t gyt; - - fixed_t tx; - fixed_t tz; - - fixed_t xscale; - - int x1; - int x2; - - spritedef_t* sprdef; - spriteframe_t* sprframe; - int lump; - - unsigned rot; - boolean flip; - - int index; - - vissprite_t* vis; - - angle_t ang; - fixed_t iscale; - + fixed_t tr_x; + fixed_t tr_y; + + fixed_t gxt; + fixed_t gyt; + + fixed_t tx; + fixed_t tz; + + fixed_t xscale; + + int x1; + int x2; + + spritedef_t *sprdef; + spriteframe_t *sprframe; + int lump; + + unsigned rot; + boolean flip; + + int index; + + vissprite_t *vis; + + angle_t ang; + fixed_t iscale; + // transform the origin point tr_x = thing->x - viewx; tr_y = thing->y - viewy; - - gxt = FixedMul(tr_x,viewcos); - gyt = -FixedMul(tr_y,viewsin); - - tz = gxt-gyt; + + gxt = FixedMul(tr_x, viewcos); + gyt = -FixedMul(tr_y, viewsin); + + tz = gxt - gyt; // thing is behind view plane? if (tz < MINZ) - return; - + return; + xscale = FixedDiv(projection, tz); - - gxt = -FixedMul(tr_x,viewsin); - gyt = FixedMul(tr_y,viewcos); - tx = -(gyt+gxt); + + gxt = -FixedMul(tr_x, viewsin); + gyt = FixedMul(tr_y, viewcos); + tx = -(gyt + gxt); // too far off the side? - if (abs(tx)>(tz<<2)) - return; - - // decide which patch to use for sprite relative to player + if (abs(tx) > (tz << 2)) + return; + + // decide which patch to use for sprite relative to player #ifdef RANGECHECK if ((unsigned int) thing->sprite >= (unsigned int) numsprites) - I_Error ("R_ProjectSprite: invalid sprite number %i ", - thing->sprite); + I_Error("R_ProjectSprite: invalid sprite number %i ", thing->sprite); #endif sprdef = &sprites[thing->sprite]; #ifdef RANGECHECK - if ( (thing->frame&FF_FRAMEMASK) >= sprdef->numframes ) - I_Error ("R_ProjectSprite: invalid sprite frame %i : %i ", - thing->sprite, thing->frame); + if ((thing->frame & FF_FRAMEMASK) >= sprdef->numframes) + I_Error("R_ProjectSprite: invalid sprite frame %i : %i ", thing->sprite, + thing->frame); #endif - sprframe = &sprdef->spriteframes[ thing->frame & FF_FRAMEMASK]; + sprframe = &sprdef->spriteframes[thing->frame & FF_FRAMEMASK]; if (sprframe->rotate) { - // choose a different rotation based on player view - ang = R_PointToAngle (thing->x, thing->y); - rot = (ang-thing->angle+(unsigned)(ANG45/2)*9)>>29; - lump = sprframe->lump[rot]; - flip = (boolean)sprframe->flip[rot]; + // choose a different rotation based on player view + ang = R_PointToAngle(thing->x, thing->y); + rot = (ang - thing->angle + (unsigned) (ANG45 / 2) * 9) >> 29; + lump = sprframe->lump[rot]; + flip = (boolean) sprframe->flip[rot]; } else { - // use single rotation for all views - lump = sprframe->lump[0]; - flip = (boolean)sprframe->flip[0]; + // use single rotation for all views + lump = sprframe->lump[0]; + flip = (boolean) sprframe->flip[0]; } - + // calculate edges of the shape - tx -= spriteoffset[lump]; - x1 = (centerxfrac + FixedMul (tx,xscale) ) >>FRACBITS; + tx -= spriteoffset[lump]; + x1 = (centerxfrac + FixedMul(tx, xscale)) >> FRACBITS; // off the right side? if (x1 > viewwidth) - return; - - tx += spritewidth[lump]; - x2 = ((centerxfrac + FixedMul (tx,xscale) ) >>FRACBITS) - 1; + return; + + tx += spritewidth[lump]; + x2 = ((centerxfrac + FixedMul(tx, xscale)) >> FRACBITS) - 1; // off the left side if (x2 < 0) - return; - + return; + // store information in a vissprite - vis = R_NewVisSprite (); + vis = R_NewVisSprite(); vis->mobjflags = thing->flags; - vis->scale = xscale<scale = xscale << detailshift; vis->gx = thing->x; vis->gy = thing->y; vis->gz = thing->z; vis->gzt = thing->z + spritetopoffset[lump]; vis->texturemid = vis->gzt - viewz; vis->x1 = x1 < 0 ? 0 : x1; - vis->x2 = x2 >= viewwidth ? viewwidth-1 : x2; - iscale = FixedDiv (FRACUNIT, xscale); + vis->x2 = x2 >= viewwidth ? viewwidth - 1 : x2; + iscale = FixedDiv(FRACUNIT, xscale); if (flip) { - vis->startfrac = spritewidth[lump]-1; - vis->xiscale = -iscale; + vis->startfrac = spritewidth[lump] - 1; + vis->xiscale = -iscale; } else { - vis->startfrac = 0; - vis->xiscale = iscale; + vis->startfrac = 0; + vis->xiscale = iscale; } if (vis->x1 > x1) - vis->startfrac += vis->xiscale*(vis->x1-x1); + vis->startfrac += vis->xiscale * (vis->x1 - x1); vis->patch = lump; - + // get light level if (thing->flags & MF_SHADOW) { - // shadow draw - vis->colormap = NULL; + // shadow draw + vis->colormap = NULL; } else if (fixedcolormap) { - // fixed map - vis->colormap = fixedcolormap; + // fixed map + vis->colormap = fixedcolormap; } else if (thing->frame & FF_FULLBRIGHT) { - // full bright - vis->colormap = colormaps; + // full bright + vis->colormap = colormaps; } - + else { - // diminished light - index = xscale>>(LIGHTSCALESHIFT-detailshift); + // diminished light + index = xscale >> (LIGHTSCALESHIFT - detailshift); - if (index >= MAXLIGHTSCALE) - index = MAXLIGHTSCALE-1; + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; - vis->colormap = spritelights[index]; - } + vis->colormap = spritelights[index]; + } } - - // // R_AddSprites // During BSP traversal, this adds sprites by sector. // -void R_AddSprites (sector_t* sec) +void R_AddSprites(sector_t *sec) { - mobj_t* thing; - int lightnum; + mobj_t *thing; + int lightnum; // BSP is traversed by subsector. // A sector might have been split into several // subsectors during BSP building. // Thus we check whether its already added. if (sec->validcount == validcount) - return; + return; // Well, now it will be done. sec->validcount = validcount; - - lightnum = (sec->lightlevel >> LIGHTSEGSHIFT)+extralight; - if (lightnum < 0) - spritelights = scalelight[0]; + lightnum = (sec->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (lightnum < 0) + spritelights = scalelight[0]; else if (lightnum >= LIGHTLEVELS) - spritelights = scalelight[LIGHTLEVELS-1]; + spritelights = scalelight[LIGHTLEVELS - 1]; else - spritelights = scalelight[lightnum]; + spritelights = scalelight[lightnum]; // Handle all things in sector. - for (thing = sec->thinglist ; thing ; thing = thing->snext) - R_ProjectSprite (thing); + for (thing = sec->thinglist; thing; thing = thing->snext) + R_ProjectSprite(thing); } // // R_DrawPSprite // -void R_DrawPSprite (pspdef_t* psp) +void R_DrawPSprite(pspdef_t *psp) { - fixed_t tx; - int x1; - int x2; - spritedef_t* sprdef; - spriteframe_t* sprframe; - int lump; - boolean flip; - vissprite_t* vis; - vissprite_t avis; - + fixed_t tx; + int x1; + int x2; + spritedef_t *sprdef; + spriteframe_t *sprframe; + int lump; + boolean flip; + vissprite_t *vis; + vissprite_t avis; + // decide which patch to use #ifdef RANGECHECK - if ( (unsigned)psp->state->sprite >= (unsigned int) numsprites) - I_Error ("R_ProjectSprite: invalid sprite number %i ", - psp->state->sprite); + if ((unsigned) psp->state->sprite >= (unsigned int) numsprites) + I_Error("R_ProjectSprite: invalid sprite number %i ", psp->state->sprite); #endif sprdef = &sprites[psp->state->sprite]; #ifdef RANGECHECK - if ( (psp->state->frame & FF_FRAMEMASK) >= sprdef->numframes) - I_Error ("R_ProjectSprite: invalid sprite frame %i : %i ", - psp->state->sprite, psp->state->frame); + if ((psp->state->frame & FF_FRAMEMASK) >= sprdef->numframes) + I_Error("R_ProjectSprite: invalid sprite frame %i : %i ", psp->state->sprite, + psp->state->frame); #endif - sprframe = &sprdef->spriteframes[ psp->state->frame & FF_FRAMEMASK ]; + sprframe = &sprdef->spriteframes[psp->state->frame & FF_FRAMEMASK]; lump = sprframe->lump[0]; - flip = (boolean)sprframe->flip[0]; - + flip = (boolean) sprframe->flip[0]; + // calculate edges of the shape - tx = psp->sx-(SCREENWIDTH/2)*FRACUNIT; - - tx -= spriteoffset[lump]; - x1 = (centerxfrac + FixedMul (tx,pspritescale) ) >>FRACBITS; + tx = psp->sx - (SCREENWIDTH / 2) * FRACUNIT; + + tx -= spriteoffset[lump]; + x1 = (centerxfrac + FixedMul(tx, pspritescale)) >> FRACBITS; // off the right side if (x1 > viewwidth) - return; + return; - tx += spritewidth[lump]; - x2 = ((centerxfrac + FixedMul (tx, pspritescale) ) >>FRACBITS) - 1; + tx += spritewidth[lump]; + x2 = ((centerxfrac + FixedMul(tx, pspritescale)) >> FRACBITS) - 1; // off the left side if (x2 < 0) - return; - + return; + // store information in a vissprite vis = &avis; vis->mobjflags = 0; - vis->texturemid = (BASEYCENTER<sy-spritetopoffset[lump]); + vis->texturemid = + (BASEYCENTER << FRACBITS) + FRACUNIT / 2 - (psp->sy - spritetopoffset[lump]); vis->x1 = x1 < 0 ? 0 : x1; - vis->x2 = x2 >= viewwidth ? viewwidth-1 : x2; - vis->scale = pspritescale<x2 = x2 >= viewwidth ? viewwidth - 1 : x2; + vis->scale = pspritescale << detailshift; + if (flip) { - vis->xiscale = -pspriteiscale; - vis->startfrac = spritewidth[lump]-1; + vis->xiscale = -pspriteiscale; + vis->startfrac = spritewidth[lump] - 1; } else { - vis->xiscale = pspriteiscale; - vis->startfrac = 0; + vis->xiscale = pspriteiscale; + vis->startfrac = 0; } - + if (vis->x1 > x1) - vis->startfrac += vis->xiscale*(vis->x1-x1); + vis->startfrac += vis->xiscale * (vis->x1 - x1); vis->patch = lump; - if (viewplayer->powers[pw_invisibility] > 4*32 - || viewplayer->powers[pw_invisibility] & 8) + if (viewplayer->powers[pw_invisibility] > 4 * 32 || + viewplayer->powers[pw_invisibility] & 8) { - // shadow draw - vis->colormap = NULL; + // shadow draw + vis->colormap = NULL; } else if (fixedcolormap) { - // fixed color - vis->colormap = fixedcolormap; + // fixed color + vis->colormap = fixedcolormap; } else if (psp->state->frame & FF_FULLBRIGHT) { - // full bright - vis->colormap = colormaps; + // full bright + vis->colormap = colormaps; } else { - // local light - vis->colormap = spritelights[MAXLIGHTSCALE-1]; + // local light + vis->colormap = spritelights[MAXLIGHTSCALE - 1]; } - - R_DrawVisSprite (vis, vis->x1, vis->x2); -} + R_DrawVisSprite(vis, vis->x1, vis->x2); +} // // R_DrawPlayerSprites // -void R_DrawPlayerSprites (void) +void R_DrawPlayerSprites(void) { - int i; - int lightnum; - pspdef_t* psp; - + int i; + int lightnum; + pspdef_t *psp; + // get light level lightnum = - (viewplayer->mo->subsector->sector->lightlevel >> LIGHTSEGSHIFT) - +extralight; + (viewplayer->mo->subsector->sector->lightlevel >> LIGHTSEGSHIFT) + extralight; - if (lightnum < 0) - spritelights = scalelight[0]; + if (lightnum < 0) + spritelights = scalelight[0]; else if (lightnum >= LIGHTLEVELS) - spritelights = scalelight[LIGHTLEVELS-1]; + spritelights = scalelight[LIGHTLEVELS - 1]; else - spritelights = scalelight[lightnum]; - + spritelights = scalelight[lightnum]; + // clip to screen bounds mfloorclip = screenheightarray; mceilingclip = negonearray; - + // add all active psprites - for (i=0, psp=viewplayer->psprites; - ipsprites; i < NUMPSPRITES; i++, psp++) { - if (psp->state) - R_DrawPSprite (psp); + if (psp->state) + R_DrawPSprite(psp); } } - - // // R_SortVisSprites // -vissprite_t vsprsortedhead; +vissprite_t vsprsortedhead; -void R_SortVisSprites (void) +void R_SortVisSprites(void) { - int i; - int count; - vissprite_t* ds; - vissprite_t* best; - static vissprite_t unsorted; - fixed_t bestscale; + int i; + int count; + vissprite_t *ds; + vissprite_t *best; + static vissprite_t unsorted; + fixed_t bestscale; count = vissprite_p - vissprites; - + unsorted.next = unsorted.prev = &unsorted; if (!count) - return; - - for (ds=vissprites ; dsnext = ds+1; - ds->prev = ds-1; + ds->next = ds + 1; + ds->prev = ds - 1; } - + vissprites[0].prev = &unsorted; unsorted.next = &vissprites[0]; - (vissprite_p-1)->next = &unsorted; - unsorted.prev = vissprite_p-1; - + (vissprite_p - 1)->next = &unsorted; + unsorted.prev = vissprite_p - 1; + // pull the vissprites out by scale vsprsortedhead.next = vsprsortedhead.prev = &vsprsortedhead; - for (i=0 ; inext) - { - if (ds->scale < bestscale) - { - bestscale = ds->scale; - best = ds; - } - } - best->next->prev = best->prev; - best->prev->next = best->next; - best->next = &vsprsortedhead; - best->prev = vsprsortedhead.prev; - vsprsortedhead.prev->next = best; - vsprsortedhead.prev = best; + for (ds = unsorted.next; ds != &unsorted; ds = ds->next) + { + if (ds->scale < bestscale) + { + bestscale = ds->scale; + best = ds; + } + } + best->next->prev = best->prev; + best->prev->next = best->next; + best->next = &vsprsortedhead; + best->prev = vsprsortedhead.prev; + vsprsortedhead.prev->next = best; + vsprsortedhead.prev = best; } } - // // R_DrawSprite // -void R_DrawSprite (vissprite_t* spr) +void R_DrawSprite(vissprite_t *spr) { - drawseg_t* ds; - short clipbot[SCREENWIDTH]; - short cliptop[SCREENWIDTH]; - int x; - int r1; - int r2; - fixed_t scale; - fixed_t lowscale; - int silhouette; - - for (x = spr->x1 ; x<=spr->x2 ; x++) - clipbot[x] = cliptop[x] = -2; - + drawseg_t *ds; + short clipbot[SCREENWIDTH]; + short cliptop[SCREENWIDTH]; + int x; + int r1; + int r2; + fixed_t scale; + fixed_t lowscale; + int silhouette; + + for (x = spr->x1; x <= spr->x2; x++) + clipbot[x] = cliptop[x] = -2; + // Scan drawsegs from end to start for obscuring segs. // The first drawseg that has a greater scale // is the clip seg. - for (ds=ds_p-1 ; ds >= drawsegs ; ds--) + for (ds = ds_p - 1; ds >= drawsegs; ds--) { - // determine if the drawseg obscures the sprite - if (ds->x1 > spr->x2 - || ds->x2 < spr->x1 - || (!ds->silhouette - && !ds->maskedtexturecol) ) - { - // does not cover sprite - continue; - } - - r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; - r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; - - if (ds->scale1 > ds->scale2) - { - lowscale = ds->scale2; - scale = ds->scale1; - } - else - { - lowscale = ds->scale1; - scale = ds->scale2; - } - - if (scale < spr->scale - || ( lowscale < spr->scale - && !R_PointOnSegSide (spr->gx, spr->gy, ds->curline) ) ) - { - // masked mid texture? - if (ds->maskedtexturecol) - R_RenderMaskedSegRange (ds, r1, r2); - // seg is behind sprite - continue; - } - - - // clip this piece of the sprite - silhouette = ds->silhouette; - - if (spr->gz >= ds->bsilheight) - silhouette &= ~SIL_BOTTOM; - - if (spr->gzt <= ds->tsilheight) - silhouette &= ~SIL_TOP; - - if (silhouette == 1) - { - // bottom sil - for (x=r1 ; x<=r2 ; x++) - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - } - else if (silhouette == 2) - { - // top sil - for (x=r1 ; x<=r2 ; x++) - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; - } - else if (silhouette == 3) - { - // both - for (x=r1 ; x<=r2 ; x++) - { - if (clipbot[x] == -2) - clipbot[x] = ds->sprbottomclip[x]; - if (cliptop[x] == -2) - cliptop[x] = ds->sprtopclip[x]; - } - } - + // determine if the drawseg obscures the sprite + if (ds->x1 > spr->x2 || ds->x2 < spr->x1 || + (!ds->silhouette && !ds->maskedtexturecol)) + { + // does not cover sprite + continue; + } + + r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; + r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; + + if (ds->scale1 > ds->scale2) + { + lowscale = ds->scale2; + scale = ds->scale1; + } + else + { + lowscale = ds->scale1; + scale = ds->scale2; + } + + if (scale < spr->scale || + (lowscale < spr->scale && !R_PointOnSegSide(spr->gx, spr->gy, ds->curline))) + { + // masked mid texture? + if (ds->maskedtexturecol) + R_RenderMaskedSegRange(ds, r1, r2); + // seg is behind sprite + continue; + } + + + // clip this piece of the sprite + silhouette = ds->silhouette; + + if (spr->gz >= ds->bsilheight) + silhouette &= ~SIL_BOTTOM; + + if (spr->gzt <= ds->tsilheight) + silhouette &= ~SIL_TOP; + + if (silhouette == 1) + { + // bottom sil + for (x = r1; x <= r2; x++) + if (clipbot[x] == -2) + clipbot[x] = ds->sprbottomclip[x]; + } + else if (silhouette == 2) + { + // top sil + for (x = r1; x <= r2; x++) + if (cliptop[x] == -2) + cliptop[x] = ds->sprtopclip[x]; + } + else if (silhouette == 3) + { + // both + for (x = r1; x <= r2; x++) + { + if (clipbot[x] == -2) + clipbot[x] = ds->sprbottomclip[x]; + if (cliptop[x] == -2) + cliptop[x] = ds->sprtopclip[x]; + } + } } - + // all clipping has been performed, so draw the sprite // check for unclipped columns - for (x = spr->x1 ; x<=spr->x2 ; x++) + for (x = spr->x1; x <= spr->x2; x++) { - if (clipbot[x] == -2) - clipbot[x] = viewheight; + if (clipbot[x] == -2) + clipbot[x] = viewheight; - if (cliptop[x] == -2) - cliptop[x] = -1; + if (cliptop[x] == -2) + cliptop[x] = -1; } - + mfloorclip = clipbot; mceilingclip = cliptop; - R_DrawVisSprite (spr, spr->x1, spr->x2); + R_DrawVisSprite(spr, spr->x1, spr->x2); } - - // // R_DrawMasked // -void R_DrawMasked (void) +void R_DrawMasked(void) { - vissprite_t* spr; - drawseg_t* ds; - - R_SortVisSprites (); + vissprite_t *spr; + drawseg_t *ds; + + R_SortVisSprites(); if (vissprite_p > vissprites) { - // draw all vissprites back to front - for (spr = vsprsortedhead.next ; - spr != &vsprsortedhead ; - spr=spr->next) - { - - R_DrawSprite (spr); - } + // draw all vissprites back to front + for (spr = vsprsortedhead.next; spr != &vsprsortedhead; spr = spr->next) + { + + R_DrawSprite(spr); + } } - + // render any remaining masked mid textures - for (ds=ds_p-1 ; ds >= drawsegs ; ds--) - if (ds->maskedtexturecol) - R_RenderMaskedSegRange (ds, ds->x1, ds->x2); - + for (ds = ds_p - 1; ds >= drawsegs; ds--) + if (ds->maskedtexturecol) + R_RenderMaskedSegRange(ds, ds->x1, ds->x2); + // draw the psprites on top of everything // but does not draw on side views - if (!viewangleoffset) - R_DrawPlayerSprites (); + if (!viewangleoffset) + R_DrawPlayerSprites(); } - - - diff --git a/src/doom/s_sound.c b/src/doom/s_sound.c index acb9842d28..92715ec282 100644 --- a/src/doom/s_sound.c +++ b/src/doom/s_sound.c @@ -156,7 +156,6 @@ void S_Shutdown(void) static void S_StopChannel(int cnum) { - int i; channel_t *c; c = &channels[cnum]; @@ -172,7 +171,7 @@ static void S_StopChannel(int cnum) // check to see if other channels are playing the sound - for (i = 0; i < snd_channels; i++) + for (int i = 0; i < snd_channels; i++) { if (cnum != i && c->sfxinfo == channels[i].sfxinfo) { @@ -318,8 +317,7 @@ static int S_GetChannel(mobj_t *origin, sfxinfo_t *sfxinfo) // Otherwise, modifies parameters and returns 1. // -static int S_AdjustSoundParams(mobj_t *listener, mobj_t *source, int *vol, - int *sep) +static int S_AdjustSoundParams(mobj_t *listener, mobj_t *source, int *vol, int *sep) { fixed_t approx_dist; fixed_t adx; @@ -368,9 +366,9 @@ static int S_AdjustSoundParams(mobj_t *listener, mobj_t *source, int *vol, approx_dist = S_CLIPPING_DIST; } - *vol = 15 + ((snd_SfxVolume - 15) * - ((S_CLIPPING_DIST - approx_dist) >> FRACBITS)) / - S_ATTENUATOR; + *vol = + 15 + ((snd_SfxVolume - 15) * ((S_CLIPPING_DIST - approx_dist) >> FRACBITS)) / + S_ATTENUATOR; } else { @@ -401,7 +399,6 @@ void S_StartSound(void *origin_p, int sfx_id) { sfxinfo_t *sfx; mobj_t *origin; - int rc; int sep; int pitch; int cnum; @@ -441,8 +438,7 @@ void S_StartSound(void *origin_p, int sfx_id) // and if not, modify the params if (origin && origin != players[consoleplayer].mo) { - rc = S_AdjustSoundParams(players[consoleplayer].mo, origin, &volume, - &sep); + int rc = S_AdjustSoundParams(players[consoleplayer].mo, origin, &volume, &sep); if (origin->x == players[consoleplayer].mo->x && origin->y == players[consoleplayer].mo->y) @@ -494,8 +490,7 @@ void S_StartSound(void *origin_p, int sfx_id) } channels[cnum].pitch = pitch; - channels[cnum].handle = - I_StartSound(sfx, cnum, volume, sep, channels[cnum].pitch); + channels[cnum].handle = I_StartSound(sfx, cnum, volume, sep, channels[cnum].pitch); } // @@ -530,7 +525,6 @@ void S_UpdateSounds(mobj_t *listener) int cnum; int volume; int sep; - sfxinfo_t *sfx; channel_t *c; I_UpdateSound(); @@ -538,7 +532,7 @@ void S_UpdateSounds(mobj_t *listener) for (cnum = 0; cnum < snd_channels; cnum++) { c = &channels[cnum]; - sfx = c->sfxinfo; + sfxinfo_t *sfx = c->sfxinfo; if (c->sfxinfo) { @@ -566,8 +560,7 @@ void S_UpdateSounds(mobj_t *listener) // or modify their params if (c->origin && listener != c->origin) { - audible = - S_AdjustSoundParams(listener, c->origin, &volume, &sep); + audible = S_AdjustSoundParams(listener, c->origin, &volume, &sep); if (!audible) { @@ -621,7 +614,6 @@ void S_StartMusic(int m_id) void S_ChangeMusic(int musicnum, int looping) { musicinfo_t *music = NULL; - char namebuf[9]; void *handle; // The Doom IWAD file has two versions of the intro music: d_intro @@ -653,6 +645,7 @@ void S_ChangeMusic(int musicnum, int looping) // get lumpnum if neccessary if (!music->lumpnum) { + char namebuf[9]; M_snprintf(namebuf, sizeof(namebuf), "d_%s", music->name); music->lumpnum = W_GetNumForName(namebuf); } @@ -666,11 +659,6 @@ void S_ChangeMusic(int musicnum, int looping) mus_playing = music; } -boolean S_MusicPlaying(void) -{ - return I_MusicIsPlaying(); -} - void S_StopMusic(void) { if (mus_playing) diff --git a/src/doom/s_sound.h b/src/doom/s_sound.h index bbd100a0c3..735cfedb7e 100644 --- a/src/doom/s_sound.h +++ b/src/doom/s_sound.h @@ -64,9 +64,6 @@ void S_StartMusic(int music_id); // and set whether looping void S_ChangeMusic(int music_id, int looping); -// query if music is playing -boolean S_MusicPlaying(void); - // Stops the music fer sure. void S_StopMusic(void); diff --git a/src/doom/sounds.c b/src/doom/sounds.c index c859bf2545..73b3ddace6 100644 --- a/src/doom/sounds.c +++ b/src/doom/sounds.c @@ -28,43 +28,40 @@ // Information about all the music // -#define MUSIC(name) \ - { \ - name, 0, NULL, NULL \ +#define MUSIC(name) \ + { \ + name, 0, NULL, NULL \ } //TODO: remove all non-DOOM 1 music musicinfo_t S_music[] = { - MUSIC(NULL), MUSIC("e1m1"), MUSIC("e1m2"), MUSIC("e1m3"), - MUSIC("e1m4"), MUSIC("e1m5"), MUSIC("e1m6"), MUSIC("e1m7"), - MUSIC("e1m8"), MUSIC("e1m9"), MUSIC("e2m1"), MUSIC("e2m2"), - MUSIC("e2m3"), MUSIC("e2m4"), MUSIC("e2m5"), MUSIC("e2m6"), - MUSIC("e2m7"), MUSIC("e2m8"), MUSIC("e2m9"), MUSIC("e3m1"), - MUSIC("e3m2"), MUSIC("e3m3"), MUSIC("e3m4"), MUSIC("e3m5"), - MUSIC("e3m6"), MUSIC("e3m7"), MUSIC("e3m8"), MUSIC("e3m9"), - MUSIC("inter"), MUSIC("intro"), MUSIC("bunny"), MUSIC("victor"), - MUSIC("introa"), MUSIC("runnin"), MUSIC("stalks"), MUSIC("countd"), - MUSIC("betwee"), MUSIC("doom"), MUSIC("the_da"), MUSIC("shawn"), - MUSIC("ddtblu"), MUSIC("in_cit"), MUSIC("dead"), MUSIC("stlks2"), - MUSIC("theda2"), MUSIC("doom2"), MUSIC("ddtbl2"), MUSIC("runni2"), - MUSIC("dead2"), MUSIC("stlks3"), MUSIC("romero"), MUSIC("shawn2"), - MUSIC("messag"), MUSIC("count2"), MUSIC("ddtbl3"), MUSIC("ampie"), - MUSIC("theda3"), MUSIC("adrian"), MUSIC("messg2"), MUSIC("romer2"), - MUSIC("tense"), MUSIC("shawn3"), MUSIC("openin"), MUSIC("evil"), - MUSIC("ultima"), MUSIC("read_m"), MUSIC("dm2ttl"), MUSIC("dm2int")}; + MUSIC(NULL), MUSIC("e1m1"), MUSIC("e1m2"), MUSIC("e1m3"), MUSIC("e1m4"), + MUSIC("e1m5"), MUSIC("e1m6"), MUSIC("e1m7"), MUSIC("e1m8"), MUSIC("e1m9"), + MUSIC("e2m1"), MUSIC("e2m2"), MUSIC("e2m3"), MUSIC("e2m4"), MUSIC("e2m5"), + MUSIC("e2m6"), MUSIC("e2m7"), MUSIC("e2m8"), MUSIC("e2m9"), MUSIC("e3m1"), + MUSIC("e3m2"), MUSIC("e3m3"), MUSIC("e3m4"), MUSIC("e3m5"), MUSIC("e3m6"), + MUSIC("e3m7"), MUSIC("e3m8"), MUSIC("e3m9"), MUSIC("inter"), MUSIC("intro"), + MUSIC("bunny"), MUSIC("victor"), MUSIC("introa"), MUSIC("runnin"), MUSIC("stalks"), + MUSIC("countd"), MUSIC("betwee"), MUSIC("doom"), MUSIC("the_da"), MUSIC("shawn"), + MUSIC("ddtblu"), MUSIC("in_cit"), MUSIC("dead"), MUSIC("stlks2"), MUSIC("theda2"), + MUSIC("doom2"), MUSIC("ddtbl2"), MUSIC("runni2"), MUSIC("dead2"), MUSIC("stlks3"), + MUSIC("romero"), MUSIC("shawn2"), MUSIC("messag"), MUSIC("count2"), MUSIC("ddtbl3"), + MUSIC("ampie"), MUSIC("theda3"), MUSIC("adrian"), MUSIC("messg2"), MUSIC("romer2"), + MUSIC("tense"), MUSIC("shawn3"), MUSIC("openin"), MUSIC("evil"), MUSIC("ultima"), + MUSIC("read_m"), MUSIC("dm2ttl"), MUSIC("dm2int")}; // // Information about all the sfx // -#define SOUND(name, priority) \ - { \ - NULL, name, priority, NULL, -1, -1, 0, 0, -1, NULL \ +#define SOUND(name, priority) \ + { \ + NULL, name, priority, NULL, -1, -1, 0, 0, -1, NULL \ } -#define SOUND_LINK(name, priority, link_id, pitch, volume) \ - { \ - NULL, name, priority, &S_sfx[link_id], pitch, volume, 0, 0, -1, NULL \ +#define SOUND_LINK(name, priority, link_id, pitch, volume) \ + { \ + NULL, name, priority, &S_sfx[link_id], pitch, volume, 0, 0, -1, NULL \ } sfxinfo_t S_sfx[] = { diff --git a/src/doom/st_lib.c b/src/doom/st_lib.c index b87ffeab45..80e32628b1 100644 --- a/src/doom/st_lib.c +++ b/src/doom/st_lib.c @@ -39,7 +39,7 @@ // Hack display negative frags. // Loads and store the stminus lump. // -patch_t* sttminus; +patch_t *sttminus; void STlib_init(void) { @@ -51,45 +51,35 @@ void STlib_init(void) // ? -void -STlib_initNum -( st_number_t* n, - int x, - int y, - patch_t** pl, - int* num, - boolean* on, - int width ) +void STlib_initNum(st_number_t *n, int x, int y, patch_t **pl, int *num, boolean *on, + int width) { - n->x = x; - n->y = y; - n->oldnum = 0; - n->width = width; - n->num = num; - n->on = on; - n->p = pl; + n->x = x; + n->y = y; + n->oldnum = 0; + n->width = width; + n->num = num; + n->on = on; + n->p = pl; } -// +// // A fairly efficient way to draw a number // based on differences from the old number. // Note: worth the trouble? // -void -STlib_drawNum -( st_number_t* n, - boolean refresh ) +void STlib_drawNum(st_number_t *n, boolean refresh) { - int numdigits = n->width; - int num = *n->num; - - int w = SHORT(n->p[0]->width); - int h = SHORT(n->p[0]->height); - int x = n->x; - - int neg; + int numdigits = n->width; + int num = *n->num; + + int w = SHORT(n->p[0]->width); + int h = SHORT(n->p[0]->height); + int x = n->x; + + int neg; n->oldnum = *n->num; @@ -97,186 +87,136 @@ STlib_drawNum if (neg) { - if (numdigits == 2 && num < -9) - num = -9; - else if (numdigits == 3 && num < -99) - num = -99; - - num = -num; + if (numdigits == 2 && num < -9) + num = -9; + else if (numdigits == 3 && num < -99) + num = -99; + + num = -num; } // clear the area - x = n->x - numdigits*w; + x = n->x - numdigits * w; if (n->y - ST_Y < 0) - I_Error("drawNum: n->y - ST_Y < 0"); + I_Error("drawNum: n->y - ST_Y < 0"); - V_CopyRect(x, n->y - ST_Y, st_backing_screen, w*numdigits, h, x, n->y); + V_CopyRect(x, n->y - ST_Y, st_backing_screen, w * numdigits, h, x, n->y); // if non-number, do not draw it if (num == 1994) - return; + return; x = n->x; // in the special case of 0, you draw 0 if (!num) - V_DrawPatch(x - w, n->y, n->p[ 0 ]); + V_DrawPatch(x - w, n->y, n->p[0]); // draw the new number while (num && numdigits--) { - x -= w; - V_DrawPatch(x, n->y, n->p[ num % 10 ]); - num /= 10; + x -= w; + V_DrawPatch(x, n->y, n->p[num % 10]); + num /= 10; } // draw a minus sign if necessary if (neg && sttminus) - V_DrawPatch(x - 8, n->y, sttminus); + V_DrawPatch(x - 8, n->y, sttminus); } // -void -STlib_updateNum -( st_number_t* n, - boolean refresh ) +void STlib_updateNum(st_number_t *n, boolean refresh) { - if (*n->on) STlib_drawNum(n, refresh); + if (*n->on) + STlib_drawNum(n, refresh); } // -void -STlib_initPercent -( st_percent_t* p, - int x, - int y, - patch_t** pl, - int* num, - boolean* on, - patch_t* percent ) +void STlib_initPercent(st_percent_t *p, int x, int y, patch_t **pl, int *num, boolean *on, + patch_t *percent) { STlib_initNum(&p->n, x, y, pl, num, on, 3); p->p = percent; } - - -void -STlib_updatePercent -( st_percent_t* per, - int refresh ) +void STlib_updatePercent(st_percent_t *per, int refresh) { if (refresh && *per->n.on) - V_DrawPatch(per->n.x, per->n.y, per->p); - + V_DrawPatch(per->n.x, per->n.y, per->p); + STlib_updateNum(&per->n, refresh); } - -void -STlib_initMultIcon -( st_multicon_t* i, - int x, - int y, - patch_t** il, - int* inum, - boolean* on ) +void STlib_initMultIcon(st_multicon_t *i, int x, int y, patch_t **il, int *inum, + boolean *on) { - i->x = x; - i->y = y; - i->oldinum = -1; - i->inum = inum; - i->on = on; - i->p = il; + i->x = x; + i->y = y; + i->oldinum = -1; + i->inum = inum; + i->on = on; + i->p = il; } - -void -STlib_updateMultIcon -( st_multicon_t* mi, - boolean refresh ) +void STlib_updateMultIcon(st_multicon_t *mi, boolean refresh) { - int w; - int h; - int x; - int y; - - if (*mi->on - && (mi->oldinum != *mi->inum || refresh) - && (*mi->inum!=-1)) + if (*mi->on && (mi->oldinum != *mi->inum || refresh) && (*mi->inum != -1)) { - if (mi->oldinum != -1) - { - x = mi->x - SHORT(mi->p[mi->oldinum]->leftoffset); - y = mi->y - SHORT(mi->p[mi->oldinum]->topoffset); - w = SHORT(mi->p[mi->oldinum]->width); - h = SHORT(mi->p[mi->oldinum]->height); - - if (y - ST_Y < 0) - I_Error("updateMultIcon: y - ST_Y < 0"); - - V_CopyRect(x, y-ST_Y, st_backing_screen, w, h, x, y); - } - V_DrawPatch(mi->x, mi->y, mi->p[*mi->inum]); - mi->oldinum = *mi->inum; + if (mi->oldinum != -1) + { + int x = mi->x - SHORT(mi->p[mi->oldinum]->leftoffset); + int y = mi->y - SHORT(mi->p[mi->oldinum]->topoffset); + int w = SHORT(mi->p[mi->oldinum]->width); + int h = SHORT(mi->p[mi->oldinum]->height); + + if (y - ST_Y < 0) + I_Error("updateMultIcon: y - ST_Y < 0"); + + V_CopyRect(x, y - ST_Y, st_backing_screen, w, h, x, y); + } + V_DrawPatch(mi->x, mi->y, mi->p[*mi->inum]); + mi->oldinum = *mi->inum; } } - -void -STlib_initBinIcon -( st_binicon_t* b, - int x, - int y, - patch_t* i, - boolean* val, - boolean* on ) +void STlib_initBinIcon(st_binicon_t *b, int x, int y, patch_t *i, boolean *val, + boolean *on) { - b->x = x; - b->y = y; - b->oldval = false; - b->val = val; - b->on = on; - b->p = i; + b->x = x; + b->y = y; + b->oldval = false; + b->val = val; + b->on = on; + b->p = i; } - -void -STlib_updateBinIcon -( st_binicon_t* bi, - boolean refresh ) +void STlib_updateBinIcon(st_binicon_t *bi, boolean refresh) { - int x; - int y; - int w; - int h; - if (*bi->on - && (bi->oldval != *bi->val || refresh)) + if (*bi->on && (bi->oldval != *bi->val || refresh)) { - x = bi->x - SHORT(bi->p->leftoffset); - y = bi->y - SHORT(bi->p->topoffset); - w = SHORT(bi->p->width); - h = SHORT(bi->p->height); + int x = bi->x - SHORT(bi->p->leftoffset); + int y = bi->y - SHORT(bi->p->topoffset); + int w = SHORT(bi->p->width); + int h = SHORT(bi->p->height); - if (y - ST_Y < 0) - I_Error("updateBinIcon: y - ST_Y < 0"); + if (y - ST_Y < 0) + I_Error("updateBinIcon: y - ST_Y < 0"); - if (*bi->val) - V_DrawPatch(bi->x, bi->y, bi->p); - else - V_CopyRect(x, y-ST_Y, st_backing_screen, w, h, x, y); + if (*bi->val) + V_DrawPatch(bi->x, bi->y, bi->p); + else + V_CopyRect(x, y - ST_Y, st_backing_screen, w, h, x, y); - bi->oldval = *bi->val; + bi->oldval = *bi->val; } - } - diff --git a/src/doom/st_stuff.c b/src/doom/st_stuff.c index 4e41afda9f..8af1ea9a33 100644 --- a/src/doom/st_stuff.c +++ b/src/doom/st_stuff.c @@ -94,8 +94,7 @@ #define ST_NUMTURNFACES 2 #define ST_NUMSPECIALFACES 3 -#define ST_FACESTRIDE \ - (ST_NUMSTRAIGHTFACES + ST_NUMTURNFACES + ST_NUMSPECIALFACES) +#define ST_FACESTRIDE (ST_NUMSTRAIGHTFACES + ST_NUMTURNFACES + ST_NUMSPECIALFACES) #define ST_NUMEXTRAFACES 2 @@ -563,8 +562,7 @@ boolean ST_Responder(event_t *ev) { static char buf[ST_MSGWIDTH]; M_snprintf(buf, sizeof(buf), "ang=0x%x;x,y=(0x%x,0x%x)", - players[consoleplayer].mo->angle, - players[consoleplayer].mo->x, + players[consoleplayer].mo->angle, players[consoleplayer].mo->x, players[consoleplayer].mo->y); plyr->message = buf; } @@ -637,7 +635,6 @@ void ST_updateFaceWidget(void) int i; angle_t badguyangle; angle_t diffang; - static int lastattackdown = -1; static int priority = 0; boolean doevilgrin; @@ -691,9 +688,8 @@ void ST_updateFaceWidget(void) } else { - badguyangle = - R_PointToAngle2(plyr->mo->x, plyr->mo->y, plyr->attacker->x, - plyr->attacker->y); + badguyangle = R_PointToAngle2(plyr->mo->x, plyr->mo->y, plyr->attacker->x, + plyr->attacker->y); if (badguyangle > plyr->mo->angle) { @@ -753,6 +749,7 @@ void ST_updateFaceWidget(void) if (priority < 6) { + static int lastattackdown = -1; // rapid firing if (plyr->attackdown) { @@ -871,16 +868,14 @@ void ST_doPaletteStuff(void) { int palette; - byte *pal; int cnt; - int bzc; cnt = plyr->damagecount; if (plyr->powers[pw_strength]) { // slowly fade the berzerk out - bzc = 12 - (plyr->powers[pw_strength] >> 6); + int bzc = 12 - (plyr->powers[pw_strength] >> 6); if (bzc > cnt) cnt = bzc; @@ -906,8 +901,7 @@ void ST_doPaletteStuff(void) palette += STARTBONUSPALS; } - else if (plyr->powers[pw_ironfeet] > 4 * 32 || - plyr->powers[pw_ironfeet] & 8) + else if (plyr->powers[pw_ironfeet] > 4 * 32 || plyr->powers[pw_ironfeet] & 8) palette = RADIATIONPAL; else palette = 0; @@ -915,7 +909,7 @@ void ST_doPaletteStuff(void) if (palette != st_palette) { st_palette = palette; - pal = (byte *) W_CacheLumpNum(lu_palette, PU_CACHE) + palette * 768; + byte *pal = (byte *) W_CacheLumpNum(lu_palette, PU_CACHE) + palette * 768; I_SetPalette(pal); } } @@ -1105,22 +1099,6 @@ void ST_loadData(void) ST_loadGraphics(); } -static void ST_unloadCallback(const char *lumpname, patch_t **variable) -{ - W_ReleaseLumpName(lumpname); - *variable = NULL; -} - -void ST_unloadGraphics(void) -{ - ST_loadUnloadGraphics(ST_unloadCallback); -} - -void ST_unloadData(void) -{ - ST_unloadGraphics(); -} - void ST_initData(void) { @@ -1159,8 +1137,8 @@ void ST_createWidgets(void) // ready weapon ammo STlib_initNum(&w_ready, ST_AMMOX, ST_AMMOY, tallnum, - &plyr->ammo[weaponinfo[plyr->readyweapon].ammo], - &st_statusbaron, ST_AMMOWIDTH); + &plyr->ammo[weaponinfo[plyr->readyweapon].ammo], &st_statusbaron, + ST_AMMOWIDTH); // the last weapon type w_ready.data = plyr->readyweapon; @@ -1170,8 +1148,8 @@ void ST_createWidgets(void) &st_statusbaron, tallpercent); // arms background - STlib_initBinIcon(&w_armsbg, ST_ARMSBGX, ST_ARMSBGY, armsbg, - &st_notdeathmatch, &st_statusbaron); + STlib_initBinIcon(&w_armsbg, ST_ARMSBGX, ST_ARMSBGY, armsbg, &st_notdeathmatch, + &st_statusbaron); // weapons owned for (i = 0; i < 6; i++) @@ -1182,16 +1160,16 @@ void ST_createWidgets(void) } // frags sum - STlib_initNum(&w_frags, ST_FRAGSX, ST_FRAGSY, tallnum, &st_fragscount, - &st_fragson, ST_FRAGSWIDTH); + STlib_initNum(&w_frags, ST_FRAGSX, ST_FRAGSY, tallnum, &st_fragscount, &st_fragson, + ST_FRAGSWIDTH); // faces STlib_initMultIcon(&w_faces, ST_FACESX, ST_FACESY, faces, &st_faceindex, &st_statusbaron); // armor percentage - should be colored later - STlib_initPercent(&w_armor, ST_ARMORX, ST_ARMORY, tallnum, - &plyr->armorpoints, &st_statusbaron, tallpercent); + STlib_initPercent(&w_armor, ST_ARMORX, ST_ARMORY, tallnum, &plyr->armorpoints, + &st_statusbaron, tallpercent); // keyboxes 0-2 STlib_initMultIcon(&w_keyboxes[0], ST_KEY0X, ST_KEY0Y, keys, &keyboxes[0], @@ -1217,17 +1195,17 @@ void ST_createWidgets(void) &st_statusbaron, ST_AMMO3WIDTH); // max ammo count (all four kinds) - STlib_initNum(&w_maxammo[0], ST_MAXAMMO0X, ST_MAXAMMO0Y, shortnum, - &plyr->maxammo[0], &st_statusbaron, ST_MAXAMMO0WIDTH); + STlib_initNum(&w_maxammo[0], ST_MAXAMMO0X, ST_MAXAMMO0Y, shortnum, &plyr->maxammo[0], + &st_statusbaron, ST_MAXAMMO0WIDTH); - STlib_initNum(&w_maxammo[1], ST_MAXAMMO1X, ST_MAXAMMO1Y, shortnum, - &plyr->maxammo[1], &st_statusbaron, ST_MAXAMMO1WIDTH); + STlib_initNum(&w_maxammo[1], ST_MAXAMMO1X, ST_MAXAMMO1Y, shortnum, &plyr->maxammo[1], + &st_statusbaron, ST_MAXAMMO1WIDTH); - STlib_initNum(&w_maxammo[2], ST_MAXAMMO2X, ST_MAXAMMO2Y, shortnum, - &plyr->maxammo[2], &st_statusbaron, ST_MAXAMMO2WIDTH); + STlib_initNum(&w_maxammo[2], ST_MAXAMMO2X, ST_MAXAMMO2Y, shortnum, &plyr->maxammo[2], + &st_statusbaron, ST_MAXAMMO2WIDTH); - STlib_initNum(&w_maxammo[3], ST_MAXAMMO3X, ST_MAXAMMO3Y, shortnum, - &plyr->maxammo[3], &st_statusbaron, ST_MAXAMMO3WIDTH); + STlib_initNum(&w_maxammo[3], ST_MAXAMMO3X, ST_MAXAMMO3Y, shortnum, &plyr->maxammo[3], + &st_statusbaron, ST_MAXAMMO3WIDTH); } static boolean st_stopped = true; diff --git a/src/doom/statdump.c b/src/doom/statdump.c index 46a0dffd16..42274cd2f2 100644 --- a/src/doom/statdump.c +++ b/src/doom/statdump.c @@ -97,13 +97,11 @@ static void PrintPercentage(FILE *stream, int amount, int total) /* Display statistics for a single player. */ -static void PrintPlayerStats(FILE *stream, const wbstartstruct_t *stats, - int player_num) +static void PrintPlayerStats(FILE *stream, const wbstartstruct_t *stats, int player_num) { const wbplayerstruct_t *player = &stats->plyr[player_num]; - fprintf(stream, "Player %i (%s):\n", player_num + 1, - player_colors[player_num]); + fprintf(stream, "Player %i (%s):\n", player_num + 1, player_colors[player_num]); /* Kills percentage */ @@ -224,15 +222,13 @@ void StatCopy(const wbstartstruct_t *stats) { if (M_ParmExists("-statdump") && num_captured_stats < MAX_CAPTURES) { - memcpy(&captured_stats[num_captured_stats], stats, - sizeof(wbstartstruct_t)); + memcpy(&captured_stats[num_captured_stats], stats, sizeof(wbstartstruct_t)); ++num_captured_stats; } } void StatDump(void) { - FILE *dumpfile; int i; //! @@ -257,6 +253,8 @@ void StatDump(void) // Allow "-" as output file, for stdout. + FILE *dumpfile; + if (strcmp(myargv[i + 1], "-") != 0) { dumpfile = M_fopen(myargv[i + 1], "w"); diff --git a/src/doom/wi_stuff.c b/src/doom/wi_stuff.c index fb721557f5..3028d9580a 100644 --- a/src/doom/wi_stuff.c +++ b/src/doom/wi_stuff.c @@ -137,15 +137,9 @@ typedef struct // next value of bcnt (used in conjunction with period) int nexttic; - // last drawn animation frame - int lastdrawn; - // next frame number to animate int ctr; - // used by RANDOM and LEVEL when animating - int state; - } anim_t; @@ -198,10 +192,9 @@ static point_t lnodes[NUMEPISODES][NUMMAPS] = { // as they replace 320x200 full screen frames. // -#define ANIM(type, period, nanims, x, y, nexttic) \ - { \ - (type), (period), (nanims), {(x), (y)}, (nexttic), 0, \ - {NULL, NULL, NULL}, 0, 0, 0, 0 \ +#define ANIM(type, period, nanims, x, y, nexttic) \ + { \ + (type), (period), (nanims), {(x), (y)}, (nexttic), 0, {NULL, NULL, NULL}, 0, 0, \ } @@ -245,8 +238,7 @@ static int NUMANIMS[NUMEPISODES] = { arrlen(epsd2animinfo), }; -static anim_t *anims[NUMEPISODES] = {epsd0animinfo, epsd1animinfo, - epsd2animinfo}; +static anim_t *anims[NUMEPISODES] = {epsd0animinfo, epsd1animinfo, epsd2animinfo}; // @@ -373,14 +365,6 @@ void WI_slamBackground(void) V_DrawPatch(0, 0, background); } -// The ticker is used to detect keys -// because of timing issues in netgames. -boolean WI_Responder(event_t *ev) -{ - return false; -} - - // Draws " Finished!" void WI_drawLF(void) { @@ -415,22 +399,17 @@ void WI_drawOnLnode(int n, patch_t *c[]) { int i; - int left; - int top; - int right; - int bottom; boolean fits = false; i = 0; do { - left = lnodes[wbs->epsd][n].x - SHORT(c[i]->leftoffset); - top = lnodes[wbs->epsd][n].y - SHORT(c[i]->topoffset); - right = left + SHORT(c[i]->width); - bottom = top + SHORT(c[i]->height); + int left = lnodes[wbs->epsd][n].x - SHORT(c[i]->leftoffset); + int top = lnodes[wbs->epsd][n].y - SHORT(c[i]->topoffset); + int right = left + SHORT(c[i]->width); + int bottom = top + SHORT(c[i]->height); - if (left >= 0 && right < SCREENWIDTH && top >= 0 && - bottom < SCREENHEIGHT) + if (left >= 0 && right < SCREENWIDTH && top >= 0 && bottom < SCREENHEIGHT) { fits = true; } @@ -454,15 +433,13 @@ void WI_drawOnLnode(int n, patch_t *c[]) void WI_initAnimatedBack(void) { - int i; - anim_t *a; if (wbs->epsd > 2) return; - for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + for (int i = 0; i < NUMANIMS[wbs->epsd]; i++) { - a = &anims[wbs->epsd][i]; + anim_t *a = &anims[wbs->epsd][i]; // init variables a->ctr = -1; @@ -479,15 +456,12 @@ void WI_initAnimatedBack(void) void WI_updateAnimatedBack(void) { - int i; - anim_t *a; - if (wbs->epsd > 2) return; - for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + for (int i = 0; i < NUMANIMS[wbs->epsd]; i++) { - a = &anims[wbs->epsd][i]; + anim_t *a = &anims[wbs->epsd][i]; if (bcnt == a->nexttic) { @@ -512,8 +486,7 @@ void WI_updateAnimatedBack(void) case ANIM_LEVEL: // gawd-awful hack for level anims - if (!(state == StatCount && i == 7) && - wbs->next == a->data1) + if (!(state == StatCount && i == 7) && wbs->next == a->data1) { a->ctr++; if (a->ctr == a->nanims) @@ -528,15 +501,12 @@ void WI_updateAnimatedBack(void) void WI_drawAnimatedBack(void) { - int i; - anim_t *a; - if (wbs->epsd > 2) return; - for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + for (int i = 0; i < NUMANIMS[wbs->epsd]; i++) { - a = &anims[wbs->epsd][i]; + anim_t *a = &anims[wbs->epsd][i]; if (a->ctr >= 0) V_DrawPatch(a->loc.x, a->loc.y, a->p[a->ctr]); @@ -555,7 +525,6 @@ int WI_drawNum(int x, int y, int n, int digits) int fontwidth = SHORT(num[0]->width); int neg; - int temp; if (digits < 0) { @@ -568,7 +537,7 @@ int WI_drawNum(int x, int y, int n, int digits) { // figure out # of digits in # digits = 0; - temp = n; + int temp = n; while (temp) { @@ -617,20 +586,16 @@ void WI_drawPercent(int x, int y, int p) // void WI_drawTime(int x, int y, int t) { - - int div; - int n; - if (t < 0) return; if (t <= 61 * 59) { - div = 1; + int div = 1; do { - n = (t / div) % 60; + int n = (t / div) % 60; x = WI_drawNum(x, y, n, 2) - SHORT(colon->width); div *= 60; @@ -908,8 +873,8 @@ void WI_drawDeathmatchStats(void) WI_drawLF(); // draw stat titles (top line) - V_DrawPatch(DM_TOTALSX - SHORT(total->width) / 2, - DM_MATRIXY - WI_SPACINGY + 10, total); + V_DrawPatch(DM_TOTALSX - SHORT(total->width) / 2, DM_MATRIXY - WI_SPACINGY + 10, + total); V_DrawPatch(DM_KILLERSX, DM_KILLERSY, killers); V_DrawPatch(DM_VICTIMSX, DM_VICTIMSY, victims); @@ -922,15 +887,13 @@ void WI_drawDeathmatchStats(void) { if (playeringame[i]) { - V_DrawPatch(x - SHORT(p[i]->width) / 2, DM_MATRIXY - WI_SPACINGY, - p[i]); + V_DrawPatch(x - SHORT(p[i]->width) / 2, DM_MATRIXY - WI_SPACINGY, p[i]); V_DrawPatch(DM_MATRIXX - SHORT(p[i]->width) / 2, y, p[i]); if (i == me) { - V_DrawPatch(x - SHORT(p[i]->width) / 2, - DM_MATRIXY - WI_SPACINGY, bstar); + V_DrawPatch(x - SHORT(p[i]->width) / 2, DM_MATRIXY - WI_SPACINGY, bstar); V_DrawPatch(DM_MATRIXX - SHORT(p[i]->width) / 2, y, star); } @@ -1166,18 +1129,14 @@ void WI_drawNetgameStats(void) WI_drawLF(); // draw stat titles (top line) - V_DrawPatch(NG_STATSX + NG_SPACINGX - SHORT(kills->width), NG_STATSY, - kills); + V_DrawPatch(NG_STATSX + NG_SPACINGX - SHORT(kills->width), NG_STATSY, kills); - V_DrawPatch(NG_STATSX + 2 * NG_SPACINGX - SHORT(items->width), NG_STATSY, - items); + V_DrawPatch(NG_STATSX + 2 * NG_SPACINGX - SHORT(items->width), NG_STATSY, items); - V_DrawPatch(NG_STATSX + 3 * NG_SPACINGX - SHORT(secret->width), NG_STATSY, - secret); + V_DrawPatch(NG_STATSX + 3 * NG_SPACINGX - SHORT(secret->width), NG_STATSY, secret); if (dofrags) - V_DrawPatch(NG_STATSX + 4 * NG_SPACINGX - SHORT(frags->width), - NG_STATSY, frags); + V_DrawPatch(NG_STATSX + 4 * NG_SPACINGX - SHORT(frags->width), NG_STATSY, frags); // draw stats y = NG_STATSY + SHORT(kills->height); @@ -1429,11 +1388,10 @@ typedef void (*load_callback_t)(const char *lumpname, patch_t **variable); static void WI_loadUnloadData(load_callback_t callback) { - int i, j; char name[9]; anim_t *a; - for (i = 0; i < NUMMAPS; i++) + for (int i = 0; i < NUMMAPS; i++) { M_snprintf(name, 9, "WILV%d%d", wbs->epsd, i); callback(name, &lnames[i]); @@ -1450,10 +1408,10 @@ static void WI_loadUnloadData(load_callback_t callback) if (wbs->epsd < 3) { - for (j = 0; j < NUMANIMS[wbs->epsd]; j++) + for (int j = 0; j < NUMANIMS[wbs->epsd]; j++) { a = &anims[wbs->epsd][j]; - for (i = 0; i < a->nanims; i++) + for (int i = 0; i < a->nanims; i++) { // MONDO HACK! if (wbs->epsd != 1 || j != 8) @@ -1477,7 +1435,7 @@ static void WI_loadUnloadData(load_callback_t callback) else wiminus = NULL; - for (i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) { // numbers 0-9 M_snprintf(name, 9, "WINUM%d", i); @@ -1540,7 +1498,7 @@ static void WI_loadUnloadData(load_callback_t callback) // "total" callback("WIMSTT", &total); - for (i = 0; i < MAXPLAYERS; i++) + for (int i = 0; i < MAXPLAYERS; i++) { // "1,2,3,4" M_snprintf(name, 9, "STPB%d", i); diff --git a/src/i_endoom.c b/src/i_endoom.c index 9beacc9019..a279da2529 100644 --- a/src/i_endoom.c +++ b/src/i_endoom.c @@ -27,7 +27,7 @@ #define ENDOOM_W 80 #define ENDOOM_H 25 -// +// // Displays the text mode ending screen after the game quits // @@ -42,8 +42,6 @@ void I_Endoom(byte *endoom_data) TXT_Init(); TXT_SetWindowTitle(PACKAGE_STRING); - // SDL2-TODO I_InitWindowTitle(); - // SDL2-TODO I_InitWindowIcon(); // Write the data to the screen memory @@ -51,11 +49,10 @@ void I_Endoom(byte *endoom_data) indent = (ENDOOM_W - TXT_SCREEN_W) / 2; - for (y=0; yd_type != DT_UNKNOWN && de->d_type != DT_LNK) - { - return de->d_type == DT_DIR; - } - else -#endif - { - char *filename; - struct stat sb; - int result; - - filename = M_StringJoin(dir, DIR_SEPARATOR_S, de->d_name, NULL); - result = M_stat(filename, &sb); - free(filename); - - if (result != 0) - { - return false; - } - - return S_ISDIR(sb.st_mode); - } -} - -struct glob_s -{ - char **globs; - int num_globs; - int flags; - DIR *dir; - char *directory; - char *last_filename; - // These fields are only used when the GLOB_FLAG_SORTED flag is set: - char **filenames; - int filenames_len; - int next_index; -}; - -static void FreeStringList(char **globs, int num_globs) -{ - int i; - for (i = 0; i < num_globs; ++i) - { - free(globs[i]); - } - free(globs); -} - -glob_t *I_StartMultiGlob(const char *directory, int flags, - const char *glob, ...) -{ - char **globs; - int num_globs; - glob_t *result; - va_list args; - char *directory_native; - - globs = malloc(sizeof(char *)); - if (globs == NULL) - { - return NULL; - } - globs[0] = M_StringDuplicate(glob); - num_globs = 1; - - va_start(args, glob); - for (;;) - { - const char *arg = va_arg(args, const char *); - char **new_globs; - - if (arg == NULL) - { - break; - } - - new_globs = realloc(globs, sizeof(char *) * (num_globs + 1)); - if (new_globs == NULL) - { - FreeStringList(globs, num_globs); - } - globs = new_globs; - globs[num_globs] = M_StringDuplicate(arg); - ++num_globs; - } - va_end(args); - - result = malloc(sizeof(glob_t)); - if (result == NULL) - { - FreeStringList(globs, num_globs); - return NULL; - } - - directory_native = M_ConvertUtf8ToSysNativeMB(directory); - - result->dir = opendir(directory_native); - if (result->dir == NULL) - { - FreeStringList(globs, num_globs); - free(result); - free(directory_native); - return NULL; - } - - result->directory = directory_native; - result->globs = globs; - result->num_globs = num_globs; - result->flags = flags; - result->last_filename = NULL; - result->filenames = NULL; - result->filenames_len = 0; - result->next_index = -1; - return result; -} - -glob_t *I_StartGlob(const char *directory, const char *glob, int flags) -{ - return I_StartMultiGlob(directory, flags, glob, NULL); -} - -void I_EndGlob(glob_t *glob) -{ - if (glob == NULL) - { - return; - } - - FreeStringList(glob->globs, glob->num_globs); - FreeStringList(glob->filenames, glob->filenames_len); - - free(glob->directory); - free(glob->last_filename); - (void) closedir(glob->dir); - free(glob); -} - -static boolean MatchesGlob(const char *name, const char *glob, int flags) -{ - int n, g; - - while (*glob != '\0') - { - n = *name; - g = *glob; - - if ((flags & GLOB_FLAG_NOCASE) != 0) - { - n = tolower(n); - g = tolower(g); - } - - if (g == '*') - { - // To handle *-matching we skip past the * and recurse - // to check each subsequent character in turn. If none - // match then the whole match is a failure. - while (*name != '\0') - { - if (MatchesGlob(name, glob + 1, flags)) - { - return true; - } - ++name; - } - return glob[1] == '\0'; - } - else if (g != '?' && n != g) - { - // For normal characters the name must match the glob, - // but for ? we don't care what the character is. - return false; - } - - ++name; - ++glob; - } - - // Match successful when glob and name end at the same time. - return *name == '\0'; -} - -static boolean MatchesAnyGlob(const char *name, glob_t *glob) -{ - int i; - - for (i = 0; i < glob->num_globs; ++i) - { - if (MatchesGlob(name, glob->globs[i], glob->flags)) - { - return true; - } - } - return false; -} - -static char *NextGlob(glob_t *glob) -{ - struct dirent *de; - char *temp, *ret; - - do - { - de = readdir(glob->dir); - if (de == NULL) - { - return NULL; - } - } while (IsDirectory(glob->directory, de) - || !MatchesAnyGlob(de->d_name, glob)); - - // Return the fully-qualified path, not just the bare filename. - temp = M_StringJoin(glob->directory, DIR_SEPARATOR_S, de->d_name, NULL); - - ret = M_ConvertSysNativeMBToUtf8(temp); - - free(temp); - - return ret; -} - -static void ReadAllFilenames(glob_t *glob) -{ - char *name; - - glob->filenames = NULL; - glob->filenames_len = 0; - glob->next_index = 0; - - for (;;) - { - name = NextGlob(glob); - if (name == NULL) - { - break; - } - glob->filenames = realloc(glob->filenames, - (glob->filenames_len + 1) * sizeof(char *)); - glob->filenames[glob->filenames_len] = name; - ++glob->filenames_len; - } -} - -static void SortFilenames(char **filenames, int len, int flags) -{ - char *pivot, *tmp; - int i, left_len, cmp; - - if (len <= 1) - { - return; - } - pivot = filenames[len - 1]; - left_len = 0; - for (i = 0; i < len-1; ++i) - { - if ((flags & GLOB_FLAG_NOCASE) != 0) - { - cmp = strcasecmp(filenames[i], pivot); - } - else - { - cmp = strcmp(filenames[i], pivot); - } - - if (cmp < 0) - { - tmp = filenames[i]; - filenames[i] = filenames[left_len]; - filenames[left_len] = tmp; - ++left_len; - } - } - filenames[len - 1] = filenames[left_len]; - filenames[left_len] = pivot; - - SortFilenames(filenames, left_len, flags); - SortFilenames(&filenames[left_len + 1], len - left_len - 1, flags); -} - -const char *I_NextGlob(glob_t *glob) -{ - const char *result; - - if (glob == NULL) - { - return NULL; - } - - // In unsorted mode we just return the filenames as we read - // them back from the system API. - if ((glob->flags & GLOB_FLAG_SORTED) == 0) - { - free(glob->last_filename); - glob->last_filename = NextGlob(glob); - return glob->last_filename; - } - - // In sorted mode we read the whole list of filenames into memory, - // sort them and return them one at a time. - if (glob->next_index < 0) - { - ReadAllFilenames(glob); - SortFilenames(glob->filenames, glob->filenames_len, glob->flags); - } - if (glob->next_index >= glob->filenames_len) - { - return NULL; - } - result = glob->filenames[glob->next_index]; - ++glob->next_index; - return result; -} - -#else /* #ifdef NO_DIRENT_IMPLEMENTATION */ - -#warning No native implementation of file globbing. - -glob_t *I_StartGlob(const char *directory, const char *glob, int flags) -{ - return NULL; -} - -void I_EndGlob(glob_t *glob) -{ -} - -const char *I_NextGlob(glob_t *glob) -{ - return ""; -} - #endif /* #ifdef NO_DIRENT_IMPLEMENTATION */ - diff --git a/src/i_glob.h b/src/i_glob.h index f976db01c4..5a5adaa371 100644 --- a/src/i_glob.h +++ b/src/i_glob.h @@ -24,21 +24,5 @@ typedef struct glob_s glob_t; -// Start reading a list of file paths from the given directory which match -// the given glob pattern. I_EndGlob() must be called on completion. -glob_t *I_StartGlob(const char *directory, const char *glob, int flags); - -// Same as I_StartGlob but multiple glob patterns can be provided. The list -// of patterns must be terminated with NULL. -glob_t *I_StartMultiGlob(const char *directory, int flags, - const char *glob, ...); - -// Finish reading file list. -void I_EndGlob(glob_t *glob); - -// Read the name of the next globbed filename. NULL is returned if there -// are no more found. -const char *I_NextGlob(glob_t *glob); - #endif diff --git a/src/i_input.c b/src/i_input.c index 091aa6b88e..754dcae0f7 100644 --- a/src/i_input.c +++ b/src/i_input.c @@ -33,14 +33,12 @@ static const int scancode_translate_table[] = SCANCODE_TO_KEYS_ARRAY; // Lookup table for mapping ASCII characters to their equivalent when // shift is pressed on a US layout keyboard. This is the original table // as found in the Doom sources, comments and all. -static const char shiftxform[] = -{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, ' ', '!', '"', '#', '$', '%', '&', +static const char shiftxform[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + ' ', '!', '"', '#', '$', '%', '&', '"', // shift-' - '(', ')', '*', '+', + '(', ')', '*', '+', '<', // shift-, '_', // shift-- '>', // shift-. @@ -59,18 +57,15 @@ static const char shiftxform[] = ':', // shift-; '<', '+', // shift-= - '>', '?', '@', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', - 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', // shift-[ '!', // shift-backslash - OH MY GOD DOES WATCOM SUCK ']', // shift-] - '"', '_', + '"', '_', '\'', // shift-` - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', - 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - '{', '|', '}', '~', 127 -}; + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', 127}; // If true, I_StartTextInput() has been called, and we are populating // the data3 field of ev_keydown events. @@ -177,8 +172,8 @@ static int GetTypedChar(SDL_Keysym *sym) // If shift is held down, apply the original uppercase // translation table used under DOS. - if ((SDL_GetModState() & KMOD_SHIFT) != 0 - && result >= 0 && result < arrlen(shiftxform)) + if ((SDL_GetModState() & KMOD_SHIFT) != 0 && result >= 0 && + result < arrlen(shiftxform)) { result = shiftxform[result]; } @@ -192,8 +187,10 @@ static int GetTypedChar(SDL_Keysym *sym) // Special cases, where we always return a fixed value. switch (sym->sym) { - case SDLK_BACKSPACE: return KEY_BACKSPACE; - case SDLK_RETURN: return KEY_ENTER; + case SDLK_BACKSPACE: + return KEY_BACKSPACE; + case SDLK_RETURN: + return KEY_ENTER; default: break; } @@ -220,17 +217,17 @@ static int GetTypedChar(SDL_Keysym *sym) // // So we're stuck with this as a rather fragile alternative. - if (SDL_PeepEvents(&next_event, 1, SDL_PEEKEVENT, - SDL_FIRSTEVENT, SDL_LASTEVENT) == 1 - && next_event.type == SDL_TEXTINPUT) + if (SDL_PeepEvents(&next_event, 1, SDL_PEEKEVENT, SDL_FIRSTEVENT, + SDL_LASTEVENT) == 1 && + next_event.type == SDL_TEXTINPUT) { // If an SDL_TEXTINPUT event is found, we always assume it // matches the key press. The input text must be a single // ASCII character - if it isn't, it's possible the input // char is a Unicode value instead; better to send a null // character than the unshifted key. - if (strlen(next_event.text.text) == 1 - && (next_event.text.text[0] & 0x80) == 0) + if (strlen(next_event.text.text) == 1 && + (next_event.text.text[0] & 0x80) == 0) { return next_event.text.text[0]; } @@ -371,11 +368,11 @@ static void MapMouseWheelToButtons(SDL_MouseWheelEvent *wheel) int button; if (wheel->y <= 0) - { // scroll down + { // scroll down button = 4; } else - { // scroll up + { // scroll up button = 3; } @@ -422,7 +419,7 @@ static int AccelerateMouse(int val) if (val > mouse_threshold) { - return (int)((val - mouse_threshold) * mouse_acceleration + mouse_threshold); + return (int) ((val - mouse_threshold) * mouse_acceleration + mouse_threshold); } else { @@ -442,7 +439,7 @@ void I_ReadMouse(void) SDL_GetRelativeMouseState(&x, &y); - if (x != 0 || y != 0) + if (x != 0 || y != 0) { ev.type = ev_mouse; ev.data1 = mouse_button_state; @@ -466,8 +463,8 @@ void I_ReadMouse(void) // Bind all variables controlling input options. void I_BindInputVariables(void) { - M_BindFloatVariable("mouse_acceleration", &mouse_acceleration); - M_BindIntVariable("mouse_threshold", &mouse_threshold); - M_BindIntVariable("vanilla_keyboard_mapping", &vanilla_keyboard_mapping); - M_BindIntVariable("novert", &novert); + M_BindFloatVariable("mouse_acceleration", &mouse_acceleration); + M_BindIntVariable("mouse_threshold", &mouse_threshold); + M_BindIntVariable("vanilla_keyboard_mapping", &vanilla_keyboard_mapping); + M_BindIntVariable("novert", &novert); } diff --git a/src/i_joystick.c b/src/i_joystick.c index abf2177c0c..f1ba4c69f1 100644 --- a/src/i_joystick.c +++ b/src/i_joystick.c @@ -82,9 +82,8 @@ static int joystick_look_dead_zone = 33; // Virtual to physical button joystick button mapping. By default this // is a straight mapping. -static int joystick_physical_buttons[NUM_VIRTUAL_BUTTONS] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -}; +static int joystick_physical_buttons[NUM_VIRTUAL_BUTTONS] = {0, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10}; void I_ShutdownGamepad(void) { @@ -313,13 +312,12 @@ void I_UpdateGamepad(void) ev.type = ev_joystick; ev.data1 = GetButtonsStateGamepad(); - ev.data2 = GetAxisStateGamepad(joystick_x_axis, joystick_x_invert, - joystick_x_dead_zone); - ev.data3 = GetAxisStateGamepad(joystick_y_axis, joystick_y_invert, - joystick_y_dead_zone); - ev.data4 = - GetAxisStateGamepad(joystick_strafe_axis, joystick_strafe_invert, - joystick_strafe_dead_zone); + ev.data2 = + GetAxisStateGamepad(joystick_x_axis, joystick_x_invert, joystick_x_dead_zone); + ev.data3 = + GetAxisStateGamepad(joystick_y_axis, joystick_y_invert, joystick_y_dead_zone); + ev.data4 = GetAxisStateGamepad(joystick_strafe_axis, joystick_strafe_invert, + joystick_strafe_dead_zone); ev.data5 = GetAxisStateGamepad(joystick_look_axis, joystick_look_invert, joystick_look_dead_zone); @@ -438,10 +436,8 @@ void I_InitJoystick(void) return; } - if (!IsValidAxis(joystick_x_axis) - || !IsValidAxis(joystick_y_axis) - || !IsValidAxis(joystick_strafe_axis) - || !IsValidAxis(joystick_look_axis)) + if (!IsValidAxis(joystick_x_axis) || !IsValidAxis(joystick_y_axis) || + !IsValidAxis(joystick_strafe_axis) || !IsValidAxis(joystick_look_axis)) { printf("I_InitJoystick: Invalid joystick axis for configured joystick " "(run joystick setup again)\n"); @@ -464,32 +460,32 @@ static boolean IsAxisButton(int physbutton) { if (IS_BUTTON_AXIS(joystick_x_axis)) { - if (physbutton == BUTTON_AXIS_NEG(joystick_x_axis) - || physbutton == BUTTON_AXIS_POS(joystick_x_axis)) + if (physbutton == BUTTON_AXIS_NEG(joystick_x_axis) || + physbutton == BUTTON_AXIS_POS(joystick_x_axis)) { return true; } } if (IS_BUTTON_AXIS(joystick_y_axis)) { - if (physbutton == BUTTON_AXIS_NEG(joystick_y_axis) - || physbutton == BUTTON_AXIS_POS(joystick_y_axis)) + if (physbutton == BUTTON_AXIS_NEG(joystick_y_axis) || + physbutton == BUTTON_AXIS_POS(joystick_y_axis)) { return true; } } if (IS_BUTTON_AXIS(joystick_strafe_axis)) { - if (physbutton == BUTTON_AXIS_NEG(joystick_strafe_axis) - || physbutton == BUTTON_AXIS_POS(joystick_strafe_axis)) + if (physbutton == BUTTON_AXIS_NEG(joystick_strafe_axis) || + physbutton == BUTTON_AXIS_POS(joystick_strafe_axis)) { return true; } } if (IS_BUTTON_AXIS(joystick_look_axis)) { - if (physbutton == BUTTON_AXIS_NEG(joystick_look_axis) - || physbutton == BUTTON_AXIS_POS(joystick_look_axis)) + if (physbutton == BUTTON_AXIS_NEG(joystick_look_axis) || + physbutton == BUTTON_AXIS_POS(joystick_look_axis)) { return true; } @@ -633,10 +629,8 @@ void I_UpdateJoystick(void) ev.type = ev_joystick; ev.data1 = GetButtonsState(); - ev.data2 = GetAxisState(joystick_x_axis, joystick_x_invert, - joystick_x_dead_zone); - ev.data3 = GetAxisState(joystick_y_axis, joystick_y_invert, - joystick_y_dead_zone); + ev.data2 = GetAxisState(joystick_x_axis, joystick_x_invert, joystick_x_dead_zone); + ev.data3 = GetAxisState(joystick_y_axis, joystick_y_invert, joystick_y_dead_zone); ev.data4 = GetAxisState(joystick_strafe_axis, joystick_strafe_invert, joystick_strafe_dead_zone); ev.data5 = GetAxisState(joystick_look_axis, joystick_look_invert, @@ -650,19 +644,19 @@ void I_BindJoystickVariables(void) { int i; - M_BindIntVariable("use_joystick", &usejoystick); - M_BindIntVariable("use_gamepad", &use_gamepad); - M_BindIntVariable("gamepad_type", &gamepad_type); - M_BindStringVariable("joystick_guid", &joystick_guid); - M_BindIntVariable("joystick_index", &joystick_index); - M_BindIntVariable("joystick_x_axis", &joystick_x_axis); - M_BindIntVariable("joystick_y_axis", &joystick_y_axis); - M_BindIntVariable("joystick_strafe_axis", &joystick_strafe_axis); - M_BindIntVariable("joystick_x_invert", &joystick_x_invert); - M_BindIntVariable("joystick_y_invert", &joystick_y_invert); - M_BindIntVariable("joystick_strafe_invert",&joystick_strafe_invert); - M_BindIntVariable("joystick_look_axis", &joystick_look_axis); - M_BindIntVariable("joystick_look_invert", &joystick_look_invert); + M_BindIntVariable("use_joystick", &usejoystick); + M_BindIntVariable("use_gamepad", &use_gamepad); + M_BindIntVariable("gamepad_type", &gamepad_type); + M_BindStringVariable("joystick_guid", &joystick_guid); + M_BindIntVariable("joystick_index", &joystick_index); + M_BindIntVariable("joystick_x_axis", &joystick_x_axis); + M_BindIntVariable("joystick_y_axis", &joystick_y_axis); + M_BindIntVariable("joystick_strafe_axis", &joystick_strafe_axis); + M_BindIntVariable("joystick_x_invert", &joystick_x_invert); + M_BindIntVariable("joystick_y_invert", &joystick_y_invert); + M_BindIntVariable("joystick_strafe_invert", &joystick_strafe_invert); + M_BindIntVariable("joystick_look_axis", &joystick_look_axis); + M_BindIntVariable("joystick_look_invert", &joystick_look_invert); M_BindIntVariable("joystick_x_dead_zone", &joystick_x_dead_zone); M_BindIntVariable("joystick_y_dead_zone", &joystick_y_dead_zone); M_BindIntVariable("joystick_strafe_dead_zone", &joystick_strafe_dead_zone); @@ -675,4 +669,3 @@ void I_BindJoystickVariables(void) M_BindIntVariable(name, &joystick_physical_buttons[i]); } } - diff --git a/src/i_main.c b/src/i_main.c index 0c6bade15c..34cc33d9bc 100644 --- a/src/i_main.c +++ b/src/i_main.c @@ -36,7 +36,7 @@ // calls all startup code, parses command line options. // -void D_DoomMain (void); +void D_DoomMain(void); int main(int argc, char **argv) { @@ -54,7 +54,8 @@ int main(int argc, char **argv) //! // Print the program version and exit. // - if (M_ParmExists("-version") || M_ParmExists("--version")) { + if (M_ParmExists("-version") || M_ParmExists("--version")) + { puts(PACKAGE_STRING); exit(0); } @@ -62,14 +63,13 @@ int main(int argc, char **argv) M_FindResponseFile(); M_SetExeDir(); - #ifdef SDL_HINT_NO_SIGNAL_HANDLERS +#ifdef SDL_HINT_NO_SIGNAL_HANDLERS SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1"); - #endif +#endif // start doom - D_DoomMain (); + D_DoomMain(); return 0; } - diff --git a/src/i_oplmusic.c b/src/i_oplmusic.c index 71e31ee071..413d6e7402 100644 --- a/src/i_oplmusic.c +++ b/src/i_oplmusic.c @@ -862,15 +862,14 @@ static const unsigned short frequency_curve[] = { // Mapping from MIDI volume level to OPL level value. static const unsigned int volume_mapping_table[] = { - 0, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, - 23, 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 39, 41, 43, 45, - 47, 49, 50, 52, 54, 55, 57, 59, 60, 61, 63, 64, 66, 67, 68, - 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 92, 93, 94, 95, 96, 96, 97, - 98, 99, 99, 100, 101, 101, 102, 103, 103, 104, 105, 105, 106, 107, 107, - 108, 109, 109, 110, 110, 111, 112, 112, 113, 113, 114, 114, 115, 115, 116, - 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 122, 122, 123, 123, 123, - 124, 124, 125, 125, 126, 126, 127, 127}; + 0, 1, 3, 5, 6, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, + 25, 26, 27, 29, 30, 32, 33, 34, 36, 37, 39, 41, 43, 45, 47, 49, + 50, 52, 54, 55, 57, 59, 60, 61, 63, 64, 66, 67, 68, 69, 71, 72, + 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 92, 93, 94, 95, 96, 96, 97, 98, 99, 99, 100, 101, + 101, 102, 103, 103, 104, 105, 105, 106, 107, 107, 108, 109, 109, 110, 110, 111, + 112, 112, 113, 113, 114, 114, 115, 115, 116, 117, 117, 118, 118, 119, 119, 120, + 120, 121, 121, 122, 122, 123, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127}; static opl_driver_ver_t opl_drv_ver = opl_doom_1_9; static boolean music_initialized = false; @@ -934,8 +933,7 @@ static boolean LoadInstrumentTable(void) main_instrs = (genmidi_instr_t *) (lump + strlen(GENMIDI_HEADER)); percussion_instrs = main_instrs + GENMIDI_NUM_INSTRS; - main_instr_names = - (char(*)[32])(percussion_instrs + GENMIDI_NUM_PERCUSSION); + main_instr_names = (char(*)[32])(percussion_instrs + GENMIDI_NUM_PERCUSSION); percussion_names = main_instr_names + GENMIDI_NUM_INSTRS; return true; @@ -1022,8 +1020,8 @@ static void ReleaseVoice(int index) // Load data to the specified operator -static void LoadOperatorData(int operator, genmidi_op_t * data, - boolean max_level, unsigned int *volume) +static void LoadOperatorData(int operator, genmidi_op_t * data, boolean max_level, + unsigned int *volume) { int level; @@ -1060,8 +1058,7 @@ static void SetVoiceInstrument(opl_voice_t *voice, genmidi_instr_t *instr, // Instrument already set for this channel? - if (voice->current_instr == instr && - voice->current_instr_voice == instr_voice) + if (voice->current_instr == instr && voice->current_instr_voice == instr_voice) { return; } @@ -1080,8 +1077,7 @@ static void SetVoiceInstrument(opl_voice_t *voice, genmidi_instr_t *instr, // is set in SetVoiceVolume (below). If we are not using // modulating mode, we must set both to minimum volume. - LoadOperatorData(voice->op2 | voice->array, &data->carrier, true, - &voice->car_volume); + LoadOperatorData(voice->op2 | voice->array, &data->carrier, true, &voice->car_volume); LoadOperatorData(voice->op1 | voice->array, &data->modulator, !modulating, &voice->mod_volume); @@ -1094,30 +1090,25 @@ static void SetVoiceInstrument(opl_voice_t *voice, genmidi_instr_t *instr, // Calculate voice priority. - voice->priority = 0x0f - (data->carrier.attack >> 4) + 0x0f - - (data->carrier.sustain & 0x0f); + voice->priority = + 0x0f - (data->carrier.attack >> 4) + 0x0f - (data->carrier.sustain & 0x0f); } static void SetVoiceVolume(opl_voice_t *voice, unsigned int volume) { - genmidi_voice_t *opl_voice; - unsigned int midi_volume; - unsigned int full_volume; - unsigned int car_volume; - unsigned int mod_volume; - voice->note_volume = volume; - opl_voice = &voice->current_instr->voices[voice->current_instr_voice]; + genmidi_voice_t *opl_voice = + &voice->current_instr->voices[voice->current_instr_voice]; // Multiply note volume and channel volume to get the actual volume. + unsigned int midi_volume = 2 * (volume_mapping_table[voice->channel->volume] + 1); - midi_volume = 2 * (volume_mapping_table[voice->channel->volume] + 1); - - full_volume = (volume_mapping_table[voice->note_volume] * midi_volume) >> 9; + unsigned int full_volume = + (volume_mapping_table[voice->note_volume] * midi_volume) >> 9; // The volume value to use in the register: - car_volume = 0x3f - full_volume; + unsigned int car_volume = 0x3f - full_volume; // Update the volume register(s) if necessary. @@ -1131,10 +1122,9 @@ static void SetVoiceVolume(opl_voice_t *voice, unsigned int volume) // If we are using non-modulated feedback mode, we must set the // volume for both voices. - if ((opl_voice->feedback & 0x01) != 0 && - opl_voice->modulator.level != 0x3f) + if ((opl_voice->feedback & 0x01) != 0 && opl_voice->modulator.level != 0x3f) { - mod_volume = opl_voice->modulator.level; + unsigned int mod_volume = opl_voice->modulator.level; if (mod_volume < car_volume) { mod_volume = car_volume; @@ -1146,8 +1136,7 @@ static void SetVoiceVolume(opl_voice_t *voice, unsigned int volume) { voice->mod_volume = mod_volume; OPL_WriteRegister((OPL_REGS_LEVEL + voice->op1) | voice->array, - mod_volume | - (opl_voice->modulator.scale & 0xc0)); + mod_volume | (opl_voice->modulator.scale & 0xc0)); } } } @@ -1215,8 +1204,7 @@ static void I_OPL_SetMusicVolume(int volume) static void VoiceKeyOff(opl_voice_t *voice) { - OPL_WriteRegister((OPL_REGS_FREQ_2 + voice->index) | voice->array, - voice->freq >> 8); + OPL_WriteRegister((OPL_REGS_FREQ_2 + voice->index) | voice->array, voice->freq >> 8); } static opl_channel_data_t *TrackChannelForEvent(opl_track_data_t *track, @@ -1297,8 +1285,7 @@ static void ReplaceExistingVoice(void) for (i = 0; i < voice_alloced_num; i++) { if (voice_alloced_list[i]->current_instr_voice != 0 || - voice_alloced_list[i]->channel >= - voice_alloced_list[result]->channel) + voice_alloced_list[i]->channel >= voice_alloced_list[result]->channel) { result = i; } @@ -1319,8 +1306,7 @@ static void ReplaceExistingVoiceDoom1(void) for (i = 0; i < voice_alloced_num; i++) { - if (voice_alloced_list[i]->channel > - voice_alloced_list[result]->channel) + if (voice_alloced_list[i]->channel > voice_alloced_list[result]->channel) { result = i; } @@ -1418,8 +1404,7 @@ static void UpdateVoiceFrequency(opl_voice_t *voice) if (voice->freq != freq) { - OPL_WriteRegister((OPL_REGS_FREQ_1 + voice->index) | voice->array, - freq & 0xff); + OPL_WriteRegister((OPL_REGS_FREQ_1 + voice->index) | voice->array, freq & 0xff); OPL_WriteRegister((OPL_REGS_FREQ_2 + voice->index) | voice->array, (freq >> 8) | 0x20); @@ -1432,8 +1417,8 @@ static void UpdateVoiceFrequency(opl_voice_t *voice) // key on event. static void VoiceKeyOn(opl_channel_data_t *channel, genmidi_instr_t *instrument, - unsigned int instrument_voice, unsigned int note, - unsigned int key, unsigned int volume) + unsigned int instrument_voice, unsigned int note, unsigned int key, + unsigned int volume) { opl_voice_t *voice; @@ -1701,8 +1686,7 @@ static void PitchBendEvent(opl_track_data_t *track, midi_event_t *event) } else { - voice_not_updated_list[voice_not_updated_num++] = - voice_alloced_list[i]; + voice_not_updated_list[voice_not_updated_num++] = voice_alloced_list[i]; } } @@ -1760,8 +1744,7 @@ static void MetaEvent(opl_track_data_t *track, midi_event_t *event) default: #ifdef OPL_MIDI_DEBUG - fprintf(stderr, "Unknown MIDI meta event type: %u\n", - event->data.meta.type); + fprintf(stderr, "Unknown MIDI meta event type: %u\n", event->data.meta.type); #endif break; } @@ -1993,8 +1976,7 @@ static void I_OPL_PauseSong(void) for (i = 0; i < num_opl_voices; ++i) { - if (voices[i].channel != NULL && - voices[i].current_instr < percussion_instrs) + if (voices[i].channel != NULL && voices[i].current_instr < percussion_instrs) { VoiceKeyOff(&voices[i]); } @@ -2312,8 +2294,8 @@ void I_OPL_DevMessages(char *result, size_t result_len) break; } - M_snprintf(tmp, sizeof(tmp), "%cp#%i (%s)\n", i == 0 ? '\'' : ' ', - last_perc[i], percussion_names[last_perc[i] - 35]); + M_snprintf(tmp, sizeof(tmp), "%cp#%i (%s)\n", i == 0 ? '\'' : ' ', last_perc[i], + percussion_names[last_perc[i] - 35]); M_StringConcat(result, tmp, result_len); ++lines; diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c index 85cf18f149..5a70e223b6 100644 --- a/src/i_sdlsound.c +++ b/src/i_sdlsound.c @@ -78,9 +78,7 @@ static int mixer_freq; static Uint16 mixer_format; static int mixer_channels; static boolean use_sfx_prefix; -static boolean (*ExpandSoundData)(sfxinfo_t *sfxinfo, - byte *data, - int samplerate, +static boolean (*ExpandSoundData)(sfxinfo_t *sfxinfo, byte *data, int samplerate, int length) = NULL; // Doubly-linked list of allocated sounds. @@ -279,9 +277,10 @@ static void UnlockAllocatedSound(allocated_sound_t *snd) // Search through the list of allocated sounds and return the one that matches // the supplied sfxinfo entry and pitch level. -static allocated_sound_t * GetAllocatedSoundBySfxInfoAndPitch(sfxinfo_t *sfxinfo, int pitch) +static allocated_sound_t *GetAllocatedSoundBySfxInfoAndPitch(sfxinfo_t *sfxinfo, + int pitch) { - allocated_sound_t * p = allocated_sounds_head; + allocated_sound_t *p = allocated_sounds_head; while (p != NULL) { @@ -298,19 +297,18 @@ static allocated_sound_t * GetAllocatedSoundBySfxInfoAndPitch(sfxinfo_t *sfxinfo // Allocate a new sound chunk and pitch-shift an existing sound up-or-down // into it. -static allocated_sound_t * PitchShift(allocated_sound_t *insnd, int pitch) +static allocated_sound_t *PitchShift(allocated_sound_t *insnd, int pitch) { - allocated_sound_t * outsnd; - Sint16 *inp, *outp; + allocated_sound_t *outsnd; Sint16 *srcbuf, *dstbuf; Uint32 srclen, dstlen; - srcbuf = (Sint16 *)insnd->chunk.abuf; + srcbuf = (Sint16 *) insnd->chunk.abuf; srclen = insnd->chunk.alen; // determine ratio pitch:NORM_PITCH and apply to srclen, then invert. // This is an approximation of vanilla behaviour based on measurements - dstlen = (int)((1 + (1 - (float)pitch / NORM_PITCH)) * srclen); + dstlen = (int) ((1 + (1 - (float) pitch / NORM_PITCH)) * srclen); // ensure that the new buffer is an even length if ((dstlen % 2) == 0) @@ -326,12 +324,13 @@ static allocated_sound_t * PitchShift(allocated_sound_t *insnd, int pitch) } outsnd->pitch = pitch; - dstbuf = (Sint16 *)outsnd->chunk.abuf; + dstbuf = (Sint16 *) outsnd->chunk.abuf; + Sint16 *outp; // loop over output buffer. find corresponding input cell, copy over - for (outp = dstbuf; outp < dstbuf + dstlen/2; ++outp) + for (outp = dstbuf; outp < dstbuf + dstlen / 2; ++outp) { - inp = srcbuf + (int)((float)(outp - dstbuf) / dstlen * srclen); + Sint16 *inp = srcbuf + (int) ((float) (outp - dstbuf) / dstlen * srclen); *outp = *inp; } @@ -373,13 +372,13 @@ static int SRC_ConversionMode(void) { switch (use_libsamplerate) { - // 0 = disabled + // 0 = disabled default: case 0: return -1; - // Ascending numbers give higher quality + // Ascending numbers give higher quality case 1: return SRC_LINEAR; @@ -401,15 +400,13 @@ static int SRC_ConversionMode(void) // Returns number of clipped samples. // DWF 2008-02-10 with cleanups by Simon Howard. -static boolean ExpandSoundData_SRC(sfxinfo_t *sfxinfo, - byte *data, - int samplerate, +static boolean ExpandSoundData_SRC(sfxinfo_t *sfxinfo, byte *data, int samplerate, int length) { SRC_DATA src_data; float *data_in; - uint32_t i, abuf_index=0, clipped=0; -// uint32_t alen; + uint32_t i, abuf_index = 0, clipped = 0; + // uint32_t alen; int retn; int16_t *expanded; allocated_sound_t *snd; @@ -418,7 +415,7 @@ static boolean ExpandSoundData_SRC(sfxinfo_t *sfxinfo, src_data.input_frames = length; data_in = malloc(length * sizeof(float)); src_data.data_in = data_in; - src_data.src_ratio = (double)mixer_freq / samplerate; + src_data.src_ratio = (double) mixer_freq / samplerate; // We include some extra space here in case of rounding-up. src_data.output_frames = src_data.src_ratio * length + (mixer_freq / 4); @@ -428,7 +425,7 @@ static boolean ExpandSoundData_SRC(sfxinfo_t *sfxinfo, // Convert input data to floats - for (i=0; i 0) { - fprintf(stderr, "Sound '%s': clipped %u samples (%0.2f %%)\n", - sfxinfo->name, clipped, - 400.0 * clipped / chunk->alen); + fprintf(stderr, "Sound '%s': clipped %u samples (%0.2f %%)\n", sfxinfo->name, + clipped, 400.0 * clipped / chunk->alen); } return true; @@ -550,8 +545,7 @@ static boolean ConvertibleRatio(int freq1, int freq2) // Debug code to dump resampled sound effects to WAV files for analysis. -static void WriteWAV(char *filename, byte *data, - uint32_t length, int samplerate) +static void WriteWAV(char *filename, byte *data, uint32_t length, int samplerate) { FILE *wav; unsigned int i; @@ -570,26 +564,26 @@ static void WriteWAV(char *filename, byte *data, fwrite("fmt ", 1, 4, wav); i = LONG(16); - fwrite(&i, 4, 1, wav); // Length + fwrite(&i, 4, 1, wav); // Length s = SHORT(1); - fwrite(&s, 2, 1, wav); // Format (PCM) + fwrite(&s, 2, 1, wav); // Format (PCM) s = SHORT(2); - fwrite(&s, 2, 1, wav); // Channels (2=stereo) + fwrite(&s, 2, 1, wav); // Channels (2=stereo) i = LONG(samplerate); - fwrite(&i, 4, 1, wav); // Sample rate + fwrite(&i, 4, 1, wav); // Sample rate i = LONG(samplerate * 2 * 2); - fwrite(&i, 4, 1, wav); // Byte rate (samplerate * stereo * 16 bit) + fwrite(&i, 4, 1, wav); // Byte rate (samplerate * stereo * 16 bit) s = SHORT(2 * 2); - fwrite(&s, 2, 1, wav); // Block align (stereo * 16 bit) + fwrite(&s, 2, 1, wav); // Block align (stereo * 16 bit) s = SHORT(16); - fwrite(&s, 2, 1, wav); // Bits per sample (16 bit) + fwrite(&s, 2, 1, wav); // Bits per sample (16 bit) // Data subchunk fwrite("data", 1, 4, wav); i = LONG(length); - fwrite(&i, 4, 1, wav); // Data length - fwrite(data, 1, length, wav); // Data + fwrite(&i, 4, 1, wav); // Data length + fwrite(data, 1, length, wav); // Data fclose(wav); } @@ -599,9 +593,7 @@ static void WriteWAV(char *filename, byte *data, // Generic sound expansion function for any sample rate. // Returns number of clipped samples (always 0). -static boolean ExpandSoundData_SDL(sfxinfo_t *sfxinfo, - byte *data, - int samplerate, +static boolean ExpandSoundData_SDL(sfxinfo_t *sfxinfo, byte *data, int samplerate, int length) { SDL_AudioCVT convertor; @@ -611,7 +603,7 @@ static boolean ExpandSoundData_SDL(sfxinfo_t *sfxinfo, // Calculate the length of the expanded version of the sample. - expanded_length = (uint32_t) ((((uint64_t) length) * mixer_freq) / samplerate); + expanded_length = (uint32_t)((((uint64_t) length) * mixer_freq) / samplerate); // Double up twice: 8 -> 16 bit and mono -> stereo @@ -630,11 +622,9 @@ static boolean ExpandSoundData_SDL(sfxinfo_t *sfxinfo, // If we can, use the standard / optimized SDL conversion routines. - if (samplerate <= mixer_freq - && ConvertibleRatio(samplerate, mixer_freq) - && SDL_BuildAudioCVT(&convertor, - AUDIO_U8, 1, samplerate, - mixer_format, mixer_channels, mixer_freq)) + if (samplerate <= mixer_freq && ConvertibleRatio(samplerate, mixer_freq) && + SDL_BuildAudioCVT(&convertor, AUDIO_U8, 1, samplerate, mixer_format, + mixer_channels, mixer_freq)) { convertor.len = length; convertor.buf = malloc(convertor.len * convertor.len_mult); @@ -664,7 +654,7 @@ static boolean ExpandSoundData_SDL(sfxinfo_t *sfxinfo, expanded_length = ((uint64_t) length * mixer_freq) / samplerate; expand_ratio = (length << 8) / expanded_length; - for (i=0; iname); + M_snprintf(filename, sizeof(filename), "%s.wav", sfxinfo->name); snd = GetAllocatedSoundBySfxInfoAndPitch(sfxinfo, NORM_PITCH); - WriteWAV(filename, snd->chunk.abuf, snd->chunk.alen,mixer_freq); + WriteWAV(filename, snd->chunk.abuf, snd->chunk.alen, mixer_freq); } #endif // don't need the original lump any more - + W_ReleaseLumpNum(lumpnum); return true; @@ -822,7 +810,7 @@ static void I_SDL_PrecacheSounds(sfxinfo_t *sounds, int num_sounds) printf("I_SDL_PrecacheSounds: Precaching all sound effects.."); - for (i=0; i 255) left = 255; - if (right < 0) right = 0; - else if (right > 255) right = 255; + if (left < 0) + left = 0; + else if (left > 255) + left = 255; + if (right < 0) + right = 0; + else if (right > 255) + right = 255; Mix_SetPanning(handle, left, right); } @@ -1006,7 +998,7 @@ static void I_SDL_UpdateSound(void) // Check all channels to see if a sound has finished - for (i=0; isound_devices, + if (SndDeviceInList(snd_sfxdevice, sound_modules[i]->sound_devices, sound_modules[i]->num_sound_devices)) { // Initialize the module @@ -129,13 +125,12 @@ static void InitMusicModule(void) music_module = NULL; - for (i=0; music_modules[i] != NULL; ++i) + for (i = 0; music_modules[i] != NULL; ++i) { // Is the music device in the list of devices supported // by this module? - if (SndDeviceInList(snd_musicdevice, - music_modules[i]->sound_devices, + if (SndDeviceInList(snd_musicdevice, music_modules[i]->sound_devices, music_modules[i]->num_sound_devices)) { // Initialize the module @@ -170,7 +165,7 @@ void I_InitSound(boolean use_sfx_prefix) //! // @vanilla // - // Disable sound effects. + // Disable sound effects. // nosfx = M_CheckParm("-nosfx") > 0; @@ -315,7 +310,6 @@ void I_InitMusic(void) void I_ShutdownMusic(void) { - } void I_SetMusicVolume(int volume) @@ -378,27 +372,14 @@ void I_StopSong(void) } } -boolean I_MusicIsPlaying(void) -{ - if (active_music_module != NULL) - { - return active_music_module->MusicIsPlaying(); - } - else - { - return false; - } -} - void I_BindSoundVariables(void) { - M_BindIntVariable("snd_musicdevice", &snd_musicdevice); - M_BindIntVariable("snd_maxslicetime_ms", &snd_maxslicetime_ms); - M_BindIntVariable("snd_samplerate", &snd_samplerate); - M_BindIntVariable("snd_cachesize", &snd_cachesize); - M_BindIntVariable("snd_pitchshift", &snd_pitchshift); - - M_BindIntVariable("use_libsamplerate", &use_libsamplerate); - M_BindFloatVariable("libsamplerate_scale", &libsamplerate_scale); + M_BindIntVariable("snd_musicdevice", &snd_musicdevice); + M_BindIntVariable("snd_maxslicetime_ms", &snd_maxslicetime_ms); + M_BindIntVariable("snd_samplerate", &snd_samplerate); + M_BindIntVariable("snd_cachesize", &snd_cachesize); + M_BindIntVariable("snd_pitchshift", &snd_pitchshift); + + M_BindIntVariable("use_libsamplerate", &use_libsamplerate); + M_BindFloatVariable("libsamplerate_scale", &libsamplerate_scale); } - diff --git a/src/i_sound.h b/src/i_sound.h index 5649a4a9e1..276221d8d1 100644 --- a/src/i_sound.h +++ b/src/i_sound.h @@ -217,7 +217,6 @@ void *I_RegisterSong(void *data, int len); void I_UnRegisterSong(void *handle); void I_PlaySong(void *handle, boolean looping); void I_StopSong(void); -boolean I_MusicIsPlaying(void); extern int snd_musicdevice; extern int snd_samplerate; diff --git a/src/i_system.c b/src/i_system.c index 01366875db..00ba1b8c00 100644 --- a/src/i_system.c +++ b/src/i_system.c @@ -16,7 +16,6 @@ // - #include #include #include @@ -116,7 +115,7 @@ static byte *AutoAllocMemory(int *size, int default_ram, int min_ram) return zonemem; } -byte *I_ZoneBase (int *size) +byte *I_ZoneBase(int *size) { byte *zonemem; int min_ram, default_ram; @@ -133,7 +132,7 @@ byte *I_ZoneBase (int *size) if (p > 0) { - default_ram = atoi(myargv[p+1]); + default_ram = atoi(myargv[p + 1]); min_ram = default_ram; } else @@ -144,8 +143,7 @@ byte *I_ZoneBase (int *size) zonemem = AutoAllocMemory(size, default_ram, min_ram); - printf("zone memory: %p, %x allocated for zone\n", - zonemem, *size); + printf("zone memory: %p, %x allocated for zone\n", zonemem, *size); return zonemem; } @@ -155,7 +153,7 @@ void I_PrintBanner(const char *msg) int i; int spaces = 35 - (strlen(msg) / 2); - for (i=0; iscancode == SDL_SCANCODE_RETURN || - sym->scancode == SDL_SCANCODE_KP_ENTER) && (sym->mod & flags) != 0; + return (sym->scancode == SDL_SCANCODE_RETURN || + sym->scancode == SDL_SCANCODE_KP_ENTER) && + (sym->mod & flags) != 0; } static void I_ToggleFullScreen(void) @@ -424,7 +413,7 @@ void I_GetEvent(void) // deliberate fall-though case SDL_KEYUP: - I_HandleKeyboardEvent(&sdlevent); + I_HandleKeyboardEvent(&sdlevent); break; case SDL_MOUSEBUTTONDOWN: @@ -465,7 +454,7 @@ void I_GetEvent(void) // // I_StartTic // -void I_StartTic (void) +void I_StartTic(void) { if (!initialized) { @@ -489,7 +478,7 @@ void I_StartTic (void) // // I_UpdateNoBlit // -void I_UpdateNoBlit (void) +void I_UpdateNoBlit(void) { // what is this? } @@ -576,8 +565,8 @@ static void LimitTextureSize(int *w_upscale, int *h_upscale) max_scaling_buffer_pixels, SCREENWIDTH * SCREENHEIGHT); } - while (*w_upscale * *h_upscale * SCREENWIDTH * SCREENHEIGHT - > max_scaling_buffer_pixels) + while (*w_upscale * *h_upscale * SCREENWIDTH * SCREENHEIGHT > + max_scaling_buffer_pixels) { if (*w_upscale > *h_upscale) { @@ -594,8 +583,8 @@ static void LimitTextureSize(int *w_upscale, int *h_upscale) printf("CreateUpscaledTexture: Limited texture size to %dx%d " "(max %d pixels, max texture size %dx%d)\n", *w_upscale * SCREENWIDTH, *h_upscale * SCREENHEIGHT, - max_scaling_buffer_pixels, - rinfo.max_texture_width, rinfo.max_texture_height); + max_scaling_buffer_pixels, rinfo.max_texture_width, + rinfo.max_texture_height); } } @@ -668,11 +657,8 @@ static void CreateUpscaledTexture(boolean force) SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); - new_texture = SDL_CreateTexture(renderer, - pixel_format, - SDL_TEXTUREACCESS_TARGET, - w_upscale*SCREENWIDTH, - h_upscale*SCREENHEIGHT); + new_texture = SDL_CreateTexture(renderer, pixel_format, SDL_TEXTUREACCESS_TARGET, + w_upscale * SCREENWIDTH, h_upscale * SCREENHEIGHT); old_texture = texture_upscaled; texture_upscaled = new_texture; @@ -686,7 +672,7 @@ static void CreateUpscaledTexture(boolean force) // // I_FinishUpdate // -void I_FinishUpdate (void) +void I_FinishUpdate(void) { static int lasttic; int tics; @@ -740,15 +726,16 @@ void I_FinishUpdate (void) if (display_fps_dots) { - i = I_GetTime(); - tics = i - lasttic; - lasttic = i; - if (tics > 20) tics = 20; + i = I_GetTime(); + tics = i - lasttic; + lasttic = i; + if (tics > 20) + tics = 20; - for (i=0 ; ipixels) + y1 * hr_surface->pitch + x; - - for (x1=x; x1> (7 - (bit % 8))) & 0x1; - } - - // Reassemble the pixel value - - *dest = (srcbits[0] << 0) - | (srcbits[1] << 1) - | (srcbits[2] << 2) - | (srcbits[3] << 3); - - // Next pixel! - - ++dest; - ++bit; - } - } - - SDL_UnlockSurface(hr_surface); - - // Update the region we drew. - blit_rect.x = x; - blit_rect.y = y; - blit_rect.w = w; - blit_rect.h = h; - SDL_BlitSurface(hr_surface, &blit_rect, - SDL_GetWindowSurface(hr_screen), &blit_rect); - SDL_UpdateWindowSurfaceRects(hr_screen, &blit_rect, 1); -} - -void I_SlamHR(const byte *buffer) -{ - I_SlamBlockHR(0, 0, HR_SCREENWIDTH, HR_SCREENHEIGHT, buffer); -} - -void I_InitPaletteHR(void) -{ - // ... -} - -void I_SetPaletteHR(const byte *palette) -{ - SDL_Rect screen_rect = {0, 0, HR_SCREENWIDTH, HR_SCREENHEIGHT}; - SDL_Color sdlpal[16]; - int i; - - for (i=0; i<16; ++i) - { - sdlpal[i].r = palette[i * 3 + 0] * 4; - sdlpal[i].g = palette[i * 3 + 1] * 4; - sdlpal[i].b = palette[i * 3 + 2] * 4; - } - - // After setting colors, update the screen. - SDL_SetPaletteColors(hr_surface->format->palette, sdlpal, 0, 16); - SDL_BlitSurface(hr_surface, &screen_rect, - SDL_GetWindowSurface(hr_screen), &screen_rect); - SDL_UpdateWindowSurfaceRects(hr_screen, &screen_rect, 1); -} - -void I_FadeToPaletteHR(const byte *palette) -{ - byte tmppal[16 * 3]; - int starttime; - int elapsed; - int i; - - starttime = I_GetTimeMS(); - - for (;;) - { - elapsed = I_GetTimeMS() - starttime; - - if (elapsed >= FADE_TIME) - { - break; - } - - // Generate the fake palette - - for (i=0; i<16 * 3; ++i) - { - tmppal[i] = (palette[i] * elapsed) / FADE_TIME; - } - - I_SetPaletteHR(tmppal); - SDL_UpdateWindowSurface(hr_screen); - - // Sleep a bit - - I_Sleep(10); - } - - // Set the final palette - - I_SetPaletteHR(palette); -} - -void I_BlackPaletteHR(void) -{ - byte blackpal[16 * 3]; - - memset(blackpal, 0, sizeof(blackpal)); - - I_SetPaletteHR(blackpal); -} - -// Check if the user has hit the escape key to abort startup. -boolean I_CheckAbortHR(void) -{ - SDL_Event ev; - boolean result = false; - - // Not initialized? - if (hr_surface == NULL) - { - return false; - } - - while (SDL_PollEvent(&ev)) - { - if (ev.type == SDL_KEYDOWN && ev.key.keysym.sym == SDLK_ESCAPE) - { - result = true; - } - } - - return result; -} - diff --git a/src/i_videohr.h b/src/i_videohr.h index d0a0dca501..1f0412f19c 100644 --- a/src/i_videohr.h +++ b/src/i_videohr.h @@ -19,17 +19,5 @@ #ifndef I_VIDEOHR_H #define I_VIDEOHR_H -boolean I_SetVideoModeHR(void); -void I_UnsetVideoModeHR(void); -void I_SetWindowTitleHR(const char *title); -void I_ClearScreenHR(void); -void I_SlamBlockHR(int x, int y, int w, int h, const byte *src); -void I_SlamHR(const byte *buffer); -void I_InitPaletteHR(void); -void I_SetPaletteHR(const byte *palette); -void I_FadeToPaletteHR(const byte *palette); -void I_BlackPaletteHR(void); -boolean I_CheckAbortHR(void); - #endif /* #ifndef I_VIDEOHR_H */ diff --git a/src/log.c b/src/log.c deleted file mode 100644 index 1a7626ee26..0000000000 --- a/src/log.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2020 rxi - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -#include "log.h" - -#define MAX_CALLBACKS 32 - -typedef struct { - log_LogFn fn; - void *udata; - int level; -} Callback; - -static struct { - void *udata; - log_LockFn lock; - int level; - bool quiet; - Callback callbacks[MAX_CALLBACKS]; -} L; - - -static const char *level_strings[] = { - "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" -}; - -#ifdef LOG_USE_COLOR -static const char *level_colors[] = { - "\x1b[94m", "\x1b[36m", "\x1b[32m", "\x1b[33m", "\x1b[31m", "\x1b[35m" -}; -#endif - - -static void stdout_callback(log_Event *ev) { - char buf[16]; - buf[strftime(buf, sizeof(buf), "%H:%M:%S", ev->time)] = '\0'; -#ifdef LOG_USE_COLOR - fprintf( - ev->udata, "%s %s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ", - buf, level_colors[ev->level], level_strings[ev->level], - ev->file, ev->line); -#else - fprintf( - ev->udata, "%s %-5s %s:%d: ", - buf, level_strings[ev->level], ev->file, ev->line); -#endif - vfprintf(ev->udata, ev->fmt, ev->ap); - fprintf(ev->udata, "\n"); - fflush(ev->udata); -} - - -static void file_callback(log_Event *ev) { - char buf[64]; - buf[strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", ev->time)] = '\0'; - fprintf( - ev->udata, "%s %-5s %s:%d: ", - buf, level_strings[ev->level], ev->file, ev->line); - vfprintf(ev->udata, ev->fmt, ev->ap); - fprintf(ev->udata, "\n"); - fflush(ev->udata); -} - - -static void lock(void) { - if (L.lock) { L.lock(true, L.udata); } -} - - -static void unlock(void) { - if (L.lock) { L.lock(false, L.udata); } -} - - -const char* log_level_string(int level) { - return level_strings[level]; -} - - -void log_set_lock(log_LockFn fn, void *udata) { - L.lock = fn; - L.udata = udata; -} - - -void log_set_level(int level) { - L.level = level; -} - - -void log_set_quiet(bool enable) { - L.quiet = enable; -} - - -int log_add_callback(log_LogFn fn, void *udata, int level) { - for (int i = 0; i < MAX_CALLBACKS; i++) { - if (!L.callbacks[i].fn) { - L.callbacks[i] = (Callback) { fn, udata, level }; - return 0; - } - } - return -1; -} - - -int log_add_fp(FILE *fp, int level) { - return log_add_callback(file_callback, fp, level); -} - - -static void init_event(log_Event *ev, void *udata) { - if (!ev->time) { - time_t t = time(NULL); - ev->time = localtime(&t); - } - ev->udata = udata; -} - - -void log_log(int level, const char *file, int line, const char *fmt, ...) { - log_Event ev = { - .fmt = fmt, - .file = file, - .line = line, - .level = level, - }; - - lock(); - - if (!L.quiet && level >= L.level) { - init_event(&ev, stderr); - va_start(ev.ap, fmt); - stdout_callback(&ev); - va_end(ev.ap); - } - - for (int i = 0; i < MAX_CALLBACKS && L.callbacks[i].fn; i++) { - Callback *cb = &L.callbacks[i]; - if (level >= cb->level) { - init_event(&ev, cb->udata); - va_start(ev.ap, fmt); - cb->fn(&ev); - va_end(ev.ap); - } - } - - unlock(); -} diff --git a/src/m_argv.c b/src/m_argv.c index 9bdff01bb1..ce1fa1aa50 100644 --- a/src/m_argv.c +++ b/src/m_argv.c @@ -27,12 +27,10 @@ #include "d_iwad.h" #include "i_system.h" #include "m_misc.h" -#include "m_argv.h" // haleyjd 20110212: warning fix - -int myargc; -char** myargv; - +#include "m_argv.h" // haleyjd 20110212: warning fix +int myargc; +char **myargv; // @@ -49,8 +47,8 @@ int M_CheckParmWithArgs(const char *check, int num_args) for (i = 1; i < myargc - num_args; i++) { - if (!strcasecmp(check, myargv[i])) - return i; + if (!strcasecmp(check, myargv[i])) + return i; } return 0; @@ -73,7 +71,7 @@ int M_CheckParm(const char *check) return M_CheckParmWithArgs(check, 0); } -#define MAXARGVS 100 +#define MAXARGVS 100 static void LoadResponseFile(int argv_index, const char *filename) { @@ -90,7 +88,7 @@ static void LoadResponseFile(int argv_index, const char *filename) if (handle == NULL) { - printf ("\nNo such response file!"); + printf("\nNo such response file!"); exit(1); } @@ -129,7 +127,7 @@ static void LoadResponseFile(int argv_index, const char *filename) // Copy all the arguments in the list up to the response file - for (i=0; i= size || infile[k] == '\n') { - I_Error("Quotes unclosed in response file '%s'", - filename); + I_Error("Quotes unclosed in response file '%s'", filename); } // Cut off the string at the closing quote @@ -191,7 +188,7 @@ static void LoadResponseFile(int argv_index, const char *filename) argstart = &infile[k]; - while(k < size && !isspace(infile[k])) + while (k < size && !isspace(infile[k])) { ++k; } @@ -207,7 +204,7 @@ static void LoadResponseFile(int argv_index, const char *filename) // Add arguments following the response file argument - for (i=argv_index + 1; ibox[BOXRIGHT]) - box[BOXRIGHT] = x; - if (ybox[BOXTOP]) - box[BOXTOP] = y; + if (x < box[BOXLEFT]) + box[BOXLEFT] = x; + else if (x > box[BOXRIGHT]) + box[BOXRIGHT] = x; + if (y < box[BOXBOTTOM]) + box[BOXBOTTOM] = y; + else if (y > box[BOXTOP]) + box[BOXTOP] = y; } - - - - - diff --git a/src/m_cheat.c b/src/m_cheat.c index 1565f9ef5e..00b27bc1f4 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -17,7 +17,6 @@ // - #include #include "doomtype.h" @@ -31,59 +30,51 @@ // Called in st_stuff module, which handles the input. // Returns a 1 if the cheat was successful, 0 if failed. // -int -cht_CheckCheat -( cheatseq_t* cht, - char key ) +int cht_CheckCheat(cheatseq_t *cht, char key) { - // if we make a short sequence on a cheat with parameters, this + // if we make a short sequence on a cheat with parameters, this // will not work in vanilla doom. behave the same. if (cht->parameter_chars > 0 && strlen(cht->sequence) < cht->sequence_len) return false; - + if (cht->chars_read < strlen(cht->sequence)) { // still reading characters from the cheat code - // and verifying. reset back to the beginning + // and verifying. reset back to the beginning // if a key is wrong if (key == cht->sequence[cht->chars_read]) ++cht->chars_read; else cht->chars_read = 0; - + cht->param_chars_read = 0; } else if (cht->param_chars_read < cht->parameter_chars) { - // we have passed the end of the cheat sequence and are - // entering parameters now - + // we have passed the end of the cheat sequence and are + // entering parameters now + cht->parameter_buf[cht->param_chars_read] = key; - + ++cht->param_chars_read; } - if (cht->chars_read >= strlen(cht->sequence) - && cht->param_chars_read >= cht->parameter_chars) + if (cht->chars_read >= strlen(cht->sequence) && + cht->param_chars_read >= cht->parameter_chars) { cht->chars_read = cht->param_chars_read = 0; return true; } - + // cheat not matched yet return false; } -void -cht_GetParam -( cheatseq_t* cht, - char* buffer ) +void cht_GetParam(cheatseq_t *cht, char *buffer) { memcpy(buffer, cht->parameter_buf, cht->parameter_chars); } - - diff --git a/src/m_config.c b/src/m_config.c index bb824c71c1..0aeebc7389 100644 --- a/src/m_config.c +++ b/src/m_config.c @@ -101,18 +101,16 @@ typedef struct const char *filename; } default_collection_t; -#define CONFIG_VARIABLE_GENERIC(name, type) \ - { \ -#name, {NULL }, type, 0, 0, false \ +#define CONFIG_VARIABLE_GENERIC(name, type) \ + { \ +#name, {NULL }, type, 0, 0, false \ } -#define CONFIG_VARIABLE_KEY(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_KEY) -#define CONFIG_VARIABLE_INT(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_INT) -#define CONFIG_VARIABLE_INT_HEX(name) \ - CONFIG_VARIABLE_GENERIC(name, DEFAULT_INT_HEX) -#define CONFIG_VARIABLE_FLOAT(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_FLOAT) -#define CONFIG_VARIABLE_STRING(name) \ - CONFIG_VARIABLE_GENERIC(name, DEFAULT_STRING) +#define CONFIG_VARIABLE_KEY(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_KEY) +#define CONFIG_VARIABLE_INT(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_INT) +#define CONFIG_VARIABLE_INT_HEX(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_INT_HEX) +#define CONFIG_VARIABLE_FLOAT(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_FLOAT) +#define CONFIG_VARIABLE_STRING(name) CONFIG_VARIABLE_GENERIC(name, DEFAULT_STRING) //! @begin_config_file default @@ -1435,8 +1433,7 @@ static default_collection_t extra_defaults = { // Search a collection for a variable -static default_t *SearchCollection(default_collection_t *collection, - const char *name) +static default_t *SearchCollection(default_collection_t *collection, const char *name) { int i; @@ -1643,8 +1640,7 @@ static void SaveDefaultCollection(default_collection_t *collection) v = 54; } - else if (defaults[i].untranslated && - v == defaults[i].original_translated) + else if (defaults[i].untranslated && v == defaults[i].original_translated) { // Has not been changed since the last time we // read the config file. @@ -1863,31 +1859,6 @@ void M_SaveDefaults(void) SaveDefaultCollection(&extra_defaults); } -// -// Save defaults to alternate filenames -// - -void M_SaveDefaultsAlternate(const char *main, const char *extra) -{ - const char *orig_main; - const char *orig_extra; - - // Temporarily change the filenames - - orig_main = doom_defaults.filename; - orig_extra = extra_defaults.filename; - - doom_defaults.filename = main; - extra_defaults.filename = extra; - - M_SaveDefaults(); - - // Restore normal filenames - - doom_defaults.filename = orig_main; - extra_defaults.filename = orig_extra; -} - // // M_LoadDefaults // @@ -1915,8 +1886,7 @@ void M_LoadDefaults(void) } else { - doom_defaults.filename = - M_StringJoin(configdir, default_main_config, NULL); + doom_defaults.filename = M_StringJoin(configdir, default_main_config, NULL); } printf("saving config in %s\n", doom_defaults.filename); @@ -1933,13 +1903,11 @@ void M_LoadDefaults(void) if (i) { extra_defaults.filename = myargv[i + 1]; - printf(" extra configuration file: %s\n", - extra_defaults.filename); + printf(" extra configuration file: %s\n", extra_defaults.filename); } else { - extra_defaults.filename = - M_StringJoin(configdir, default_extra_config, NULL); + extra_defaults.filename = M_StringJoin(configdir, default_extra_config, NULL); } LoadDefaultCollection(&doom_defaults); @@ -2009,71 +1977,6 @@ void M_BindStringVariable(const char *name, char **location) variable->bound = true; } -// Set the value of a particular variable; an API function for other -// parts of the program to assign values to config variables by name. - -boolean M_SetVariable(const char *name, const char *value) -{ - default_t *variable; - - variable = GetDefaultForName(name); - - if (variable == NULL || !variable->bound) - { - return false; - } - - SetVariable(variable, value); - - return true; -} - -// Get the value of a variable. - -int M_GetIntVariable(const char *name) -{ - default_t *variable; - - variable = GetDefaultForName(name); - - if (variable == NULL || !variable->bound || - (variable->type != DEFAULT_INT && variable->type != DEFAULT_INT_HEX)) - { - return 0; - } - - return *variable->location.i; -} - -const char *M_GetStringVariable(const char *name) -{ - default_t *variable; - - variable = GetDefaultForName(name); - - if (variable == NULL || !variable->bound || - variable->type != DEFAULT_STRING) - { - return NULL; - } - - return *variable->location.s; -} - -float M_GetFloatVariable(const char *name) -{ - default_t *variable; - - variable = GetDefaultForName(name); - - if (variable == NULL || !variable->bound || variable->type != DEFAULT_FLOAT) - { - return 0; - } - - return *variable->location.f; -} - // Get the path to the default configuration dir to use, if NULL // is passed to M_SetConfigDir. @@ -2112,57 +2015,6 @@ void M_SetConfigDir(const char *dir) M_MakeDirectory(configdir); } -#define MUSIC_PACK_README \ - "Extract music packs into this directory in .flac or .ogg format;\n" \ - "they will be automatically loaded based on filename to replace the\n" \ - "in-game music with high quality versions.\n\n" \ - "For more information check here:\n\n" \ - " " \ - "\n\n" - -// Set the value of music_pack_path if it is currently empty, and create -// the directory if necessary. -void M_SetMusicPackDir(void) -{ - const char *current_path; - char *prefdir, *music_pack_path, *readme_path; - - current_path = M_GetStringVariable("music_pack_path"); - - if (current_path != NULL && strlen(current_path) > 0) - { - return; - } - - prefdir = SDL_GetPrefPath("", PACKAGE_TARNAME); - if (prefdir == NULL) - { - printf("M_SetMusicPackDir: SDL_GetPrefPath failed, music pack " - "directory not set\n"); - return; - } - music_pack_path = M_StringJoin(prefdir, "music-packs", NULL); - - M_MakeDirectory(prefdir); - M_MakeDirectory(music_pack_path); - M_SetVariable("music_pack_path", music_pack_path); - - // We write a README file with some basic instructions on how to use - // the directory. - readme_path = - M_StringJoin(music_pack_path, DIR_SEPARATOR_S, "README.txt", NULL); - M_WriteFile(readme_path, MUSIC_PACK_README, strlen(MUSIC_PACK_README)); - - free(readme_path); - free(music_pack_path); - SDL_free(prefdir); -} - -// -// Calculate the path to the directory to use to store save games. -// Creates the directory as necessary. -// - char *M_GetSaveGameDir() { char *savegamedir; diff --git a/src/m_config.h b/src/m_config.h index db04e03039..5a11f7bfc5 100644 --- a/src/m_config.h +++ b/src/m_config.h @@ -24,19 +24,13 @@ void M_LoadDefaults(void); void M_SaveDefaults(void); -void M_SaveDefaultsAlternate(const char *main, const char *extra); void M_SetConfigDir(const char *dir); -void M_SetMusicPackDir(void); void M_BindIntVariable(const char *name, int *variable); void M_BindFloatVariable(const char *name, float *variable); void M_BindStringVariable(const char *name, char **variable); -boolean M_SetVariable(const char *name, const char *value); int M_GetIntVariable(const char *name); -const char *M_GetStringVariable(const char *name); -float M_GetFloatVariable(const char *name); void M_SetConfigFilenames(const char *main_config, const char *extra_config); char *M_GetSaveGameDir(); -char *M_GetAutoloadDir(const char *iwadname); extern const char *configdir; diff --git a/src/m_controls.c b/src/m_controls.c index 7505dca60d..486d8081d3 100644 --- a/src/m_controls.c +++ b/src/m_controls.c @@ -30,13 +30,13 @@ int key_right = KEY_RIGHTARROW; int key_left = KEY_LEFTARROW; int key_up = KEY_UPARROW; -int key_down = KEY_DOWNARROW; +int key_down = KEY_DOWNARROW; int key_strafeleft = ','; int key_straferight = '.'; int key_fire = KEY_RCTRL; int key_use = ' '; int key_strafe = KEY_RALT; -int key_speed = KEY_RSHIFT; +int key_speed = KEY_RSHIFT; // // Mouse controls @@ -87,42 +87,42 @@ int key_nextweapon = 0; // Map control keys: -int key_map_north = KEY_UPARROW; -int key_map_south = KEY_DOWNARROW; -int key_map_east = KEY_RIGHTARROW; -int key_map_west = KEY_LEFTARROW; -int key_map_zoomin = '='; -int key_map_zoomout = '-'; -int key_map_toggle = KEY_TAB; -int key_map_maxzoom = '0'; -int key_map_follow = 'f'; -int key_map_grid = 'g'; -int key_map_mark = 'm'; +int key_map_north = KEY_UPARROW; +int key_map_south = KEY_DOWNARROW; +int key_map_east = KEY_RIGHTARROW; +int key_map_west = KEY_LEFTARROW; +int key_map_zoomin = '='; +int key_map_zoomout = '-'; +int key_map_toggle = KEY_TAB; +int key_map_maxzoom = '0'; +int key_map_follow = 'f'; +int key_map_grid = 'g'; +int key_map_mark = 'm'; int key_map_clearmark = 'c'; // menu keys: -int key_menu_activate = KEY_ESCAPE; -int key_menu_up = KEY_UPARROW; -int key_menu_down = KEY_DOWNARROW; -int key_menu_left = KEY_LEFTARROW; -int key_menu_right = KEY_RIGHTARROW; -int key_menu_back = KEY_BACKSPACE; -int key_menu_forward = KEY_ENTER; -int key_menu_confirm = 'y'; -int key_menu_abort = 'n'; - -int key_menu_help = KEY_F1; -int key_menu_save = KEY_F2; -int key_menu_load = KEY_F3; -int key_menu_volume = KEY_F4; -int key_menu_detail = KEY_F5; -int key_menu_qsave = KEY_F6; -int key_menu_endgame = KEY_F7; -int key_menu_messages = KEY_F8; -int key_menu_qload = KEY_F9; -int key_menu_quit = KEY_F10; -int key_menu_gamma = KEY_F11; +int key_menu_activate = KEY_ESCAPE; +int key_menu_up = KEY_UPARROW; +int key_menu_down = KEY_DOWNARROW; +int key_menu_left = KEY_LEFTARROW; +int key_menu_right = KEY_RIGHTARROW; +int key_menu_back = KEY_BACKSPACE; +int key_menu_forward = KEY_ENTER; +int key_menu_confirm = 'y'; +int key_menu_abort = 'n'; + +int key_menu_help = KEY_F1; +int key_menu_save = KEY_F2; +int key_menu_load = KEY_F3; +int key_menu_volume = KEY_F4; +int key_menu_detail = KEY_F5; +int key_menu_qsave = KEY_F6; +int key_menu_endgame = KEY_F7; +int key_menu_messages = KEY_F8; +int key_menu_qload = KEY_F9; +int key_menu_quit = KEY_F10; +int key_menu_gamma = KEY_F11; int key_menu_incscreen = KEY_EQUALS; int key_menu_decscreen = KEY_MINUS; @@ -148,122 +148,122 @@ int joybnextweapon = -1; int joybmenu = -1; int joybautomap = -1; -// Control whether if a mouse button is double clicked, it acts like +// Control whether if a mouse button is double clicked, it acts like // "use" has been pressed int dclick_use = 1; - -// + +// // Bind all of the common controls used by Doom and all other games. // void M_BindBaseControls(void) { - M_BindIntVariable("key_right", &key_right); - M_BindIntVariable("key_left", &key_left); - M_BindIntVariable("key_up", &key_up); - M_BindIntVariable("key_down", &key_down); - M_BindIntVariable("key_strafeleft", &key_strafeleft); - M_BindIntVariable("key_straferight", &key_straferight); - M_BindIntVariable("key_fire", &key_fire); - M_BindIntVariable("key_use", &key_use); - M_BindIntVariable("key_strafe", &key_strafe); - M_BindIntVariable("key_speed", &key_speed); - - M_BindIntVariable("mouseb_fire", &mousebfire); - M_BindIntVariable("mouseb_strafe", &mousebstrafe); - M_BindIntVariable("mouseb_forward", &mousebforward); - M_BindIntVariable("mouseb_speed", &mousebspeed); - - M_BindIntVariable("joyb_fire", &joybfire); - M_BindIntVariable("joyb_strafe", &joybstrafe); - M_BindIntVariable("joyb_use", &joybuse); - M_BindIntVariable("joyb_speed", &joybspeed); + M_BindIntVariable("key_right", &key_right); + M_BindIntVariable("key_left", &key_left); + M_BindIntVariable("key_up", &key_up); + M_BindIntVariable("key_down", &key_down); + M_BindIntVariable("key_strafeleft", &key_strafeleft); + M_BindIntVariable("key_straferight", &key_straferight); + M_BindIntVariable("key_fire", &key_fire); + M_BindIntVariable("key_use", &key_use); + M_BindIntVariable("key_strafe", &key_strafe); + M_BindIntVariable("key_speed", &key_speed); + + M_BindIntVariable("mouseb_fire", &mousebfire); + M_BindIntVariable("mouseb_strafe", &mousebstrafe); + M_BindIntVariable("mouseb_forward", &mousebforward); + M_BindIntVariable("mouseb_speed", &mousebspeed); + + M_BindIntVariable("joyb_fire", &joybfire); + M_BindIntVariable("joyb_strafe", &joybstrafe); + M_BindIntVariable("joyb_use", &joybuse); + M_BindIntVariable("joyb_speed", &joybspeed); M_BindIntVariable("joyb_menu_activate", &joybmenu); M_BindIntVariable("joyb_toggle_automap", &joybautomap); // Extra controls that are not in the Vanilla versions: - M_BindIntVariable("joyb_strafeleft", &joybstrafeleft); - M_BindIntVariable("joyb_straferight", &joybstraferight); - M_BindIntVariable("mouseb_strafeleft", &mousebstrafeleft); - M_BindIntVariable("mouseb_straferight", &mousebstraferight); - M_BindIntVariable("mouseb_turnleft", &mousebturnleft); - M_BindIntVariable("mouseb_turnright", &mousebturnright); - M_BindIntVariable("mouseb_use", &mousebuse); - M_BindIntVariable("mouseb_backward", &mousebbackward); - M_BindIntVariable("dclick_use", &dclick_use); - M_BindIntVariable("key_pause", &key_pause); + M_BindIntVariable("joyb_strafeleft", &joybstrafeleft); + M_BindIntVariable("joyb_straferight", &joybstraferight); + M_BindIntVariable("mouseb_strafeleft", &mousebstrafeleft); + M_BindIntVariable("mouseb_straferight", &mousebstraferight); + M_BindIntVariable("mouseb_turnleft", &mousebturnleft); + M_BindIntVariable("mouseb_turnright", &mousebturnright); + M_BindIntVariable("mouseb_use", &mousebuse); + M_BindIntVariable("mouseb_backward", &mousebbackward); + M_BindIntVariable("dclick_use", &dclick_use); + M_BindIntVariable("key_pause", &key_pause); M_BindIntVariable("key_message_refresh", &key_message_refresh); } void M_BindWeaponControls(void) { - M_BindIntVariable("key_weapon1", &key_weapon1); - M_BindIntVariable("key_weapon2", &key_weapon2); - M_BindIntVariable("key_weapon3", &key_weapon3); - M_BindIntVariable("key_weapon4", &key_weapon4); - M_BindIntVariable("key_weapon5", &key_weapon5); - M_BindIntVariable("key_weapon6", &key_weapon6); - M_BindIntVariable("key_weapon7", &key_weapon7); - M_BindIntVariable("key_weapon8", &key_weapon8); - - M_BindIntVariable("key_prevweapon", &key_prevweapon); - M_BindIntVariable("key_nextweapon", &key_nextweapon); - - M_BindIntVariable("joyb_prevweapon", &joybprevweapon); - M_BindIntVariable("joyb_nextweapon", &joybnextweapon); - - M_BindIntVariable("mouseb_prevweapon", &mousebprevweapon); - M_BindIntVariable("mouseb_nextweapon", &mousebnextweapon); + M_BindIntVariable("key_weapon1", &key_weapon1); + M_BindIntVariable("key_weapon2", &key_weapon2); + M_BindIntVariable("key_weapon3", &key_weapon3); + M_BindIntVariable("key_weapon4", &key_weapon4); + M_BindIntVariable("key_weapon5", &key_weapon5); + M_BindIntVariable("key_weapon6", &key_weapon6); + M_BindIntVariable("key_weapon7", &key_weapon7); + M_BindIntVariable("key_weapon8", &key_weapon8); + + M_BindIntVariable("key_prevweapon", &key_prevweapon); + M_BindIntVariable("key_nextweapon", &key_nextweapon); + + M_BindIntVariable("joyb_prevweapon", &joybprevweapon); + M_BindIntVariable("joyb_nextweapon", &joybnextweapon); + + M_BindIntVariable("mouseb_prevweapon", &mousebprevweapon); + M_BindIntVariable("mouseb_nextweapon", &mousebnextweapon); } void M_BindMapControls(void) { - M_BindIntVariable("key_map_north", &key_map_north); - M_BindIntVariable("key_map_south", &key_map_south); - M_BindIntVariable("key_map_east", &key_map_east); - M_BindIntVariable("key_map_west", &key_map_west); - M_BindIntVariable("key_map_zoomin", &key_map_zoomin); - M_BindIntVariable("key_map_zoomout", &key_map_zoomout); - M_BindIntVariable("key_map_toggle", &key_map_toggle); - M_BindIntVariable("key_map_maxzoom", &key_map_maxzoom); - M_BindIntVariable("key_map_follow", &key_map_follow); - M_BindIntVariable("key_map_grid", &key_map_grid); - M_BindIntVariable("key_map_mark", &key_map_mark); - M_BindIntVariable("key_map_clearmark", &key_map_clearmark); + M_BindIntVariable("key_map_north", &key_map_north); + M_BindIntVariable("key_map_south", &key_map_south); + M_BindIntVariable("key_map_east", &key_map_east); + M_BindIntVariable("key_map_west", &key_map_west); + M_BindIntVariable("key_map_zoomin", &key_map_zoomin); + M_BindIntVariable("key_map_zoomout", &key_map_zoomout); + M_BindIntVariable("key_map_toggle", &key_map_toggle); + M_BindIntVariable("key_map_maxzoom", &key_map_maxzoom); + M_BindIntVariable("key_map_follow", &key_map_follow); + M_BindIntVariable("key_map_grid", &key_map_grid); + M_BindIntVariable("key_map_mark", &key_map_mark); + M_BindIntVariable("key_map_clearmark", &key_map_clearmark); } void M_BindMenuControls(void) { - M_BindIntVariable("key_menu_activate", &key_menu_activate); - M_BindIntVariable("key_menu_up", &key_menu_up); - M_BindIntVariable("key_menu_down", &key_menu_down); - M_BindIntVariable("key_menu_left", &key_menu_left); - M_BindIntVariable("key_menu_right", &key_menu_right); - M_BindIntVariable("key_menu_back", &key_menu_back); - M_BindIntVariable("key_menu_forward", &key_menu_forward); - M_BindIntVariable("key_menu_confirm", &key_menu_confirm); - M_BindIntVariable("key_menu_abort", &key_menu_abort); - - M_BindIntVariable("key_menu_help", &key_menu_help); - M_BindIntVariable("key_menu_save", &key_menu_save); - M_BindIntVariable("key_menu_load", &key_menu_load); - M_BindIntVariable("key_menu_volume", &key_menu_volume); - M_BindIntVariable("key_menu_detail", &key_menu_detail); - M_BindIntVariable("key_menu_qsave", &key_menu_qsave); - M_BindIntVariable("key_menu_endgame", &key_menu_endgame); - M_BindIntVariable("key_menu_messages", &key_menu_messages); - M_BindIntVariable("key_menu_qload", &key_menu_qload); - M_BindIntVariable("key_menu_quit", &key_menu_quit); - M_BindIntVariable("key_menu_gamma", &key_menu_gamma); + M_BindIntVariable("key_menu_activate", &key_menu_activate); + M_BindIntVariable("key_menu_up", &key_menu_up); + M_BindIntVariable("key_menu_down", &key_menu_down); + M_BindIntVariable("key_menu_left", &key_menu_left); + M_BindIntVariable("key_menu_right", &key_menu_right); + M_BindIntVariable("key_menu_back", &key_menu_back); + M_BindIntVariable("key_menu_forward", &key_menu_forward); + M_BindIntVariable("key_menu_confirm", &key_menu_confirm); + M_BindIntVariable("key_menu_abort", &key_menu_abort); + + M_BindIntVariable("key_menu_help", &key_menu_help); + M_BindIntVariable("key_menu_save", &key_menu_save); + M_BindIntVariable("key_menu_load", &key_menu_load); + M_BindIntVariable("key_menu_volume", &key_menu_volume); + M_BindIntVariable("key_menu_detail", &key_menu_detail); + M_BindIntVariable("key_menu_qsave", &key_menu_qsave); + M_BindIntVariable("key_menu_endgame", &key_menu_endgame); + M_BindIntVariable("key_menu_messages", &key_menu_messages); + M_BindIntVariable("key_menu_qload", &key_menu_qload); + M_BindIntVariable("key_menu_quit", &key_menu_quit); + M_BindIntVariable("key_menu_gamma", &key_menu_gamma); M_BindIntVariable("key_menu_incscreen", &key_menu_incscreen); M_BindIntVariable("key_menu_decscreen", &key_menu_decscreen); - M_BindIntVariable("key_menu_screenshot",&key_menu_screenshot); - M_BindIntVariable("key_demo_quit", &key_demo_quit); - M_BindIntVariable("key_spy", &key_spy); + M_BindIntVariable("key_menu_screenshot", &key_menu_screenshot); + M_BindIntVariable("key_demo_quit", &key_demo_quit); + M_BindIntVariable("key_spy", &key_spy); } void M_BindChatControls(unsigned int num_players) @@ -271,9 +271,9 @@ void M_BindChatControls(unsigned int num_players) char name[32]; // haleyjd: 20 not large enough - Thank you, come again! unsigned int i; // haleyjd: signedness conflict - M_BindIntVariable("key_multi_msg", &key_multi_msg); + M_BindIntVariable("key_multi_msg", &key_multi_msg); - for (i=0; i> FRACBITS; } - // // FixedDiv, C version. // @@ -48,15 +41,14 @@ fixed_t FixedDiv(fixed_t a, fixed_t b) { if ((abs(a) >> 14) >= abs(b)) { - return (a^b) < 0 ? INT_MIN : INT_MAX; + return (a ^ b) < 0 ? INT_MIN : INT_MAX; } else { - int64_t result; + int64_t result; - result = ((int64_t) a << FRACBITS) / b; + result = ((int64_t) a << FRACBITS) / b; - return (fixed_t) result; + return (fixed_t) result; } } - diff --git a/src/m_misc.c b/src/m_misc.c index d640266672..ee64204571 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -35,22 +35,6 @@ #include "w_wad.h" #include "z_zone.h" -// Convert multibyte string in system encoding to UTF8. The result is newly -// allocated and must be freed by the caller after use. - -char *M_ConvertSysNativeMBToUtf8(const char *str) -{ - return M_StringDuplicate(str); -} - -// Convert UTF8 string to multibyte string in system encoding. The result is -// newly allocated and must be freed by the caller after use. - -char *M_ConvertUtf8ToSysNativeMB(const char *str) -{ - return M_StringDuplicate(str); -} - FILE *M_fopen(const char *filename, const char *mode) { return fopen(filename, mode); @@ -66,11 +50,6 @@ int M_rename(const char *oldname, const char *newname) return rename(oldname, newname); } -int M_stat(const char *path, struct stat *buf) -{ - return stat(path, buf); -} - char *M_getenv(const char *name) { return getenv(name); @@ -222,37 +201,6 @@ boolean M_WriteFile(const char *name, const void *source, int length) } -// -// M_ReadFile -// - -int M_ReadFile(const char *name, byte **buffer) -{ - FILE *handle; - int count, length; - byte *buf; - - handle = M_fopen(name, "rb"); - if (handle == NULL) - I_Error("Couldn't read file %s", name); - - // find the size of the file by seeking to the end and - // reading the current position - - length = M_FileLength(handle); - - buf = Z_Malloc(length + 1, PU_STATIC, NULL); - count = fread(buf, 1, length, handle); - fclose(handle); - - if (count < length) - I_Error("Couldn't read file %s", name); - - buf[length] = '\0'; - *buffer = buf; - return length; -} - // Returns the path to a temporary file of the given name, stored // inside the system temporary directory. // @@ -348,8 +296,7 @@ void M_ExtractFileBase(const char *path, char *dest) { if (length >= 8) { - printf("Warning: Truncated '%s' lump name to '%.8s'.\n", filename, - dest); + printf("Warning: Truncated '%s' lump name to '%.8s'.\n", filename, dest); break; } @@ -393,40 +340,6 @@ void M_ForceLowercase(char *text) } } -// -// M_StrCaseStr -// -// Case-insensitive version of strstr() -// - -const char *M_StrCaseStr(const char *haystack, const char *needle) -{ - unsigned int haystack_len; - unsigned int needle_len; - unsigned int len; - unsigned int i; - - haystack_len = strlen(haystack); - needle_len = strlen(needle); - - if (haystack_len < needle_len) - { - return NULL; - } - - len = haystack_len - needle_len; - - for (i = 0; i <= len; ++i) - { - if (!strncasecmp(haystack + i, needle, needle_len)) - { - return haystack + i; - } - } - - return NULL; -} - // // Safe version of strdup() that checks the string was successfully // allocated. @@ -450,67 +363,6 @@ char *M_StringDuplicate(const char *orig) // String replace function. // -char *M_StringReplace(const char *haystack, const char *needle, - const char *replacement) -{ - char *result, *dst; - const char *p; - size_t needle_len = strlen(needle); - size_t result_len, dst_len; - - // Iterate through occurrences of 'needle' and calculate the size of - // the new string. - result_len = strlen(haystack) + 1; - p = haystack; - - for (;;) - { - p = strstr(p, needle); - if (p == NULL) - { - break; - } - - p += needle_len; - result_len += strlen(replacement) - needle_len; - } - - // Construct new string. - - result = malloc(result_len); - if (result == NULL) - { - I_Error("M_StringReplace: Failed to allocate new string"); - return NULL; - } - - dst = result; - dst_len = result_len; - p = haystack; - - while (*p != '\0') - { - if (!strncmp(p, needle, needle_len)) - { - M_StringCopy(dst, replacement, dst_len); - p += needle_len; - dst += strlen(replacement); - dst_len -= strlen(replacement); - } - else - { - *dst = *p; - ++dst; - --dst_len; - ++p; - } - } - - *dst = '\0'; - - return result; -} - // Safe string copy function that works like OpenBSD's strlcpy(). // Returns true if the string was not truncated. @@ -548,14 +400,6 @@ boolean M_StringConcat(char *dest, const char *src, size_t dest_size) return M_StringCopy(dest + offset, src, dest_size - offset); } -// Returns true if 's' begins with the specified prefix. - -boolean M_StringStartsWith(const char *s, const char *prefix) -{ - return strlen(s) >= strlen(prefix) && - strncmp(s, prefix, strlen(prefix)) == 0; -} - // Returns true if 's' ends with the specified suffix. boolean M_StringEndsWith(const char *s, const char *suffix) @@ -651,47 +495,3 @@ int M_snprintf(char *buf, size_t buf_len, const char *s, ...) va_end(args); return result; } - -// -// M_NormalizeSlashes -// -// Remove trailing slashes, translate backslashes to slashes -// The string to normalize is passed and returned in str -// -// killough 11/98: rewritten -// -// [STRIFE] - haleyjd 20110210: Borrowed from Eternity and adapted to respect -// the DIR_SEPARATOR define used by Choco Doom. This routine originated in -// BOOM. -// -void M_NormalizeSlashes(char *str) -{ - char *p; - - // Convert all slashes/backslashes to DIR_SEPARATOR - for (p = str; *p; p++) - { - if ((*p == '/' || *p == '\\') && *p != DIR_SEPARATOR) - { - *p = DIR_SEPARATOR; - } - } - - // Remove trailing slashes - while (p > str && *--p == DIR_SEPARATOR) - { - *p = 0; - } - - // Collapse multiple slashes - for (p = str; (*str++ = *p);) - { - if (*p++ == DIR_SEPARATOR) - { - while (*p == DIR_SEPARATOR) - { - p++; - } - } - } -} diff --git a/src/m_misc.h b/src/m_misc.h index 5c5ce87af5..a5aa6db219 100644 --- a/src/m_misc.h +++ b/src/m_misc.h @@ -27,7 +27,6 @@ #include "doomtype.h" char *M_ConvertUtf8ToSysNativeMB(const char *str); -char *M_ConvertSysNativeMBToUtf8(const char *str); FILE *M_fopen(const char *filename, const char *mode); int M_remove(const char *path); @@ -35,7 +34,6 @@ int M_rename(const char *oldname, const char *newname); int M_stat(const char *path, struct stat *buf); char *M_getenv(const char *name); boolean M_WriteFile(const char *name, const void *source, int length); -int M_ReadFile(const char *name, byte **buffer); void M_MakeDirectory(const char *dir); char *M_TempFile(const char *s); boolean M_FileExists(const char *file); @@ -47,19 +45,13 @@ const char *M_BaseName(const char *path); void M_ExtractFileBase(const char *path, char *dest); void M_ForceUppercase(char *text); void M_ForceLowercase(char *text); -const char *M_StrCaseStr(const char *haystack, const char *needle); char *M_StringDuplicate(const char *orig); boolean M_StringCopy(char *dest, const char *src, size_t dest_size); boolean M_StringConcat(char *dest, const char *src, size_t dest_size); -char *M_StringReplace(const char *haystack, const char *needle, - const char *replacement); char *M_StringJoin(const char *s, ...); -boolean M_StringStartsWith(const char *s, const char *prefix); boolean M_StringEndsWith(const char *s, const char *suffix); int M_vsnprintf(char *buf, size_t buf_len, const char *s, va_list args); int M_snprintf(char *buf, size_t buf_len, const char *s, ...) PRINTF_ATTR(3, 4); -void M_NormalizeSlashes(char *str); - // debugging code to check there are no loops in a linked list // disabled unless explicitly requested diff --git a/src/memio.c b/src/memio.c index 299a66bf73..1b4c665d41 100644 --- a/src/memio.c +++ b/src/memio.c @@ -12,7 +12,7 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // -// Emulates the IO functions in C stdio.h reading and writing to +// Emulates the IO functions in C stdio.h reading and writing to // memory. // @@ -24,174 +24,169 @@ #include "z_zone.h" -typedef enum { - MODE_READ, - MODE_WRITE, +typedef enum +{ + MODE_READ, + MODE_WRITE, } memfile_mode_t; -struct _MEMFILE { - unsigned char *buf; - size_t buflen; - size_t alloced; - unsigned int position; - memfile_mode_t mode; +struct _MEMFILE +{ + unsigned char *buf; + size_t buflen; + size_t alloced; + unsigned int position; + memfile_mode_t mode; }; // Open a memory area for reading MEMFILE *mem_fopen_read(void *buf, size_t buflen) { - MEMFILE *file; + MEMFILE *file; - file = Z_Malloc(sizeof(MEMFILE), PU_STATIC, 0); + file = Z_Malloc(sizeof(MEMFILE), PU_STATIC, 0); - file->buf = (unsigned char *) buf; - file->buflen = buflen; - file->position = 0; - file->mode = MODE_READ; + file->buf = (unsigned char *) buf; + file->buflen = buflen; + file->position = 0; + file->mode = MODE_READ; - return file; + return file; } // Read bytes size_t mem_fread(void *buf, size_t size, size_t nmemb, MEMFILE *stream) { - size_t items; - - if (stream->mode != MODE_READ) - { - printf("not a read stream\n"); - return -1; - } - - // Trying to read more bytes than we have left? - - items = nmemb; - - if (items * size > stream->buflen - stream->position) - { - items = (stream->buflen - stream->position) / size; - } - - // Copy bytes to buffer - - memcpy(buf, stream->buf + stream->position, items * size); - - // Update position - - stream->position += items * size; - - return items; + size_t items; + + if (stream->mode != MODE_READ) + { + printf("not a read stream\n"); + return -1; + } + + // Trying to read more bytes than we have left? + + items = nmemb; + + if (items * size > stream->buflen - stream->position) + { + items = (stream->buflen - stream->position) / size; + } + + // Copy bytes to buffer + + memcpy(buf, stream->buf + stream->position, items * size); + + // Update position + + stream->position += items * size; + + return items; } // Open a memory area for writing MEMFILE *mem_fopen_write(void) { - MEMFILE *file; + MEMFILE *file; - file = Z_Malloc(sizeof(MEMFILE), PU_STATIC, 0); + file = Z_Malloc(sizeof(MEMFILE), PU_STATIC, 0); - file->alloced = 1024; - file->buf = Z_Malloc(file->alloced, PU_STATIC, 0); - file->buflen = 0; - file->position = 0; - file->mode = MODE_WRITE; + file->alloced = 1024; + file->buf = Z_Malloc(file->alloced, PU_STATIC, 0); + file->buflen = 0; + file->position = 0; + file->mode = MODE_WRITE; - return file; + return file; } // Write bytes to stream size_t mem_fwrite(const void *ptr, size_t size, size_t nmemb, MEMFILE *stream) { - size_t bytes; - - if (stream->mode != MODE_WRITE) - { - return -1; - } - - // More bytes than can fit in the buffer? - // If so, reallocate bigger. - - bytes = size * nmemb; - - while (bytes > stream->alloced - stream->position) - { - unsigned char *newbuf; - - newbuf = Z_Malloc(stream->alloced * 2, PU_STATIC, 0); - memcpy(newbuf, stream->buf, stream->alloced); - Z_Free(stream->buf); - stream->buf = newbuf; - stream->alloced *= 2; - } - - // Copy into buffer - - memcpy(stream->buf + stream->position, ptr, bytes); - stream->position += bytes; - - if (stream->position > stream->buflen) - stream->buflen = stream->position; - - return nmemb; + size_t bytes; + + if (stream->mode != MODE_WRITE) + { + return -1; + } + + // More bytes than can fit in the buffer? + // If so, reallocate bigger. + + bytes = size * nmemb; + + while (bytes > stream->alloced - stream->position) + { + unsigned char *newbuf; + + newbuf = Z_Malloc(stream->alloced * 2, PU_STATIC, 0); + memcpy(newbuf, stream->buf, stream->alloced); + Z_Free(stream->buf); + stream->buf = newbuf; + stream->alloced *= 2; + } + + // Copy into buffer + + memcpy(stream->buf + stream->position, ptr, bytes); + stream->position += bytes; + + if (stream->position > stream->buflen) + stream->buflen = stream->position; + + return nmemb; } void mem_get_buf(MEMFILE *stream, void **buf, size_t *buflen) { - *buf = stream->buf; - *buflen = stream->buflen; + *buf = stream->buf; + *buflen = stream->buflen; } void mem_fclose(MEMFILE *stream) { - if (stream->mode == MODE_WRITE) - { - Z_Free(stream->buf); - } - - Z_Free(stream); -} + if (stream->mode == MODE_WRITE) + { + Z_Free(stream->buf); + } -long mem_ftell(MEMFILE *stream) -{ - return stream->position; + Z_Free(stream); } int mem_fseek(MEMFILE *stream, signed long position, mem_rel_t whence) { - unsigned int newpos; - - switch (whence) - { - case MEM_SEEK_SET: - newpos = (int) position; - break; - - case MEM_SEEK_CUR: - newpos = (int) (stream->position + position); - break; - - case MEM_SEEK_END: - newpos = (int) (stream->buflen + position); - break; - default: - return -1; - } - - if (newpos < stream->buflen) - { - stream->position = newpos; - return 0; - } - else - { - printf("Error seeking to %u\n", newpos); - return -1; - } + unsigned int newpos; + + switch (whence) + { + case MEM_SEEK_SET: + newpos = (int) position; + break; + + case MEM_SEEK_CUR: + newpos = (int) (stream->position + position); + break; + + case MEM_SEEK_END: + newpos = (int) (stream->buflen + position); + break; + default: + return -1; + } + + if (newpos < stream->buflen) + { + stream->position = newpos; + return 0; + } + else + { + printf("Error seeking to %u\n", newpos); + return -1; + } } - - diff --git a/src/memio.h b/src/memio.h index 03706a3171..6c6a708fa6 100644 --- a/src/memio.h +++ b/src/memio.h @@ -31,7 +31,6 @@ MEMFILE *mem_fopen_write(void); size_t mem_fwrite(const void *ptr, size_t size, size_t nmemb, MEMFILE *stream); void mem_get_buf(MEMFILE *stream, void **buf, size_t *buflen); void mem_fclose(MEMFILE *stream); -long mem_ftell(MEMFILE *stream); int mem_fseek(MEMFILE *stream, signed long offset, mem_rel_t whence); #endif /* #ifndef MEMIO_H */ diff --git a/src/midifile.c b/src/midifile.c index f30ac62ed2..f67ac7bd8e 100644 --- a/src/midifile.c +++ b/src/midifile.c @@ -35,14 +35,12 @@ #pragma pack(push, 1) #endif -typedef PACKED_STRUCT ( -{ +typedef PACKED_STRUCT({ byte chunk_id[4]; unsigned int chunk_size; }) chunk_header_t; -typedef PACKED_STRUCT ( -{ +typedef PACKED_STRUCT({ chunk_header_t chunk_header; unsigned short format_type; unsigned short num_tracks; @@ -88,20 +86,19 @@ struct midi_file_s // Check the header of a chunk: -static boolean CheckChunkHeader(chunk_header_t *chunk, - const char *expected_id) +static boolean CheckChunkHeader(chunk_header_t *chunk, const char *expected_id) { boolean result; - + result = (memcmp((char *) chunk->chunk_id, expected_id, 4) == 0); if (!result) { - fprintf(stderr, "CheckChunkHeader: Expected '%s' chunk header, " - "got '%c%c%c%c'\n", - expected_id, - chunk->chunk_id[0], chunk->chunk_id[1], - chunk->chunk_id[2], chunk->chunk_id[3]); + fprintf(stderr, + "CheckChunkHeader: Expected '%s' chunk header, " + "got '%c%c%c%c'\n", + expected_id, chunk->chunk_id[0], chunk->chunk_id[1], chunk->chunk_id[2], + chunk->chunk_id[3]); } return result; @@ -137,7 +134,7 @@ static boolean ReadVariableLength(unsigned int *result, FILE *stream) *result = 0; - for (i=0; i<4; ++i) + for (i = 0; i < 4; ++i) { if (!ReadByte(&b, stream)) { @@ -184,12 +181,11 @@ static void *ReadByteSequence(unsigned int num_bytes, FILE *stream) // Read the data: - for (i=0; ievent_type = event_type; if (!ReadVariableLength(&event->data.sysex.length, stream)) { fprintf(stderr, "ReadSysExEvent: Failed to read length of " - "SysEx block\n"); + "SysEx block\n"); return false; } @@ -291,7 +285,7 @@ static boolean ReadMetaEvent(midi_event_t *event, FILE *stream) if (!ReadVariableLength(&event->data.meta.length, stream)) { fprintf(stderr, "ReadSysExEvent: Failed to read length of " - "SysEx block\n"); + "SysEx block\n"); return false; } @@ -308,8 +302,7 @@ static boolean ReadMetaEvent(midi_event_t *event, FILE *stream) return true; } -static boolean ReadEvent(midi_event_t *event, unsigned int *last_event_type, - FILE *stream) +static boolean ReadEvent(midi_event_t *event, unsigned int *last_event_type, FILE *stream) { byte event_type = 0; @@ -325,7 +318,7 @@ static boolean ReadEvent(midi_event_t *event, unsigned int *last_event_type, return false; } - // All event types have their top bit set. Therefore, if + // All event types have their top bit set. Therefore, if // the top bit is not set, it is because we are using the "same // as previous event type" shortcut to save a byte. Skip back // a byte so that we read this byte again. @@ -349,7 +342,7 @@ static boolean ReadEvent(midi_event_t *event, unsigned int *last_event_type, switch (event_type & 0xf0) { - // Two parameter channel events: + // Two parameter channel events: case MIDI_EVENT_NOTE_OFF: case MIDI_EVENT_NOTE_ON: @@ -358,7 +351,7 @@ static boolean ReadEvent(midi_event_t *event, unsigned int *last_event_type, case MIDI_EVENT_PITCH_BEND: return ReadChannelEvent(event, event_type, true, stream); - // Single parameter channel events: + // Single parameter channel events: case MIDI_EVENT_PROGRAM_CHANGE: case MIDI_EVENT_CHAN_AFTERTOUCH: @@ -438,7 +431,6 @@ static boolean ReadTrackHeader(midi_track_t *track, FILE *stream) static boolean ReadTrack(midi_track_t *track, FILE *stream) { midi_event_t *new_events; - midi_event_t *event; unsigned int last_event_type; track->num_events = 0; @@ -459,13 +451,12 @@ static boolean ReadTrack(midi_track_t *track, FILE *stream) { // Resize the track slightly larger to hold another event: - new_events = I_Realloc(track->events, - sizeof(midi_event_t) * (track->num_events + 1)); + new_events = + I_Realloc(track->events, sizeof(midi_event_t) * (track->num_events + 1)); track->events = new_events; // Read the next event: - - event = &track->events[track->num_events]; + midi_event_t *event = &track->events[track->num_events]; if (!ReadEvent(event, &last_event_type, stream)) { return false; @@ -475,8 +466,8 @@ static boolean ReadTrack(midi_track_t *track, FILE *stream) // End of track? - if (event->event_type == MIDI_EVENT_META - && event->data.meta.type == MIDI_META_END_OF_TRACK) + if (event->event_type == MIDI_EVENT_META && + event->data.meta.type == MIDI_META_END_OF_TRACK) { break; } @@ -491,7 +482,7 @@ static void FreeTrack(midi_track_t *track) { unsigned int i; - for (i=0; inum_events; ++i) + for (i = 0; i < track->num_events; ++i) { FreeEvent(&track->events[i]); } @@ -516,7 +507,7 @@ static boolean ReadAllTracks(midi_file_t *file, FILE *stream) // Read each track: - for (i=0; inum_tracks; ++i) + for (i = 0; i < file->num_tracks; ++i) { if (!ReadTrack(&file->tracks[i], stream)) { @@ -541,23 +532,23 @@ static boolean ReadFileHeader(midi_file_t *file, FILE *stream) return false; } - if (!CheckChunkHeader(&file->header.chunk_header, HEADER_CHUNK_ID) - || SDL_SwapBE32(file->header.chunk_header.chunk_size) != 6) + if (!CheckChunkHeader(&file->header.chunk_header, HEADER_CHUNK_ID) || + SDL_SwapBE32(file->header.chunk_header.chunk_size) != 6) { - fprintf(stderr, "ReadFileHeader: Invalid MIDI chunk header! " - "chunk_size=%i\n", - SDL_SwapBE32(file->header.chunk_header.chunk_size)); + fprintf(stderr, + "ReadFileHeader: Invalid MIDI chunk header! " + "chunk_size=%i\n", + SDL_SwapBE32(file->header.chunk_header.chunk_size)); return false; } format_type = SDL_SwapBE16(file->header.format_type); file->num_tracks = SDL_SwapBE16(file->header.num_tracks); - if ((format_type != 0 && format_type != 1) - || file->num_tracks < 1) + if ((format_type != 0 && format_type != 1) || file->num_tracks < 1) { fprintf(stderr, "ReadFileHeader: Only type 0/1 " - "MIDI files supported!\n"); + "MIDI files supported!\n"); return false; } @@ -566,11 +557,9 @@ static boolean ReadFileHeader(midi_file_t *file, FILE *stream) void MIDI_FreeFile(midi_file_t *file) { - int i; - if (file->tracks != NULL) { - for (i=0; inum_tracks; ++i) + for (int i = 0; i < file->num_tracks; ++i) { FreeTrack(&file->tracks[i]); } @@ -703,8 +692,7 @@ unsigned int MIDI_GetFileTimeDivision(midi_file_t *file) // differently. if (result < 0) { - return (signed int)(-(result/256)) - * (signed int)(result & 0xFF); + return (signed int) (-(result / 256)) * (signed int) (result & 0xFF); } else { @@ -717,93 +705,3 @@ void MIDI_RestartIterator(midi_track_iter_t *iter) iter->position = 0; iter->loop_point = 0; } - -void MIDI_SetLoopPoint(midi_track_iter_t *iter) -{ - iter->loop_point = iter->position; -} - -void MIDI_RestartAtLoopPoint(midi_track_iter_t *iter) -{ - iter->position = iter->loop_point; -} - -#ifdef TEST - -static char *MIDI_EventTypeToString(midi_event_type_t event_type) -{ - switch (event_type) - { - case MIDI_EVENT_NOTE_OFF: - return "MIDI_EVENT_NOTE_OFF"; - case MIDI_EVENT_NOTE_ON: - return "MIDI_EVENT_NOTE_ON"; - case MIDI_EVENT_AFTERTOUCH: - return "MIDI_EVENT_AFTERTOUCH"; - case MIDI_EVENT_CONTROLLER: - return "MIDI_EVENT_CONTROLLER"; - case MIDI_EVENT_PROGRAM_CHANGE: - return "MIDI_EVENT_PROGRAM_CHANGE"; - case MIDI_EVENT_CHAN_AFTERTOUCH: - return "MIDI_EVENT_CHAN_AFTERTOUCH"; - case MIDI_EVENT_PITCH_BEND: - return "MIDI_EVENT_PITCH_BEND"; - case MIDI_EVENT_SYSEX: - return "MIDI_EVENT_SYSEX"; - case MIDI_EVENT_SYSEX_SPLIT: - return "MIDI_EVENT_SYSEX_SPLIT"; - case MIDI_EVENT_META: - return "MIDI_EVENT_META"; - - default: - return "(unknown)"; - } -} - -void PrintTrack(midi_track_t *track) -{ - midi_event_t *event; - unsigned int i; - - for (i=0; inum_events; ++i) - { - event = &track->events[i]; - - if (event->delta_time > 0) - { - printf("Delay: %u ticks\n", event->delta_time); - } - - printf("Event type: %s (%i)\n", - MIDI_EventTypeToString(event->event_type), - event->event_type); - - switch(event->event_type) - { - case MIDI_EVENT_NOTE_OFF: - case MIDI_EVENT_NOTE_ON: - case MIDI_EVENT_AFTERTOUCH: - case MIDI_EVENT_CONTROLLER: - case MIDI_EVENT_PROGRAM_CHANGE: - case MIDI_EVENT_CHAN_AFTERTOUCH: - case MIDI_EVENT_PITCH_BEND: - printf("\tChannel: %u\n", event->data.channel.channel); - printf("\tParameter 1: %u\n", event->data.channel.param1); - printf("\tParameter 2: %u\n", event->data.channel.param2); - break; - - case MIDI_EVENT_SYSEX: - case MIDI_EVENT_SYSEX_SPLIT: - printf("\tLength: %u\n", event->data.sysex.length); - break; - - case MIDI_EVENT_META: - printf("\tMeta type: %u\n", event->data.meta.type); - printf("\tLength: %u\n", event->data.meta.length); - break; - } - } -} - -#endif - diff --git a/src/midifile.h b/src/midifile.h index 035d6f8aa7..77f8b8ebe7 100644 --- a/src/midifile.h +++ b/src/midifile.h @@ -220,13 +220,6 @@ int MIDI_GetNextEvent(midi_track_iter_t *iter, midi_event_t **event); void MIDI_RestartIterator(midi_track_iter_t *iter); -// Set loop point to current position. - -void MIDI_SetLoopPoint(midi_track_iter_t *iter); - -// Set position to saved loop point. - -void MIDI_RestartAtLoopPoint(midi_track_iter_t *iter); #endif /* #ifndef MIDIFILE_H */ diff --git a/src/mus2mid.c b/src/mus2mid.c index bb50d4808b..f7bd1670a2 100644 --- a/src/mus2mid.c +++ b/src/mus2mid.c @@ -27,7 +27,7 @@ #define NUM_CHANNELS 16 #define MIDI_PERCUSSION_CHAN 9 -#define MUS_PERCUSSION_CHAN 15 +#define MUS_PERCUSSION_CHAN 15 // MUS event codes typedef enum @@ -53,8 +53,7 @@ typedef enum } midievent; // Structure to hold MUS file header -typedef PACKED_STRUCT ( -{ +typedef PACKED_STRUCT({ byte id[4]; unsigned short scorelength; unsigned short scorestart; @@ -64,23 +63,19 @@ typedef PACKED_STRUCT ( }) musheader; // Standard MIDI type 0 header + track header -static const byte midiheader[] = -{ - 'M', 'T', 'h', 'd', // Main header +static const byte midiheader[] = { + 'M', 'T', 'h', 'd', // Main header 0x00, 0x00, 0x00, 0x06, // Header size 0x00, 0x00, // MIDI type (0) 0x00, 0x01, // Number of tracks 0x00, 0x46, // Resolution - 'M', 'T', 'r', 'k', // Start of track + 'M', 'T', 'r', 'k', // Start of track 0x00, 0x00, 0x00, 0x00 // Placeholder for track length }; // Cached channel velocities -static byte channelvelocities[] = -{ - 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127 -}; +static byte channelvelocities[] = {127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127}; // Timestamps between sequences of MUS events @@ -90,11 +85,8 @@ static unsigned int queuedtime = 0; static unsigned int tracksize; -static const byte controller_map[] = -{ - 0x00, 0x20, 0x01, 0x07, 0x0A, 0x0B, 0x5B, 0x5D, - 0x40, 0x43, 0x78, 0x7B, 0x7E, 0x7F, 0x79 -}; +static const byte controller_map[] = {0x00, 0x20, 0x01, 0x07, 0x0A, 0x0B, 0x5B, 0x5D, + 0x40, 0x43, 0x78, 0x7B, 0x7E, 0x7F, 0x79}; static int channel_map[NUM_CHANNELS]; @@ -155,8 +147,7 @@ static boolean WriteEndTrack(MEMFILE *midioutput) } // Write a key press event -static boolean WritePressKey(byte channel, byte key, - byte velocity, MEMFILE *midioutput) +static boolean WritePressKey(byte channel, byte key, byte velocity, MEMFILE *midioutput) { byte working = midi_presskey | channel; @@ -190,8 +181,7 @@ static boolean WritePressKey(byte channel, byte key, } // Write a key release event -static boolean WriteReleaseKey(byte channel, byte key, - MEMFILE *midioutput) +static boolean WriteReleaseKey(byte channel, byte key, MEMFILE *midioutput) { byte working = midi_releasekey | channel; @@ -225,8 +215,7 @@ static boolean WriteReleaseKey(byte channel, byte key, } // Write a pitch wheel/bend event -static boolean WritePitchWheel(byte channel, short wheel, - MEMFILE *midioutput) +static boolean WritePitchWheel(byte channel, short wheel, MEMFILE *midioutput) { byte working = midi_pitchwheel | channel; @@ -259,8 +248,7 @@ static boolean WritePitchWheel(byte channel, short wheel, } // Write a patch change event -static boolean WriteChangePatch(byte channel, byte patch, - MEMFILE *midioutput) +static boolean WriteChangePatch(byte channel, byte patch, MEMFILE *midioutput) { byte working = midi_changepatch | channel; @@ -288,9 +276,7 @@ static boolean WriteChangePatch(byte channel, byte patch, // Write a valued controller change event -static boolean WriteChangeController_Valued(byte channel, - byte control, - byte value, +static boolean WriteChangeController_Valued(byte channel, byte control, byte value, MEMFILE *midioutput) { byte working = midi_changecontroller | channel; @@ -315,7 +301,7 @@ static boolean WriteChangeController_Valued(byte channel, // Quirk in vanilla DOOM? MUS controller values should be // 7-bit, not 8-bit. - working = value;// & 0x7F; + working = value; // & 0x7F; // Fix on said quirk to stop MIDI players from complaining that // the value is out of range: @@ -336,12 +322,10 @@ static boolean WriteChangeController_Valued(byte channel, } // Write a valueless controller change event -static boolean WriteChangeController_Valueless(byte channel, - byte control, +static boolean WriteChangeController_Valueless(byte channel, byte control, MEMFILE *midioutput) { - return WriteChangeController_Valued(channel, control, 0, - midioutput); + return WriteChangeController_Valued(channel, control, 0, midioutput); } // Allocate a free MIDI channel. @@ -356,7 +340,7 @@ static int AllocateMIDIChannel(void) max = -1; - for (i=0; i max) { @@ -404,8 +388,7 @@ static int GetMIDIChannel(int mus_channel, MEMFILE *midioutput) // First time using the channel, send an "all notes off" // event. This fixes "The D_DDTBLU disease" described here: // https://www.doomworld.com/vb/source-ports/66802-the - WriteChangeController_Valueless(channel_map[mus_channel], 0x7b, - midioutput); + WriteChangeController_Valueless(channel_map[mus_channel], 0x7b, midioutput); } return channel_map[mus_channel]; @@ -416,12 +399,12 @@ static boolean ReadMusHeader(MEMFILE *file, musheader *header) { boolean result; - result = mem_fread(&header->id, sizeof(byte), 4, file) == 4 - && mem_fread(&header->scorelength, sizeof(short), 1, file) == 1 - && mem_fread(&header->scorestart, sizeof(short), 1, file) == 1 - && mem_fread(&header->primarychannels, sizeof(short), 1, file) == 1 - && mem_fread(&header->secondarychannels, sizeof(short), 1, file) == 1 - && mem_fread(&header->instrumentcount, sizeof(short), 1, file) == 1; + result = mem_fread(&header->id, sizeof(byte), 4, file) == 4 && + mem_fread(&header->scorelength, sizeof(short), 1, file) == 1 && + mem_fread(&header->scorestart, sizeof(short), 1, file) == 1 && + mem_fread(&header->primarychannels, sizeof(short), 1, file) == 1 && + mem_fread(&header->secondarychannels, sizeof(short), 1, file) == 1 && + mem_fread(&header->instrumentcount, sizeof(short), 1, file) == 1; if (result) { @@ -470,7 +453,7 @@ boolean mus2mid(MEMFILE *musinput, MEMFILE *midioutput) // Initialise channel map to mark all channels as unused. - for (channel=0; channel offset=%dms, cumul_error=%d", - latency, remote_latency, offsetms / FRACUNIT, cumul_error); + NET_Log("client: latency %d, remote %d -> offset=%dms, cumul_error=%d", latency, + remote_latency, offsetms / FRACUNIT, cumul_error); } // Expand a net_full_ticcmd_t, applying the diffs in cmd->cmds as @@ -227,14 +225,14 @@ static void NET_CL_ExpandFullTiccmd(net_full_ticcmd_t *cmd, unsigned int seq, int i; // Expand tic diffs for all players - - for (i=0; iplayeringame[i]) { net_ticdiff_t *diff; @@ -263,15 +261,13 @@ static void NET_CL_AdvanceWindow(void) { // Expand tic diff data into d_net.c structures - NET_CL_ExpandFullTiccmd(&recvwindow[0].cmd, recvwindow_start, - ticcmds); + NET_CL_ExpandFullTiccmd(&recvwindow[0].cmd, recvwindow_start, ticcmds); D_ReceiveTic(ticcmds, recvwindow[0].cmd.playeringame); // Advance the window - memmove(recvwindow, recvwindow + 1, - sizeof(net_server_recv_t) * (BACKUPTICS - 1)); - memset(&recvwindow[BACKUPTICS-1], 0, sizeof(net_server_recv_t)); + memmove(recvwindow, recvwindow + 1, sizeof(net_server_recv_t) * (BACKUPTICS - 1)); + memset(&recvwindow[BACKUPTICS - 1], 0, sizeof(net_server_recv_t)); ++recvwindow_start; @@ -305,11 +301,10 @@ void NET_CL_StartGame(net_gamesettings_t *settings) // Start from a ticcmd of all zeros memset(&last_ticcmd, 0, sizeof(ticcmd_t)); - + // Send packet - packet = NET_Conn_NewReliable(&client_connection, - NET_PACKET_TYPE_GAMESTART); + packet = NET_Conn_NewReliable(&client_connection, NET_PACKET_TYPE_GAMESTART); NET_WriteSettings(packet, settings); } @@ -344,7 +339,7 @@ static void NET_CL_SendTics(int start, int end) if (start < 0) start = 0; - + // Build a new packet to send to the server packet = NET_NewPacket(512); @@ -359,7 +354,7 @@ static void NET_CL_SendTics(int start, int end) // Add the tics. - for (i=start; i<=end; ++i) + for (i = start; i <= end; ++i) { net_server_send_t *sendobj; @@ -369,11 +364,11 @@ static void NET_CL_SendTics(int start, int end) NET_WriteTiccmdDiff(packet, &sendobj->cmd, settings.lowres_turn); } - + // Send the packet NET_Conn_SendPacket(&client_connection, packet); - + // All done! NET_FreePacket(packet); @@ -390,11 +385,11 @@ void NET_CL_SendTiccmd(ticcmd_t *ticcmd, int maketic) net_ticdiff_t diff; net_server_send_t *sendobj; int starttic, endtic; - + // Calculate the difference to the last ticcmd NET_TiccmdDiff(&last_ticcmd, ticcmd, &diff); - + // Store in the send queue sendobj = &send_queue[maketic % BACKUPTICS]; @@ -413,8 +408,7 @@ void NET_CL_SendTiccmd(ticcmd_t *ticcmd, int maketic) if (starttic < 0) starttic = 0; - NET_Log("client: generated tic %d, sending %d-%d", - maketic, starttic, endtic); + NET_Log("client: generated tic %d, sending %d-%d", maketic, starttic, endtic); NET_CL_SendTics(starttic, endtic); } @@ -452,9 +446,11 @@ static void NET_CL_ParseSYN(net_packet_t *packet) // fixes a compatibility issue, we may still have problems. if (strcmp(server_version, PACKAGE_STRING) != 0) { - fprintf(stderr, "NET_CL_ParseSYN: This is '%s', but the server is " + fprintf(stderr, + "NET_CL_ParseSYN: This is '%s', but the server is " "'%s'. It is possible that this mismatch may cause the game " - "to desync.\n", PACKAGE_STRING, server_version); + "to desync.\n", + PACKAGE_STRING, server_version); } } @@ -501,18 +497,18 @@ static void NET_CL_ParseWaitingData(net_packet_t *packet) return; } - if (wait_data.num_players > wait_data.max_players - || wait_data.ready_players > wait_data.num_players - || wait_data.max_players > NET_MAXPLAYERS) + if (wait_data.num_players > wait_data.max_players || + wait_data.ready_players > wait_data.num_players || + wait_data.max_players > NET_MAXPLAYERS) { // insane data return; } - if ((wait_data.consoleplayer >= 0 && drone) - || (wait_data.consoleplayer < 0 && !drone) - || (wait_data.consoleplayer >= wait_data.num_players)) + if ((wait_data.consoleplayer >= 0 && drone) || + (wait_data.consoleplayer < 0 && !drone) || + (wait_data.consoleplayer >= wait_data.num_players)) { // Invalid player number @@ -568,8 +564,8 @@ static void NET_CL_ParseGameStart(net_packet_t *packet) return; } - if (settings.num_players > NET_MAXPLAYERS - || settings.consoleplayer >= (signed int) settings.num_players) + if (settings.num_players > NET_MAXPLAYERS || + settings.consoleplayer >= (signed int) settings.num_players) { // insane values NET_Log("client: error: bad settings, num_players=%d, consoleplayer=%d", @@ -577,13 +573,12 @@ static void NET_CL_ParseGameStart(net_packet_t *packet) return; } - if ((drone && settings.consoleplayer >= 0) - || (!drone && settings.consoleplayer < 0)) + if ((drone && settings.consoleplayer >= 0) || (!drone && settings.consoleplayer < 0)) { // Invalid player number: must be positive for real players, // negative for drones - NET_Log("client: error: mismatch: drone=%d, consoleplayer=%d", - drone, settings.consoleplayer); + NET_Log("client: error: mismatch: drone=%d, consoleplayer=%d", drone, + settings.consoleplayer); return; } @@ -608,7 +603,7 @@ static void NET_CL_SendResendRequest(int start, int end) int i; //printf("CL: Send resend %i-%i\n", start, end); - + packet = NET_NewPacket(64); NET_WriteInt16(packet, NET_PACKET_TYPE_GAMEDATA_RESEND); NET_WriteInt32(packet, start); @@ -620,7 +615,7 @@ static void NET_CL_SendResendRequest(int start, int end) // Save the time we sent the resend request - for (i=start; i<=end; ++i) + for (i = start; i <= end; ++i) { int index; @@ -648,7 +643,7 @@ static void NET_CL_CheckResends(void) resend_start = -1; resend_end = -1; - for (i=0; iactive - && recvobj->resend_time != 0 - && nowtime > recvobj->resend_time + 300; + need_resend = !recvobj->active && recvobj->resend_time != 0 && + nowtime > recvobj->resend_time + 300; // if no game data has been received in a long time, we may be in // a deadlock scenario where tics from the server have been lost, so // we've stopped generating any more, so the server isn't sending us // any, so we don't get any to trigger a resend request. So force the // first few tics in the receive window to be requested. - if (i == 0 && !recvobj->active && recvobj->resend_time == 0 - && maybe_deadlocked) + if (i == 0 && !recvobj->active && recvobj->resend_time == 0 && maybe_deadlocked) { need_resend = true; } @@ -688,8 +681,7 @@ static void NET_CL_CheckResends(void) { // End of a run of resend tics NET_Log("client: resend request timed out for %d-%d (%d)", - recvwindow_start + resend_start, - recvwindow_start + resend_end, + recvwindow_start + resend_start, recvwindow_start + resend_end, recvwindow[resend_start].resend_time); NET_CL_SendResendRequest(recvwindow_start + resend_start, recvwindow_start + resend_end); @@ -700,8 +692,7 @@ static void NET_CL_CheckResends(void) if (resend_start >= 0) { NET_Log("client: resend request timed out for %d-%d (%d)", - recvwindow_start + resend_start, - recvwindow_start + resend_end, + recvwindow_start + resend_start, recvwindow_start + resend_end, recvwindow[resend_start].resend_time); NET_CL_SendResendRequest(recvwindow_start + resend_start, recvwindow_start + resend_end); @@ -735,8 +726,7 @@ static void NET_CL_ParseGameData(net_packet_t *packet) NET_Log("client: processing game data packet"); // Read header - if (!NET_ReadInt8(packet, &seq) - || !NET_ReadInt8(packet, &num_tics)) + if (!NET_ReadInt8(packet, &seq) || !NET_ReadInt8(packet, &num_tics)) { NET_Log("client: error: failed to read header"); return; @@ -757,7 +747,7 @@ static void NET_CL_ParseGameData(net_packet_t *packet) seq = NET_CL_ExpandTicNum(seq); NET_Log("client: got game data, seq=%d, num_tics=%d", seq, num_tics); - for (i=0; i= 0) { recvobj = &recvwindow[index]; @@ -838,9 +828,8 @@ static void NET_CL_ParseGameData(net_packet_t *packet) if (resend_start < resend_end) { NET_Log("client: request resend for %d-%d before %d", - recvwindow_start + resend_start, - recvwindow_start + resend_end - 1, seq); - NET_CL_SendResendRequest(recvwindow_start + resend_start, + recvwindow_start + resend_start, recvwindow_start + resend_end - 1, seq); + NET_CL_SendResendRequest(recvwindow_start + resend_start, recvwindow_start + resend_end - 1); } } @@ -862,8 +851,7 @@ static void NET_CL_ParseResendRequest(net_packet_t *packet) return; } - if (!NET_ReadInt32(packet, &start) - || !NET_ReadInt8(packet, &num_tics)) + if (!NET_ReadInt32(packet, &start) || !NET_ReadInt8(packet, &num_tics)) { NET_Log("client: error: couldn't read start and num_tics"); return; @@ -874,19 +862,17 @@ static void NET_CL_ParseResendRequest(net_packet_t *packet) //printf("requested resend %i-%i .. ", start, end); NET_Log("client: resend request: start=%d, num_tics=%d", start, num_tics); - // Check we have the tics being requested. If not, reduce the + // Check we have the tics being requested. If not, reduce the // window of tics to only what we have. - while (start <= end - && (!send_queue[start % BACKUPTICS].active - || send_queue[start % BACKUPTICS].seq != start)) + while (start <= end && (!send_queue[start % BACKUPTICS].active || + send_queue[start % BACKUPTICS].seq != start)) { ++start; } - - while (start <= end - && (!send_queue[end % BACKUPTICS].active - || send_queue[end % BACKUPTICS].seq != end)) + + while (start <= end && (!send_queue[end % BACKUPTICS].active || + send_queue[end % BACKUPTICS].seq != end)) { --end; } @@ -930,8 +916,7 @@ static void NET_CL_ParsePacket(net_packet_t *packet) return; } - NET_Log("client: packet from server, type %d", - packet_type & ~NET_RELIABLE_PACKET); + NET_Log("client: packet from server, type %d", packet_type & ~NET_RELIABLE_PACKET); NET_LogPacket(packet); if (NET_Conn_Packet(&client_connection, packet, &packet_type)) @@ -987,12 +972,12 @@ void NET_CL_Run(void) { net_addr_t *addr; net_packet_t *packet; - + if (!net_client_connected) { return; } - + while (NET_RecvPacket(client_context, &addr, &packet)) { // only accept packets from the server @@ -1010,17 +995,16 @@ void NET_CL_Run(void) NET_Conn_Run(&client_connection); - if (client_connection.state == NET_CONN_STATE_DISCONNECTED - || client_connection.state == NET_CONN_STATE_DISCONNECTED_SLEEP) + if (client_connection.state == NET_CONN_STATE_DISCONNECTED || + client_connection.state == NET_CONN_STATE_DISCONNECTED_SLEEP) { NET_CL_Disconnected(); NET_CL_Shutdown(); } - net_waiting_for_launch = - client_connection.state == NET_CONN_STATE_CONNECTED - && client_state == CLIENT_STATE_WAITING_LAUNCH; + net_waiting_for_launch = client_connection.state == NET_CONN_STATE_CONNECTED && + client_state == CLIENT_STATE_WAITING_LAUNCH; if (client_state == CLIENT_STATE_IN_GAME) { @@ -1171,8 +1155,8 @@ void NET_CL_Disconnect(void) start_time = I_GetTimeMS(); - while (client_connection.state != NET_CONN_STATE_DISCONNECTED - && client_connection.state != NET_CONN_STATE_DISCONNECTED_SLEEP) + while (client_connection.state != NET_CONN_STATE_DISCONNECTED && + client_connection.state != NET_CONN_STATE_DISCONNECTED_SLEEP) { if (I_GetTimeMS() - start_time > 5000) { diff --git a/src/net_common.c b/src/net_common.c index ac4782d64e..3bc2e570a9 100644 --- a/src/net_common.c +++ b/src/net_common.c @@ -92,8 +92,7 @@ void NET_Conn_SendPacket(net_connection_t *conn, net_packet_t *packet) NET_SendPacket(conn->addr, packet); } -static void NET_Conn_ParseDisconnect(net_connection_t *conn, - net_packet_t *packet) +static void NET_Conn_ParseDisconnect(net_connection_t *conn, net_packet_t *packet) { net_packet_t *reply; @@ -113,8 +112,7 @@ static void NET_Conn_ParseDisconnect(net_connection_t *conn, // Parse a DISCONNECT_ACK packet -static void NET_Conn_ParseDisconnectACK(net_connection_t *conn, - net_packet_t *packet) +static void NET_Conn_ParseDisconnectACK(net_connection_t *conn, net_packet_t *packet) { if (conn->state == NET_CONN_STATE_DISCONNECTING) @@ -128,8 +126,7 @@ static void NET_Conn_ParseDisconnectACK(net_connection_t *conn, } } -static void NET_Conn_ParseReliableACK(net_connection_t *conn, - net_packet_t *packet) +static void NET_Conn_ParseReliableACK(net_connection_t *conn, net_packet_t *packet) { unsigned int seq; @@ -164,8 +161,7 @@ static void NET_Conn_ParseReliableACK(net_connection_t *conn, // // Returns true if the packet should be discarded (incorrect sequence) -static boolean NET_Conn_ReliablePacket(net_connection_t *conn, - net_packet_t *packet) +static boolean NET_Conn_ReliablePacket(net_connection_t *conn, net_packet_t *packet) { unsigned int seq; net_packet_t *reply; diff --git a/src/net_dedicated.c b/src/net_dedicated.c index dcb9f8fae2..e613052aaa 100644 --- a/src/net_dedicated.c +++ b/src/net_dedicated.c @@ -13,7 +13,7 @@ // // // Dedicated server code. -// +// #include #include @@ -29,26 +29,26 @@ #include "net_sdl.h" #include "net_server.h" -// +// // People can become confused about how dedicated servers work. Game // options are specified to the controlling player who is the first to // join a game. Bomb out with an error message if game options are // specified to a dedicated server. // -static const char *not_dedicated_options[] = -{ - "-deh", "-iwad", "-cdrom", "-gameversion", "-nomonsters", "-respawn", - "-fast", "-altdeath", "-deathmatch", "-turbo", "-merge", "-af", "-as", - "-aa", "-file", "-wart", "-skill", "-episode", "-timer", "-avg", "-warp", - "-loadgame", "-longtics", "-extratics", "-dup", "-shorttics", NULL, +static const char *not_dedicated_options[] = { + "-deh", "-iwad", "-cdrom", "-gameversion", "-nomonsters", "-respawn", + "-fast", "-altdeath", "-deathmatch", "-turbo", "-merge", "-af", + "-as", "-aa", "-file", "-wart", "-skill", "-episode", + "-timer", "-avg", "-warp", "-loadgame", "-longtics", "-extratics", + "-dup", "-shorttics", NULL, }; static void CheckForClientOptions(void) { int i; - for (i=0; not_dedicated_options[i] != NULL; ++i) + for (i = 0; not_dedicated_options[i] != NULL; ++i) { if (M_CheckParm(not_dedicated_options[i]) > 0) { @@ -77,4 +77,3 @@ void NET_DedicatedServer(void) I_Sleep(1); } } - diff --git a/src/net_defs.h b/src/net_defs.h index 4890ca91b0..3ee1bf29d8 100644 --- a/src/net_defs.h +++ b/src/net_defs.h @@ -121,7 +121,7 @@ typedef enum // Protocol introduced with Chocolate Doom v3.0. Each compatibility- // breaking change to the network protocol will produce a new protocol // number in this enum. - NET_PROTOCOL_CHOCOLATE_DOOM_0, + NET_PROTOCOL_MINDOOM_0, // Add your own protocol here; be sure to add a name for it to the list // in net_common.c too. diff --git a/src/net_gui.c b/src/net_gui.c index 4baa397b0d..5be7ec9e3f 100644 --- a/src/net_gui.c +++ b/src/net_gui.c @@ -15,7 +15,7 @@ // // * The client waiting screen when we are waiting for the server to // start the game. -// +// #include #include @@ -75,8 +75,8 @@ static void OpenWaitDialog(void) TXT_SignalConnect(cancel, "pressed", EscapePressed, NULL); TXT_SetWindowAction(window, TXT_HORIZ_LEFT, cancel); - TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_BOTTOM, - TXT_SCREEN_W / 2, TXT_SCREEN_H - 9); + TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_BOTTOM, TXT_SCREEN_W / 2, + TXT_SCREEN_H - 9); old_max_players = 0; } @@ -150,10 +150,8 @@ static void UpdateGUI(void) if (i < net_client_wait_data.num_players) { - TXT_SetLabel(player_labels[i], - net_client_wait_data.player_names[i]); - TXT_SetLabel(ip_labels[i], - net_client_wait_data.player_addrs[i]); + TXT_SetLabel(player_labels[i], net_client_wait_data.player_names[i]); + TXT_SetLabel(ip_labels[i], net_client_wait_data.player_addrs[i]); } else { @@ -199,7 +197,7 @@ static void BuildMasterStatusWindow(void) TXT_LowerWindow(master_window); TXT_SetWindowPosition(master_window, TXT_HORIZ_CENTER, TXT_VERT_CENTER, - TXT_SCREEN_W / 2, TXT_SCREEN_H - 4); + TXT_SCREEN_W / 2, TXT_SCREEN_H - 4); TXT_SetWindowAction(master_window, TXT_HORIZ_LEFT, NULL); TXT_SetWindowAction(master_window, TXT_HORIZ_CENTER, NULL); TXT_SetWindowAction(master_window, TXT_HORIZ_RIGHT, NULL); @@ -222,16 +220,16 @@ static void CheckMasterStatus(void) if (added) { TXT_SetLabel(master_msg_label, - "Your server is now registered with the global master server.\n" - "Other players can find your server online."); + "Your server is now registered with the global master server.\n" + "Other players can find your server online."); } else { TXT_SetLabel(master_msg_label, - "Failed to register with the master server. Your server is not\n" - "publicly accessible. You may need to reconfigure your Internet\n" - "router to add a port forward for UDP port 2342. Look up\n" - "information on port forwarding online."); + "Failed to register with the master server. Your server is not\n" + "publicly accessible. You may need to reconfigure your Internet\n" + "router to add a port forward for UDP port 2342. Look up\n" + "information on port forwarding online."); } } @@ -241,7 +239,7 @@ static void PrintSHA1Digest(const char *s, const byte *digest) printf("%s: ", s); - for (i=0; i 0) + if (net_client_received_wait_data && net_client_wait_data.is_controller && + expected_nodes > 0) { - nodes = net_client_wait_data.num_players - + net_client_wait_data.num_drones; + nodes = net_client_wait_data.num_players + net_client_wait_data.num_drones; if (nodes >= expected_nodes) { @@ -350,9 +346,8 @@ void NET_WaitForLaunch(void) exit(-1); } - TXT_SetColor(TXT_COLOR_BLUE, 0x04, 0x14, 0x40); // Romero's "funky blue" color - - I_InitWindowIcon(); + TXT_SetColor(TXT_COLOR_BLUE, 0x04, 0x14, + 0x40); // Romero's "funky blue" color ParseCommandLineArgs(); OpenWaitDialog(); diff --git a/src/net_io.c b/src/net_io.c index 02519afe21..06fa8c5be9 100644 --- a/src/net_io.c +++ b/src/net_io.c @@ -49,19 +49,16 @@ void NET_AddModule(net_context_t *context, net_module_t *module) { I_Error("NET_AddModule: No more modules for context"); } - + context->modules[context->num_modules] = module; ++context->num_modules; } net_addr_t *NET_ResolveAddress(net_context_t *context, const char *addr) { - int i; - net_addr_t *result; - - for (i=0; inum_modules; ++i) + for (int i = 0; i < context->num_modules; ++i) { - result = context->modules[i]->ResolveAddress(addr); + net_addr_t *result = context->modules[i]->ResolveAddress(addr); if (result != NULL) { @@ -82,21 +79,19 @@ void NET_SendBroadcast(net_context_t *context, net_packet_t *packet) { int i; - for (i=0; inum_modules; ++i) + for (i = 0; i < context->num_modules; ++i) { context->modules[i]->SendPacket(&net_broadcast_addr, packet); } } -boolean NET_RecvPacket(net_context_t *context, - net_addr_t **addr, - net_packet_t **packet) +boolean NET_RecvPacket(net_context_t *context, net_addr_t **addr, net_packet_t **packet) { int i; - + // check all modules for new packets - - for (i=0; inum_modules; ++i) + + for (i = 0; i < context->num_modules; ++i) { if (context->modules[i]->RecvPacket(addr, packet)) { @@ -144,4 +139,3 @@ void NET_ReleaseAddress(net_addr_t *addr) addr->module->FreeAddress(addr); } } - diff --git a/src/net_loop.c b/src/net_loop.c index 65140fa3bc..5aadc62321 100644 --- a/src/net_loop.c +++ b/src/net_loop.c @@ -52,7 +52,7 @@ static void QueuePush(packet_queue_t *queue, net_packet_t *packet) if (new_tail == queue->head) { // queue is full - + return; } @@ -63,7 +63,7 @@ static void QueuePush(packet_queue_t *queue, net_packet_t *packet) static net_packet_t *QueuePop(packet_queue_t *queue) { net_packet_t *packet; - + if (queue->tail == queue->head) { // queue empty @@ -92,7 +92,8 @@ static boolean NET_CL_InitClient(void) static boolean NET_CL_InitServer(void) { - I_Error("NET_CL_InitServer: attempted to initialize client pipe end as a server!"); + I_Error("NET_CL_InitServer: attempted to initialize client pipe end as a " + "server!"); return false; } @@ -112,7 +113,7 @@ static boolean NET_CL_RecvPacket(net_addr_t **addr, net_packet_t **packet) *packet = popped; *addr = &client_addr; client_addr.module = &net_loop_client_module; - + return true; } @@ -142,15 +143,9 @@ static net_addr_t *NET_CL_ResolveAddress(const char *address) } } -net_module_t net_loop_client_module = -{ - NET_CL_InitClient, - NET_CL_InitServer, - NET_CL_SendPacket, - NET_CL_RecvPacket, - NET_CL_AddrToString, - NET_CL_FreeAddress, - NET_CL_ResolveAddress, +net_module_t net_loop_client_module = { + NET_CL_InitClient, NET_CL_InitServer, NET_CL_SendPacket, NET_CL_RecvPacket, + NET_CL_AddrToString, NET_CL_FreeAddress, NET_CL_ResolveAddress, }; //----------------------------------------------------------------------------- @@ -161,7 +156,8 @@ net_module_t net_loop_client_module = static boolean NET_SV_InitClient(void) { - I_Error("NET_SV_InitClient: attempted to initialize server pipe end as a client!"); + I_Error("NET_SV_InitClient: attempted to initialize server pipe end as a " + "client!"); return false; } @@ -188,7 +184,7 @@ static boolean NET_SV_RecvPacket(net_addr_t **addr, net_packet_t **packet) *packet = popped; *addr = &server_addr; server_addr.module = &net_loop_server_module; - + return true; } @@ -217,15 +213,7 @@ static net_addr_t *NET_SV_ResolveAddress(const char *address) } } -net_module_t net_loop_server_module = -{ - NET_SV_InitClient, - NET_SV_InitServer, - NET_SV_SendPacket, - NET_SV_RecvPacket, - NET_SV_AddrToString, - NET_SV_FreeAddress, - NET_SV_ResolveAddress, +net_module_t net_loop_server_module = { + NET_SV_InitClient, NET_SV_InitServer, NET_SV_SendPacket, NET_SV_RecvPacket, + NET_SV_AddrToString, NET_SV_FreeAddress, NET_SV_ResolveAddress, }; - - diff --git a/src/net_packet.c b/src/net_packet.c index 23bfda675e..f844be775b 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -28,7 +28,7 @@ net_packet_t *NET_NewPacket(int initial_size) net_packet_t *packet; packet = (net_packet_t *) Z_Malloc(sizeof(net_packet_t), PU_STATIC, 0); - + if (initial_size == 0) initial_size = 256; @@ -61,7 +61,7 @@ net_packet_t *NET_PacketDup(net_packet_t *packet) void NET_FreePacket(net_packet_t *packet) { //printf("%p: destroyed\n", packet); - + total_packet_memory -= sizeof(net_packet_t) + packet->alloced; Z_Free(packet->data); Z_Free(packet); @@ -114,7 +114,7 @@ boolean NET_ReadInt32(net_packet_t *packet, unsigned int *data) *data = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; packet->pos += 4; - + return true; } @@ -122,7 +122,7 @@ boolean NET_ReadInt32(net_packet_t *packet, unsigned int *data) boolean NET_ReadSInt8(net_packet_t *packet, signed int *data) { - if (NET_ReadInt8(packet,(unsigned int *) data)) + if (NET_ReadInt8(packet, (unsigned int *) data)) { if (*data & (1 << 7)) { @@ -154,24 +154,7 @@ boolean NET_ReadSInt16(net_packet_t *packet, signed int *data) } } -boolean NET_ReadSInt32(net_packet_t *packet, signed int *data) -{ - if (NET_ReadInt32(packet, (unsigned int *) data)) - { - if (*data & (1U << 31)) - { - *data &= ~(1U << 31); - *data -= (1U << 31); - } - return true; - } - else - { - return false; - } -} - -// Read a string from the packet. Returns NULL if a terminating +// Read a string from the packet. Returns NULL if a terminating // NUL character was not found before the end of the packet. char *NET_ReadString(net_packet_t *packet) @@ -195,11 +178,11 @@ char *NET_ReadString(net_packet_t *packet) } // packet->data[packet->pos] == '\0': We have reached a terminating - // NULL. Skip past this NULL and continue reading immediately + // NULL. Skip past this NULL and continue reading immediately // after it. ++packet->pos; - + return start; } @@ -241,7 +224,7 @@ static void NET_IncreasePacket(net_packet_t *packet) byte *newdata; total_packet_memory -= packet->alloced; - + packet->alloced *= 2; newdata = Z_Malloc(packet->alloced, PU_STATIC, 0); @@ -270,7 +253,7 @@ void NET_WriteInt8(net_packet_t *packet, unsigned int i) void NET_WriteInt16(net_packet_t *packet, unsigned int i) { byte *p; - + if (packet->len + 2 > packet->alloced) NET_IncreasePacket(packet); @@ -322,7 +305,3 @@ void NET_WriteString(net_packet_t *packet, const char *string) packet->len += string_size; } - - - - diff --git a/src/net_packet.h b/src/net_packet.h index 6beb44b2aa..8be917e889 100644 --- a/src/net_packet.h +++ b/src/net_packet.h @@ -30,7 +30,6 @@ boolean NET_ReadInt32(net_packet_t *packet, unsigned int *data); boolean NET_ReadSInt8(net_packet_t *packet, signed int *data); boolean NET_ReadSInt16(net_packet_t *packet, signed int *data); -boolean NET_ReadSInt32(net_packet_t *packet, signed int *data); char *NET_ReadString(net_packet_t *packet); char *NET_ReadSafeString(net_packet_t *packet); diff --git a/src/net_petname.c b/src/net_petname.c index db6600db6a..ec85b341ab 100644 --- a/src/net_petname.c +++ b/src/net_petname.c @@ -20,51 +20,17 @@ #include "doomtype.h" #include "m_misc.h" -static const char * const adjectives [] = { - "Grumpy", - "Ecstatic", - "Surly", - "Prepared", - "Crafty", - "Alert", - "Sluggish", - "Testy", - "Reluctant", - "Languid", - "Passive", - "Pacifist", - "Aggressive", - "Hostile", - "Bubbly", - "Giggly", - "Laughing", - "Crying", - "Frowning", - "Torpid", - "Lethargic", - "Manic", - "Patient", - "Protective", - "Philosophical", - "Enquiring", - "Debating", - "Furious", - "Laid-Back", - "Easy-Going", - "Cromulent", - "Excitable", - "Tired", - "Exhausted", - "Ruminating", - "Redundant", - "Sporty", - "Ginger", - "Scary", - "Posh", - "Baby", +static const char *const adjectives[] = { + "Grumpy", "Ecstatic", "Surly", "Prepared", "Crafty", "Alert", + "Sluggish", "Testy", "Reluctant", "Languid", "Passive", "Pacifist", + "Aggressive", "Hostile", "Bubbly", "Giggly", "Laughing", "Crying", + "Frowning", "Torpid", "Lethargic", "Manic", "Patient", "Protective", + "Philosophical", "Enquiring", "Debating", "Furious", "Laid-Back", "Easy-Going", + "Cromulent", "Excitable", "Tired", "Exhausted", "Ruminating", "Redundant", + "Sporty", "Ginger", "Scary", "Posh", "Baby", }; -static const char * const nouns[] = { +static const char *const nouns[] = { "Frad", // Doom "Cacodemon", @@ -103,7 +69,7 @@ static const char * const nouns[] = { */ static void InitPetName() { - srand((unsigned int)time(NULL)); + srand((unsigned int) time(NULL)); } char *NET_GetRandomPetName() diff --git a/src/net_query.c b/src/net_query.c index f6083cb3a1..76f5ce7ff5 100644 --- a/src/net_query.c +++ b/src/net_query.c @@ -86,8 +86,6 @@ static boolean query_loop_running = false; static boolean printed_header = false; static int last_query_time = 0; -static char *securedemo_start_message = NULL; - // Resolve the master server address. net_addr_t *NET_Query_ResolveMaster(net_context_t *context) @@ -137,8 +135,7 @@ void NET_Query_AddResponse(net_packet_t *packet) if (!registered_with_master) { - printf("Registered with master server at %s\n", - MASTER_SERVER_ADDRESS); + printf("Registered with master server at %s\n", MASTER_SERVER_ADDRESS); registered_with_master = true; } } @@ -146,8 +143,7 @@ void NET_Query_AddResponse(net_packet_t *packet) { // Always show rejections. - printf("Failed to register with master server at %s\n", - MASTER_SERVER_ADDRESS); + printf("Failed to register with master server at %s\n", MASTER_SERVER_ADDRESS); } got_master_response = true; @@ -277,8 +273,7 @@ static void NET_Query_SendQuery(net_addr_t *addr) } static void NET_Query_ParseResponse(net_addr_t *addr, net_packet_t *packet, - net_query_callback_t callback, - void *user_data) + net_query_callback_t callback, void *user_data) { unsigned int packet_type; net_querydata_t querydata; @@ -316,8 +311,7 @@ static void NET_Query_ParseResponse(net_addr_t *addr, net_packet_t *packet, // Not in broadcast mode, unexpected response that came out // of nowhere. Ignore. - if (broadcast_target == NULL || - broadcast_target->state != QUERY_TARGET_QUERIED) + if (broadcast_target == NULL || broadcast_target->state != QUERY_TARGET_QUERIED) { return; } @@ -346,13 +340,10 @@ static void NET_Query_ParseResponse(net_addr_t *addr, net_packet_t *packet, // Parse a response packet from the master server. -static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, - net_packet_t *packet) +static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, net_packet_t *packet) { unsigned int packet_type; query_target_t *target; - char *addr_str; - net_addr_t *addr; // Read the header. We are only interested in query responses. @@ -367,7 +358,7 @@ static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, for (;;) { - addr_str = NET_ReadString(packet); + char *addr_str = NET_ReadString(packet); if (addr_str == NULL) { @@ -377,7 +368,7 @@ static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, // Resolve address and add to targets list if it is not already // there. - addr = NET_ResolveAddress(query_context, addr_str); + net_addr_t *addr = NET_ResolveAddress(query_context, addr_str); if (addr != NULL) { GetTargetForAddr(addr, true); @@ -392,8 +383,7 @@ static void NET_Query_ParseMasterResponse(net_addr_t *master_addr, } static void NET_Query_ParsePacket(net_addr_t *addr, net_packet_t *packet, - net_query_callback_t callback, - void *user_data) + net_query_callback_t callback, void *user_data) { query_target_t *target; @@ -411,8 +401,7 @@ static void NET_Query_ParsePacket(net_addr_t *addr, net_packet_t *packet, } } -static void NET_Query_GetResponse(net_query_callback_t callback, - void *user_data) +static void NET_Query_GetResponse(net_query_callback_t callback, void *user_data) { net_addr_t *addr; net_packet_t *packet; @@ -707,7 +696,7 @@ static const char *GameDescription(GameMode_t mode, GameMission_t mission) switch (mission) { case doom: - return "regdoom"; + return "regdoom"; default: return "?"; } @@ -854,126 +843,3 @@ net_addr_t *NET_FindLANServer(void) FreeTargets(); return result; } - -// Block until a packet of the given type is received from the given -// address. - -static net_packet_t *BlockForPacket(net_addr_t *addr, unsigned int packet_type, - unsigned int timeout_ms) -{ - net_packet_t *packet; - net_addr_t *packet_src; - unsigned int read_packet_type; - unsigned int start_time; - - start_time = I_GetTimeMS(); - - while (I_GetTimeMS() < start_time + timeout_ms) - { - if (!NET_RecvPacket(query_context, &packet_src, &packet)) - { - I_Sleep(20); - continue; - } - - // Caller doesn't need additional reference. - NET_ReleaseAddress(packet_src); - - if (packet_src == addr && NET_ReadInt16(packet, &read_packet_type) && - packet_type == read_packet_type) - { - return packet; - } - - NET_FreePacket(packet); - } - - // Timeout - no response. - - return NULL; -} - -// Query master server for secure demo start seed value. - -boolean NET_StartSecureDemo(prng_seed_t seed) -{ - net_packet_t *request, *response; - net_addr_t *master_addr; - char *signature; - boolean result; - - NET_Query_Init(); - master_addr = NET_Query_ResolveMaster(query_context); - - // Send request packet to master server. - - request = NET_NewPacket(10); - NET_WriteInt16(request, NET_MASTER_PACKET_TYPE_SIGN_START); - NET_SendPacket(master_addr, request); - NET_FreePacket(request); - - // Block for response and read contents. - // The signed start message will be saved for later. - - response = - BlockForPacket(master_addr, NET_MASTER_PACKET_TYPE_SIGN_START_RESPONSE, - SIGNATURE_TIMEOUT_SECS * 1000); - - result = false; - - if (response != NULL) - { - if (NET_ReadPRNGSeed(response, seed)) - { - signature = NET_ReadString(response); - - if (signature != NULL) - { - securedemo_start_message = M_StringDuplicate(signature); - result = true; - } - } - - NET_FreePacket(response); - } - - return result; -} - -// Query master server for secure demo end signature. - -char *NET_EndSecureDemo(sha1_digest_t demo_hash) -{ - net_packet_t *request, *response; - net_addr_t *master_addr; - char *signature; - - master_addr = NET_Query_ResolveMaster(query_context); - - // Construct end request and send to master server. - - request = NET_NewPacket(10); - NET_WriteInt16(request, NET_MASTER_PACKET_TYPE_SIGN_END); - NET_WriteSHA1Sum(request, demo_hash); - NET_WriteString(request, securedemo_start_message); - NET_SendPacket(master_addr, request); - NET_FreePacket(request); - - // Block for response. The response packet simply contains a string - // with the ASCII signature. - - response = - BlockForPacket(master_addr, NET_MASTER_PACKET_TYPE_SIGN_END_RESPONSE, - SIGNATURE_TIMEOUT_SECS * 1000); - - if (response == NULL) - { - return NULL; - } - - signature = NET_ReadString(response); - - NET_FreePacket(response); - - return signature; -} diff --git a/src/net_sdl.c b/src/net_sdl.c index 2965f42340..c309b2d384 100644 --- a/src/net_sdl.c +++ b/src/net_sdl.c @@ -61,15 +61,13 @@ static void NET_SDL_InitAddrTable(void) { addr_table_size = 16; - addr_table = Z_Malloc(sizeof(addrpair_t *) * addr_table_size, - PU_STATIC, 0); + addr_table = Z_Malloc(sizeof(addrpair_t *) * addr_table_size, PU_STATIC, 0); memset(addr_table, 0, sizeof(addrpair_t *) * addr_table_size); } static boolean AddressesEqual(IPaddress *a, IPaddress *b) { - return a->host == b->host - && a->port == b->port; + return a->host == b->host && a->port == b->port; } // Finds an address by searching the table. If the address is not found, @@ -86,10 +84,9 @@ static net_addr_t *NET_SDL_FindAddress(IPaddress *addr) NET_SDL_InitAddrTable(); } - for (i=0; isdl_addr)) + if (addr_table[i] != NULL && AddressesEqual(addr, &addr_table[i]->sdl_addr)) { return &addr_table[i]->net_addr; } @@ -111,23 +108,22 @@ static net_addr_t *NET_SDL_FindAddress(IPaddress *addr) // in the new block of memory empty_entry = addr_table_size; - - // allocate a new array twice the size, init to 0 and copy + + // allocate a new array twice the size, init to 0 and copy // the existing table in. replace the old table. new_addr_table_size = addr_table_size * 2; - new_addr_table = Z_Malloc(sizeof(addrpair_t *) * new_addr_table_size, - PU_STATIC, 0); + new_addr_table = + Z_Malloc(sizeof(addrpair_t *) * new_addr_table_size, PU_STATIC, 0); memset(new_addr_table, 0, sizeof(addrpair_t *) * new_addr_table_size); - memcpy(new_addr_table, addr_table, - sizeof(addrpair_t *) * addr_table_size); + memcpy(new_addr_table, addr_table, sizeof(addrpair_t *) * addr_table_size); Z_Free(addr_table); addr_table = new_addr_table; addr_table_size = new_addr_table_size; } // Add a new entry - + new_entry = Z_Malloc(sizeof(addrpair_t), PU_STATIC, 0); new_entry->sdl_addr = *addr; @@ -143,8 +139,8 @@ static net_addr_t *NET_SDL_FindAddress(IPaddress *addr) static void NET_SDL_FreeAddress(net_addr_t *addr) { int i; - - for (i=0; inet_addr) { @@ -168,13 +164,13 @@ static boolean NET_SDL_InitClient(void) // @category net // @arg // - // Use the specified UDP port for communications, instead of + // Use the specified UDP port for communications, instead of // the default (2342). // p = M_CheckParmWithArgs("-port", 1); if (p > 0) - port = atoi(myargv[p+1]); + port = atoi(myargv[p + 1]); SDLNet_Init(); @@ -184,7 +180,7 @@ static boolean NET_SDL_InitClient(void) { I_Error("NET_SDL_InitClient: Unable to open a socket!"); } - + recvpacket = SDLNet_AllocPacket(1500); #ifdef DROP_PACKETS @@ -205,7 +201,7 @@ static boolean NET_SDL_InitServer(void) p = M_CheckParmWithArgs("-port", 1); if (p > 0) - port = atoi(myargv[p+1]); + port = atoi(myargv[p + 1]); SDLNet_Init(); @@ -230,7 +226,7 @@ static void NET_SDL_SendPacket(net_addr_t *addr, net_packet_t *packet) { UDPpacket sdl_packet; IPaddress ip; - + if (addr == &net_broadcast_addr) { SDLNet_ResolveHost(&ip, NULL, port); @@ -269,8 +265,7 @@ static void NET_SDL_SendPacket(net_addr_t *addr, net_packet_t *packet) if (!SDLNet_UDP_Send(udpsocket, -1, &sdl_packet)) { - I_Error("NET_SDL_SendPacket: Error transmitting packet: %s", - SDLNet_GetError()); + I_Error("NET_SDL_SendPacket: Error transmitting packet: %s", SDLNet_GetError()); } } @@ -282,8 +277,7 @@ static boolean NET_SDL_RecvPacket(net_addr_t **addr, net_packet_t **packet) if (result < 0) { - I_Error("NET_SDL_RecvPacket: Error receiving packet: %s", - SDLNet_GetError()); + I_Error("NET_SDL_RecvPacket: Error receiving packet: %s", SDLNet_GetError()); } // no packets received @@ -314,9 +308,8 @@ void NET_SDL_AddrToString(net_addr_t *addr, char *buffer, int buffer_len) host = SDLNet_Read32(&ip->host); port = SDLNet_Read16(&ip->port); - M_snprintf(buffer, buffer_len, "%i.%i.%i.%i", - (host >> 24) & 0xff, (host >> 16) & 0xff, - (host >> 8) & 0xff, host & 0xff); + M_snprintf(buffer, buffer_len, "%i.%i.%i.%i", (host >> 24) & 0xff, + (host >> 16) & 0xff, (host >> 8) & 0xff, host & 0xff); // If we are using the default port we just need to show the IP address, // but otherwise we need to include the port. This is important because @@ -343,14 +336,14 @@ net_addr_t *NET_SDL_ResolveAddress(const char *address) addr_hostname = M_StringDuplicate(address); if (colon != NULL) { - addr_hostname[colon - address] = '\0'; - addr_port = atoi(colon + 1); + addr_hostname[colon - address] = '\0'; + addr_port = atoi(colon + 1); } else { - addr_port = port; + addr_port = port; } - + result = SDLNet_ResolveHost(&ip, addr_hostname, addr_port); free(addr_hostname); @@ -369,15 +362,9 @@ net_addr_t *NET_SDL_ResolveAddress(const char *address) // Complete module -net_module_t net_sdl_module = -{ - NET_SDL_InitClient, - NET_SDL_InitServer, - NET_SDL_SendPacket, - NET_SDL_RecvPacket, - NET_SDL_AddrToString, - NET_SDL_FreeAddress, - NET_SDL_ResolveAddress, +net_module_t net_sdl_module = { + NET_SDL_InitClient, NET_SDL_InitServer, NET_SDL_SendPacket, NET_SDL_RecvPacket, + NET_SDL_AddrToString, NET_SDL_FreeAddress, NET_SDL_ResolveAddress, }; @@ -411,7 +398,6 @@ static boolean NET_NULL_RecvPacket(net_addr_t **addr, net_packet_t **packet) static void NET_NULL_AddrToString(net_addr_t *addr, char *buffer, int buffer_len) { - } @@ -426,14 +412,9 @@ net_addr_t *NET_NULL_ResolveAddress(const char *address) } -net_module_t net_sdl_module = -{ - NET_NULL_InitClient, - NET_NULL_InitServer, - NET_NULL_SendPacket, - NET_NULL_RecvPacket, - NET_NULL_AddrToString, - NET_NULL_FreeAddress, +net_module_t net_sdl_module = { + NET_NULL_InitClient, NET_NULL_InitServer, NET_NULL_SendPacket, + NET_NULL_RecvPacket, NET_NULL_AddrToString, NET_NULL_FreeAddress, NET_NULL_ResolveAddress, }; diff --git a/src/net_server.c b/src/net_server.c index 15456dfc5a..34c69e66f9 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -169,8 +169,7 @@ static boolean ClientConnected(net_client_t *client) // Check that the client is properly connected: ie. not in the // process of connecting or disconnecting - return client->active && - client->connection.state == NET_CONN_STATE_CONNECTED; + return client->active && client->connection.state == NET_CONN_STATE_CONNECTED; } // Send a message to be displayed on a client's console @@ -187,8 +186,7 @@ static void NET_SV_SendConsoleMessage(net_client_t *client, const char *s, ...) M_vsnprintf(buf, sizeof(buf), s, args); va_end(args); - packet = NET_Conn_NewReliable(&client->connection, - NET_PACKET_TYPE_CONSOLE_MESSAGE); + packet = NET_Conn_NewReliable(&client->connection, NET_PACKET_TYPE_CONSOLE_MESSAGE); NET_WriteString(packet, buf); } @@ -279,8 +277,7 @@ static int NET_SV_NumReadyPlayers(void) for (i = 0; i < MAXNETNODES; ++i) { - if (ClientConnected(&clients[i]) && !clients[i].drone && - clients[i].ready) + if (ClientConnected(&clients[i]) && !clients[i].drone && clients[i].ready) { ++result; } @@ -402,16 +399,14 @@ static void NET_SV_SendWaitingData(net_client_t *client) controller = client; } - memcpy(&wait_data.wad_sha1sum, &controller->wad_sha1sum, - sizeof(sha1_digest_t)); + memcpy(&wait_data.wad_sha1sum, &controller->wad_sha1sum, sizeof(sha1_digest_t)); // set name and address of each player: for (i = 0; i < wait_data.num_players; ++i) { - M_StringCopy(wait_data.player_names[i], sv_players[i]->name, + M_StringCopy(wait_data.player_names[i], sv_players[i]->name, MAXPLAYERNAME); + M_StringCopy(wait_data.player_addrs[i], NET_AddrToString(sv_players[i]->addr), MAXPLAYERNAME); - M_StringCopy(wait_data.player_addrs[i], - NET_AddrToString(sv_players[i]->addr), MAXPLAYERNAME); } // Construct packet: @@ -500,8 +495,7 @@ static void NET_SV_AdvanceWindow(void) // Advance the window - memmove(recvwindow, recvwindow + 1, - sizeof(*recvwindow) * (BACKUPTICS - 1)); + memmove(recvwindow, recvwindow + 1, sizeof(*recvwindow) * (BACKUPTICS - 1)); memset(&recvwindow[BACKUPTICS - 1], 0, sizeof(*recvwindow)); ++recvwindow_start; NET_Log("server: advanced receive window to %d", recvwindow_start); @@ -568,8 +562,7 @@ static void NET_SV_InitNewClient(net_client_t *client, net_addr_t *addr, // parse a SYN from a client(initiating a connection) -static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, - net_addr_t *addr) +static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, net_addr_t *addr) { unsigned int magic; net_connect_data_t data; @@ -578,7 +571,6 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, char *player_name; char *client_version; int num_players; - int i; NET_Log("server: processing SYN packet"); @@ -597,9 +589,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, case NET_OLD_MAGIC_NUMBER: NET_Log("server: error: client using old magic number: %d", magic); NET_SV_SendReject( - addr, - "You are using an old client version that is not supported by " - "this server. This server is running " PACKAGE_STRING "."); + addr, "You are using an old client version that is not supported by " + "this server. This server is running " PACKAGE_STRING "."); return; default: @@ -667,8 +658,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, { NET_Log("server: error: not in waiting launch state, server_state=%d", server_state); - NET_SV_SendReject(addr, - "Server is not currently accepting connections"); + NET_SV_SendReject(addr, "Server is not currently accepting connections"); return; } @@ -694,8 +684,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, { sv_gamemode = data.gamemode; sv_gamemission = data.gamemission; - NET_Log("server: new game, mode=%d, mission=%d", sv_gamemode, - sv_gamemission); + NET_Log("server: new game, mode=%d, mission=%d", sv_gamemode, sv_gamemission); } // Check the connecting client is playing the same game as all @@ -703,8 +692,8 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, if (data.gamemode != sv_gamemode || data.gamemission != sv_gamemission) { char msg[128]; - NET_Log("server: wrong mode/mission, %d != %d || %d != %d", - data.gamemode, sv_gamemode, data.gamemission, sv_gamemission); + NET_Log("server: wrong mode/mission, %d != %d || %d != %d", data.gamemode, + sv_gamemode, data.gamemission, sv_gamemission); M_snprintf(msg, sizeof(msg), "Game mismatch: server and client version do not match."); @@ -717,7 +706,7 @@ static void NET_SV_ParseSYN(net_packet_t *packet, net_client_t *client, { // find a slot, or return if none found - for (i = 0; i < MAXNETNODES; ++i) + for (int i = 0; i < MAXNETNODES; ++i) { if (!clients[i].active) { @@ -781,8 +770,8 @@ static void NET_SV_ParseLaunch(net_packet_t *packet, net_client_t *client) if (client != NET_SV_Controller()) { - NET_Log("server: error: this client isn't the controller, %d != %d", - client, NET_SV_Controller()); + NET_Log("server: error: this client isn't the controller, %d != %d", client, + NET_SV_Controller()); return; } @@ -790,8 +779,7 @@ static void NET_SV_ParseLaunch(net_packet_t *packet, net_client_t *client) if (server_state != SERVER_WAITING_LAUNCH) { - NET_Log("server: error: not in waiting launch state, state=%d", - server_state); + NET_Log("server: error: not in waiting launch state, state=%d", server_state); return; } @@ -805,8 +793,8 @@ static void NET_SV_ParseLaunch(net_packet_t *packet, net_client_t *client) if (!ClientConnected(&clients[i])) continue; - launchpacket = NET_Conn_NewReliable(&clients[i].connection, - NET_PACKET_TYPE_LAUNCH); + launchpacket = + NET_Conn_NewReliable(&clients[i].connection, NET_PACKET_TYPE_LAUNCH); NET_WriteInt8(launchpacket, num_players); } @@ -854,8 +842,8 @@ static void StartGame(void) clients[i].last_gamedata_time = nowtime; - startpacket = NET_Conn_NewReliable(&clients[i].connection, - NET_PACKET_TYPE_GAMESTART); + startpacket = + NET_Conn_NewReliable(&clients[i].connection, NET_PACKET_TYPE_GAMESTART); sv_settings.consoleplayer = clients[i].player_number; @@ -971,12 +959,10 @@ static void NET_SV_SendResendRequest(net_client_t *client, int start, int end) { net_packet_t *packet; net_client_recv_t *recvobj; - int i; unsigned int nowtime; - int index; - NET_Log("server: send resend to %s for tics %d-%d", - NET_AddrToString(client->addr), start, end); + NET_Log("server: send resend to %s for tics %d-%d", NET_AddrToString(client->addr), + start, end); packet = NET_NewPacket(20); @@ -991,9 +977,9 @@ static void NET_SV_SendResendRequest(net_client_t *client, int start, int end) nowtime = I_GetTimeMS(); - for (i = start; i <= end; ++i) + for (int i = start; i <= end; ++i) { - index = i - recvwindow_start; + int index = i - recvwindow_start; if (index >= BACKUPTICS) { @@ -1049,8 +1035,7 @@ static void NET_SV_CheckResends(net_client_t *client) { // End of a run of resend tics NET_Log("server: resend request to %s timed out for %d-%d (%d)", - NET_AddrToString(client->addr), - recvwindow_start + resend_start, + NET_AddrToString(client->addr), recvwindow_start + resend_start, recvwindow_start + resend_end, &recvwindow[resend_start][player].resend_time); NET_SV_SendResendRequest(client, recvwindow_start + resend_start, @@ -1087,8 +1072,7 @@ static void NET_SV_ParseGameData(net_packet_t *packet, net_client_t *client) if (server_state != SERVER_IN_GAME) { - NET_Log("server: error: not in game state: server_state=%d", - server_state); + NET_Log("server: error: not in game state: server_state=%d", server_state); return; } @@ -1109,8 +1093,8 @@ static void NET_SV_ParseGameData(net_packet_t *packet, net_client_t *client) return; } - NET_Log("server: got game data, seq=%d, num_tics=%d, ackseq=%d", seq, - num_tics, ackseq); + NET_Log("server: got game data, seq=%d, num_tics=%d, ackseq=%d", seq, num_tics, + ackseq); // Get the current time nowtime = I_GetTimeMS(); @@ -1201,8 +1185,7 @@ static void NET_SV_ParseGameData(net_packet_t *packet, net_client_t *client) if (resend_start < resend_end) { NET_Log("server: request resend for %d-%d before %d", - recvwindow_start + resend_start, - recvwindow_start + resend_end - 1, seq); + recvwindow_start + resend_start, recvwindow_start + resend_end - 1, seq); NET_SV_SendResendRequest(client, recvwindow_start + resend_start, recvwindow_start + resend_end - 1); } @@ -1216,8 +1199,7 @@ static void NET_SV_ParseGameDataACK(net_packet_t *packet, net_client_t *client) if (server_state != SERVER_IN_GAME) { - NET_Log("server: error: not in game state, server_state=%d", - server_state); + NET_Log("server: error: not in game state, server_state=%d", server_state); return; } @@ -1242,8 +1224,7 @@ static void NET_SV_ParseGameDataACK(net_packet_t *packet, net_client_t *client) } } -static void NET_SV_SendTics(net_client_t *client, unsigned int start, - unsigned int end) +static void NET_SV_SendTics(net_client_t *client, unsigned int start, unsigned int end) { net_packet_t *packet; unsigned int i; @@ -1284,8 +1265,7 @@ static void NET_SV_SendTics(net_client_t *client, unsigned int start, // Parse a retransmission request from a client -static void NET_SV_ParseResendRequest(net_packet_t *packet, - net_client_t *client) +static void NET_SV_ParseResendRequest(net_packet_t *packet, net_client_t *client) { unsigned int start, last; unsigned int num_tics; @@ -1650,7 +1630,6 @@ static void NET_SV_PumpSendQueue(net_client_t *client) void NET_SV_CheckDeadlock(net_client_t *client) { int nowtime; - int i; // Don't expect game data from clients. @@ -1670,6 +1649,7 @@ void NET_SV_CheckDeadlock(net_client_t *client) // Search the receive window for the first tic we are expecting // from this player. + int i; for (i = 0; i < BACKUPTICS; ++i) { @@ -1707,12 +1687,10 @@ void NET_SV_CheckDeadlock(net_client_t *client) static void NET_SV_GameEnded(void) { - int i; - server_state = SERVER_WAITING_LAUNCH; sv_gamemode = registered; - for (i = 0; i < MAXNETNODES; ++i) + for (int i = 0; i < MAXNETNODES; ++i) { if (clients[i].active) { @@ -1732,10 +1710,8 @@ static void NET_SV_RunClient(net_client_t *client) if (client->connection.state == NET_CONN_STATE_DISCONNECTED && client->connection.disconnect_reason == NET_DISCONNECT_TIMEOUT) { - NET_Log("server: client at %s timed out", - NET_AddrToString(client->addr)); - NET_SV_BroadcastMessage("Client '%s' timed out and disconnected", - client->name); + NET_Log("server: client at %s timed out", NET_AddrToString(client->addr)); + NET_SV_BroadcastMessage("Client '%s' timed out and disconnected", client->name); } // Is this client disconnected? @@ -1783,8 +1759,7 @@ static void NET_SV_RunClient(net_client_t *client) // Send information once every second - if (client->last_send_time < 0 || - I_GetTimeMS() - client->last_send_time > 1000) + if (client->last_send_time < 0 || I_GetTimeMS() - client->last_send_time > 1000) { NET_SV_SendWaitingData(client); client->last_send_time = I_GetTimeMS(); @@ -1994,8 +1969,7 @@ void NET_SV_Shutdown(void) if (I_GetTimeMS() - start_time > 5000) { running = false; - fprintf(stderr, - "SV: Timed out waiting for clients to disconnect.\n"); + fprintf(stderr, "SV: Timed out waiting for clients to disconnect.\n"); } // Run the client code in case this is a loopback client. diff --git a/src/net_structrw.c b/src/net_structrw.c index f15cee3cba..ed2ea2e36e 100644 --- a/src/net_structrw.c +++ b/src/net_structrw.c @@ -31,7 +31,7 @@ static struct net_protocol_t protocol; const char *name; } protocol_names[] = { - {NET_PROTOCOL_CHOCOLATE_DOOM_0, "CHOCOLATE_DOOM_0"}, + {NET_PROTOCOL_MINDOOM_0, "MINDOOM_0"}, }; void NET_WriteConnectData(net_packet_t *packet, net_connect_data_t *data) @@ -46,12 +46,12 @@ void NET_WriteConnectData(net_packet_t *packet, net_connect_data_t *data) boolean NET_ReadConnectData(net_packet_t *packet, net_connect_data_t *data) { - return NET_ReadInt8(packet, (unsigned int *) &data->gamemode) - && NET_ReadInt8(packet, (unsigned int *) &data->gamemission) - && NET_ReadInt8(packet, (unsigned int *) &data->lowres_turn) - && NET_ReadInt8(packet, (unsigned int *) &data->drone) - && NET_ReadInt8(packet, (unsigned int *) &data->max_players) - && NET_ReadSHA1Sum(packet, data->wad_sha1sum); + return NET_ReadInt8(packet, (unsigned int *) &data->gamemode) && + NET_ReadInt8(packet, (unsigned int *) &data->gamemission) && + NET_ReadInt8(packet, (unsigned int *) &data->lowres_turn) && + NET_ReadInt8(packet, (unsigned int *) &data->drone) && + NET_ReadInt8(packet, (unsigned int *) &data->max_players) && + NET_ReadSHA1Sum(packet, data->wad_sha1sum); } void NET_WriteSettings(net_packet_t *packet, net_gamesettings_t *settings) @@ -79,23 +79,23 @@ boolean NET_ReadSettings(net_packet_t *packet, net_gamesettings_t *settings) { boolean success; - success = NET_ReadInt8(packet, (unsigned int *) &settings->ticdup) - && NET_ReadInt8(packet, (unsigned int *) &settings->extratics) - && NET_ReadInt8(packet, (unsigned int *) &settings->deathmatch) - && NET_ReadInt8(packet, (unsigned int *) &settings->nomonsters) - && NET_ReadInt8(packet, (unsigned int *) &settings->fast_monsters) - && NET_ReadInt8(packet, (unsigned int *) &settings->respawn_monsters) - && NET_ReadInt8(packet, (unsigned int *) &settings->episode) - && NET_ReadInt8(packet, (unsigned int *) &settings->map) - && NET_ReadSInt8(packet, &settings->skill) - && NET_ReadInt8(packet, (unsigned int *) &settings->gameversion) - && NET_ReadInt8(packet, (unsigned int *) &settings->lowres_turn) - && NET_ReadInt8(packet, (unsigned int *) &settings->new_sync) - && NET_ReadInt32(packet, (unsigned int *) &settings->timelimit) - && NET_ReadSInt8(packet, (signed int *) &settings->loadgame) - && NET_ReadInt8(packet, (unsigned int *) &settings->random) - && NET_ReadInt8(packet, (unsigned int *) &settings->num_players) - && NET_ReadSInt8(packet, (signed int *) &settings->consoleplayer); + success = NET_ReadInt8(packet, (unsigned int *) &settings->ticdup) && + NET_ReadInt8(packet, (unsigned int *) &settings->extratics) && + NET_ReadInt8(packet, (unsigned int *) &settings->deathmatch) && + NET_ReadInt8(packet, (unsigned int *) &settings->nomonsters) && + NET_ReadInt8(packet, (unsigned int *) &settings->fast_monsters) && + NET_ReadInt8(packet, (unsigned int *) &settings->respawn_monsters) && + NET_ReadInt8(packet, (unsigned int *) &settings->episode) && + NET_ReadInt8(packet, (unsigned int *) &settings->map) && + NET_ReadSInt8(packet, &settings->skill) && + NET_ReadInt8(packet, (unsigned int *) &settings->gameversion) && + NET_ReadInt8(packet, (unsigned int *) &settings->lowres_turn) && + NET_ReadInt8(packet, (unsigned int *) &settings->new_sync) && + NET_ReadInt32(packet, (unsigned int *) &settings->timelimit) && + NET_ReadSInt8(packet, (signed int *) &settings->loadgame) && + NET_ReadInt8(packet, (unsigned int *) &settings->random) && + NET_ReadInt8(packet, (unsigned int *) &settings->num_players) && + NET_ReadSInt8(packet, (signed int *) &settings->consoleplayer); if (!success) { @@ -112,12 +112,12 @@ boolean NET_ReadQueryData(net_packet_t *packet, net_querydata_t *query) query->version = NET_ReadSafeString(packet); - success = query->version != NULL - && NET_ReadInt8(packet, (unsigned int *) &query->server_state) - && NET_ReadInt8(packet, (unsigned int *) &query->num_players) - && NET_ReadInt8(packet, (unsigned int *) &query->max_players) - && NET_ReadInt8(packet, (unsigned int *) &query->gamemode) - && NET_ReadInt8(packet, (unsigned int *) &query->gamemission); + success = query->version != NULL && + NET_ReadInt8(packet, (unsigned int *) &query->server_state) && + NET_ReadInt8(packet, (unsigned int *) &query->num_players) && + NET_ReadInt8(packet, (unsigned int *) &query->max_players) && + NET_ReadInt8(packet, (unsigned int *) &query->gamemode) && + NET_ReadInt8(packet, (unsigned int *) &query->gamemission); if (!success) { @@ -149,8 +149,7 @@ void NET_WriteQueryData(net_packet_t *packet, net_querydata_t *query) NET_WriteProtocolList(packet); } -void NET_WriteTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, - boolean lowres_turn) +void NET_WriteTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, boolean lowres_turn) { // Header @@ -191,8 +190,7 @@ void NET_WriteTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, } } -boolean NET_ReadTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, - boolean lowres_turn) +boolean NET_ReadTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, boolean lowres_turn) { unsigned int val; signed int sval; @@ -201,7 +199,7 @@ boolean NET_ReadTiccmdDiff(net_packet_t *packet, net_ticdiff_t *diff, if (!NET_ReadInt8(packet, &diff->diff)) return false; - + // Read fields if (diff->diff & NET_TICDIFF_FORWARD) @@ -356,11 +354,12 @@ void NET_TiccmdPatch(ticcmd_t *src, net_ticdiff_t *diff, ticcmd_t *dest) } } -// +// // net_full_ticcmd_t -// +// -boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean lowres_turn) +boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, + boolean lowres_turn) { unsigned int bitfield; int i; @@ -378,15 +377,15 @@ boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean { return false; } - - for (i=0; iplayeringame[i] = (bitfield & (1 << i)) != 0; } - + // Read cmds - for (i=0; iplayeringame[i]) { @@ -400,7 +399,8 @@ boolean NET_ReadFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean return true; } -void NET_WriteFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean lowres_turn) +void NET_WriteFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, + boolean lowres_turn) { unsigned int bitfield; int i; @@ -413,20 +413,20 @@ void NET_WriteFullTiccmd(net_packet_t *packet, net_full_ticcmd_t *cmd, boolean l // in this ticcmd bitfield = 0; - - for (i=0; iplayeringame[i]) { bitfield |= 1 << i; } } - + NET_WriteInt8(packet, bitfield); // Write player ticcmds - for (i=0; iplayeringame[i]) { @@ -458,21 +458,20 @@ void NET_WriteWaitData(net_packet_t *packet, net_waitdata_t *data) boolean NET_ReadWaitData(net_packet_t *packet, net_waitdata_t *data) { int i; - char *s; - if (!NET_ReadInt8(packet, (unsigned int *) &data->num_players) - || !NET_ReadInt8(packet, (unsigned int *) &data->num_drones) - || !NET_ReadInt8(packet, (unsigned int *) &data->ready_players) - || !NET_ReadInt8(packet, (unsigned int *) &data->max_players) - || !NET_ReadInt8(packet, (unsigned int *) &data->is_controller) - || !NET_ReadSInt8(packet, &data->consoleplayer)) + if (!NET_ReadInt8(packet, (unsigned int *) &data->num_players) || + !NET_ReadInt8(packet, (unsigned int *) &data->num_drones) || + !NET_ReadInt8(packet, (unsigned int *) &data->ready_players) || + !NET_ReadInt8(packet, (unsigned int *) &data->max_players) || + !NET_ReadInt8(packet, (unsigned int *) &data->is_controller) || + !NET_ReadSInt8(packet, &data->consoleplayer)) { return false; } for (i = 0; i < data->num_players && i < NET_MAXPLAYERS; ++i) { - s = NET_ReadString(packet); + char *s = NET_ReadString(packet); if (s == NULL || strlen(s) >= MAXPLAYERNAME) { @@ -499,7 +498,7 @@ static boolean NET_ReadBlob(net_packet_t *packet, uint8_t *buf, size_t len) unsigned int b; int i; - for (i=0; i> (32-(n))) ) +#define rol(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) -#define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \ - ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \ - , (x[i&0x0f] = rol(tm,1)) ) +#define M(i) \ + (tm = x[i & 0x0f] ^ x[(i - 14) & 0x0f] ^ x[(i - 8) & 0x0f] ^ x[(i - 3) & 0x0f], \ + (x[i & 0x0f] = rol(tm, 1))) -#define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \ - + f( b, c, d ) \ - + k \ - + m; \ - b = rol( b, 30 ); \ - } while(0) - R( a, b, c, d, e, F1, K1, x[ 0] ); - R( e, a, b, c, d, F1, K1, x[ 1] ); - R( d, e, a, b, c, F1, K1, x[ 2] ); - R( c, d, e, a, b, F1, K1, x[ 3] ); - R( b, c, d, e, a, F1, K1, x[ 4] ); - R( a, b, c, d, e, F1, K1, x[ 5] ); - R( e, a, b, c, d, F1, K1, x[ 6] ); - R( d, e, a, b, c, F1, K1, x[ 7] ); - R( c, d, e, a, b, F1, K1, x[ 8] ); - R( b, c, d, e, a, F1, K1, x[ 9] ); - R( a, b, c, d, e, F1, K1, x[10] ); - R( e, a, b, c, d, F1, K1, x[11] ); - R( d, e, a, b, c, F1, K1, x[12] ); - R( c, d, e, a, b, F1, K1, x[13] ); - R( b, c, d, e, a, F1, K1, x[14] ); - R( a, b, c, d, e, F1, K1, x[15] ); - R( e, a, b, c, d, F1, K1, M(16) ); - R( d, e, a, b, c, F1, K1, M(17) ); - R( c, d, e, a, b, F1, K1, M(18) ); - R( b, c, d, e, a, F1, K1, M(19) ); - R( a, b, c, d, e, F2, K2, M(20) ); - R( e, a, b, c, d, F2, K2, M(21) ); - R( d, e, a, b, c, F2, K2, M(22) ); - R( c, d, e, a, b, F2, K2, M(23) ); - R( b, c, d, e, a, F2, K2, M(24) ); - R( a, b, c, d, e, F2, K2, M(25) ); - R( e, a, b, c, d, F2, K2, M(26) ); - R( d, e, a, b, c, F2, K2, M(27) ); - R( c, d, e, a, b, F2, K2, M(28) ); - R( b, c, d, e, a, F2, K2, M(29) ); - R( a, b, c, d, e, F2, K2, M(30) ); - R( e, a, b, c, d, F2, K2, M(31) ); - R( d, e, a, b, c, F2, K2, M(32) ); - R( c, d, e, a, b, F2, K2, M(33) ); - R( b, c, d, e, a, F2, K2, M(34) ); - R( a, b, c, d, e, F2, K2, M(35) ); - R( e, a, b, c, d, F2, K2, M(36) ); - R( d, e, a, b, c, F2, K2, M(37) ); - R( c, d, e, a, b, F2, K2, M(38) ); - R( b, c, d, e, a, F2, K2, M(39) ); - R( a, b, c, d, e, F3, K3, M(40) ); - R( e, a, b, c, d, F3, K3, M(41) ); - R( d, e, a, b, c, F3, K3, M(42) ); - R( c, d, e, a, b, F3, K3, M(43) ); - R( b, c, d, e, a, F3, K3, M(44) ); - R( a, b, c, d, e, F3, K3, M(45) ); - R( e, a, b, c, d, F3, K3, M(46) ); - R( d, e, a, b, c, F3, K3, M(47) ); - R( c, d, e, a, b, F3, K3, M(48) ); - R( b, c, d, e, a, F3, K3, M(49) ); - R( a, b, c, d, e, F3, K3, M(50) ); - R( e, a, b, c, d, F3, K3, M(51) ); - R( d, e, a, b, c, F3, K3, M(52) ); - R( c, d, e, a, b, F3, K3, M(53) ); - R( b, c, d, e, a, F3, K3, M(54) ); - R( a, b, c, d, e, F3, K3, M(55) ); - R( e, a, b, c, d, F3, K3, M(56) ); - R( d, e, a, b, c, F3, K3, M(57) ); - R( c, d, e, a, b, F3, K3, M(58) ); - R( b, c, d, e, a, F3, K3, M(59) ); - R( a, b, c, d, e, F4, K4, M(60) ); - R( e, a, b, c, d, F4, K4, M(61) ); - R( d, e, a, b, c, F4, K4, M(62) ); - R( c, d, e, a, b, F4, K4, M(63) ); - R( b, c, d, e, a, F4, K4, M(64) ); - R( a, b, c, d, e, F4, K4, M(65) ); - R( e, a, b, c, d, F4, K4, M(66) ); - R( d, e, a, b, c, F4, K4, M(67) ); - R( c, d, e, a, b, F4, K4, M(68) ); - R( b, c, d, e, a, F4, K4, M(69) ); - R( a, b, c, d, e, F4, K4, M(70) ); - R( e, a, b, c, d, F4, K4, M(71) ); - R( d, e, a, b, c, F4, K4, M(72) ); - R( c, d, e, a, b, F4, K4, M(73) ); - R( b, c, d, e, a, F4, K4, M(74) ); - R( a, b, c, d, e, F4, K4, M(75) ); - R( e, a, b, c, d, F4, K4, M(76) ); - R( d, e, a, b, c, F4, K4, M(77) ); - R( c, d, e, a, b, F4, K4, M(78) ); - R( b, c, d, e, a, F4, K4, M(79) ); +#define R(a, b, c, d, e, f, k, m) \ + do \ + { \ + e += rol(a, 5) + f(b, c, d) + k + m; \ + b = rol(b, 30); \ + } while (0) + R(a, b, c, d, e, F1, K1, x[0]); + R(e, a, b, c, d, F1, K1, x[1]); + R(d, e, a, b, c, F1, K1, x[2]); + R(c, d, e, a, b, F1, K1, x[3]); + R(b, c, d, e, a, F1, K1, x[4]); + R(a, b, c, d, e, F1, K1, x[5]); + R(e, a, b, c, d, F1, K1, x[6]); + R(d, e, a, b, c, F1, K1, x[7]); + R(c, d, e, a, b, F1, K1, x[8]); + R(b, c, d, e, a, F1, K1, x[9]); + R(a, b, c, d, e, F1, K1, x[10]); + R(e, a, b, c, d, F1, K1, x[11]); + R(d, e, a, b, c, F1, K1, x[12]); + R(c, d, e, a, b, F1, K1, x[13]); + R(b, c, d, e, a, F1, K1, x[14]); + R(a, b, c, d, e, F1, K1, x[15]); + R(e, a, b, c, d, F1, K1, M(16)); + R(d, e, a, b, c, F1, K1, M(17)); + R(c, d, e, a, b, F1, K1, M(18)); + R(b, c, d, e, a, F1, K1, M(19)); + R(a, b, c, d, e, F2, K2, M(20)); + R(e, a, b, c, d, F2, K2, M(21)); + R(d, e, a, b, c, F2, K2, M(22)); + R(c, d, e, a, b, F2, K2, M(23)); + R(b, c, d, e, a, F2, K2, M(24)); + R(a, b, c, d, e, F2, K2, M(25)); + R(e, a, b, c, d, F2, K2, M(26)); + R(d, e, a, b, c, F2, K2, M(27)); + R(c, d, e, a, b, F2, K2, M(28)); + R(b, c, d, e, a, F2, K2, M(29)); + R(a, b, c, d, e, F2, K2, M(30)); + R(e, a, b, c, d, F2, K2, M(31)); + R(d, e, a, b, c, F2, K2, M(32)); + R(c, d, e, a, b, F2, K2, M(33)); + R(b, c, d, e, a, F2, K2, M(34)); + R(a, b, c, d, e, F2, K2, M(35)); + R(e, a, b, c, d, F2, K2, M(36)); + R(d, e, a, b, c, F2, K2, M(37)); + R(c, d, e, a, b, F2, K2, M(38)); + R(b, c, d, e, a, F2, K2, M(39)); + R(a, b, c, d, e, F3, K3, M(40)); + R(e, a, b, c, d, F3, K3, M(41)); + R(d, e, a, b, c, F3, K3, M(42)); + R(c, d, e, a, b, F3, K3, M(43)); + R(b, c, d, e, a, F3, K3, M(44)); + R(a, b, c, d, e, F3, K3, M(45)); + R(e, a, b, c, d, F3, K3, M(46)); + R(d, e, a, b, c, F3, K3, M(47)); + R(c, d, e, a, b, F3, K3, M(48)); + R(b, c, d, e, a, F3, K3, M(49)); + R(a, b, c, d, e, F3, K3, M(50)); + R(e, a, b, c, d, F3, K3, M(51)); + R(d, e, a, b, c, F3, K3, M(52)); + R(c, d, e, a, b, F3, K3, M(53)); + R(b, c, d, e, a, F3, K3, M(54)); + R(a, b, c, d, e, F3, K3, M(55)); + R(e, a, b, c, d, F3, K3, M(56)); + R(d, e, a, b, c, F3, K3, M(57)); + R(c, d, e, a, b, F3, K3, M(58)); + R(b, c, d, e, a, F3, K3, M(59)); + R(a, b, c, d, e, F4, K4, M(60)); + R(e, a, b, c, d, F4, K4, M(61)); + R(d, e, a, b, c, F4, K4, M(62)); + R(c, d, e, a, b, F4, K4, M(63)); + R(b, c, d, e, a, F4, K4, M(64)); + R(a, b, c, d, e, F4, K4, M(65)); + R(e, a, b, c, d, F4, K4, M(66)); + R(d, e, a, b, c, F4, K4, M(67)); + R(c, d, e, a, b, F4, K4, M(68)); + R(b, c, d, e, a, F4, K4, M(69)); + R(a, b, c, d, e, F4, K4, M(70)); + R(e, a, b, c, d, F4, K4, M(71)); + R(d, e, a, b, c, F4, K4, M(72)); + R(c, d, e, a, b, F4, K4, M(73)); + R(b, c, d, e, a, F4, K4, M(74)); + R(a, b, c, d, e, F4, K4, M(75)); + R(e, a, b, c, d, F4, K4, M(76)); + R(d, e, a, b, c, F4, K4, M(77)); + R(c, d, e, a, b, F4, K4, M(78)); + R(b, c, d, e, a, F4, K4, M(79)); /* update chainig vars */ hd->h0 += a; @@ -202,31 +202,31 @@ void SHA1_Update(sha1_context_t *hd, byte *inbuf, size_t inlen) if (hd->count == 64) { /* flush the buffer */ - Transform(hd, hd->buf); - hd->count = 0; - hd->nblocks++; + Transform(hd, hd->buf); + hd->count = 0; + hd->nblocks++; } if (!inbuf) - return; + return; if (hd->count) { - for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; - SHA1_Update(hd, NULL, 0); - if (!inlen) - return; + for (; inlen && hd->count < 64; inlen--) + hd->buf[hd->count++] = *inbuf++; + SHA1_Update(hd, NULL, 0); + if (!inlen) + return; } while (inlen >= 64) { - Transform(hd, inbuf); - hd->count = 0; - hd->nblocks++; - inlen -= 64; - inbuf += 64; + Transform(hd, inbuf); + hd->count = 0; + hd->nblocks++; + inlen -= 64; + inbuf += 64; } for (; inlen && hd->count < 64; inlen--) - hd->buf[hd->count++] = *inbuf++; + hd->buf[hd->count++] = *inbuf++; } @@ -242,7 +242,8 @@ void SHA1_Final(sha1_digest_t digest, sha1_context_t *hd) uint32_t t, msb, lsb; byte *p; - SHA1_Update(hd, NULL, 0); /* flush */; + SHA1_Update(hd, NULL, 0); /* flush */ + ; t = hd->nblocks; /* multiply by 64 to make a byte count */ @@ -251,7 +252,7 @@ void SHA1_Final(sha1_digest_t digest, sha1_context_t *hd) /* add the count */ t = lsb; if ((lsb += hd->count) < t) - msb++; + msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; @@ -261,36 +262,48 @@ void SHA1_Final(sha1_digest_t digest, sha1_context_t *hd) if (hd->count < 56) { /* enough room */ - hd->buf[hd->count++] = 0x80; /* pad */ - while (hd->count < 56) - hd->buf[hd->count++] = 0; /* pad */ + hd->buf[hd->count++] = 0x80; /* pad */ + while (hd->count < 56) + hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ - hd->buf[hd->count++] = 0x80; /* pad character */ - while (hd->count < 64) - hd->buf[hd->count++] = 0; - SHA1_Update(hd, NULL, 0); /* flush */; - memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ + hd->buf[hd->count++] = 0x80; /* pad character */ + while (hd->count < 64) + hd->buf[hd->count++] = 0; + SHA1_Update(hd, NULL, 0); /* flush */ + ; + memset(hd->buf, 0, 56); /* fill next block with zeroes */ } /* append the 64 bit count */ hd->buf[56] = msb >> 24; hd->buf[57] = msb >> 16; - hd->buf[58] = msb >> 8; - hd->buf[59] = msb ; + hd->buf[58] = msb >> 8; + hd->buf[59] = msb; hd->buf[60] = lsb >> 24; hd->buf[61] = lsb >> 16; - hd->buf[62] = lsb >> 8; - hd->buf[63] = lsb ; + hd->buf[62] = lsb >> 8; + hd->buf[63] = lsb; Transform(hd, hd->buf); p = hd->buf; #ifdef SYS_BIG_ENDIAN -#define X(a) do { *(uint32_t*)p = hd->h##a ; p += 4; } while(0) +#define X(a) \ + do \ + { \ + *(uint32_t *) p = hd->h##a; \ + p += 4; \ + } while (0) #else /* little endian */ -#define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ - *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) +#define X(a) \ + do \ + { \ + *p++ = hd->h##a >> 24; \ + *p++ = hd->h##a >> 16; \ + *p++ = hd->h##a >> 8; \ + *p++ = hd->h##a; \ + } while (0) #endif X(0); X(1); @@ -318,4 +331,3 @@ void SHA1_UpdateString(sha1_context_t *context, char *str) { SHA1_Update(context, (byte *) str, strlen(str) + 1); } - diff --git a/src/tables.c b/src/tables.c index 698ae98f57..7db15cbfec 100644 --- a/src/tables.c +++ b/src/tables.c @@ -15,7 +15,7 @@ // DESCRIPTION: // Lookup tables. // Do not try to look them up :-). -// In the order of appearance: +// In the order of appearance: // // int finetangent[4096] - Tangens LUT. // Should work with BAM fairly well (12 of 16bit, @@ -23,12 +23,12 @@ // // int finesine[10240] - Sine lookup. // Guess what, serves as cosine, too. -// Remarkable thing is, how to use BAMs with this? +// Remarkable thing is, how to use BAMs with this? // // int tantoangle[2049] - ArcTan LUT, // maps tan(angle) to angle fast. Gotta search. -// -// +// +// #include "tables.h" @@ -40,15 +40,14 @@ int SlopeDiv(unsigned int num, unsigned int den) { - unsigned ans; - + if (den < 512) { return SLOPERANGE; } else { - ans = (num << 3) / (den >> 8); + unsigned ans = (num << 3) / (den >> 8); if (ans <= SLOPERANGE) { @@ -61,2167 +60,2002 @@ int SlopeDiv(unsigned int num, unsigned int den) } } -const fixed_t finetangent[4096] = -{ - -170910304,-56965752,-34178904,-24413316,-18988036,-15535599,-13145455,-11392683, - -10052327,-8994149,-8137527,-7429880,-6835455,-6329090,-5892567,-5512368, - -5178251,-4882318,-4618375,-4381502,-4167737,-3973855,-3797206,-3635590, - -3487165,-3350381,-3223918,-3106651,-2997613,-2895966,-2800983,-2712030, - -2628549,-2550052,-2476104,-2406322,-2340362,-2277919,-2218719,-2162516, - -2109087,-2058233,-2009771,-1963536,-1919378,-1877161,-1836758,-1798063, - -1760956,-1725348,-1691149,-1658278,-1626658,-1596220,-1566898,-1538632, - -1511367,-1485049,-1459630,-1435065,-1411312,-1388330,-1366084,-1344537, - -1323658,-1303416,-1283783,-1264730,-1246234,-1228269,-1210813,-1193846, - -1177345,-1161294,-1145673,-1130465,-1115654,-1101225,-1087164,-1073455, - -1060087,-1047046,-1034322,-1021901,-1009774,-997931,-986361,-975054, - -964003,-953199,-942633,-932298,-922186,-912289,-902602,-893117, - -883829,-874730,-865817,-857081,-848520,-840127,-831898,-823827, - -815910,-808143,-800521,-793041,-785699,-778490,-771411,-764460, - -757631,-750922,-744331,-737853,-731486,-725227,-719074,-713023, - -707072,-701219,-695462,-689797,-684223,-678737,-673338,-668024, - -662792,-657640,-652568,-647572,-642651,-637803,-633028,-628323, - -623686,-619117,-614613,-610174,-605798,-601483,-597229,-593033, - -588896,-584815,-580789,-576818,-572901,-569035,-565221,-561456, - -557741,-554074,-550455,-546881,-543354,-539870,-536431,-533034, - -529680,-526366,-523094,-519861,-516667,-513512,-510394,-507313, - -504269,-501261,-498287,-495348,-492443,-489571,-486732,-483925, - -481150,-478406,-475692,-473009,-470355,-467730,-465133,-462565, - -460024,-457511,-455024,-452564,-450129,-447720,-445337,-442978, - -440643,-438332,-436045,-433781,-431540,-429321,-427125,-424951, - -422798,-420666,-418555,-416465,-414395,-412344,-410314,-408303, - -406311,-404338,-402384,-400448,-398530,-396630,-394747,-392882, - -391034,-389202,-387387,-385589,-383807,-382040,-380290,-378555, - -376835,-375130,-373440,-371765,-370105,-368459,-366826,-365208, - -363604,-362013,-360436,-358872,-357321,-355783,-354257,-352744, - -351244,-349756,-348280,-346816,-345364,-343924,-342495,-341078, - -339671,-338276,-336892,-335519,-334157,-332805,-331464,-330133, - -328812,-327502,-326201,-324910,-323629,-322358,-321097,-319844, - -318601,-317368,-316143,-314928,-313721,-312524,-311335,-310154, - -308983,-307819,-306664,-305517,-304379,-303248,-302126,-301011, - -299904,-298805,-297714,-296630,-295554,-294485,-293423,-292369, - -291322,-290282,-289249,-288223,-287204,-286192,-285186,-284188, - -283195,-282210,-281231,-280258,-279292,-278332,-277378,-276430, - -275489,-274553,-273624,-272700,-271782,-270871,-269965,-269064, - -268169,-267280,-266397,-265519,-264646,-263779,-262917,-262060, - -261209,-260363,-259522,-258686,-257855,-257029,-256208,-255392, - -254581,-253774,-252973,-252176,-251384,-250596,-249813,-249035, - -248261,-247492,-246727,-245966,-245210,-244458,-243711,-242967, - -242228,-241493,-240763,-240036,-239314,-238595,-237881,-237170, - -236463,-235761,-235062,-234367,-233676,-232988,-232304,-231624, - -230948,-230275,-229606,-228941,-228279,-227621,-226966,-226314, - -225666,-225022,-224381,-223743,-223108,-222477,-221849,-221225, - -220603,-219985,-219370,-218758,-218149,-217544,-216941,-216341, - -215745,-215151,-214561,-213973,-213389,-212807,-212228,-211652, - -211079,-210509,-209941,-209376,-208815,-208255,-207699,-207145, - -206594,-206045,-205500,-204956,-204416,-203878,-203342,-202809, - -202279,-201751,-201226,-200703,-200182,-199664,-199149,-198636, - -198125,-197616,-197110,-196606,-196105,-195606,-195109,-194614, - -194122,-193631,-193143,-192658,-192174,-191693,-191213,-190736, - -190261,-189789,-189318,-188849,-188382,-187918,-187455,-186995, - -186536,-186080,-185625,-185173,-184722,-184274,-183827,-183382, - -182939,-182498,-182059,-181622,-181186,-180753,-180321,-179891, - -179463,-179037,-178612,-178190,-177769,-177349,-176932,-176516, - -176102,-175690,-175279,-174870,-174463,-174057,-173653,-173251, - -172850,-172451,-172053,-171657,-171263,-170870,-170479,-170089, - -169701,-169315,-168930,-168546,-168164,-167784,-167405,-167027, - -166651,-166277,-165904,-165532,-165162,-164793,-164426,-164060, - -163695,-163332,-162970,-162610,-162251,-161893,-161537,-161182, - -160828,-160476,-160125,-159775,-159427,-159079,-158734,-158389, - -158046,-157704,-157363,-157024,-156686,-156349,-156013,-155678, - -155345,-155013,-154682,-154352,-154024,-153697,-153370,-153045, - -152722,-152399,-152077,-151757,-151438,-151120,-150803,-150487, - -150172,-149859,-149546,-149235,-148924,-148615,-148307,-148000, - -147693,-147388,-147084,-146782,-146480,-146179,-145879,-145580, - -145282,-144986,-144690,-144395,-144101,-143808,-143517,-143226, - -142936,-142647,-142359,-142072,-141786,-141501,-141217,-140934, - -140651,-140370,-140090,-139810,-139532,-139254,-138977,-138701, - -138426,-138152,-137879,-137607,-137335,-137065,-136795,-136526, - -136258,-135991,-135725,-135459,-135195,-134931,-134668,-134406, - -134145,-133884,-133625,-133366,-133108,-132851,-132594,-132339, - -132084,-131830,-131576,-131324,-131072,-130821,-130571,-130322, - -130073,-129825,-129578,-129332,-129086,-128841,-128597,-128353, - -128111,-127869,-127627,-127387,-127147,-126908,-126669,-126432, - -126195,-125959,-125723,-125488,-125254,-125020,-124787,-124555, - -124324,-124093,-123863,-123633,-123404,-123176,-122949,-122722, - -122496,-122270,-122045,-121821,-121597,-121374,-121152,-120930, - -120709,-120489,-120269,-120050,-119831,-119613,-119396,-119179, - -118963,-118747,-118532,-118318,-118104,-117891,-117678,-117466, - -117254,-117044,-116833,-116623,-116414,-116206,-115998,-115790, - -115583,-115377,-115171,-114966,-114761,-114557,-114354,-114151, - -113948,-113746,-113545,-113344,-113143,-112944,-112744,-112546, - -112347,-112150,-111952,-111756,-111560,-111364,-111169,-110974, - -110780,-110586,-110393,-110200,-110008,-109817,-109626,-109435, - -109245,-109055,-108866,-108677,-108489,-108301,-108114,-107927, - -107741,-107555,-107369,-107184,-107000,-106816,-106632,-106449, - -106266,-106084,-105902,-105721,-105540,-105360,-105180,-105000, - -104821,-104643,-104465,-104287,-104109,-103933,-103756,-103580, - -103404,-103229,-103054,-102880,-102706,-102533,-102360,-102187, - -102015,-101843,-101671,-101500,-101330,-101159,-100990,-100820, - -100651,-100482,-100314,-100146,-99979,-99812,-99645,-99479, - -99313,-99148,-98982,-98818,-98653,-98489,-98326,-98163, - -98000,-97837,-97675,-97513,-97352,-97191,-97030,-96870, - -96710,-96551,-96391,-96233,-96074,-95916,-95758,-95601, - -95444,-95287,-95131,-94975,-94819,-94664,-94509,-94354, - -94200,-94046,-93892,-93739,-93586,-93434,-93281,-93129, - -92978,-92826,-92675,-92525,-92375,-92225,-92075,-91926, - -91777,-91628,-91480,-91332,-91184,-91036,-90889,-90742, - -90596,-90450,-90304,-90158,-90013,-89868,-89724,-89579, - -89435,-89292,-89148,-89005,-88862,-88720,-88577,-88435, - -88294,-88152,-88011,-87871,-87730,-87590,-87450,-87310, - -87171,-87032,-86893,-86755,-86616,-86479,-86341,-86204, - -86066,-85930,-85793,-85657,-85521,-85385,-85250,-85114, - -84980,-84845,-84710,-84576,-84443,-84309,-84176,-84043, - -83910,-83777,-83645,-83513,-83381,-83250,-83118,-82987, - -82857,-82726,-82596,-82466,-82336,-82207,-82078,-81949, - -81820,-81691,-81563,-81435,-81307,-81180,-81053,-80925, - -80799,-80672,-80546,-80420,-80294,-80168,-80043,-79918, - -79793,-79668,-79544,-79420,-79296,-79172,-79048,-78925, - -78802,-78679,-78557,-78434,-78312,-78190,-78068,-77947, - -77826,-77705,-77584,-77463,-77343,-77223,-77103,-76983, - -76864,-76744,-76625,-76506,-76388,-76269,-76151,-76033, - -75915,-75797,-75680,-75563,-75446,-75329,-75213,-75096, - -74980,-74864,-74748,-74633,-74517,-74402,-74287,-74172, - -74058,-73944,-73829,-73715,-73602,-73488,-73375,-73262, - -73149,-73036,-72923,-72811,-72699,-72587,-72475,-72363, - -72252,-72140,-72029,-71918,-71808,-71697,-71587,-71477, - -71367,-71257,-71147,-71038,-70929,-70820,-70711,-70602, - -70494,-70385,-70277,-70169,-70061,-69954,-69846,-69739, - -69632,-69525,-69418,-69312,-69205,-69099,-68993,-68887, - -68781,-68676,-68570,-68465,-68360,-68255,-68151,-68046, - -67942,-67837,-67733,-67629,-67526,-67422,-67319,-67216, - -67113,-67010,-66907,-66804,-66702,-66600,-66498,-66396, - -66294,-66192,-66091,-65989,-65888,-65787,-65686,-65586, - -65485,-65385,-65285,-65185,-65085,-64985,-64885,-64786, - -64687,-64587,-64488,-64389,-64291,-64192,-64094,-63996, - -63897,-63799,-63702,-63604,-63506,-63409,-63312,-63215, - -63118,-63021,-62924,-62828,-62731,-62635,-62539,-62443, - -62347,-62251,-62156,-62060,-61965,-61870,-61775,-61680, - -61585,-61491,-61396,-61302,-61208,-61114,-61020,-60926, - -60833,-60739,-60646,-60552,-60459,-60366,-60273,-60181, - -60088,-59996,-59903,-59811,-59719,-59627,-59535,-59444, - -59352,-59261,-59169,-59078,-58987,-58896,-58805,-58715, - -58624,-58534,-58443,-58353,-58263,-58173,-58083,-57994, - -57904,-57815,-57725,-57636,-57547,-57458,-57369,-57281, - -57192,-57104,-57015,-56927,-56839,-56751,-56663,-56575, - -56487,-56400,-56312,-56225,-56138,-56051,-55964,-55877, - -55790,-55704,-55617,-55531,-55444,-55358,-55272,-55186, - -55100,-55015,-54929,-54843,-54758,-54673,-54587,-54502, - -54417,-54333,-54248,-54163,-54079,-53994,-53910,-53826, - -53741,-53657,-53574,-53490,-53406,-53322,-53239,-53156, - -53072,-52989,-52906,-52823,-52740,-52657,-52575,-52492, - -52410,-52327,-52245,-52163,-52081,-51999,-51917,-51835, - -51754,-51672,-51591,-51509,-51428,-51347,-51266,-51185, - -51104,-51023,-50942,-50862,-50781,-50701,-50621,-50540, - -50460,-50380,-50300,-50221,-50141,-50061,-49982,-49902, - -49823,-49744,-49664,-49585,-49506,-49427,-49349,-49270, - -49191,-49113,-49034,-48956,-48878,-48799,-48721,-48643, - -48565,-48488,-48410,-48332,-48255,-48177,-48100,-48022, - -47945,-47868,-47791,-47714,-47637,-47560,-47484,-47407, - -47331,-47254,-47178,-47102,-47025,-46949,-46873,-46797, - -46721,-46646,-46570,-46494,-46419,-46343,-46268,-46193, - -46118,-46042,-45967,-45892,-45818,-45743,-45668,-45593, - -45519,-45444,-45370,-45296,-45221,-45147,-45073,-44999, - -44925,-44851,-44778,-44704,-44630,-44557,-44483,-44410, - -44337,-44263,-44190,-44117,-44044,-43971,-43898,-43826, - -43753,-43680,-43608,-43535,-43463,-43390,-43318,-43246, - -43174,-43102,-43030,-42958,-42886,-42814,-42743,-42671, - -42600,-42528,-42457,-42385,-42314,-42243,-42172,-42101, - -42030,-41959,-41888,-41817,-41747,-41676,-41605,-41535, - -41465,-41394,-41324,-41254,-41184,-41113,-41043,-40973, - -40904,-40834,-40764,-40694,-40625,-40555,-40486,-40416, - -40347,-40278,-40208,-40139,-40070,-40001,-39932,-39863, - -39794,-39726,-39657,-39588,-39520,-39451,-39383,-39314, - -39246,-39178,-39110,-39042,-38973,-38905,-38837,-38770, - -38702,-38634,-38566,-38499,-38431,-38364,-38296,-38229, - -38161,-38094,-38027,-37960,-37893,-37826,-37759,-37692, - -37625,-37558,-37491,-37425,-37358,-37291,-37225,-37158, - -37092,-37026,-36959,-36893,-36827,-36761,-36695,-36629, - -36563,-36497,-36431,-36365,-36300,-36234,-36168,-36103, - -36037,-35972,-35907,-35841,-35776,-35711,-35646,-35580, - -35515,-35450,-35385,-35321,-35256,-35191,-35126,-35062, - -34997,-34932,-34868,-34803,-34739,-34675,-34610,-34546, - -34482,-34418,-34354,-34289,-34225,-34162,-34098,-34034, - -33970,-33906,-33843,-33779,-33715,-33652,-33588,-33525, - -33461,-33398,-33335,-33272,-33208,-33145,-33082,-33019, - -32956,-32893,-32830,-32767,-32705,-32642,-32579,-32516, - -32454,-32391,-32329,-32266,-32204,-32141,-32079,-32017, - -31955,-31892,-31830,-31768,-31706,-31644,-31582,-31520, - -31458,-31396,-31335,-31273,-31211,-31150,-31088,-31026, - -30965,-30904,-30842,-30781,-30719,-30658,-30597,-30536, - -30474,-30413,-30352,-30291,-30230,-30169,-30108,-30048, - -29987,-29926,-29865,-29805,-29744,-29683,-29623,-29562, - -29502,-29441,-29381,-29321,-29260,-29200,-29140,-29080, - -29020,-28959,-28899,-28839,-28779,-28719,-28660,-28600, - -28540,-28480,-28420,-28361,-28301,-28241,-28182,-28122, - -28063,-28003,-27944,-27884,-27825,-27766,-27707,-27647, - -27588,-27529,-27470,-27411,-27352,-27293,-27234,-27175, - -27116,-27057,-26998,-26940,-26881,-26822,-26763,-26705, - -26646,-26588,-26529,-26471,-26412,-26354,-26295,-26237, - -26179,-26120,-26062,-26004,-25946,-25888,-25830,-25772, - -25714,-25656,-25598,-25540,-25482,-25424,-25366,-25308, - -25251,-25193,-25135,-25078,-25020,-24962,-24905,-24847, - -24790,-24732,-24675,-24618,-24560,-24503,-24446,-24389, - -24331,-24274,-24217,-24160,-24103,-24046,-23989,-23932, - -23875,-23818,-23761,-23704,-23647,-23591,-23534,-23477, - -23420,-23364,-23307,-23250,-23194,-23137,-23081,-23024, - -22968,-22911,-22855,-22799,-22742,-22686,-22630,-22573, - -22517,-22461,-22405,-22349,-22293,-22237,-22181,-22125, - -22069,-22013,-21957,-21901,-21845,-21789,-21733,-21678, - -21622,-21566,-21510,-21455,-21399,-21343,-21288,-21232, - -21177,-21121,-21066,-21010,-20955,-20900,-20844,-20789, - -20734,-20678,-20623,-20568,-20513,-20457,-20402,-20347, - -20292,-20237,-20182,-20127,-20072,-20017,-19962,-19907, - -19852,-19797,-19742,-19688,-19633,-19578,-19523,-19469, - -19414,-19359,-19305,-19250,-19195,-19141,-19086,-19032, - -18977,-18923,-18868,-18814,-18760,-18705,-18651,-18597, - -18542,-18488,-18434,-18380,-18325,-18271,-18217,-18163, - -18109,-18055,-18001,-17946,-17892,-17838,-17784,-17731, - -17677,-17623,-17569,-17515,-17461,-17407,-17353,-17300, - -17246,-17192,-17138,-17085,-17031,-16977,-16924,-16870, - -16817,-16763,-16710,-16656,-16603,-16549,-16496,-16442, - -16389,-16335,-16282,-16229,-16175,-16122,-16069,-16015, - -15962,-15909,-15856,-15802,-15749,-15696,-15643,-15590, - -15537,-15484,-15431,-15378,-15325,-15272,-15219,-15166, - -15113,-15060,-15007,-14954,-14901,-14848,-14795,-14743, - -14690,-14637,-14584,-14531,-14479,-14426,-14373,-14321, - -14268,-14215,-14163,-14110,-14057,-14005,-13952,-13900, - -13847,-13795,-13742,-13690,-13637,-13585,-13533,-13480, - -13428,-13375,-13323,-13271,-13218,-13166,-13114,-13062, - -13009,-12957,-12905,-12853,-12800,-12748,-12696,-12644, - -12592,-12540,-12488,-12436,-12383,-12331,-12279,-12227, - -12175,-12123,-12071,-12019,-11967,-11916,-11864,-11812, - -11760,-11708,-11656,-11604,-11552,-11501,-11449,-11397, - -11345,-11293,-11242,-11190,-11138,-11086,-11035,-10983, - -10931,-10880,-10828,-10777,-10725,-10673,-10622,-10570, - -10519,-10467,-10415,-10364,-10312,-10261,-10209,-10158, - -10106,-10055,-10004,-9952,-9901,-9849,-9798,-9747, - -9695,-9644,-9592,-9541,-9490,-9438,-9387,-9336, - -9285,-9233,-9182,-9131,-9080,-9028,-8977,-8926, - -8875,-8824,-8772,-8721,-8670,-8619,-8568,-8517, - -8466,-8414,-8363,-8312,-8261,-8210,-8159,-8108, - -8057,-8006,-7955,-7904,-7853,-7802,-7751,-7700, - -7649,-7598,-7547,-7496,-7445,-7395,-7344,-7293, - -7242,-7191,-7140,-7089,-7038,-6988,-6937,-6886, - -6835,-6784,-6733,-6683,-6632,-6581,-6530,-6480, - -6429,-6378,-6327,-6277,-6226,-6175,-6124,-6074, - -6023,-5972,-5922,-5871,-5820,-5770,-5719,-5668, - -5618,-5567,-5517,-5466,-5415,-5365,-5314,-5264, - -5213,-5162,-5112,-5061,-5011,-4960,-4910,-4859, - -4808,-4758,-4707,-4657,-4606,-4556,-4505,-4455, - -4404,-4354,-4303,-4253,-4202,-4152,-4101,-4051, - -4001,-3950,-3900,-3849,-3799,-3748,-3698,-3648, - -3597,-3547,-3496,-3446,-3395,-3345,-3295,-3244, - -3194,-3144,-3093,-3043,-2992,-2942,-2892,-2841, - -2791,-2741,-2690,-2640,-2590,-2539,-2489,-2439, - -2388,-2338,-2288,-2237,-2187,-2137,-2086,-2036, - -1986,-1935,-1885,-1835,-1784,-1734,-1684,-1633, - -1583,-1533,-1483,-1432,-1382,-1332,-1281,-1231, - -1181,-1131,-1080,-1030,-980,-929,-879,-829, - -779,-728,-678,-628,-578,-527,-477,-427, - -376,-326,-276,-226,-175,-125,-75,-25, - 25,75,125,175,226,276,326,376, - 427,477,527,578,628,678,728,779, - 829,879,929,980,1030,1080,1131,1181, - 1231,1281,1332,1382,1432,1483,1533,1583, - 1633,1684,1734,1784,1835,1885,1935,1986, - 2036,2086,2137,2187,2237,2288,2338,2388, - 2439,2489,2539,2590,2640,2690,2741,2791, - 2841,2892,2942,2992,3043,3093,3144,3194, - 3244,3295,3345,3395,3446,3496,3547,3597, - 3648,3698,3748,3799,3849,3900,3950,4001, - 4051,4101,4152,4202,4253,4303,4354,4404, - 4455,4505,4556,4606,4657,4707,4758,4808, - 4859,4910,4960,5011,5061,5112,5162,5213, - 5264,5314,5365,5415,5466,5517,5567,5618, - 5668,5719,5770,5820,5871,5922,5972,6023, - 6074,6124,6175,6226,6277,6327,6378,6429, - 6480,6530,6581,6632,6683,6733,6784,6835, - 6886,6937,6988,7038,7089,7140,7191,7242, - 7293,7344,7395,7445,7496,7547,7598,7649, - 7700,7751,7802,7853,7904,7955,8006,8057, - 8108,8159,8210,8261,8312,8363,8414,8466, - 8517,8568,8619,8670,8721,8772,8824,8875, - 8926,8977,9028,9080,9131,9182,9233,9285, - 9336,9387,9438,9490,9541,9592,9644,9695, - 9747,9798,9849,9901,9952,10004,10055,10106, - 10158,10209,10261,10312,10364,10415,10467,10519, - 10570,10622,10673,10725,10777,10828,10880,10931, - 10983,11035,11086,11138,11190,11242,11293,11345, - 11397,11449,11501,11552,11604,11656,11708,11760, - 11812,11864,11916,11967,12019,12071,12123,12175, - 12227,12279,12331,12383,12436,12488,12540,12592, - 12644,12696,12748,12800,12853,12905,12957,13009, - 13062,13114,13166,13218,13271,13323,13375,13428, - 13480,13533,13585,13637,13690,13742,13795,13847, - 13900,13952,14005,14057,14110,14163,14215,14268, - 14321,14373,14426,14479,14531,14584,14637,14690, - 14743,14795,14848,14901,14954,15007,15060,15113, - 15166,15219,15272,15325,15378,15431,15484,15537, - 15590,15643,15696,15749,15802,15856,15909,15962, - 16015,16069,16122,16175,16229,16282,16335,16389, - 16442,16496,16549,16603,16656,16710,16763,16817, - 16870,16924,16977,17031,17085,17138,17192,17246, - 17300,17353,17407,17461,17515,17569,17623,17677, - 17731,17784,17838,17892,17946,18001,18055,18109, - 18163,18217,18271,18325,18380,18434,18488,18542, - 18597,18651,18705,18760,18814,18868,18923,18977, - 19032,19086,19141,19195,19250,19305,19359,19414, - 19469,19523,19578,19633,19688,19742,19797,19852, - 19907,19962,20017,20072,20127,20182,20237,20292, - 20347,20402,20457,20513,20568,20623,20678,20734, - 20789,20844,20900,20955,21010,21066,21121,21177, - 21232,21288,21343,21399,21455,21510,21566,21622, - 21678,21733,21789,21845,21901,21957,22013,22069, - 22125,22181,22237,22293,22349,22405,22461,22517, - 22573,22630,22686,22742,22799,22855,22911,22968, - 23024,23081,23137,23194,23250,23307,23364,23420, - 23477,23534,23591,23647,23704,23761,23818,23875, - 23932,23989,24046,24103,24160,24217,24274,24331, - 24389,24446,24503,24560,24618,24675,24732,24790, - 24847,24905,24962,25020,25078,25135,25193,25251, - 25308,25366,25424,25482,25540,25598,25656,25714, - 25772,25830,25888,25946,26004,26062,26120,26179, - 26237,26295,26354,26412,26471,26529,26588,26646, - 26705,26763,26822,26881,26940,26998,27057,27116, - 27175,27234,27293,27352,27411,27470,27529,27588, - 27647,27707,27766,27825,27884,27944,28003,28063, - 28122,28182,28241,28301,28361,28420,28480,28540, - 28600,28660,28719,28779,28839,28899,28959,29020, - 29080,29140,29200,29260,29321,29381,29441,29502, - 29562,29623,29683,29744,29805,29865,29926,29987, - 30048,30108,30169,30230,30291,30352,30413,30474, - 30536,30597,30658,30719,30781,30842,30904,30965, - 31026,31088,31150,31211,31273,31335,31396,31458, - 31520,31582,31644,31706,31768,31830,31892,31955, - 32017,32079,32141,32204,32266,32329,32391,32454, - 32516,32579,32642,32705,32767,32830,32893,32956, - 33019,33082,33145,33208,33272,33335,33398,33461, - 33525,33588,33652,33715,33779,33843,33906,33970, - 34034,34098,34162,34225,34289,34354,34418,34482, - 34546,34610,34675,34739,34803,34868,34932,34997, - 35062,35126,35191,35256,35321,35385,35450,35515, - 35580,35646,35711,35776,35841,35907,35972,36037, - 36103,36168,36234,36300,36365,36431,36497,36563, - 36629,36695,36761,36827,36893,36959,37026,37092, - 37158,37225,37291,37358,37425,37491,37558,37625, - 37692,37759,37826,37893,37960,38027,38094,38161, - 38229,38296,38364,38431,38499,38566,38634,38702, - 38770,38837,38905,38973,39042,39110,39178,39246, - 39314,39383,39451,39520,39588,39657,39726,39794, - 39863,39932,40001,40070,40139,40208,40278,40347, - 40416,40486,40555,40625,40694,40764,40834,40904, - 40973,41043,41113,41184,41254,41324,41394,41465, - 41535,41605,41676,41747,41817,41888,41959,42030, - 42101,42172,42243,42314,42385,42457,42528,42600, - 42671,42743,42814,42886,42958,43030,43102,43174, - 43246,43318,43390,43463,43535,43608,43680,43753, - 43826,43898,43971,44044,44117,44190,44263,44337, - 44410,44483,44557,44630,44704,44778,44851,44925, - 44999,45073,45147,45221,45296,45370,45444,45519, - 45593,45668,45743,45818,45892,45967,46042,46118, - 46193,46268,46343,46419,46494,46570,46646,46721, - 46797,46873,46949,47025,47102,47178,47254,47331, - 47407,47484,47560,47637,47714,47791,47868,47945, - 48022,48100,48177,48255,48332,48410,48488,48565, - 48643,48721,48799,48878,48956,49034,49113,49191, - 49270,49349,49427,49506,49585,49664,49744,49823, - 49902,49982,50061,50141,50221,50300,50380,50460, - 50540,50621,50701,50781,50862,50942,51023,51104, - 51185,51266,51347,51428,51509,51591,51672,51754, - 51835,51917,51999,52081,52163,52245,52327,52410, - 52492,52575,52657,52740,52823,52906,52989,53072, - 53156,53239,53322,53406,53490,53574,53657,53741, - 53826,53910,53994,54079,54163,54248,54333,54417, - 54502,54587,54673,54758,54843,54929,55015,55100, - 55186,55272,55358,55444,55531,55617,55704,55790, - 55877,55964,56051,56138,56225,56312,56400,56487, - 56575,56663,56751,56839,56927,57015,57104,57192, - 57281,57369,57458,57547,57636,57725,57815,57904, - 57994,58083,58173,58263,58353,58443,58534,58624, - 58715,58805,58896,58987,59078,59169,59261,59352, - 59444,59535,59627,59719,59811,59903,59996,60088, - 60181,60273,60366,60459,60552,60646,60739,60833, - 60926,61020,61114,61208,61302,61396,61491,61585, - 61680,61775,61870,61965,62060,62156,62251,62347, - 62443,62539,62635,62731,62828,62924,63021,63118, - 63215,63312,63409,63506,63604,63702,63799,63897, - 63996,64094,64192,64291,64389,64488,64587,64687, - 64786,64885,64985,65085,65185,65285,65385,65485, - 65586,65686,65787,65888,65989,66091,66192,66294, - 66396,66498,66600,66702,66804,66907,67010,67113, - 67216,67319,67422,67526,67629,67733,67837,67942, - 68046,68151,68255,68360,68465,68570,68676,68781, - 68887,68993,69099,69205,69312,69418,69525,69632, - 69739,69846,69954,70061,70169,70277,70385,70494, - 70602,70711,70820,70929,71038,71147,71257,71367, - 71477,71587,71697,71808,71918,72029,72140,72252, - 72363,72475,72587,72699,72811,72923,73036,73149, - 73262,73375,73488,73602,73715,73829,73944,74058, - 74172,74287,74402,74517,74633,74748,74864,74980, - 75096,75213,75329,75446,75563,75680,75797,75915, - 76033,76151,76269,76388,76506,76625,76744,76864, - 76983,77103,77223,77343,77463,77584,77705,77826, - 77947,78068,78190,78312,78434,78557,78679,78802, - 78925,79048,79172,79296,79420,79544,79668,79793, - 79918,80043,80168,80294,80420,80546,80672,80799, - 80925,81053,81180,81307,81435,81563,81691,81820, - 81949,82078,82207,82336,82466,82596,82726,82857, - 82987,83118,83250,83381,83513,83645,83777,83910, - 84043,84176,84309,84443,84576,84710,84845,84980, - 85114,85250,85385,85521,85657,85793,85930,86066, - 86204,86341,86479,86616,86755,86893,87032,87171, - 87310,87450,87590,87730,87871,88011,88152,88294, - 88435,88577,88720,88862,89005,89148,89292,89435, - 89579,89724,89868,90013,90158,90304,90450,90596, - 90742,90889,91036,91184,91332,91480,91628,91777, - 91926,92075,92225,92375,92525,92675,92826,92978, - 93129,93281,93434,93586,93739,93892,94046,94200, - 94354,94509,94664,94819,94975,95131,95287,95444, - 95601,95758,95916,96074,96233,96391,96551,96710, - 96870,97030,97191,97352,97513,97675,97837,98000, - 98163,98326,98489,98653,98818,98982,99148,99313, - 99479,99645,99812,99979,100146,100314,100482,100651, - 100820,100990,101159,101330,101500,101671,101843,102015, - 102187,102360,102533,102706,102880,103054,103229,103404, - 103580,103756,103933,104109,104287,104465,104643,104821, - 105000,105180,105360,105540,105721,105902,106084,106266, - 106449,106632,106816,107000,107184,107369,107555,107741, - 107927,108114,108301,108489,108677,108866,109055,109245, - 109435,109626,109817,110008,110200,110393,110586,110780, - 110974,111169,111364,111560,111756,111952,112150,112347, - 112546,112744,112944,113143,113344,113545,113746,113948, - 114151,114354,114557,114761,114966,115171,115377,115583, - 115790,115998,116206,116414,116623,116833,117044,117254, - 117466,117678,117891,118104,118318,118532,118747,118963, - 119179,119396,119613,119831,120050,120269,120489,120709, - 120930,121152,121374,121597,121821,122045,122270,122496, - 122722,122949,123176,123404,123633,123863,124093,124324, - 124555,124787,125020,125254,125488,125723,125959,126195, - 126432,126669,126908,127147,127387,127627,127869,128111, - 128353,128597,128841,129086,129332,129578,129825,130073, - 130322,130571,130821,131072,131324,131576,131830,132084, - 132339,132594,132851,133108,133366,133625,133884,134145, - 134406,134668,134931,135195,135459,135725,135991,136258, - 136526,136795,137065,137335,137607,137879,138152,138426, - 138701,138977,139254,139532,139810,140090,140370,140651, - 140934,141217,141501,141786,142072,142359,142647,142936, - 143226,143517,143808,144101,144395,144690,144986,145282, - 145580,145879,146179,146480,146782,147084,147388,147693, - 148000,148307,148615,148924,149235,149546,149859,150172, - 150487,150803,151120,151438,151757,152077,152399,152722, - 153045,153370,153697,154024,154352,154682,155013,155345, - 155678,156013,156349,156686,157024,157363,157704,158046, - 158389,158734,159079,159427,159775,160125,160476,160828, - 161182,161537,161893,162251,162610,162970,163332,163695, - 164060,164426,164793,165162,165532,165904,166277,166651, - 167027,167405,167784,168164,168546,168930,169315,169701, - 170089,170479,170870,171263,171657,172053,172451,172850, - 173251,173653,174057,174463,174870,175279,175690,176102, - 176516,176932,177349,177769,178190,178612,179037,179463, - 179891,180321,180753,181186,181622,182059,182498,182939, - 183382,183827,184274,184722,185173,185625,186080,186536, - 186995,187455,187918,188382,188849,189318,189789,190261, - 190736,191213,191693,192174,192658,193143,193631,194122, - 194614,195109,195606,196105,196606,197110,197616,198125, - 198636,199149,199664,200182,200703,201226,201751,202279, - 202809,203342,203878,204416,204956,205500,206045,206594, - 207145,207699,208255,208815,209376,209941,210509,211079, - 211652,212228,212807,213389,213973,214561,215151,215745, - 216341,216941,217544,218149,218758,219370,219985,220603, - 221225,221849,222477,223108,223743,224381,225022,225666, - 226314,226966,227621,228279,228941,229606,230275,230948, - 231624,232304,232988,233676,234367,235062,235761,236463, - 237170,237881,238595,239314,240036,240763,241493,242228, - 242967,243711,244458,245210,245966,246727,247492,248261, - 249035,249813,250596,251384,252176,252973,253774,254581, - 255392,256208,257029,257855,258686,259522,260363,261209, - 262060,262917,263779,264646,265519,266397,267280,268169, - 269064,269965,270871,271782,272700,273624,274553,275489, - 276430,277378,278332,279292,280258,281231,282210,283195, - 284188,285186,286192,287204,288223,289249,290282,291322, - 292369,293423,294485,295554,296630,297714,298805,299904, - 301011,302126,303248,304379,305517,306664,307819,308983, - 310154,311335,312524,313721,314928,316143,317368,318601, - 319844,321097,322358,323629,324910,326201,327502,328812, - 330133,331464,332805,334157,335519,336892,338276,339671, - 341078,342495,343924,345364,346816,348280,349756,351244, - 352744,354257,355783,357321,358872,360436,362013,363604, - 365208,366826,368459,370105,371765,373440,375130,376835, - 378555,380290,382040,383807,385589,387387,389202,391034, - 392882,394747,396630,398530,400448,402384,404338,406311, - 408303,410314,412344,414395,416465,418555,420666,422798, - 424951,427125,429321,431540,433781,436045,438332,440643, - 442978,445337,447720,450129,452564,455024,457511,460024, - 462565,465133,467730,470355,473009,475692,478406,481150, - 483925,486732,489571,492443,495348,498287,501261,504269, - 507313,510394,513512,516667,519861,523094,526366,529680, - 533034,536431,539870,543354,546881,550455,554074,557741, - 561456,565221,569035,572901,576818,580789,584815,588896, - 593033,597229,601483,605798,610174,614613,619117,623686, - 628323,633028,637803,642651,647572,652568,657640,662792, - 668024,673338,678737,684223,689797,695462,701219,707072, - 713023,719074,725227,731486,737853,744331,750922,757631, - 764460,771411,778490,785699,793041,800521,808143,815910, - 823827,831898,840127,848520,857081,865817,874730,883829, - 893117,902602,912289,922186,932298,942633,953199,964003, - 975054,986361,997931,1009774,1021901,1034322,1047046,1060087, - 1073455,1087164,1101225,1115654,1130465,1145673,1161294,1177345, - 1193846,1210813,1228269,1246234,1264730,1283783,1303416,1323658, - 1344537,1366084,1388330,1411312,1435065,1459630,1485049,1511367, - 1538632,1566898,1596220,1626658,1658278,1691149,1725348,1760956, - 1798063,1836758,1877161,1919378,1963536,2009771,2058233,2109087, - 2162516,2218719,2277919,2340362,2406322,2476104,2550052,2628549, - 2712030,2800983,2895966,2997613,3106651,3223918,3350381,3487165, - 3635590,3797206,3973855,4167737,4381502,4618375,4882318,5178251, - 5512368,5892567,6329090,6835455,7429880,8137527,8994149,10052327, - 11392683,13145455,15535599,18988036,24413316,34178904,56965752,170910304 -}; +const fixed_t finetangent[4096] = { + -170910304, -56965752, -34178904, -24413316, -18988036, -15535599, -13145455, + -11392683, -10052327, -8994149, -8137527, -7429880, -6835455, -6329090, + -5892567, -5512368, -5178251, -4882318, -4618375, -4381502, -4167737, + -3973855, -3797206, -3635590, -3487165, -3350381, -3223918, -3106651, + -2997613, -2895966, -2800983, -2712030, -2628549, -2550052, -2476104, + -2406322, -2340362, -2277919, -2218719, -2162516, -2109087, -2058233, + -2009771, -1963536, -1919378, -1877161, -1836758, -1798063, -1760956, + -1725348, -1691149, -1658278, -1626658, -1596220, -1566898, -1538632, + -1511367, -1485049, -1459630, -1435065, -1411312, -1388330, -1366084, + -1344537, -1323658, -1303416, -1283783, -1264730, -1246234, -1228269, + -1210813, -1193846, -1177345, -1161294, -1145673, -1130465, -1115654, + -1101225, -1087164, -1073455, -1060087, -1047046, -1034322, -1021901, + -1009774, -997931, -986361, -975054, -964003, -953199, -942633, + -932298, -922186, -912289, -902602, -893117, -883829, -874730, + -865817, -857081, -848520, -840127, -831898, -823827, -815910, + -808143, -800521, -793041, -785699, -778490, -771411, -764460, + -757631, -750922, -744331, -737853, -731486, -725227, -719074, + -713023, -707072, -701219, -695462, -689797, -684223, -678737, + -673338, -668024, -662792, -657640, -652568, -647572, -642651, + -637803, -633028, -628323, -623686, -619117, -614613, -610174, + -605798, -601483, -597229, -593033, -588896, -584815, -580789, + -576818, -572901, -569035, -565221, -561456, -557741, -554074, + -550455, -546881, -543354, -539870, -536431, -533034, -529680, + -526366, -523094, -519861, -516667, -513512, -510394, -507313, + -504269, -501261, -498287, -495348, -492443, -489571, -486732, + -483925, -481150, -478406, -475692, -473009, -470355, -467730, + -465133, -462565, -460024, -457511, -455024, -452564, -450129, + -447720, -445337, -442978, -440643, -438332, -436045, -433781, + -431540, -429321, -427125, -424951, -422798, -420666, -418555, + -416465, -414395, -412344, -410314, -408303, -406311, -404338, + -402384, -400448, -398530, -396630, -394747, -392882, -391034, + -389202, -387387, -385589, -383807, -382040, -380290, -378555, + -376835, -375130, -373440, -371765, -370105, -368459, -366826, + -365208, -363604, -362013, -360436, -358872, -357321, -355783, + -354257, -352744, -351244, -349756, -348280, -346816, -345364, + -343924, -342495, -341078, -339671, -338276, -336892, -335519, + -334157, -332805, -331464, -330133, -328812, -327502, -326201, + -324910, -323629, -322358, -321097, -319844, -318601, -317368, + -316143, -314928, -313721, -312524, -311335, -310154, -308983, + -307819, -306664, -305517, -304379, -303248, -302126, -301011, + -299904, -298805, -297714, -296630, -295554, -294485, -293423, + -292369, -291322, -290282, -289249, -288223, -287204, -286192, + -285186, -284188, -283195, -282210, -281231, -280258, -279292, + -278332, -277378, -276430, -275489, -274553, -273624, -272700, + -271782, -270871, -269965, -269064, -268169, -267280, -266397, + -265519, -264646, -263779, -262917, -262060, -261209, -260363, + -259522, -258686, -257855, -257029, -256208, -255392, -254581, + -253774, -252973, -252176, -251384, -250596, -249813, -249035, + -248261, -247492, -246727, -245966, -245210, -244458, -243711, + -242967, -242228, -241493, -240763, -240036, -239314, -238595, + -237881, -237170, -236463, -235761, -235062, -234367, -233676, + -232988, -232304, -231624, -230948, -230275, -229606, -228941, + -228279, -227621, -226966, -226314, -225666, -225022, -224381, + -223743, -223108, -222477, -221849, -221225, -220603, -219985, + -219370, -218758, -218149, -217544, -216941, -216341, -215745, + -215151, -214561, -213973, -213389, -212807, -212228, -211652, + -211079, -210509, -209941, -209376, -208815, -208255, -207699, + -207145, -206594, -206045, -205500, -204956, -204416, -203878, + -203342, -202809, -202279, -201751, -201226, -200703, -200182, + -199664, -199149, -198636, -198125, -197616, -197110, -196606, + -196105, -195606, -195109, -194614, -194122, -193631, -193143, + -192658, -192174, -191693, -191213, -190736, -190261, -189789, + -189318, -188849, -188382, -187918, -187455, -186995, -186536, + -186080, -185625, -185173, -184722, -184274, -183827, -183382, + -182939, -182498, -182059, -181622, -181186, -180753, -180321, + -179891, -179463, -179037, -178612, -178190, -177769, -177349, + -176932, -176516, -176102, -175690, -175279, -174870, -174463, + -174057, -173653, -173251, -172850, -172451, -172053, -171657, + -171263, -170870, -170479, -170089, -169701, -169315, -168930, + -168546, -168164, -167784, -167405, -167027, -166651, -166277, + -165904, -165532, -165162, -164793, -164426, -164060, -163695, + -163332, -162970, -162610, -162251, -161893, -161537, -161182, + -160828, -160476, -160125, -159775, -159427, -159079, -158734, + -158389, -158046, -157704, -157363, -157024, -156686, -156349, + -156013, -155678, -155345, -155013, -154682, -154352, -154024, + -153697, -153370, -153045, -152722, -152399, -152077, -151757, + -151438, -151120, -150803, -150487, -150172, -149859, -149546, + -149235, -148924, -148615, -148307, -148000, -147693, -147388, + -147084, -146782, -146480, -146179, -145879, -145580, -145282, + -144986, -144690, -144395, -144101, -143808, -143517, -143226, + -142936, -142647, -142359, -142072, -141786, -141501, -141217, + -140934, -140651, -140370, -140090, -139810, -139532, -139254, + -138977, -138701, -138426, -138152, -137879, -137607, -137335, + -137065, -136795, -136526, -136258, -135991, -135725, -135459, + -135195, -134931, -134668, -134406, -134145, -133884, -133625, + -133366, -133108, -132851, -132594, -132339, -132084, -131830, + -131576, -131324, -131072, -130821, -130571, -130322, -130073, + -129825, -129578, -129332, -129086, -128841, -128597, -128353, + -128111, -127869, -127627, -127387, -127147, -126908, -126669, + -126432, -126195, -125959, -125723, -125488, -125254, -125020, + -124787, -124555, -124324, -124093, -123863, -123633, -123404, + -123176, -122949, -122722, -122496, -122270, -122045, -121821, + -121597, -121374, -121152, -120930, -120709, -120489, -120269, + -120050, -119831, -119613, -119396, -119179, -118963, -118747, + -118532, -118318, -118104, -117891, -117678, -117466, -117254, + -117044, -116833, -116623, -116414, -116206, -115998, -115790, + -115583, -115377, -115171, -114966, -114761, -114557, -114354, + -114151, -113948, -113746, -113545, -113344, -113143, -112944, + -112744, -112546, -112347, -112150, -111952, -111756, -111560, + -111364, -111169, -110974, -110780, -110586, -110393, -110200, + -110008, -109817, -109626, -109435, -109245, -109055, -108866, + -108677, -108489, -108301, -108114, -107927, -107741, -107555, + -107369, -107184, -107000, -106816, -106632, -106449, -106266, + -106084, -105902, -105721, -105540, -105360, -105180, -105000, + -104821, -104643, -104465, -104287, -104109, -103933, -103756, + -103580, -103404, -103229, -103054, -102880, -102706, -102533, + -102360, -102187, -102015, -101843, -101671, -101500, -101330, + -101159, -100990, -100820, -100651, -100482, -100314, -100146, + -99979, -99812, -99645, -99479, -99313, -99148, -98982, + -98818, -98653, -98489, -98326, -98163, -98000, -97837, + -97675, -97513, -97352, -97191, -97030, -96870, -96710, + -96551, -96391, -96233, -96074, -95916, -95758, -95601, + -95444, -95287, -95131, -94975, -94819, -94664, -94509, + -94354, -94200, -94046, -93892, -93739, -93586, -93434, + -93281, -93129, -92978, -92826, -92675, -92525, -92375, + -92225, -92075, -91926, -91777, -91628, -91480, -91332, + -91184, -91036, -90889, -90742, -90596, -90450, -90304, + -90158, -90013, -89868, -89724, -89579, -89435, -89292, + -89148, -89005, -88862, -88720, -88577, -88435, -88294, + -88152, -88011, -87871, -87730, -87590, -87450, -87310, + -87171, -87032, -86893, -86755, -86616, -86479, -86341, + -86204, -86066, -85930, -85793, -85657, -85521, -85385, + -85250, -85114, -84980, -84845, -84710, -84576, -84443, + -84309, -84176, -84043, -83910, -83777, -83645, -83513, + -83381, -83250, -83118, -82987, -82857, -82726, -82596, + -82466, -82336, -82207, -82078, -81949, -81820, -81691, + -81563, -81435, -81307, -81180, -81053, -80925, -80799, + -80672, -80546, -80420, -80294, -80168, -80043, -79918, + -79793, -79668, -79544, -79420, -79296, -79172, -79048, + -78925, -78802, -78679, -78557, -78434, -78312, -78190, + -78068, -77947, -77826, -77705, -77584, -77463, -77343, + -77223, -77103, -76983, -76864, -76744, -76625, -76506, + -76388, -76269, -76151, -76033, -75915, -75797, -75680, + -75563, -75446, -75329, -75213, -75096, -74980, -74864, + -74748, -74633, -74517, -74402, -74287, -74172, -74058, + -73944, -73829, -73715, -73602, -73488, -73375, -73262, + -73149, -73036, -72923, -72811, -72699, -72587, -72475, + -72363, -72252, -72140, -72029, -71918, -71808, -71697, + -71587, -71477, -71367, -71257, -71147, -71038, -70929, + -70820, -70711, -70602, -70494, -70385, -70277, -70169, + -70061, -69954, -69846, -69739, -69632, -69525, -69418, + -69312, -69205, -69099, -68993, -68887, -68781, -68676, + -68570, -68465, -68360, -68255, -68151, -68046, -67942, + -67837, -67733, -67629, -67526, -67422, -67319, -67216, + -67113, -67010, -66907, -66804, -66702, -66600, -66498, + -66396, -66294, -66192, -66091, -65989, -65888, -65787, + -65686, -65586, -65485, -65385, -65285, -65185, -65085, + -64985, -64885, -64786, -64687, -64587, -64488, -64389, + -64291, -64192, -64094, -63996, -63897, -63799, -63702, + -63604, -63506, -63409, -63312, -63215, -63118, -63021, + -62924, -62828, -62731, -62635, -62539, -62443, -62347, + -62251, -62156, -62060, -61965, -61870, -61775, -61680, + -61585, -61491, -61396, -61302, -61208, -61114, -61020, + -60926, -60833, -60739, -60646, -60552, -60459, -60366, + -60273, -60181, -60088, -59996, -59903, -59811, -59719, + -59627, -59535, -59444, -59352, -59261, -59169, -59078, + -58987, -58896, -58805, -58715, -58624, -58534, -58443, + -58353, -58263, -58173, -58083, -57994, -57904, -57815, + -57725, -57636, -57547, -57458, -57369, -57281, -57192, + -57104, -57015, -56927, -56839, -56751, -56663, -56575, + -56487, -56400, -56312, -56225, -56138, -56051, -55964, + -55877, -55790, -55704, -55617, -55531, -55444, -55358, + -55272, -55186, -55100, -55015, -54929, -54843, -54758, + -54673, -54587, -54502, -54417, -54333, -54248, -54163, + -54079, -53994, -53910, -53826, -53741, -53657, -53574, + -53490, -53406, -53322, -53239, -53156, -53072, -52989, + -52906, -52823, -52740, -52657, -52575, -52492, -52410, + -52327, -52245, -52163, -52081, -51999, -51917, -51835, + -51754, -51672, -51591, -51509, -51428, -51347, -51266, + -51185, -51104, -51023, -50942, -50862, -50781, -50701, + -50621, -50540, -50460, -50380, -50300, -50221, -50141, + -50061, -49982, -49902, -49823, -49744, -49664, -49585, + -49506, -49427, -49349, -49270, -49191, -49113, -49034, + -48956, -48878, -48799, -48721, -48643, -48565, -48488, + -48410, -48332, -48255, -48177, -48100, -48022, -47945, + -47868, -47791, -47714, -47637, -47560, -47484, -47407, + -47331, -47254, -47178, -47102, -47025, -46949, -46873, + -46797, -46721, -46646, -46570, -46494, -46419, -46343, + -46268, -46193, -46118, -46042, -45967, -45892, -45818, + -45743, -45668, -45593, -45519, -45444, -45370, -45296, + -45221, -45147, -45073, -44999, -44925, -44851, -44778, + -44704, -44630, -44557, -44483, -44410, -44337, -44263, + -44190, -44117, -44044, -43971, -43898, -43826, -43753, + -43680, -43608, -43535, -43463, -43390, -43318, -43246, + -43174, -43102, -43030, -42958, -42886, -42814, -42743, + -42671, -42600, -42528, -42457, -42385, -42314, -42243, + -42172, -42101, -42030, -41959, -41888, -41817, -41747, + -41676, -41605, -41535, -41465, -41394, -41324, -41254, + -41184, -41113, -41043, -40973, -40904, -40834, -40764, + -40694, -40625, -40555, -40486, -40416, -40347, -40278, + -40208, -40139, -40070, -40001, -39932, -39863, -39794, + -39726, -39657, -39588, -39520, -39451, -39383, -39314, + -39246, -39178, -39110, -39042, -38973, -38905, -38837, + -38770, -38702, -38634, -38566, -38499, -38431, -38364, + -38296, -38229, -38161, -38094, -38027, -37960, -37893, + -37826, -37759, -37692, -37625, -37558, -37491, -37425, + -37358, -37291, -37225, -37158, -37092, -37026, -36959, + -36893, -36827, -36761, -36695, -36629, -36563, -36497, + -36431, -36365, -36300, -36234, -36168, -36103, -36037, + -35972, -35907, -35841, -35776, -35711, -35646, -35580, + -35515, -35450, -35385, -35321, -35256, -35191, -35126, + -35062, -34997, -34932, -34868, -34803, -34739, -34675, + -34610, -34546, -34482, -34418, -34354, -34289, -34225, + -34162, -34098, -34034, -33970, -33906, -33843, -33779, + -33715, -33652, -33588, -33525, -33461, -33398, -33335, + -33272, -33208, -33145, -33082, -33019, -32956, -32893, + -32830, -32767, -32705, -32642, -32579, -32516, -32454, + -32391, -32329, -32266, -32204, -32141, -32079, -32017, + -31955, -31892, -31830, -31768, -31706, -31644, -31582, + -31520, -31458, -31396, -31335, -31273, -31211, -31150, + -31088, -31026, -30965, -30904, -30842, -30781, -30719, + -30658, -30597, -30536, -30474, -30413, -30352, -30291, + -30230, -30169, -30108, -30048, -29987, -29926, -29865, + -29805, -29744, -29683, -29623, -29562, -29502, -29441, + -29381, -29321, -29260, -29200, -29140, -29080, -29020, + -28959, -28899, -28839, -28779, -28719, -28660, -28600, + -28540, -28480, -28420, -28361, -28301, -28241, -28182, + -28122, -28063, -28003, -27944, -27884, -27825, -27766, + -27707, -27647, -27588, -27529, -27470, -27411, -27352, + -27293, -27234, -27175, -27116, -27057, -26998, -26940, + -26881, -26822, -26763, -26705, -26646, -26588, -26529, + -26471, -26412, -26354, -26295, -26237, -26179, -26120, + -26062, -26004, -25946, -25888, -25830, -25772, -25714, + -25656, -25598, -25540, -25482, -25424, -25366, -25308, + -25251, -25193, -25135, -25078, -25020, -24962, -24905, + -24847, -24790, -24732, -24675, -24618, -24560, -24503, + -24446, -24389, -24331, -24274, -24217, -24160, -24103, + -24046, -23989, -23932, -23875, -23818, -23761, -23704, + -23647, -23591, -23534, -23477, -23420, -23364, -23307, + -23250, -23194, -23137, -23081, -23024, -22968, -22911, + -22855, -22799, -22742, -22686, -22630, -22573, -22517, + -22461, -22405, -22349, -22293, -22237, -22181, -22125, + -22069, -22013, -21957, -21901, -21845, -21789, -21733, + -21678, -21622, -21566, -21510, -21455, -21399, -21343, + -21288, -21232, -21177, -21121, -21066, -21010, -20955, + -20900, -20844, -20789, -20734, -20678, -20623, -20568, + -20513, -20457, -20402, -20347, -20292, -20237, -20182, + -20127, -20072, -20017, -19962, -19907, -19852, -19797, + -19742, -19688, -19633, -19578, -19523, -19469, -19414, + -19359, -19305, -19250, -19195, -19141, -19086, -19032, + -18977, -18923, -18868, -18814, -18760, -18705, -18651, + -18597, -18542, -18488, -18434, -18380, -18325, -18271, + -18217, -18163, -18109, -18055, -18001, -17946, -17892, + -17838, -17784, -17731, -17677, -17623, -17569, -17515, + -17461, -17407, -17353, -17300, -17246, -17192, -17138, + -17085, -17031, -16977, -16924, -16870, -16817, -16763, + -16710, -16656, -16603, -16549, -16496, -16442, -16389, + -16335, -16282, -16229, -16175, -16122, -16069, -16015, + -15962, -15909, -15856, -15802, -15749, -15696, -15643, + -15590, -15537, -15484, -15431, -15378, -15325, -15272, + -15219, -15166, -15113, -15060, -15007, -14954, -14901, + -14848, -14795, -14743, -14690, -14637, -14584, -14531, + -14479, -14426, -14373, -14321, -14268, -14215, -14163, + -14110, -14057, -14005, -13952, -13900, -13847, -13795, + -13742, -13690, -13637, -13585, -13533, -13480, -13428, + -13375, -13323, -13271, -13218, -13166, -13114, -13062, + -13009, -12957, -12905, -12853, -12800, -12748, -12696, + -12644, -12592, -12540, -12488, -12436, -12383, -12331, + -12279, -12227, -12175, -12123, -12071, -12019, -11967, + -11916, -11864, -11812, -11760, -11708, -11656, -11604, + -11552, -11501, -11449, -11397, -11345, -11293, -11242, + -11190, -11138, -11086, -11035, -10983, -10931, -10880, + -10828, -10777, -10725, -10673, -10622, -10570, -10519, + -10467, -10415, -10364, -10312, -10261, -10209, -10158, + -10106, -10055, -10004, -9952, -9901, -9849, -9798, + -9747, -9695, -9644, -9592, -9541, -9490, -9438, + -9387, -9336, -9285, -9233, -9182, -9131, -9080, + -9028, -8977, -8926, -8875, -8824, -8772, -8721, + -8670, -8619, -8568, -8517, -8466, -8414, -8363, + -8312, -8261, -8210, -8159, -8108, -8057, -8006, + -7955, -7904, -7853, -7802, -7751, -7700, -7649, + -7598, -7547, -7496, -7445, -7395, -7344, -7293, + -7242, -7191, -7140, -7089, -7038, -6988, -6937, + -6886, -6835, -6784, -6733, -6683, -6632, -6581, + -6530, -6480, -6429, -6378, -6327, -6277, -6226, + -6175, -6124, -6074, -6023, -5972, -5922, -5871, + -5820, -5770, -5719, -5668, -5618, -5567, -5517, + -5466, -5415, -5365, -5314, -5264, -5213, -5162, + -5112, -5061, -5011, -4960, -4910, -4859, -4808, + -4758, -4707, -4657, -4606, -4556, -4505, -4455, + -4404, -4354, -4303, -4253, -4202, -4152, -4101, + -4051, -4001, -3950, -3900, -3849, -3799, -3748, + -3698, -3648, -3597, -3547, -3496, -3446, -3395, + -3345, -3295, -3244, -3194, -3144, -3093, -3043, + -2992, -2942, -2892, -2841, -2791, -2741, -2690, + -2640, -2590, -2539, -2489, -2439, -2388, -2338, + -2288, -2237, -2187, -2137, -2086, -2036, -1986, + -1935, -1885, -1835, -1784, -1734, -1684, -1633, + -1583, -1533, -1483, -1432, -1382, -1332, -1281, + -1231, -1181, -1131, -1080, -1030, -980, -929, + -879, -829, -779, -728, -678, -628, -578, + -527, -477, -427, -376, -326, -276, -226, + -175, -125, -75, -25, 25, 75, 125, + 175, 226, 276, 326, 376, 427, 477, + 527, 578, 628, 678, 728, 779, 829, + 879, 929, 980, 1030, 1080, 1131, 1181, + 1231, 1281, 1332, 1382, 1432, 1483, 1533, + 1583, 1633, 1684, 1734, 1784, 1835, 1885, + 1935, 1986, 2036, 2086, 2137, 2187, 2237, + 2288, 2338, 2388, 2439, 2489, 2539, 2590, + 2640, 2690, 2741, 2791, 2841, 2892, 2942, + 2992, 3043, 3093, 3144, 3194, 3244, 3295, + 3345, 3395, 3446, 3496, 3547, 3597, 3648, + 3698, 3748, 3799, 3849, 3900, 3950, 4001, + 4051, 4101, 4152, 4202, 4253, 4303, 4354, + 4404, 4455, 4505, 4556, 4606, 4657, 4707, + 4758, 4808, 4859, 4910, 4960, 5011, 5061, + 5112, 5162, 5213, 5264, 5314, 5365, 5415, + 5466, 5517, 5567, 5618, 5668, 5719, 5770, + 5820, 5871, 5922, 5972, 6023, 6074, 6124, + 6175, 6226, 6277, 6327, 6378, 6429, 6480, + 6530, 6581, 6632, 6683, 6733, 6784, 6835, + 6886, 6937, 6988, 7038, 7089, 7140, 7191, + 7242, 7293, 7344, 7395, 7445, 7496, 7547, + 7598, 7649, 7700, 7751, 7802, 7853, 7904, + 7955, 8006, 8057, 8108, 8159, 8210, 8261, + 8312, 8363, 8414, 8466, 8517, 8568, 8619, + 8670, 8721, 8772, 8824, 8875, 8926, 8977, + 9028, 9080, 9131, 9182, 9233, 9285, 9336, + 9387, 9438, 9490, 9541, 9592, 9644, 9695, + 9747, 9798, 9849, 9901, 9952, 10004, 10055, + 10106, 10158, 10209, 10261, 10312, 10364, 10415, + 10467, 10519, 10570, 10622, 10673, 10725, 10777, + 10828, 10880, 10931, 10983, 11035, 11086, 11138, + 11190, 11242, 11293, 11345, 11397, 11449, 11501, + 11552, 11604, 11656, 11708, 11760, 11812, 11864, + 11916, 11967, 12019, 12071, 12123, 12175, 12227, + 12279, 12331, 12383, 12436, 12488, 12540, 12592, + 12644, 12696, 12748, 12800, 12853, 12905, 12957, + 13009, 13062, 13114, 13166, 13218, 13271, 13323, + 13375, 13428, 13480, 13533, 13585, 13637, 13690, + 13742, 13795, 13847, 13900, 13952, 14005, 14057, + 14110, 14163, 14215, 14268, 14321, 14373, 14426, + 14479, 14531, 14584, 14637, 14690, 14743, 14795, + 14848, 14901, 14954, 15007, 15060, 15113, 15166, + 15219, 15272, 15325, 15378, 15431, 15484, 15537, + 15590, 15643, 15696, 15749, 15802, 15856, 15909, + 15962, 16015, 16069, 16122, 16175, 16229, 16282, + 16335, 16389, 16442, 16496, 16549, 16603, 16656, + 16710, 16763, 16817, 16870, 16924, 16977, 17031, + 17085, 17138, 17192, 17246, 17300, 17353, 17407, + 17461, 17515, 17569, 17623, 17677, 17731, 17784, + 17838, 17892, 17946, 18001, 18055, 18109, 18163, + 18217, 18271, 18325, 18380, 18434, 18488, 18542, + 18597, 18651, 18705, 18760, 18814, 18868, 18923, + 18977, 19032, 19086, 19141, 19195, 19250, 19305, + 19359, 19414, 19469, 19523, 19578, 19633, 19688, + 19742, 19797, 19852, 19907, 19962, 20017, 20072, + 20127, 20182, 20237, 20292, 20347, 20402, 20457, + 20513, 20568, 20623, 20678, 20734, 20789, 20844, + 20900, 20955, 21010, 21066, 21121, 21177, 21232, + 21288, 21343, 21399, 21455, 21510, 21566, 21622, + 21678, 21733, 21789, 21845, 21901, 21957, 22013, + 22069, 22125, 22181, 22237, 22293, 22349, 22405, + 22461, 22517, 22573, 22630, 22686, 22742, 22799, + 22855, 22911, 22968, 23024, 23081, 23137, 23194, + 23250, 23307, 23364, 23420, 23477, 23534, 23591, + 23647, 23704, 23761, 23818, 23875, 23932, 23989, + 24046, 24103, 24160, 24217, 24274, 24331, 24389, + 24446, 24503, 24560, 24618, 24675, 24732, 24790, + 24847, 24905, 24962, 25020, 25078, 25135, 25193, + 25251, 25308, 25366, 25424, 25482, 25540, 25598, + 25656, 25714, 25772, 25830, 25888, 25946, 26004, + 26062, 26120, 26179, 26237, 26295, 26354, 26412, + 26471, 26529, 26588, 26646, 26705, 26763, 26822, + 26881, 26940, 26998, 27057, 27116, 27175, 27234, + 27293, 27352, 27411, 27470, 27529, 27588, 27647, + 27707, 27766, 27825, 27884, 27944, 28003, 28063, + 28122, 28182, 28241, 28301, 28361, 28420, 28480, + 28540, 28600, 28660, 28719, 28779, 28839, 28899, + 28959, 29020, 29080, 29140, 29200, 29260, 29321, + 29381, 29441, 29502, 29562, 29623, 29683, 29744, + 29805, 29865, 29926, 29987, 30048, 30108, 30169, + 30230, 30291, 30352, 30413, 30474, 30536, 30597, + 30658, 30719, 30781, 30842, 30904, 30965, 31026, + 31088, 31150, 31211, 31273, 31335, 31396, 31458, + 31520, 31582, 31644, 31706, 31768, 31830, 31892, + 31955, 32017, 32079, 32141, 32204, 32266, 32329, + 32391, 32454, 32516, 32579, 32642, 32705, 32767, + 32830, 32893, 32956, 33019, 33082, 33145, 33208, + 33272, 33335, 33398, 33461, 33525, 33588, 33652, + 33715, 33779, 33843, 33906, 33970, 34034, 34098, + 34162, 34225, 34289, 34354, 34418, 34482, 34546, + 34610, 34675, 34739, 34803, 34868, 34932, 34997, + 35062, 35126, 35191, 35256, 35321, 35385, 35450, + 35515, 35580, 35646, 35711, 35776, 35841, 35907, + 35972, 36037, 36103, 36168, 36234, 36300, 36365, + 36431, 36497, 36563, 36629, 36695, 36761, 36827, + 36893, 36959, 37026, 37092, 37158, 37225, 37291, + 37358, 37425, 37491, 37558, 37625, 37692, 37759, + 37826, 37893, 37960, 38027, 38094, 38161, 38229, + 38296, 38364, 38431, 38499, 38566, 38634, 38702, + 38770, 38837, 38905, 38973, 39042, 39110, 39178, + 39246, 39314, 39383, 39451, 39520, 39588, 39657, + 39726, 39794, 39863, 39932, 40001, 40070, 40139, + 40208, 40278, 40347, 40416, 40486, 40555, 40625, + 40694, 40764, 40834, 40904, 40973, 41043, 41113, + 41184, 41254, 41324, 41394, 41465, 41535, 41605, + 41676, 41747, 41817, 41888, 41959, 42030, 42101, + 42172, 42243, 42314, 42385, 42457, 42528, 42600, + 42671, 42743, 42814, 42886, 42958, 43030, 43102, + 43174, 43246, 43318, 43390, 43463, 43535, 43608, + 43680, 43753, 43826, 43898, 43971, 44044, 44117, + 44190, 44263, 44337, 44410, 44483, 44557, 44630, + 44704, 44778, 44851, 44925, 44999, 45073, 45147, + 45221, 45296, 45370, 45444, 45519, 45593, 45668, + 45743, 45818, 45892, 45967, 46042, 46118, 46193, + 46268, 46343, 46419, 46494, 46570, 46646, 46721, + 46797, 46873, 46949, 47025, 47102, 47178, 47254, + 47331, 47407, 47484, 47560, 47637, 47714, 47791, + 47868, 47945, 48022, 48100, 48177, 48255, 48332, + 48410, 48488, 48565, 48643, 48721, 48799, 48878, + 48956, 49034, 49113, 49191, 49270, 49349, 49427, + 49506, 49585, 49664, 49744, 49823, 49902, 49982, + 50061, 50141, 50221, 50300, 50380, 50460, 50540, + 50621, 50701, 50781, 50862, 50942, 51023, 51104, + 51185, 51266, 51347, 51428, 51509, 51591, 51672, + 51754, 51835, 51917, 51999, 52081, 52163, 52245, + 52327, 52410, 52492, 52575, 52657, 52740, 52823, + 52906, 52989, 53072, 53156, 53239, 53322, 53406, + 53490, 53574, 53657, 53741, 53826, 53910, 53994, + 54079, 54163, 54248, 54333, 54417, 54502, 54587, + 54673, 54758, 54843, 54929, 55015, 55100, 55186, + 55272, 55358, 55444, 55531, 55617, 55704, 55790, + 55877, 55964, 56051, 56138, 56225, 56312, 56400, + 56487, 56575, 56663, 56751, 56839, 56927, 57015, + 57104, 57192, 57281, 57369, 57458, 57547, 57636, + 57725, 57815, 57904, 57994, 58083, 58173, 58263, + 58353, 58443, 58534, 58624, 58715, 58805, 58896, + 58987, 59078, 59169, 59261, 59352, 59444, 59535, + 59627, 59719, 59811, 59903, 59996, 60088, 60181, + 60273, 60366, 60459, 60552, 60646, 60739, 60833, + 60926, 61020, 61114, 61208, 61302, 61396, 61491, + 61585, 61680, 61775, 61870, 61965, 62060, 62156, + 62251, 62347, 62443, 62539, 62635, 62731, 62828, + 62924, 63021, 63118, 63215, 63312, 63409, 63506, + 63604, 63702, 63799, 63897, 63996, 64094, 64192, + 64291, 64389, 64488, 64587, 64687, 64786, 64885, + 64985, 65085, 65185, 65285, 65385, 65485, 65586, + 65686, 65787, 65888, 65989, 66091, 66192, 66294, + 66396, 66498, 66600, 66702, 66804, 66907, 67010, + 67113, 67216, 67319, 67422, 67526, 67629, 67733, + 67837, 67942, 68046, 68151, 68255, 68360, 68465, + 68570, 68676, 68781, 68887, 68993, 69099, 69205, + 69312, 69418, 69525, 69632, 69739, 69846, 69954, + 70061, 70169, 70277, 70385, 70494, 70602, 70711, + 70820, 70929, 71038, 71147, 71257, 71367, 71477, + 71587, 71697, 71808, 71918, 72029, 72140, 72252, + 72363, 72475, 72587, 72699, 72811, 72923, 73036, + 73149, 73262, 73375, 73488, 73602, 73715, 73829, + 73944, 74058, 74172, 74287, 74402, 74517, 74633, + 74748, 74864, 74980, 75096, 75213, 75329, 75446, + 75563, 75680, 75797, 75915, 76033, 76151, 76269, + 76388, 76506, 76625, 76744, 76864, 76983, 77103, + 77223, 77343, 77463, 77584, 77705, 77826, 77947, + 78068, 78190, 78312, 78434, 78557, 78679, 78802, + 78925, 79048, 79172, 79296, 79420, 79544, 79668, + 79793, 79918, 80043, 80168, 80294, 80420, 80546, + 80672, 80799, 80925, 81053, 81180, 81307, 81435, + 81563, 81691, 81820, 81949, 82078, 82207, 82336, + 82466, 82596, 82726, 82857, 82987, 83118, 83250, + 83381, 83513, 83645, 83777, 83910, 84043, 84176, + 84309, 84443, 84576, 84710, 84845, 84980, 85114, + 85250, 85385, 85521, 85657, 85793, 85930, 86066, + 86204, 86341, 86479, 86616, 86755, 86893, 87032, + 87171, 87310, 87450, 87590, 87730, 87871, 88011, + 88152, 88294, 88435, 88577, 88720, 88862, 89005, + 89148, 89292, 89435, 89579, 89724, 89868, 90013, + 90158, 90304, 90450, 90596, 90742, 90889, 91036, + 91184, 91332, 91480, 91628, 91777, 91926, 92075, + 92225, 92375, 92525, 92675, 92826, 92978, 93129, + 93281, 93434, 93586, 93739, 93892, 94046, 94200, + 94354, 94509, 94664, 94819, 94975, 95131, 95287, + 95444, 95601, 95758, 95916, 96074, 96233, 96391, + 96551, 96710, 96870, 97030, 97191, 97352, 97513, + 97675, 97837, 98000, 98163, 98326, 98489, 98653, + 98818, 98982, 99148, 99313, 99479, 99645, 99812, + 99979, 100146, 100314, 100482, 100651, 100820, 100990, + 101159, 101330, 101500, 101671, 101843, 102015, 102187, + 102360, 102533, 102706, 102880, 103054, 103229, 103404, + 103580, 103756, 103933, 104109, 104287, 104465, 104643, + 104821, 105000, 105180, 105360, 105540, 105721, 105902, + 106084, 106266, 106449, 106632, 106816, 107000, 107184, + 107369, 107555, 107741, 107927, 108114, 108301, 108489, + 108677, 108866, 109055, 109245, 109435, 109626, 109817, + 110008, 110200, 110393, 110586, 110780, 110974, 111169, + 111364, 111560, 111756, 111952, 112150, 112347, 112546, + 112744, 112944, 113143, 113344, 113545, 113746, 113948, + 114151, 114354, 114557, 114761, 114966, 115171, 115377, + 115583, 115790, 115998, 116206, 116414, 116623, 116833, + 117044, 117254, 117466, 117678, 117891, 118104, 118318, + 118532, 118747, 118963, 119179, 119396, 119613, 119831, + 120050, 120269, 120489, 120709, 120930, 121152, 121374, + 121597, 121821, 122045, 122270, 122496, 122722, 122949, + 123176, 123404, 123633, 123863, 124093, 124324, 124555, + 124787, 125020, 125254, 125488, 125723, 125959, 126195, + 126432, 126669, 126908, 127147, 127387, 127627, 127869, + 128111, 128353, 128597, 128841, 129086, 129332, 129578, + 129825, 130073, 130322, 130571, 130821, 131072, 131324, + 131576, 131830, 132084, 132339, 132594, 132851, 133108, + 133366, 133625, 133884, 134145, 134406, 134668, 134931, + 135195, 135459, 135725, 135991, 136258, 136526, 136795, + 137065, 137335, 137607, 137879, 138152, 138426, 138701, + 138977, 139254, 139532, 139810, 140090, 140370, 140651, + 140934, 141217, 141501, 141786, 142072, 142359, 142647, + 142936, 143226, 143517, 143808, 144101, 144395, 144690, + 144986, 145282, 145580, 145879, 146179, 146480, 146782, + 147084, 147388, 147693, 148000, 148307, 148615, 148924, + 149235, 149546, 149859, 150172, 150487, 150803, 151120, + 151438, 151757, 152077, 152399, 152722, 153045, 153370, + 153697, 154024, 154352, 154682, 155013, 155345, 155678, + 156013, 156349, 156686, 157024, 157363, 157704, 158046, + 158389, 158734, 159079, 159427, 159775, 160125, 160476, + 160828, 161182, 161537, 161893, 162251, 162610, 162970, + 163332, 163695, 164060, 164426, 164793, 165162, 165532, + 165904, 166277, 166651, 167027, 167405, 167784, 168164, + 168546, 168930, 169315, 169701, 170089, 170479, 170870, + 171263, 171657, 172053, 172451, 172850, 173251, 173653, + 174057, 174463, 174870, 175279, 175690, 176102, 176516, + 176932, 177349, 177769, 178190, 178612, 179037, 179463, + 179891, 180321, 180753, 181186, 181622, 182059, 182498, + 182939, 183382, 183827, 184274, 184722, 185173, 185625, + 186080, 186536, 186995, 187455, 187918, 188382, 188849, + 189318, 189789, 190261, 190736, 191213, 191693, 192174, + 192658, 193143, 193631, 194122, 194614, 195109, 195606, + 196105, 196606, 197110, 197616, 198125, 198636, 199149, + 199664, 200182, 200703, 201226, 201751, 202279, 202809, + 203342, 203878, 204416, 204956, 205500, 206045, 206594, + 207145, 207699, 208255, 208815, 209376, 209941, 210509, + 211079, 211652, 212228, 212807, 213389, 213973, 214561, + 215151, 215745, 216341, 216941, 217544, 218149, 218758, + 219370, 219985, 220603, 221225, 221849, 222477, 223108, + 223743, 224381, 225022, 225666, 226314, 226966, 227621, + 228279, 228941, 229606, 230275, 230948, 231624, 232304, + 232988, 233676, 234367, 235062, 235761, 236463, 237170, + 237881, 238595, 239314, 240036, 240763, 241493, 242228, + 242967, 243711, 244458, 245210, 245966, 246727, 247492, + 248261, 249035, 249813, 250596, 251384, 252176, 252973, + 253774, 254581, 255392, 256208, 257029, 257855, 258686, + 259522, 260363, 261209, 262060, 262917, 263779, 264646, + 265519, 266397, 267280, 268169, 269064, 269965, 270871, + 271782, 272700, 273624, 274553, 275489, 276430, 277378, + 278332, 279292, 280258, 281231, 282210, 283195, 284188, + 285186, 286192, 287204, 288223, 289249, 290282, 291322, + 292369, 293423, 294485, 295554, 296630, 297714, 298805, + 299904, 301011, 302126, 303248, 304379, 305517, 306664, + 307819, 308983, 310154, 311335, 312524, 313721, 314928, + 316143, 317368, 318601, 319844, 321097, 322358, 323629, + 324910, 326201, 327502, 328812, 330133, 331464, 332805, + 334157, 335519, 336892, 338276, 339671, 341078, 342495, + 343924, 345364, 346816, 348280, 349756, 351244, 352744, + 354257, 355783, 357321, 358872, 360436, 362013, 363604, + 365208, 366826, 368459, 370105, 371765, 373440, 375130, + 376835, 378555, 380290, 382040, 383807, 385589, 387387, + 389202, 391034, 392882, 394747, 396630, 398530, 400448, + 402384, 404338, 406311, 408303, 410314, 412344, 414395, + 416465, 418555, 420666, 422798, 424951, 427125, 429321, + 431540, 433781, 436045, 438332, 440643, 442978, 445337, + 447720, 450129, 452564, 455024, 457511, 460024, 462565, + 465133, 467730, 470355, 473009, 475692, 478406, 481150, + 483925, 486732, 489571, 492443, 495348, 498287, 501261, + 504269, 507313, 510394, 513512, 516667, 519861, 523094, + 526366, 529680, 533034, 536431, 539870, 543354, 546881, + 550455, 554074, 557741, 561456, 565221, 569035, 572901, + 576818, 580789, 584815, 588896, 593033, 597229, 601483, + 605798, 610174, 614613, 619117, 623686, 628323, 633028, + 637803, 642651, 647572, 652568, 657640, 662792, 668024, + 673338, 678737, 684223, 689797, 695462, 701219, 707072, + 713023, 719074, 725227, 731486, 737853, 744331, 750922, + 757631, 764460, 771411, 778490, 785699, 793041, 800521, + 808143, 815910, 823827, 831898, 840127, 848520, 857081, + 865817, 874730, 883829, 893117, 902602, 912289, 922186, + 932298, 942633, 953199, 964003, 975054, 986361, 997931, + 1009774, 1021901, 1034322, 1047046, 1060087, 1073455, 1087164, + 1101225, 1115654, 1130465, 1145673, 1161294, 1177345, 1193846, + 1210813, 1228269, 1246234, 1264730, 1283783, 1303416, 1323658, + 1344537, 1366084, 1388330, 1411312, 1435065, 1459630, 1485049, + 1511367, 1538632, 1566898, 1596220, 1626658, 1658278, 1691149, + 1725348, 1760956, 1798063, 1836758, 1877161, 1919378, 1963536, + 2009771, 2058233, 2109087, 2162516, 2218719, 2277919, 2340362, + 2406322, 2476104, 2550052, 2628549, 2712030, 2800983, 2895966, + 2997613, 3106651, 3223918, 3350381, 3487165, 3635590, 3797206, + 3973855, 4167737, 4381502, 4618375, 4882318, 5178251, 5512368, + 5892567, 6329090, 6835455, 7429880, 8137527, 8994149, 10052327, + 11392683, 13145455, 15535599, 18988036, 24413316, 34178904, 56965752, + 170910304}; -const fixed_t finesine[10240] = -{ - 25,75,125,175,226,276,326,376, - 427,477,527,578,628,678,728,779, - 829,879,929,980,1030,1080,1130,1181, - 1231,1281,1331,1382,1432,1482,1532,1583, - 1633,1683,1733,1784,1834,1884,1934,1985, - 2035,2085,2135,2186,2236,2286,2336,2387, - 2437,2487,2537,2587,2638,2688,2738,2788, - 2839,2889,2939,2989,3039,3090,3140,3190, - 3240,3291,3341,3391,3441,3491,3541,3592, - 3642,3692,3742,3792,3843,3893,3943,3993, - 4043,4093,4144,4194,4244,4294,4344,4394, - 4445,4495,4545,4595,4645,4695,4745,4796, - 4846,4896,4946,4996,5046,5096,5146,5197, - 5247,5297,5347,5397,5447,5497,5547,5597, - 5647,5697,5748,5798,5848,5898,5948,5998, - 6048,6098,6148,6198,6248,6298,6348,6398, - 6448,6498,6548,6598,6648,6698,6748,6798, - 6848,6898,6948,6998,7048,7098,7148,7198, - 7248,7298,7348,7398,7448,7498,7548,7598, - 7648,7697,7747,7797,7847,7897,7947,7997, - 8047,8097,8147,8196,8246,8296,8346,8396, - 8446,8496,8545,8595,8645,8695,8745,8794, - 8844,8894,8944,8994,9043,9093,9143,9193, - 9243,9292,9342,9392,9442,9491,9541,9591, - 9640,9690,9740,9790,9839,9889,9939,9988, - 10038,10088,10137,10187,10237,10286,10336,10386, - 10435,10485,10534,10584,10634,10683,10733,10782, - 10832,10882,10931,10981,11030,11080,11129,11179, - 11228,11278,11327,11377,11426,11476,11525,11575, - 11624,11674,11723,11773,11822,11872,11921,11970, - 12020,12069,12119,12168,12218,12267,12316,12366, - 12415,12464,12514,12563,12612,12662,12711,12760, - 12810,12859,12908,12957,13007,13056,13105,13154, - 13204,13253,13302,13351,13401,13450,13499,13548, - 13597,13647,13696,13745,13794,13843,13892,13941, - 13990,14040,14089,14138,14187,14236,14285,14334, - 14383,14432,14481,14530,14579,14628,14677,14726, - 14775,14824,14873,14922,14971,15020,15069,15118, - 15167,15215,15264,15313,15362,15411,15460,15509, - 15557,15606,15655,15704,15753,15802,15850,15899, - 15948,15997,16045,16094,16143,16191,16240,16289, - 16338,16386,16435,16484,16532,16581,16629,16678, - 16727,16775,16824,16872,16921,16970,17018,17067, - 17115,17164,17212,17261,17309,17358,17406,17455, - 17503,17551,17600,17648,17697,17745,17793,17842, - 17890,17939,17987,18035,18084,18132,18180,18228, - 18277,18325,18373,18421,18470,18518,18566,18614, - 18663,18711,18759,18807,18855,18903,18951,19000, - 19048,19096,19144,19192,19240,19288,19336,19384, - 19432,19480,19528,19576,19624,19672,19720,19768, - 19816,19864,19912,19959,20007,20055,20103,20151, - 20199,20246,20294,20342,20390,20438,20485,20533, - 20581,20629,20676,20724,20772,20819,20867,20915, - 20962,21010,21057,21105,21153,21200,21248,21295, - 21343,21390,21438,21485,21533,21580,21628,21675, - 21723,21770,21817,21865,21912,21960,22007,22054, - 22102,22149,22196,22243,22291,22338,22385,22433, - 22480,22527,22574,22621,22668,22716,22763,22810, - 22857,22904,22951,22998,23045,23092,23139,23186, - 23233,23280,23327,23374,23421,23468,23515,23562, - 23609,23656,23703,23750,23796,23843,23890,23937, - 23984,24030,24077,24124,24171,24217,24264,24311, - 24357,24404,24451,24497,24544,24591,24637,24684, - 24730,24777,24823,24870,24916,24963,25009,25056, - 25102,25149,25195,25241,25288,25334,25381,25427, - 25473,25520,25566,25612,25658,25705,25751,25797, - 25843,25889,25936,25982,26028,26074,26120,26166, - 26212,26258,26304,26350,26396,26442,26488,26534, - 26580,26626,26672,26718,26764,26810,26856,26902, - 26947,26993,27039,27085,27131,27176,27222,27268, - 27313,27359,27405,27450,27496,27542,27587,27633, - 27678,27724,27770,27815,27861,27906,27952,27997, - 28042,28088,28133,28179,28224,28269,28315,28360, - 28405,28451,28496,28541,28586,28632,28677,28722, - 28767,28812,28858,28903,28948,28993,29038,29083, - 29128,29173,29218,29263,29308,29353,29398,29443, - 29488,29533,29577,29622,29667,29712,29757,29801, - 29846,29891,29936,29980,30025,30070,30114,30159, - 30204,30248,30293,30337,30382,30426,30471,30515, - 30560,30604,30649,30693,30738,30782,30826,30871, - 30915,30959,31004,31048,31092,31136,31181,31225, - 31269,31313,31357,31402,31446,31490,31534,31578, - 31622,31666,31710,31754,31798,31842,31886,31930, - 31974,32017,32061,32105,32149,32193,32236,32280, - 32324,32368,32411,32455,32499,32542,32586,32630, - 32673,32717,32760,32804,32847,32891,32934,32978, - 33021,33065,33108,33151,33195,33238,33281,33325, - 33368,33411,33454,33498,33541,33584,33627,33670, - 33713,33756,33799,33843,33886,33929,33972,34015, - 34057,34100,34143,34186,34229,34272,34315,34358, - 34400,34443,34486,34529,34571,34614,34657,34699, - 34742,34785,34827,34870,34912,34955,34997,35040, - 35082,35125,35167,35210,35252,35294,35337,35379, - 35421,35464,35506,35548,35590,35633,35675,35717, - 35759,35801,35843,35885,35927,35969,36011,36053, - 36095,36137,36179,36221,36263,36305,36347,36388, - 36430,36472,36514,36555,36597,36639,36681,36722, - 36764,36805,36847,36889,36930,36972,37013,37055, - 37096,37137,37179,37220,37262,37303,37344,37386, - 37427,37468,37509,37551,37592,37633,37674,37715, - 37756,37797,37838,37879,37920,37961,38002,38043, - 38084,38125,38166,38207,38248,38288,38329,38370, - 38411,38451,38492,38533,38573,38614,38655,38695, - 38736,38776,38817,38857,38898,38938,38979,39019, - 39059,39100,39140,39180,39221,39261,39301,39341, - 39382,39422,39462,39502,39542,39582,39622,39662, - 39702,39742,39782,39822,39862,39902,39942,39982, - 40021,40061,40101,40141,40180,40220,40260,40300, - 40339,40379,40418,40458,40497,40537,40576,40616, - 40655,40695,40734,40773,40813,40852,40891,40931, - 40970,41009,41048,41087,41127,41166,41205,41244, - 41283,41322,41361,41400,41439,41478,41517,41556, - 41595,41633,41672,41711,41750,41788,41827,41866, - 41904,41943,41982,42020,42059,42097,42136,42174, - 42213,42251,42290,42328,42366,42405,42443,42481, - 42520,42558,42596,42634,42672,42711,42749,42787, - 42825,42863,42901,42939,42977,43015,43053,43091, - 43128,43166,43204,43242,43280,43317,43355,43393, - 43430,43468,43506,43543,43581,43618,43656,43693, - 43731,43768,43806,43843,43880,43918,43955,43992, - 44029,44067,44104,44141,44178,44215,44252,44289, - 44326,44363,44400,44437,44474,44511,44548,44585, - 44622,44659,44695,44732,44769,44806,44842,44879, - 44915,44952,44989,45025,45062,45098,45135,45171, - 45207,45244,45280,45316,45353,45389,45425,45462, - 45498,45534,45570,45606,45642,45678,45714,45750, - 45786,45822,45858,45894,45930,45966,46002,46037, - 46073,46109,46145,46180,46216,46252,46287,46323, - 46358,46394,46429,46465,46500,46536,46571,46606, - 46642,46677,46712,46747,46783,46818,46853,46888, - 46923,46958,46993,47028,47063,47098,47133,47168, - 47203,47238,47273,47308,47342,47377,47412,47446, - 47481,47516,47550,47585,47619,47654,47688,47723, - 47757,47792,47826,47860,47895,47929,47963,47998, - 48032,48066,48100,48134,48168,48202,48237,48271, - 48305,48338,48372,48406,48440,48474,48508,48542, - 48575,48609,48643,48676,48710,48744,48777,48811, - 48844,48878,48911,48945,48978,49012,49045,49078, - 49112,49145,49178,49211,49244,49278,49311,49344, - 49377,49410,49443,49476,49509,49542,49575,49608, - 49640,49673,49706,49739,49771,49804,49837,49869, - 49902,49935,49967,50000,50032,50065,50097,50129, - 50162,50194,50226,50259,50291,50323,50355,50387, - 50420,50452,50484,50516,50548,50580,50612,50644, - 50675,50707,50739,50771,50803,50834,50866,50898, - 50929,50961,50993,51024,51056,51087,51119,51150, - 51182,51213,51244,51276,51307,51338,51369,51401, - 51432,51463,51494,51525,51556,51587,51618,51649, - 51680,51711,51742,51773,51803,51834,51865,51896, - 51926,51957,51988,52018,52049,52079,52110,52140, - 52171,52201,52231,52262,52292,52322,52353,52383, - 52413,52443,52473,52503,52534,52564,52594,52624, - 52653,52683,52713,52743,52773,52803,52832,52862, - 52892,52922,52951,52981,53010,53040,53069,53099, - 53128,53158,53187,53216,53246,53275,53304,53334, - 53363,53392,53421,53450,53479,53508,53537,53566, - 53595,53624,53653,53682,53711,53739,53768,53797, - 53826,53854,53883,53911,53940,53969,53997,54026, - 54054,54082,54111,54139,54167,54196,54224,54252, - 54280,54308,54337,54365,54393,54421,54449,54477, - 54505,54533,54560,54588,54616,54644,54672,54699, - 54727,54755,54782,54810,54837,54865,54892,54920, - 54947,54974,55002,55029,55056,55084,55111,55138, - 55165,55192,55219,55246,55274,55300,55327,55354, - 55381,55408,55435,55462,55489,55515,55542,55569, - 55595,55622,55648,55675,55701,55728,55754,55781, - 55807,55833,55860,55886,55912,55938,55965,55991, - 56017,56043,56069,56095,56121,56147,56173,56199, - 56225,56250,56276,56302,56328,56353,56379,56404, - 56430,56456,56481,56507,56532,56557,56583,56608, - 56633,56659,56684,56709,56734,56760,56785,56810, - 56835,56860,56885,56910,56935,56959,56984,57009, - 57034,57059,57083,57108,57133,57157,57182,57206, - 57231,57255,57280,57304,57329,57353,57377,57402, - 57426,57450,57474,57498,57522,57546,57570,57594, - 57618,57642,57666,57690,57714,57738,57762,57785, - 57809,57833,57856,57880,57903,57927,57950,57974, - 57997,58021,58044,58067,58091,58114,58137,58160, - 58183,58207,58230,58253,58276,58299,58322,58345, - 58367,58390,58413,58436,58459,58481,58504,58527, - 58549,58572,58594,58617,58639,58662,58684,58706, - 58729,58751,58773,58795,58818,58840,58862,58884, - 58906,58928,58950,58972,58994,59016,59038,59059, - 59081,59103,59125,59146,59168,59190,59211,59233, - 59254,59276,59297,59318,59340,59361,59382,59404, - 59425,59446,59467,59488,59509,59530,59551,59572, - 59593,59614,59635,59656,59677,59697,59718,59739, - 59759,59780,59801,59821,59842,59862,59883,59903, - 59923,59944,59964,59984,60004,60025,60045,60065, - 60085,60105,60125,60145,60165,60185,60205,60225, - 60244,60264,60284,60304,60323,60343,60363,60382, - 60402,60421,60441,60460,60479,60499,60518,60537, - 60556,60576,60595,60614,60633,60652,60671,60690, - 60709,60728,60747,60766,60785,60803,60822,60841, - 60859,60878,60897,60915,60934,60952,60971,60989, - 61007,61026,61044,61062,61081,61099,61117,61135, - 61153,61171,61189,61207,61225,61243,61261,61279, - 61297,61314,61332,61350,61367,61385,61403,61420, - 61438,61455,61473,61490,61507,61525,61542,61559, - 61577,61594,61611,61628,61645,61662,61679,61696, - 61713,61730,61747,61764,61780,61797,61814,61831, - 61847,61864,61880,61897,61913,61930,61946,61963, - 61979,61995,62012,62028,62044,62060,62076,62092, - 62108,62125,62141,62156,62172,62188,62204,62220, - 62236,62251,62267,62283,62298,62314,62329,62345, - 62360,62376,62391,62407,62422,62437,62453,62468, - 62483,62498,62513,62528,62543,62558,62573,62588, - 62603,62618,62633,62648,62662,62677,62692,62706, - 62721,62735,62750,62764,62779,62793,62808,62822, - 62836,62850,62865,62879,62893,62907,62921,62935, - 62949,62963,62977,62991,63005,63019,63032,63046, - 63060,63074,63087,63101,63114,63128,63141,63155, - 63168,63182,63195,63208,63221,63235,63248,63261, - 63274,63287,63300,63313,63326,63339,63352,63365, - 63378,63390,63403,63416,63429,63441,63454,63466, - 63479,63491,63504,63516,63528,63541,63553,63565, - 63578,63590,63602,63614,63626,63638,63650,63662, - 63674,63686,63698,63709,63721,63733,63745,63756, - 63768,63779,63791,63803,63814,63825,63837,63848, - 63859,63871,63882,63893,63904,63915,63927,63938, - 63949,63960,63971,63981,63992,64003,64014,64025, - 64035,64046,64057,64067,64078,64088,64099,64109, - 64120,64130,64140,64151,64161,64171,64181,64192, - 64202,64212,64222,64232,64242,64252,64261,64271, - 64281,64291,64301,64310,64320,64330,64339,64349, - 64358,64368,64377,64387,64396,64405,64414,64424, - 64433,64442,64451,64460,64469,64478,64487,64496, - 64505,64514,64523,64532,64540,64549,64558,64566, - 64575,64584,64592,64601,64609,64617,64626,64634, - 64642,64651,64659,64667,64675,64683,64691,64699, - 64707,64715,64723,64731,64739,64747,64754,64762, - 64770,64777,64785,64793,64800,64808,64815,64822, - 64830,64837,64844,64852,64859,64866,64873,64880, - 64887,64895,64902,64908,64915,64922,64929,64936, - 64943,64949,64956,64963,64969,64976,64982,64989, - 64995,65002,65008,65015,65021,65027,65033,65040, - 65046,65052,65058,65064,65070,65076,65082,65088, - 65094,65099,65105,65111,65117,65122,65128,65133, - 65139,65144,65150,65155,65161,65166,65171,65177, - 65182,65187,65192,65197,65202,65207,65212,65217, - 65222,65227,65232,65237,65242,65246,65251,65256, - 65260,65265,65270,65274,65279,65283,65287,65292, - 65296,65300,65305,65309,65313,65317,65321,65325, - 65329,65333,65337,65341,65345,65349,65352,65356, - 65360,65363,65367,65371,65374,65378,65381,65385, - 65388,65391,65395,65398,65401,65404,65408,65411, - 65414,65417,65420,65423,65426,65429,65431,65434, - 65437,65440,65442,65445,65448,65450,65453,65455, - 65458,65460,65463,65465,65467,65470,65472,65474, - 65476,65478,65480,65482,65484,65486,65488,65490, - 65492,65494,65496,65497,65499,65501,65502,65504, - 65505,65507,65508,65510,65511,65513,65514,65515, - 65516,65518,65519,65520,65521,65522,65523,65524, - 65525,65526,65527,65527,65528,65529,65530,65530, - 65531,65531,65532,65532,65533,65533,65534,65534, - 65534,65535,65535,65535,65535,65535,65535,65535, - 65535,65535,65535,65535,65535,65535,65535,65534, - 65534,65534,65533,65533,65532,65532,65531,65531, - 65530,65530,65529,65528,65527,65527,65526,65525, - 65524,65523,65522,65521,65520,65519,65518,65516, - 65515,65514,65513,65511,65510,65508,65507,65505, - 65504,65502,65501,65499,65497,65496,65494,65492, - 65490,65488,65486,65484,65482,65480,65478,65476, - 65474,65472,65470,65467,65465,65463,65460,65458, - 65455,65453,65450,65448,65445,65442,65440,65437, - 65434,65431,65429,65426,65423,65420,65417,65414, - 65411,65408,65404,65401,65398,65395,65391,65388, - 65385,65381,65378,65374,65371,65367,65363,65360, - 65356,65352,65349,65345,65341,65337,65333,65329, - 65325,65321,65317,65313,65309,65305,65300,65296, - 65292,65287,65283,65279,65274,65270,65265,65260, - 65256,65251,65246,65242,65237,65232,65227,65222, - 65217,65212,65207,65202,65197,65192,65187,65182, - 65177,65171,65166,65161,65155,65150,65144,65139, - 65133,65128,65122,65117,65111,65105,65099,65094, - 65088,65082,65076,65070,65064,65058,65052,65046, - 65040,65033,65027,65021,65015,65008,65002,64995, - 64989,64982,64976,64969,64963,64956,64949,64943, - 64936,64929,64922,64915,64908,64902,64895,64887, - 64880,64873,64866,64859,64852,64844,64837,64830, - 64822,64815,64808,64800,64793,64785,64777,64770, - 64762,64754,64747,64739,64731,64723,64715,64707, - 64699,64691,64683,64675,64667,64659,64651,64642, - 64634,64626,64617,64609,64600,64592,64584,64575, - 64566,64558,64549,64540,64532,64523,64514,64505, - 64496,64487,64478,64469,64460,64451,64442,64433, - 64424,64414,64405,64396,64387,64377,64368,64358, - 64349,64339,64330,64320,64310,64301,64291,64281, - 64271,64261,64252,64242,64232,64222,64212,64202, - 64192,64181,64171,64161,64151,64140,64130,64120, - 64109,64099,64088,64078,64067,64057,64046,64035, - 64025,64014,64003,63992,63981,63971,63960,63949, - 63938,63927,63915,63904,63893,63882,63871,63859, - 63848,63837,63825,63814,63803,63791,63779,63768, - 63756,63745,63733,63721,63709,63698,63686,63674, - 63662,63650,63638,63626,63614,63602,63590,63578, - 63565,63553,63541,63528,63516,63504,63491,63479, - 63466,63454,63441,63429,63416,63403,63390,63378, - 63365,63352,63339,63326,63313,63300,63287,63274, - 63261,63248,63235,63221,63208,63195,63182,63168, - 63155,63141,63128,63114,63101,63087,63074,63060, - 63046,63032,63019,63005,62991,62977,62963,62949, - 62935,62921,62907,62893,62879,62865,62850,62836, - 62822,62808,62793,62779,62764,62750,62735,62721, - 62706,62692,62677,62662,62648,62633,62618,62603, - 62588,62573,62558,62543,62528,62513,62498,62483, - 62468,62453,62437,62422,62407,62391,62376,62360, - 62345,62329,62314,62298,62283,62267,62251,62236, - 62220,62204,62188,62172,62156,62141,62125,62108, - 62092,62076,62060,62044,62028,62012,61995,61979, - 61963,61946,61930,61913,61897,61880,61864,61847, - 61831,61814,61797,61780,61764,61747,61730,61713, - 61696,61679,61662,61645,61628,61611,61594,61577, - 61559,61542,61525,61507,61490,61473,61455,61438, - 61420,61403,61385,61367,61350,61332,61314,61297, - 61279,61261,61243,61225,61207,61189,61171,61153, - 61135,61117,61099,61081,61062,61044,61026,61007, - 60989,60971,60952,60934,60915,60897,60878,60859, - 60841,60822,60803,60785,60766,60747,60728,60709, - 60690,60671,60652,60633,60614,60595,60576,60556, - 60537,60518,60499,60479,60460,60441,60421,60402, - 60382,60363,60343,60323,60304,60284,60264,60244, - 60225,60205,60185,60165,60145,60125,60105,60085, - 60065,60045,60025,60004,59984,59964,59944,59923, - 59903,59883,59862,59842,59821,59801,59780,59759, - 59739,59718,59697,59677,59656,59635,59614,59593, - 59572,59551,59530,59509,59488,59467,59446,59425, - 59404,59382,59361,59340,59318,59297,59276,59254, - 59233,59211,59190,59168,59146,59125,59103,59081, - 59059,59038,59016,58994,58972,58950,58928,58906, - 58884,58862,58840,58818,58795,58773,58751,58729, - 58706,58684,58662,58639,58617,58594,58572,58549, - 58527,58504,58481,58459,58436,58413,58390,58367, - 58345,58322,58299,58276,58253,58230,58207,58183, - 58160,58137,58114,58091,58067,58044,58021,57997, - 57974,57950,57927,57903,57880,57856,57833,57809, - 57785,57762,57738,57714,57690,57666,57642,57618, - 57594,57570,57546,57522,57498,57474,57450,57426, - 57402,57377,57353,57329,57304,57280,57255,57231, - 57206,57182,57157,57133,57108,57083,57059,57034, - 57009,56984,56959,56935,56910,56885,56860,56835, - 56810,56785,56760,56734,56709,56684,56659,56633, - 56608,56583,56557,56532,56507,56481,56456,56430, - 56404,56379,56353,56328,56302,56276,56250,56225, - 56199,56173,56147,56121,56095,56069,56043,56017, - 55991,55965,55938,55912,55886,55860,55833,55807, - 55781,55754,55728,55701,55675,55648,55622,55595, - 55569,55542,55515,55489,55462,55435,55408,55381, - 55354,55327,55300,55274,55246,55219,55192,55165, - 55138,55111,55084,55056,55029,55002,54974,54947, - 54920,54892,54865,54837,54810,54782,54755,54727, - 54699,54672,54644,54616,54588,54560,54533,54505, - 54477,54449,54421,54393,54365,54337,54308,54280, - 54252,54224,54196,54167,54139,54111,54082,54054, - 54026,53997,53969,53940,53911,53883,53854,53826, - 53797,53768,53739,53711,53682,53653,53624,53595, - 53566,53537,53508,53479,53450,53421,53392,53363, - 53334,53304,53275,53246,53216,53187,53158,53128, - 53099,53069,53040,53010,52981,52951,52922,52892, - 52862,52832,52803,52773,52743,52713,52683,52653, - 52624,52594,52564,52534,52503,52473,52443,52413, - 52383,52353,52322,52292,52262,52231,52201,52171, - 52140,52110,52079,52049,52018,51988,51957,51926, - 51896,51865,51834,51803,51773,51742,51711,51680, - 51649,51618,51587,51556,51525,51494,51463,51432, - 51401,51369,51338,51307,51276,51244,51213,51182, - 51150,51119,51087,51056,51024,50993,50961,50929, - 50898,50866,50834,50803,50771,50739,50707,50675, - 50644,50612,50580,50548,50516,50484,50452,50420, - 50387,50355,50323,50291,50259,50226,50194,50162, - 50129,50097,50065,50032,50000,49967,49935,49902, - 49869,49837,49804,49771,49739,49706,49673,49640, - 49608,49575,49542,49509,49476,49443,49410,49377, - 49344,49311,49278,49244,49211,49178,49145,49112, - 49078,49045,49012,48978,48945,48911,48878,48844, - 48811,48777,48744,48710,48676,48643,48609,48575, - 48542,48508,48474,48440,48406,48372,48338,48304, - 48271,48237,48202,48168,48134,48100,48066,48032, - 47998,47963,47929,47895,47860,47826,47792,47757, - 47723,47688,47654,47619,47585,47550,47516,47481, - 47446,47412,47377,47342,47308,47273,47238,47203, - 47168,47133,47098,47063,47028,46993,46958,46923, - 46888,46853,46818,46783,46747,46712,46677,46642, - 46606,46571,46536,46500,46465,46429,46394,46358, - 46323,46287,46252,46216,46180,46145,46109,46073, - 46037,46002,45966,45930,45894,45858,45822,45786, - 45750,45714,45678,45642,45606,45570,45534,45498, - 45462,45425,45389,45353,45316,45280,45244,45207, - 45171,45135,45098,45062,45025,44989,44952,44915, - 44879,44842,44806,44769,44732,44695,44659,44622, - 44585,44548,44511,44474,44437,44400,44363,44326, - 44289,44252,44215,44178,44141,44104,44067,44029, - 43992,43955,43918,43880,43843,43806,43768,43731, - 43693,43656,43618,43581,43543,43506,43468,43430, - 43393,43355,43317,43280,43242,43204,43166,43128, - 43091,43053,43015,42977,42939,42901,42863,42825, - 42787,42749,42711,42672,42634,42596,42558,42520, - 42481,42443,42405,42366,42328,42290,42251,42213, - 42174,42136,42097,42059,42020,41982,41943,41904, - 41866,41827,41788,41750,41711,41672,41633,41595, - 41556,41517,41478,41439,41400,41361,41322,41283, - 41244,41205,41166,41127,41088,41048,41009,40970, - 40931,40891,40852,40813,40773,40734,40695,40655, - 40616,40576,40537,40497,40458,40418,40379,40339, - 40300,40260,40220,40180,40141,40101,40061,40021, - 39982,39942,39902,39862,39822,39782,39742,39702, - 39662,39622,39582,39542,39502,39462,39422,39382, - 39341,39301,39261,39221,39180,39140,39100,39059, - 39019,38979,38938,38898,38857,38817,38776,38736, - 38695,38655,38614,38573,38533,38492,38451,38411, - 38370,38329,38288,38248,38207,38166,38125,38084, - 38043,38002,37961,37920,37879,37838,37797,37756, - 37715,37674,37633,37592,37551,37509,37468,37427, - 37386,37344,37303,37262,37220,37179,37137,37096, - 37055,37013,36972,36930,36889,36847,36805,36764, - 36722,36681,36639,36597,36556,36514,36472,36430, - 36388,36347,36305,36263,36221,36179,36137,36095, - 36053,36011,35969,35927,35885,35843,35801,35759, - 35717,35675,35633,35590,35548,35506,35464,35421, - 35379,35337,35294,35252,35210,35167,35125,35082, - 35040,34997,34955,34912,34870,34827,34785,34742, - 34699,34657,34614,34571,34529,34486,34443,34400, - 34358,34315,34272,34229,34186,34143,34100,34057, - 34015,33972,33929,33886,33843,33799,33756,33713, - 33670,33627,33584,33541,33498,33454,33411,33368, - 33325,33281,33238,33195,33151,33108,33065,33021, - 32978,32934,32891,32847,32804,32760,32717,32673, - 32630,32586,32542,32499,32455,32411,32368,32324, - 32280,32236,32193,32149,32105,32061,32017,31974, - 31930,31886,31842,31798,31754,31710,31666,31622, - 31578,31534,31490,31446,31402,31357,31313,31269, - 31225,31181,31136,31092,31048,31004,30959,30915, - 30871,30826,30782,30738,30693,30649,30604,30560, - 30515,30471,30426,30382,30337,30293,30248,30204, - 30159,30114,30070,30025,29980,29936,29891,29846, - 29801,29757,29712,29667,29622,29577,29533,29488, - 29443,29398,29353,29308,29263,29218,29173,29128, - 29083,29038,28993,28948,28903,28858,28812,28767, - 28722,28677,28632,28586,28541,28496,28451,28405, - 28360,28315,28269,28224,28179,28133,28088,28042, - 27997,27952,27906,27861,27815,27770,27724,27678, - 27633,27587,27542,27496,27450,27405,27359,27313, - 27268,27222,27176,27131,27085,27039,26993,26947, - 26902,26856,26810,26764,26718,26672,26626,26580, - 26534,26488,26442,26396,26350,26304,26258,26212, - 26166,26120,26074,26028,25982,25936,25889,25843, - 25797,25751,25705,25658,25612,25566,25520,25473, - 25427,25381,25334,25288,25241,25195,25149,25102, - 25056,25009,24963,24916,24870,24823,24777,24730, - 24684,24637,24591,24544,24497,24451,24404,24357, - 24311,24264,24217,24171,24124,24077,24030,23984, - 23937,23890,23843,23796,23750,23703,23656,23609, - 23562,23515,23468,23421,23374,23327,23280,23233, - 23186,23139,23092,23045,22998,22951,22904,22857, - 22810,22763,22716,22668,22621,22574,22527,22480, - 22433,22385,22338,22291,22243,22196,22149,22102, - 22054,22007,21960,21912,21865,21817,21770,21723, - 21675,21628,21580,21533,21485,21438,21390,21343, - 21295,21248,21200,21153,21105,21057,21010,20962, - 20915,20867,20819,20772,20724,20676,20629,20581, - 20533,20485,20438,20390,20342,20294,20246,20199, - 20151,20103,20055,20007,19959,19912,19864,19816, - 19768,19720,19672,19624,19576,19528,19480,19432, - 19384,19336,19288,19240,19192,19144,19096,19048, - 19000,18951,18903,18855,18807,18759,18711,18663, - 18614,18566,18518,18470,18421,18373,18325,18277, - 18228,18180,18132,18084,18035,17987,17939,17890, - 17842,17793,17745,17697,17648,17600,17551,17503, - 17455,17406,17358,17309,17261,17212,17164,17115, - 17067,17018,16970,16921,16872,16824,16775,16727, - 16678,16629,16581,16532,16484,16435,16386,16338, - 16289,16240,16191,16143,16094,16045,15997,15948, - 15899,15850,15802,15753,15704,15655,15606,15557, - 15509,15460,15411,15362,15313,15264,15215,15167, - 15118,15069,15020,14971,14922,14873,14824,14775, - 14726,14677,14628,14579,14530,14481,14432,14383, - 14334,14285,14236,14187,14138,14089,14040,13990, - 13941,13892,13843,13794,13745,13696,13646,13597, - 13548,13499,13450,13401,13351,13302,13253,13204, - 13154,13105,13056,13007,12957,12908,12859,12810, - 12760,12711,12662,12612,12563,12514,12464,12415, - 12366,12316,12267,12218,12168,12119,12069,12020, - 11970,11921,11872,11822,11773,11723,11674,11624, - 11575,11525,11476,11426,11377,11327,11278,11228, - 11179,11129,11080,11030,10981,10931,10882,10832, - 10782,10733,10683,10634,10584,10534,10485,10435, - 10386,10336,10286,10237,10187,10137,10088,10038, - 9988,9939,9889,9839,9790,9740,9690,9640, - 9591,9541,9491,9442,9392,9342,9292,9243, - 9193,9143,9093,9043,8994,8944,8894,8844, - 8794,8745,8695,8645,8595,8545,8496,8446, - 8396,8346,8296,8246,8196,8147,8097,8047, - 7997,7947,7897,7847,7797,7747,7697,7648, - 7598,7548,7498,7448,7398,7348,7298,7248, - 7198,7148,7098,7048,6998,6948,6898,6848, - 6798,6748,6698,6648,6598,6548,6498,6448, - 6398,6348,6298,6248,6198,6148,6098,6048, - 5998,5948,5898,5848,5798,5748,5697,5647, - 5597,5547,5497,5447,5397,5347,5297,5247, - 5197,5146,5096,5046,4996,4946,4896,4846, - 4796,4745,4695,4645,4595,4545,4495,4445, - 4394,4344,4294,4244,4194,4144,4093,4043, - 3993,3943,3893,3843,3792,3742,3692,3642, - 3592,3541,3491,3441,3391,3341,3291,3240, - 3190,3140,3090,3039,2989,2939,2889,2839, - 2788,2738,2688,2638,2587,2537,2487,2437, - 2387,2336,2286,2236,2186,2135,2085,2035, - 1985,1934,1884,1834,1784,1733,1683,1633, - 1583,1532,1482,1432,1382,1331,1281,1231, - 1181,1130,1080,1030,980,929,879,829, - 779,728,678,628,578,527,477,427, - 376,326,276,226,175,125,75,25, - -25,-75,-125,-175,-226,-276,-326,-376, - -427,-477,-527,-578,-628,-678,-728,-779, - -829,-879,-929,-980,-1030,-1080,-1130,-1181, - -1231,-1281,-1331,-1382,-1432,-1482,-1532,-1583, - -1633,-1683,-1733,-1784,-1834,-1884,-1934,-1985, - -2035,-2085,-2135,-2186,-2236,-2286,-2336,-2387, - -2437,-2487,-2537,-2588,-2638,-2688,-2738,-2788, - -2839,-2889,-2939,-2989,-3039,-3090,-3140,-3190, - -3240,-3291,-3341,-3391,-3441,-3491,-3541,-3592, - -3642,-3692,-3742,-3792,-3843,-3893,-3943,-3993, - -4043,-4093,-4144,-4194,-4244,-4294,-4344,-4394, - -4445,-4495,-4545,-4595,-4645,-4695,-4745,-4796, - -4846,-4896,-4946,-4996,-5046,-5096,-5146,-5197, - -5247,-5297,-5347,-5397,-5447,-5497,-5547,-5597, - -5647,-5697,-5748,-5798,-5848,-5898,-5948,-5998, - -6048,-6098,-6148,-6198,-6248,-6298,-6348,-6398, - -6448,-6498,-6548,-6598,-6648,-6698,-6748,-6798, - -6848,-6898,-6948,-6998,-7048,-7098,-7148,-7198, - -7248,-7298,-7348,-7398,-7448,-7498,-7548,-7598, - -7648,-7697,-7747,-7797,-7847,-7897,-7947,-7997, - -8047,-8097,-8147,-8196,-8246,-8296,-8346,-8396, - -8446,-8496,-8545,-8595,-8645,-8695,-8745,-8794, - -8844,-8894,-8944,-8994,-9043,-9093,-9143,-9193, - -9243,-9292,-9342,-9392,-9442,-9491,-9541,-9591, - -9640,-9690,-9740,-9790,-9839,-9889,-9939,-9988, - -10038,-10088,-10137,-10187,-10237,-10286,-10336,-10386, - -10435,-10485,-10534,-10584,-10634,-10683,-10733,-10782, - -10832,-10882,-10931,-10981,-11030,-11080,-11129,-11179, - -11228,-11278,-11327,-11377,-11426,-11476,-11525,-11575, - -11624,-11674,-11723,-11773,-11822,-11872,-11921,-11970, - -12020,-12069,-12119,-12168,-12218,-12267,-12316,-12366, - -12415,-12464,-12514,-12563,-12612,-12662,-12711,-12760, - -12810,-12859,-12908,-12957,-13007,-13056,-13105,-13154, - -13204,-13253,-13302,-13351,-13401,-13450,-13499,-13548, - -13597,-13647,-13696,-13745,-13794,-13843,-13892,-13941, - -13990,-14040,-14089,-14138,-14187,-14236,-14285,-14334, - -14383,-14432,-14481,-14530,-14579,-14628,-14677,-14726, - -14775,-14824,-14873,-14922,-14971,-15020,-15069,-15118, - -15167,-15215,-15264,-15313,-15362,-15411,-15460,-15509, - -15557,-15606,-15655,-15704,-15753,-15802,-15850,-15899, - -15948,-15997,-16045,-16094,-16143,-16191,-16240,-16289, - -16338,-16386,-16435,-16484,-16532,-16581,-16629,-16678, - -16727,-16775,-16824,-16872,-16921,-16970,-17018,-17067, - -17115,-17164,-17212,-17261,-17309,-17358,-17406,-17455, - -17503,-17551,-17600,-17648,-17697,-17745,-17793,-17842, - -17890,-17939,-17987,-18035,-18084,-18132,-18180,-18228, - -18277,-18325,-18373,-18421,-18470,-18518,-18566,-18614, - -18663,-18711,-18759,-18807,-18855,-18903,-18951,-19000, - -19048,-19096,-19144,-19192,-19240,-19288,-19336,-19384, - -19432,-19480,-19528,-19576,-19624,-19672,-19720,-19768, - -19816,-19864,-19912,-19959,-20007,-20055,-20103,-20151, - -20199,-20246,-20294,-20342,-20390,-20438,-20485,-20533, - -20581,-20629,-20676,-20724,-20772,-20819,-20867,-20915, - -20962,-21010,-21057,-21105,-21153,-21200,-21248,-21295, - -21343,-21390,-21438,-21485,-21533,-21580,-21628,-21675, - -21723,-21770,-21817,-21865,-21912,-21960,-22007,-22054, - -22102,-22149,-22196,-22243,-22291,-22338,-22385,-22433, - -22480,-22527,-22574,-22621,-22668,-22716,-22763,-22810, - -22857,-22904,-22951,-22998,-23045,-23092,-23139,-23186, - -23233,-23280,-23327,-23374,-23421,-23468,-23515,-23562, - -23609,-23656,-23703,-23750,-23796,-23843,-23890,-23937, - -23984,-24030,-24077,-24124,-24171,-24217,-24264,-24311, - -24357,-24404,-24451,-24497,-24544,-24591,-24637,-24684, - -24730,-24777,-24823,-24870,-24916,-24963,-25009,-25056, - -25102,-25149,-25195,-25241,-25288,-25334,-25381,-25427, - -25473,-25520,-25566,-25612,-25658,-25705,-25751,-25797, - -25843,-25889,-25936,-25982,-26028,-26074,-26120,-26166, - -26212,-26258,-26304,-26350,-26396,-26442,-26488,-26534, - -26580,-26626,-26672,-26718,-26764,-26810,-26856,-26902, - -26947,-26993,-27039,-27085,-27131,-27176,-27222,-27268, - -27313,-27359,-27405,-27450,-27496,-27542,-27587,-27633, - -27678,-27724,-27770,-27815,-27861,-27906,-27952,-27997, - -28042,-28088,-28133,-28179,-28224,-28269,-28315,-28360, - -28405,-28451,-28496,-28541,-28586,-28632,-28677,-28722, - -28767,-28812,-28858,-28903,-28948,-28993,-29038,-29083, - -29128,-29173,-29218,-29263,-29308,-29353,-29398,-29443, - -29488,-29533,-29577,-29622,-29667,-29712,-29757,-29801, - -29846,-29891,-29936,-29980,-30025,-30070,-30114,-30159, - -30204,-30248,-30293,-30337,-30382,-30426,-30471,-30515, - -30560,-30604,-30649,-30693,-30738,-30782,-30826,-30871, - -30915,-30959,-31004,-31048,-31092,-31136,-31181,-31225, - -31269,-31313,-31357,-31402,-31446,-31490,-31534,-31578, - -31622,-31666,-31710,-31754,-31798,-31842,-31886,-31930, - -31974,-32017,-32061,-32105,-32149,-32193,-32236,-32280, - -32324,-32368,-32411,-32455,-32499,-32542,-32586,-32630, - -32673,-32717,-32760,-32804,-32847,-32891,-32934,-32978, - -33021,-33065,-33108,-33151,-33195,-33238,-33281,-33325, - -33368,-33411,-33454,-33498,-33541,-33584,-33627,-33670, - -33713,-33756,-33799,-33843,-33886,-33929,-33972,-34015, - -34057,-34100,-34143,-34186,-34229,-34272,-34315,-34358, - -34400,-34443,-34486,-34529,-34571,-34614,-34657,-34699, - -34742,-34785,-34827,-34870,-34912,-34955,-34997,-35040, - -35082,-35125,-35167,-35210,-35252,-35294,-35337,-35379, - -35421,-35464,-35506,-35548,-35590,-35633,-35675,-35717, - -35759,-35801,-35843,-35885,-35927,-35969,-36011,-36053, - -36095,-36137,-36179,-36221,-36263,-36305,-36347,-36388, - -36430,-36472,-36514,-36555,-36597,-36639,-36681,-36722, - -36764,-36805,-36847,-36889,-36930,-36972,-37013,-37055, - -37096,-37137,-37179,-37220,-37262,-37303,-37344,-37386, - -37427,-37468,-37509,-37551,-37592,-37633,-37674,-37715, - -37756,-37797,-37838,-37879,-37920,-37961,-38002,-38043, - -38084,-38125,-38166,-38207,-38248,-38288,-38329,-38370, - -38411,-38451,-38492,-38533,-38573,-38614,-38655,-38695, - -38736,-38776,-38817,-38857,-38898,-38938,-38979,-39019, - -39059,-39100,-39140,-39180,-39221,-39261,-39301,-39341, - -39382,-39422,-39462,-39502,-39542,-39582,-39622,-39662, - -39702,-39742,-39782,-39822,-39862,-39902,-39942,-39982, - -40021,-40061,-40101,-40141,-40180,-40220,-40260,-40299, - -40339,-40379,-40418,-40458,-40497,-40537,-40576,-40616, - -40655,-40695,-40734,-40773,-40813,-40852,-40891,-40931, - -40970,-41009,-41048,-41087,-41127,-41166,-41205,-41244, - -41283,-41322,-41361,-41400,-41439,-41478,-41517,-41556, - -41595,-41633,-41672,-41711,-41750,-41788,-41827,-41866, - -41904,-41943,-41982,-42020,-42059,-42097,-42136,-42174, - -42213,-42251,-42290,-42328,-42366,-42405,-42443,-42481, - -42520,-42558,-42596,-42634,-42672,-42711,-42749,-42787, - -42825,-42863,-42901,-42939,-42977,-43015,-43053,-43091, - -43128,-43166,-43204,-43242,-43280,-43317,-43355,-43393, - -43430,-43468,-43506,-43543,-43581,-43618,-43656,-43693, - -43731,-43768,-43806,-43843,-43880,-43918,-43955,-43992, - -44029,-44067,-44104,-44141,-44178,-44215,-44252,-44289, - -44326,-44363,-44400,-44437,-44474,-44511,-44548,-44585, - -44622,-44659,-44695,-44732,-44769,-44806,-44842,-44879, - -44915,-44952,-44989,-45025,-45062,-45098,-45135,-45171, - -45207,-45244,-45280,-45316,-45353,-45389,-45425,-45462, - -45498,-45534,-45570,-45606,-45642,-45678,-45714,-45750, - -45786,-45822,-45858,-45894,-45930,-45966,-46002,-46037, - -46073,-46109,-46145,-46180,-46216,-46252,-46287,-46323, - -46358,-46394,-46429,-46465,-46500,-46536,-46571,-46606, - -46642,-46677,-46712,-46747,-46783,-46818,-46853,-46888, - -46923,-46958,-46993,-47028,-47063,-47098,-47133,-47168, - -47203,-47238,-47273,-47308,-47342,-47377,-47412,-47446, - -47481,-47516,-47550,-47585,-47619,-47654,-47688,-47723, - -47757,-47792,-47826,-47860,-47895,-47929,-47963,-47998, - -48032,-48066,-48100,-48134,-48168,-48202,-48236,-48271, - -48304,-48338,-48372,-48406,-48440,-48474,-48508,-48542, - -48575,-48609,-48643,-48676,-48710,-48744,-48777,-48811, - -48844,-48878,-48911,-48945,-48978,-49012,-49045,-49078, - -49112,-49145,-49178,-49211,-49244,-49278,-49311,-49344, - -49377,-49410,-49443,-49476,-49509,-49542,-49575,-49608, - -49640,-49673,-49706,-49739,-49771,-49804,-49837,-49869, - -49902,-49935,-49967,-50000,-50032,-50065,-50097,-50129, - -50162,-50194,-50226,-50259,-50291,-50323,-50355,-50387, - -50420,-50452,-50484,-50516,-50548,-50580,-50612,-50644, - -50675,-50707,-50739,-50771,-50803,-50834,-50866,-50898, - -50929,-50961,-50993,-51024,-51056,-51087,-51119,-51150, - -51182,-51213,-51244,-51276,-51307,-51338,-51369,-51401, - -51432,-51463,-51494,-51525,-51556,-51587,-51618,-51649, - -51680,-51711,-51742,-51773,-51803,-51834,-51865,-51896, - -51926,-51957,-51988,-52018,-52049,-52079,-52110,-52140, - -52171,-52201,-52231,-52262,-52292,-52322,-52353,-52383, - -52413,-52443,-52473,-52503,-52534,-52564,-52594,-52624, - -52653,-52683,-52713,-52743,-52773,-52803,-52832,-52862, - -52892,-52922,-52951,-52981,-53010,-53040,-53069,-53099, - -53128,-53158,-53187,-53216,-53246,-53275,-53304,-53334, - -53363,-53392,-53421,-53450,-53479,-53508,-53537,-53566, - -53595,-53624,-53653,-53682,-53711,-53739,-53768,-53797, - -53826,-53854,-53883,-53911,-53940,-53969,-53997,-54026, - -54054,-54082,-54111,-54139,-54167,-54196,-54224,-54252, - -54280,-54308,-54337,-54365,-54393,-54421,-54449,-54477, - -54505,-54533,-54560,-54588,-54616,-54644,-54672,-54699, - -54727,-54755,-54782,-54810,-54837,-54865,-54892,-54920, - -54947,-54974,-55002,-55029,-55056,-55084,-55111,-55138, - -55165,-55192,-55219,-55246,-55274,-55300,-55327,-55354, - -55381,-55408,-55435,-55462,-55489,-55515,-55542,-55569, - -55595,-55622,-55648,-55675,-55701,-55728,-55754,-55781, - -55807,-55833,-55860,-55886,-55912,-55938,-55965,-55991, - -56017,-56043,-56069,-56095,-56121,-56147,-56173,-56199, - -56225,-56250,-56276,-56302,-56328,-56353,-56379,-56404, - -56430,-56456,-56481,-56507,-56532,-56557,-56583,-56608, - -56633,-56659,-56684,-56709,-56734,-56760,-56785,-56810, - -56835,-56860,-56885,-56910,-56935,-56959,-56984,-57009, - -57034,-57059,-57083,-57108,-57133,-57157,-57182,-57206, - -57231,-57255,-57280,-57304,-57329,-57353,-57377,-57402, - -57426,-57450,-57474,-57498,-57522,-57546,-57570,-57594, - -57618,-57642,-57666,-57690,-57714,-57738,-57762,-57785, - -57809,-57833,-57856,-57880,-57903,-57927,-57950,-57974, - -57997,-58021,-58044,-58067,-58091,-58114,-58137,-58160, - -58183,-58207,-58230,-58253,-58276,-58299,-58322,-58345, - -58367,-58390,-58413,-58436,-58459,-58481,-58504,-58527, - -58549,-58572,-58594,-58617,-58639,-58662,-58684,-58706, - -58729,-58751,-58773,-58795,-58818,-58840,-58862,-58884, - -58906,-58928,-58950,-58972,-58994,-59016,-59038,-59059, - -59081,-59103,-59125,-59146,-59168,-59190,-59211,-59233, - -59254,-59276,-59297,-59318,-59340,-59361,-59382,-59404, - -59425,-59446,-59467,-59488,-59509,-59530,-59551,-59572, - -59593,-59614,-59635,-59656,-59677,-59697,-59718,-59739, - -59759,-59780,-59801,-59821,-59842,-59862,-59883,-59903, - -59923,-59944,-59964,-59984,-60004,-60025,-60045,-60065, - -60085,-60105,-60125,-60145,-60165,-60185,-60205,-60225, - -60244,-60264,-60284,-60304,-60323,-60343,-60363,-60382, - -60402,-60421,-60441,-60460,-60479,-60499,-60518,-60537, - -60556,-60576,-60595,-60614,-60633,-60652,-60671,-60690, - -60709,-60728,-60747,-60766,-60785,-60803,-60822,-60841, - -60859,-60878,-60897,-60915,-60934,-60952,-60971,-60989, - -61007,-61026,-61044,-61062,-61081,-61099,-61117,-61135, - -61153,-61171,-61189,-61207,-61225,-61243,-61261,-61279, - -61297,-61314,-61332,-61350,-61367,-61385,-61403,-61420, - -61438,-61455,-61473,-61490,-61507,-61525,-61542,-61559, - -61577,-61594,-61611,-61628,-61645,-61662,-61679,-61696, - -61713,-61730,-61747,-61764,-61780,-61797,-61814,-61831, - -61847,-61864,-61880,-61897,-61913,-61930,-61946,-61963, - -61979,-61995,-62012,-62028,-62044,-62060,-62076,-62092, - -62108,-62125,-62141,-62156,-62172,-62188,-62204,-62220, - -62236,-62251,-62267,-62283,-62298,-62314,-62329,-62345, - -62360,-62376,-62391,-62407,-62422,-62437,-62453,-62468, - -62483,-62498,-62513,-62528,-62543,-62558,-62573,-62588, - -62603,-62618,-62633,-62648,-62662,-62677,-62692,-62706, - -62721,-62735,-62750,-62764,-62779,-62793,-62808,-62822, - -62836,-62850,-62865,-62879,-62893,-62907,-62921,-62935, - -62949,-62963,-62977,-62991,-63005,-63019,-63032,-63046, - -63060,-63074,-63087,-63101,-63114,-63128,-63141,-63155, - -63168,-63182,-63195,-63208,-63221,-63235,-63248,-63261, - -63274,-63287,-63300,-63313,-63326,-63339,-63352,-63365, - -63378,-63390,-63403,-63416,-63429,-63441,-63454,-63466, - -63479,-63491,-63504,-63516,-63528,-63541,-63553,-63565, - -63578,-63590,-63602,-63614,-63626,-63638,-63650,-63662, - -63674,-63686,-63698,-63709,-63721,-63733,-63745,-63756, - -63768,-63779,-63791,-63803,-63814,-63825,-63837,-63848, - -63859,-63871,-63882,-63893,-63904,-63915,-63927,-63938, - -63949,-63960,-63971,-63981,-63992,-64003,-64014,-64025, - -64035,-64046,-64057,-64067,-64078,-64088,-64099,-64109, - -64120,-64130,-64140,-64151,-64161,-64171,-64181,-64192, - -64202,-64212,-64222,-64232,-64242,-64252,-64261,-64271, - -64281,-64291,-64301,-64310,-64320,-64330,-64339,-64349, - -64358,-64368,-64377,-64387,-64396,-64405,-64414,-64424, - -64433,-64442,-64451,-64460,-64469,-64478,-64487,-64496, - -64505,-64514,-64523,-64532,-64540,-64549,-64558,-64566, - -64575,-64584,-64592,-64601,-64609,-64617,-64626,-64634, - -64642,-64651,-64659,-64667,-64675,-64683,-64691,-64699, - -64707,-64715,-64723,-64731,-64739,-64747,-64754,-64762, - -64770,-64777,-64785,-64793,-64800,-64808,-64815,-64822, - -64830,-64837,-64844,-64852,-64859,-64866,-64873,-64880, - -64887,-64895,-64902,-64908,-64915,-64922,-64929,-64936, - -64943,-64949,-64956,-64963,-64969,-64976,-64982,-64989, - -64995,-65002,-65008,-65015,-65021,-65027,-65033,-65040, - -65046,-65052,-65058,-65064,-65070,-65076,-65082,-65088, - -65094,-65099,-65105,-65111,-65117,-65122,-65128,-65133, - -65139,-65144,-65150,-65155,-65161,-65166,-65171,-65177, - -65182,-65187,-65192,-65197,-65202,-65207,-65212,-65217, - -65222,-65227,-65232,-65237,-65242,-65246,-65251,-65256, - -65260,-65265,-65270,-65274,-65279,-65283,-65287,-65292, - -65296,-65300,-65305,-65309,-65313,-65317,-65321,-65325, - -65329,-65333,-65337,-65341,-65345,-65349,-65352,-65356, - -65360,-65363,-65367,-65371,-65374,-65378,-65381,-65385, - -65388,-65391,-65395,-65398,-65401,-65404,-65408,-65411, - -65414,-65417,-65420,-65423,-65426,-65429,-65431,-65434, - -65437,-65440,-65442,-65445,-65448,-65450,-65453,-65455, - -65458,-65460,-65463,-65465,-65467,-65470,-65472,-65474, - -65476,-65478,-65480,-65482,-65484,-65486,-65488,-65490, - -65492,-65494,-65496,-65497,-65499,-65501,-65502,-65504, - -65505,-65507,-65508,-65510,-65511,-65513,-65514,-65515, - -65516,-65518,-65519,-65520,-65521,-65522,-65523,-65524, - -65525,-65526,-65527,-65527,-65528,-65529,-65530,-65530, - -65531,-65531,-65532,-65532,-65533,-65533,-65534,-65534, - -65534,-65535,-65535,-65535,-65535,-65535,-65535,-65535, - -65535,-65535,-65535,-65535,-65535,-65535,-65535,-65534, - -65534,-65534,-65533,-65533,-65532,-65532,-65531,-65531, - -65530,-65530,-65529,-65528,-65527,-65527,-65526,-65525, - -65524,-65523,-65522,-65521,-65520,-65519,-65518,-65516, - -65515,-65514,-65513,-65511,-65510,-65508,-65507,-65505, - -65504,-65502,-65501,-65499,-65497,-65496,-65494,-65492, - -65490,-65488,-65486,-65484,-65482,-65480,-65478,-65476, - -65474,-65472,-65470,-65467,-65465,-65463,-65460,-65458, - -65455,-65453,-65450,-65448,-65445,-65442,-65440,-65437, - -65434,-65431,-65429,-65426,-65423,-65420,-65417,-65414, - -65411,-65408,-65404,-65401,-65398,-65395,-65391,-65388, - -65385,-65381,-65378,-65374,-65371,-65367,-65363,-65360, - -65356,-65352,-65349,-65345,-65341,-65337,-65333,-65329, - -65325,-65321,-65317,-65313,-65309,-65305,-65300,-65296, - -65292,-65287,-65283,-65279,-65274,-65270,-65265,-65260, - -65256,-65251,-65246,-65242,-65237,-65232,-65227,-65222, - -65217,-65212,-65207,-65202,-65197,-65192,-65187,-65182, - -65177,-65171,-65166,-65161,-65155,-65150,-65144,-65139, - -65133,-65128,-65122,-65117,-65111,-65105,-65099,-65094, - -65088,-65082,-65076,-65070,-65064,-65058,-65052,-65046, - -65040,-65033,-65027,-65021,-65015,-65008,-65002,-64995, - -64989,-64982,-64976,-64969,-64963,-64956,-64949,-64943, - -64936,-64929,-64922,-64915,-64908,-64902,-64895,-64887, - -64880,-64873,-64866,-64859,-64852,-64844,-64837,-64830, - -64822,-64815,-64808,-64800,-64793,-64785,-64777,-64770, - -64762,-64754,-64747,-64739,-64731,-64723,-64715,-64707, - -64699,-64691,-64683,-64675,-64667,-64659,-64651,-64642, - -64634,-64626,-64617,-64609,-64601,-64592,-64584,-64575, - -64566,-64558,-64549,-64540,-64532,-64523,-64514,-64505, - -64496,-64487,-64478,-64469,-64460,-64451,-64442,-64433, - -64424,-64414,-64405,-64396,-64387,-64377,-64368,-64358, - -64349,-64339,-64330,-64320,-64310,-64301,-64291,-64281, - -64271,-64261,-64252,-64242,-64232,-64222,-64212,-64202, - -64192,-64181,-64171,-64161,-64151,-64140,-64130,-64120, - -64109,-64099,-64088,-64078,-64067,-64057,-64046,-64035, - -64025,-64014,-64003,-63992,-63981,-63971,-63960,-63949, - -63938,-63927,-63915,-63904,-63893,-63882,-63871,-63859, - -63848,-63837,-63825,-63814,-63803,-63791,-63779,-63768, - -63756,-63745,-63733,-63721,-63709,-63698,-63686,-63674, - -63662,-63650,-63638,-63626,-63614,-63602,-63590,-63578, - -63565,-63553,-63541,-63528,-63516,-63504,-63491,-63479, - -63466,-63454,-63441,-63429,-63416,-63403,-63390,-63378, - -63365,-63352,-63339,-63326,-63313,-63300,-63287,-63274, - -63261,-63248,-63235,-63221,-63208,-63195,-63182,-63168, - -63155,-63141,-63128,-63114,-63101,-63087,-63074,-63060, - -63046,-63032,-63019,-63005,-62991,-62977,-62963,-62949, - -62935,-62921,-62907,-62893,-62879,-62865,-62850,-62836, - -62822,-62808,-62793,-62779,-62764,-62750,-62735,-62721, - -62706,-62692,-62677,-62662,-62648,-62633,-62618,-62603, - -62588,-62573,-62558,-62543,-62528,-62513,-62498,-62483, - -62468,-62453,-62437,-62422,-62407,-62391,-62376,-62360, - -62345,-62329,-62314,-62298,-62283,-62267,-62251,-62236, - -62220,-62204,-62188,-62172,-62156,-62141,-62125,-62108, - -62092,-62076,-62060,-62044,-62028,-62012,-61995,-61979, - -61963,-61946,-61930,-61913,-61897,-61880,-61864,-61847, - -61831,-61814,-61797,-61780,-61764,-61747,-61730,-61713, - -61696,-61679,-61662,-61645,-61628,-61611,-61594,-61577, - -61559,-61542,-61525,-61507,-61490,-61473,-61455,-61438, - -61420,-61403,-61385,-61367,-61350,-61332,-61314,-61297, - -61279,-61261,-61243,-61225,-61207,-61189,-61171,-61153, - -61135,-61117,-61099,-61081,-61062,-61044,-61026,-61007, - -60989,-60971,-60952,-60934,-60915,-60897,-60878,-60859, - -60841,-60822,-60803,-60785,-60766,-60747,-60728,-60709, - -60690,-60671,-60652,-60633,-60614,-60595,-60576,-60556, - -60537,-60518,-60499,-60479,-60460,-60441,-60421,-60402, - -60382,-60363,-60343,-60323,-60304,-60284,-60264,-60244, - -60225,-60205,-60185,-60165,-60145,-60125,-60105,-60085, - -60065,-60045,-60025,-60004,-59984,-59964,-59944,-59923, - -59903,-59883,-59862,-59842,-59821,-59801,-59780,-59759, - -59739,-59718,-59697,-59677,-59656,-59635,-59614,-59593, - -59572,-59551,-59530,-59509,-59488,-59467,-59446,-59425, - -59404,-59382,-59361,-59340,-59318,-59297,-59276,-59254, - -59233,-59211,-59189,-59168,-59146,-59125,-59103,-59081, - -59059,-59038,-59016,-58994,-58972,-58950,-58928,-58906, - -58884,-58862,-58840,-58818,-58795,-58773,-58751,-58729, - -58706,-58684,-58662,-58639,-58617,-58594,-58572,-58549, - -58527,-58504,-58481,-58459,-58436,-58413,-58390,-58367, - -58345,-58322,-58299,-58276,-58253,-58230,-58207,-58183, - -58160,-58137,-58114,-58091,-58067,-58044,-58021,-57997, - -57974,-57950,-57927,-57903,-57880,-57856,-57833,-57809, - -57785,-57762,-57738,-57714,-57690,-57666,-57642,-57618, - -57594,-57570,-57546,-57522,-57498,-57474,-57450,-57426, - -57402,-57377,-57353,-57329,-57304,-57280,-57255,-57231, - -57206,-57182,-57157,-57133,-57108,-57083,-57059,-57034, - -57009,-56984,-56959,-56935,-56910,-56885,-56860,-56835, - -56810,-56785,-56760,-56734,-56709,-56684,-56659,-56633, - -56608,-56583,-56557,-56532,-56507,-56481,-56456,-56430, - -56404,-56379,-56353,-56328,-56302,-56276,-56250,-56225, - -56199,-56173,-56147,-56121,-56095,-56069,-56043,-56017, - -55991,-55965,-55938,-55912,-55886,-55860,-55833,-55807, - -55781,-55754,-55728,-55701,-55675,-55648,-55622,-55595, - -55569,-55542,-55515,-55489,-55462,-55435,-55408,-55381, - -55354,-55327,-55300,-55274,-55246,-55219,-55192,-55165, - -55138,-55111,-55084,-55056,-55029,-55002,-54974,-54947, - -54920,-54892,-54865,-54837,-54810,-54782,-54755,-54727, - -54699,-54672,-54644,-54616,-54588,-54560,-54533,-54505, - -54477,-54449,-54421,-54393,-54365,-54337,-54308,-54280, - -54252,-54224,-54196,-54167,-54139,-54111,-54082,-54054, - -54026,-53997,-53969,-53940,-53911,-53883,-53854,-53826, - -53797,-53768,-53739,-53711,-53682,-53653,-53624,-53595, - -53566,-53537,-53508,-53479,-53450,-53421,-53392,-53363, - -53334,-53304,-53275,-53246,-53216,-53187,-53158,-53128, - -53099,-53069,-53040,-53010,-52981,-52951,-52922,-52892, - -52862,-52832,-52803,-52773,-52743,-52713,-52683,-52653, - -52624,-52594,-52564,-52534,-52503,-52473,-52443,-52413, - -52383,-52353,-52322,-52292,-52262,-52231,-52201,-52171, - -52140,-52110,-52079,-52049,-52018,-51988,-51957,-51926, - -51896,-51865,-51834,-51803,-51773,-51742,-51711,-51680, - -51649,-51618,-51587,-51556,-51525,-51494,-51463,-51432, - -51401,-51369,-51338,-51307,-51276,-51244,-51213,-51182, - -51150,-51119,-51087,-51056,-51024,-50993,-50961,-50929, - -50898,-50866,-50834,-50803,-50771,-50739,-50707,-50675, - -50644,-50612,-50580,-50548,-50516,-50484,-50452,-50420, - -50387,-50355,-50323,-50291,-50259,-50226,-50194,-50162, - -50129,-50097,-50065,-50032,-50000,-49967,-49935,-49902, - -49869,-49837,-49804,-49771,-49739,-49706,-49673,-49640, - -49608,-49575,-49542,-49509,-49476,-49443,-49410,-49377, - -49344,-49311,-49278,-49244,-49211,-49178,-49145,-49112, - -49078,-49045,-49012,-48978,-48945,-48911,-48878,-48844, - -48811,-48777,-48744,-48710,-48676,-48643,-48609,-48575, - -48542,-48508,-48474,-48440,-48406,-48372,-48338,-48305, - -48271,-48237,-48202,-48168,-48134,-48100,-48066,-48032, - -47998,-47963,-47929,-47895,-47860,-47826,-47792,-47757, - -47723,-47688,-47654,-47619,-47585,-47550,-47516,-47481, - -47446,-47412,-47377,-47342,-47307,-47273,-47238,-47203, - -47168,-47133,-47098,-47063,-47028,-46993,-46958,-46923, - -46888,-46853,-46818,-46783,-46747,-46712,-46677,-46642, - -46606,-46571,-46536,-46500,-46465,-46429,-46394,-46358, - -46323,-46287,-46251,-46216,-46180,-46145,-46109,-46073, - -46037,-46002,-45966,-45930,-45894,-45858,-45822,-45786, - -45750,-45714,-45678,-45642,-45606,-45570,-45534,-45498, - -45462,-45425,-45389,-45353,-45316,-45280,-45244,-45207, - -45171,-45135,-45098,-45062,-45025,-44989,-44952,-44915, - -44879,-44842,-44806,-44769,-44732,-44695,-44659,-44622, - -44585,-44548,-44511,-44474,-44437,-44400,-44363,-44326, - -44289,-44252,-44215,-44178,-44141,-44104,-44067,-44029, - -43992,-43955,-43918,-43880,-43843,-43806,-43768,-43731, - -43693,-43656,-43618,-43581,-43543,-43506,-43468,-43430, - -43393,-43355,-43317,-43280,-43242,-43204,-43166,-43128, - -43091,-43053,-43015,-42977,-42939,-42901,-42863,-42825, - -42787,-42749,-42711,-42672,-42634,-42596,-42558,-42520, - -42481,-42443,-42405,-42366,-42328,-42290,-42251,-42213, - -42174,-42136,-42097,-42059,-42020,-41982,-41943,-41904, - -41866,-41827,-41788,-41750,-41711,-41672,-41633,-41595, - -41556,-41517,-41478,-41439,-41400,-41361,-41322,-41283, - -41244,-41205,-41166,-41127,-41087,-41048,-41009,-40970, - -40931,-40891,-40852,-40813,-40773,-40734,-40695,-40655, - -40616,-40576,-40537,-40497,-40458,-40418,-40379,-40339, - -40299,-40260,-40220,-40180,-40141,-40101,-40061,-40021, - -39982,-39942,-39902,-39862,-39822,-39782,-39742,-39702, - -39662,-39622,-39582,-39542,-39502,-39462,-39422,-39382, - -39341,-39301,-39261,-39221,-39180,-39140,-39100,-39059, - -39019,-38979,-38938,-38898,-38857,-38817,-38776,-38736, - -38695,-38655,-38614,-38573,-38533,-38492,-38451,-38411, - -38370,-38329,-38288,-38248,-38207,-38166,-38125,-38084, - -38043,-38002,-37961,-37920,-37879,-37838,-37797,-37756, - -37715,-37674,-37633,-37592,-37550,-37509,-37468,-37427, - -37386,-37344,-37303,-37262,-37220,-37179,-37137,-37096, - -37055,-37013,-36972,-36930,-36889,-36847,-36805,-36764, - -36722,-36681,-36639,-36597,-36556,-36514,-36472,-36430, - -36388,-36347,-36305,-36263,-36221,-36179,-36137,-36095, - -36053,-36011,-35969,-35927,-35885,-35843,-35801,-35759, - -35717,-35675,-35633,-35590,-35548,-35506,-35464,-35421, - -35379,-35337,-35294,-35252,-35210,-35167,-35125,-35082, - -35040,-34997,-34955,-34912,-34870,-34827,-34785,-34742, - -34699,-34657,-34614,-34571,-34529,-34486,-34443,-34400, - -34358,-34315,-34272,-34229,-34186,-34143,-34100,-34057, - -34015,-33972,-33929,-33886,-33843,-33799,-33756,-33713, - -33670,-33627,-33584,-33541,-33498,-33454,-33411,-33368, - -33325,-33281,-33238,-33195,-33151,-33108,-33065,-33021, - -32978,-32934,-32891,-32847,-32804,-32760,-32717,-32673, - -32630,-32586,-32542,-32499,-32455,-32411,-32368,-32324, - -32280,-32236,-32193,-32149,-32105,-32061,-32017,-31974, - -31930,-31886,-31842,-31798,-31754,-31710,-31666,-31622, - -31578,-31534,-31490,-31446,-31402,-31357,-31313,-31269, - -31225,-31181,-31136,-31092,-31048,-31004,-30959,-30915, - -30871,-30826,-30782,-30738,-30693,-30649,-30604,-30560, - -30515,-30471,-30426,-30382,-30337,-30293,-30248,-30204, - -30159,-30114,-30070,-30025,-29980,-29936,-29891,-29846, - -29801,-29757,-29712,-29667,-29622,-29577,-29533,-29488, - -29443,-29398,-29353,-29308,-29263,-29218,-29173,-29128, - -29083,-29038,-28993,-28948,-28903,-28858,-28812,-28767, - -28722,-28677,-28632,-28586,-28541,-28496,-28451,-28405, - -28360,-28315,-28269,-28224,-28179,-28133,-28088,-28042, - -27997,-27952,-27906,-27861,-27815,-27770,-27724,-27678, - -27633,-27587,-27542,-27496,-27450,-27405,-27359,-27313, - -27268,-27222,-27176,-27131,-27085,-27039,-26993,-26947, - -26902,-26856,-26810,-26764,-26718,-26672,-26626,-26580, - -26534,-26488,-26442,-26396,-26350,-26304,-26258,-26212, - -26166,-26120,-26074,-26028,-25982,-25936,-25889,-25843, - -25797,-25751,-25705,-25658,-25612,-25566,-25520,-25473, - -25427,-25381,-25334,-25288,-25241,-25195,-25149,-25102, - -25056,-25009,-24963,-24916,-24870,-24823,-24777,-24730, - -24684,-24637,-24591,-24544,-24497,-24451,-24404,-24357, - -24311,-24264,-24217,-24171,-24124,-24077,-24030,-23984, - -23937,-23890,-23843,-23796,-23750,-23703,-23656,-23609, - -23562,-23515,-23468,-23421,-23374,-23327,-23280,-23233, - -23186,-23139,-23092,-23045,-22998,-22951,-22904,-22857, - -22810,-22763,-22716,-22668,-22621,-22574,-22527,-22480, - -22432,-22385,-22338,-22291,-22243,-22196,-22149,-22102, - -22054,-22007,-21960,-21912,-21865,-21817,-21770,-21723, - -21675,-21628,-21580,-21533,-21485,-21438,-21390,-21343, - -21295,-21248,-21200,-21153,-21105,-21057,-21010,-20962, - -20915,-20867,-20819,-20772,-20724,-20676,-20629,-20581, - -20533,-20485,-20438,-20390,-20342,-20294,-20246,-20199, - -20151,-20103,-20055,-20007,-19959,-19912,-19864,-19816, - -19768,-19720,-19672,-19624,-19576,-19528,-19480,-19432, - -19384,-19336,-19288,-19240,-19192,-19144,-19096,-19048, - -19000,-18951,-18903,-18855,-18807,-18759,-18711,-18663, - -18614,-18566,-18518,-18470,-18421,-18373,-18325,-18277, - -18228,-18180,-18132,-18084,-18035,-17987,-17939,-17890, - -17842,-17793,-17745,-17697,-17648,-17600,-17551,-17503, - -17455,-17406,-17358,-17309,-17261,-17212,-17164,-17115, - -17067,-17018,-16970,-16921,-16872,-16824,-16775,-16727, - -16678,-16629,-16581,-16532,-16484,-16435,-16386,-16338, - -16289,-16240,-16191,-16143,-16094,-16045,-15997,-15948, - -15899,-15850,-15802,-15753,-15704,-15655,-15606,-15557, - -15509,-15460,-15411,-15362,-15313,-15264,-15215,-15167, - -15118,-15069,-15020,-14971,-14922,-14873,-14824,-14775, - -14726,-14677,-14628,-14579,-14530,-14481,-14432,-14383, - -14334,-14285,-14236,-14187,-14138,-14089,-14040,-13990, - -13941,-13892,-13843,-13794,-13745,-13696,-13647,-13597, - -13548,-13499,-13450,-13401,-13351,-13302,-13253,-13204, - -13154,-13105,-13056,-13007,-12957,-12908,-12859,-12810, - -12760,-12711,-12662,-12612,-12563,-12514,-12464,-12415, - -12366,-12316,-12267,-12217,-12168,-12119,-12069,-12020, - -11970,-11921,-11872,-11822,-11773,-11723,-11674,-11624, - -11575,-11525,-11476,-11426,-11377,-11327,-11278,-11228, - -11179,-11129,-11080,-11030,-10981,-10931,-10882,-10832, - -10782,-10733,-10683,-10634,-10584,-10534,-10485,-10435, - -10386,-10336,-10286,-10237,-10187,-10137,-10088,-10038, - -9988,-9939,-9889,-9839,-9790,-9740,-9690,-9640, - -9591,-9541,-9491,-9442,-9392,-9342,-9292,-9243, - -9193,-9143,-9093,-9043,-8994,-8944,-8894,-8844, - -8794,-8745,-8695,-8645,-8595,-8545,-8496,-8446, - -8396,-8346,-8296,-8246,-8196,-8147,-8097,-8047, - -7997,-7947,-7897,-7847,-7797,-7747,-7697,-7648, - -7598,-7548,-7498,-7448,-7398,-7348,-7298,-7248, - -7198,-7148,-7098,-7048,-6998,-6948,-6898,-6848, - -6798,-6748,-6698,-6648,-6598,-6548,-6498,-6448, - -6398,-6348,-6298,-6248,-6198,-6148,-6098,-6048, - -5998,-5948,-5898,-5848,-5798,-5747,-5697,-5647, - -5597,-5547,-5497,-5447,-5397,-5347,-5297,-5247, - -5197,-5146,-5096,-5046,-4996,-4946,-4896,-4846, - -4796,-4745,-4695,-4645,-4595,-4545,-4495,-4445, - -4394,-4344,-4294,-4244,-4194,-4144,-4093,-4043, - -3993,-3943,-3893,-3843,-3792,-3742,-3692,-3642, - -3592,-3541,-3491,-3441,-3391,-3341,-3291,-3240, - -3190,-3140,-3090,-3039,-2989,-2939,-2889,-2839, - -2788,-2738,-2688,-2638,-2588,-2537,-2487,-2437, - -2387,-2336,-2286,-2236,-2186,-2135,-2085,-2035, - -1985,-1934,-1884,-1834,-1784,-1733,-1683,-1633, - -1583,-1532,-1482,-1432,-1382,-1331,-1281,-1231, - -1181,-1130,-1080,-1030,-980,-929,-879,-829, - -779,-728,-678,-628,-578,-527,-477,-427, - -376,-326,-276,-226,-175,-125,-75,-25, - 25,75,125,175,226,276,326,376, - 427,477,527,578,628,678,728,779, - 829,879,929,980,1030,1080,1130,1181, - 1231,1281,1331,1382,1432,1482,1532,1583, - 1633,1683,1733,1784,1834,1884,1934,1985, - 2035,2085,2135,2186,2236,2286,2336,2387, - 2437,2487,2537,2587,2638,2688,2738,2788, - 2839,2889,2939,2989,3039,3090,3140,3190, - 3240,3291,3341,3391,3441,3491,3542,3592, - 3642,3692,3742,3792,3843,3893,3943,3993, - 4043,4093,4144,4194,4244,4294,4344,4394, - 4445,4495,4545,4595,4645,4695,4745,4796, - 4846,4896,4946,4996,5046,5096,5146,5197, - 5247,5297,5347,5397,5447,5497,5547,5597, - 5647,5697,5747,5798,5848,5898,5948,5998, - 6048,6098,6148,6198,6248,6298,6348,6398, - 6448,6498,6548,6598,6648,6698,6748,6798, - 6848,6898,6948,6998,7048,7098,7148,7198, - 7248,7298,7348,7398,7448,7498,7548,7598, - 7648,7697,7747,7797,7847,7897,7947,7997, - 8047,8097,8147,8196,8246,8296,8346,8396, - 8446,8496,8545,8595,8645,8695,8745,8794, - 8844,8894,8944,8994,9043,9093,9143,9193, - 9243,9292,9342,9392,9442,9491,9541,9591, - 9640,9690,9740,9790,9839,9889,9939,9988, - 10038,10088,10137,10187,10237,10286,10336,10386, - 10435,10485,10534,10584,10634,10683,10733,10782, - 10832,10882,10931,10981,11030,11080,11129,11179, - 11228,11278,11327,11377,11426,11476,11525,11575, - 11624,11674,11723,11773,11822,11872,11921,11970, - 12020,12069,12119,12168,12218,12267,12316,12366, - 12415,12464,12514,12563,12612,12662,12711,12760, - 12810,12859,12908,12957,13007,13056,13105,13154, - 13204,13253,13302,13351,13401,13450,13499,13548, - 13597,13647,13696,13745,13794,13843,13892,13941, - 13990,14040,14089,14138,14187,14236,14285,14334, - 14383,14432,14481,14530,14579,14628,14677,14726, - 14775,14824,14873,14922,14971,15020,15069,15118, - 15167,15215,15264,15313,15362,15411,15460,15509, - 15557,15606,15655,15704,15753,15802,15850,15899, - 15948,15997,16045,16094,16143,16191,16240,16289, - 16338,16386,16435,16484,16532,16581,16629,16678, - 16727,16775,16824,16872,16921,16970,17018,17067, - 17115,17164,17212,17261,17309,17358,17406,17455, - 17503,17551,17600,17648,17697,17745,17793,17842, - 17890,17939,17987,18035,18084,18132,18180,18228, - 18277,18325,18373,18421,18470,18518,18566,18614, - 18663,18711,18759,18807,18855,18903,18951,19000, - 19048,19096,19144,19192,19240,19288,19336,19384, - 19432,19480,19528,19576,19624,19672,19720,19768, - 19816,19864,19912,19959,20007,20055,20103,20151, - 20199,20246,20294,20342,20390,20438,20485,20533, - 20581,20629,20676,20724,20772,20819,20867,20915, - 20962,21010,21057,21105,21153,21200,21248,21295, - 21343,21390,21438,21485,21533,21580,21628,21675, - 21723,21770,21817,21865,21912,21960,22007,22054, - 22102,22149,22196,22243,22291,22338,22385,22432, - 22480,22527,22574,22621,22668,22716,22763,22810, - 22857,22904,22951,22998,23045,23092,23139,23186, - 23233,23280,23327,23374,23421,23468,23515,23562, - 23609,23656,23703,23750,23796,23843,23890,23937, - 23984,24030,24077,24124,24171,24217,24264,24311, - 24357,24404,24451,24497,24544,24591,24637,24684, - 24730,24777,24823,24870,24916,24963,25009,25056, - 25102,25149,25195,25241,25288,25334,25381,25427, - 25473,25520,25566,25612,25658,25705,25751,25797, - 25843,25889,25936,25982,26028,26074,26120,26166, - 26212,26258,26304,26350,26396,26442,26488,26534, - 26580,26626,26672,26718,26764,26810,26856,26902, - 26947,26993,27039,27085,27131,27176,27222,27268, - 27313,27359,27405,27450,27496,27542,27587,27633, - 27678,27724,27770,27815,27861,27906,27952,27997, - 28042,28088,28133,28179,28224,28269,28315,28360, - 28405,28451,28496,28541,28586,28632,28677,28722, - 28767,28812,28858,28903,28948,28993,29038,29083, - 29128,29173,29218,29263,29308,29353,29398,29443, - 29488,29533,29577,29622,29667,29712,29757,29801, - 29846,29891,29936,29980,30025,30070,30114,30159, - 30204,30248,30293,30337,30382,30427,30471,30516, - 30560,30604,30649,30693,30738,30782,30826,30871, - 30915,30959,31004,31048,31092,31136,31181,31225, - 31269,31313,31357,31402,31446,31490,31534,31578, - 31622,31666,31710,31754,31798,31842,31886,31930, - 31974,32017,32061,32105,32149,32193,32236,32280, - 32324,32368,32411,32455,32499,32542,32586,32630, - 32673,32717,32760,32804,32847,32891,32934,32978, - 33021,33065,33108,33151,33195,33238,33281,33325, - 33368,33411,33454,33498,33541,33584,33627,33670, - 33713,33756,33799,33843,33886,33929,33972,34015, - 34057,34100,34143,34186,34229,34272,34315,34358, - 34400,34443,34486,34529,34571,34614,34657,34699, - 34742,34785,34827,34870,34912,34955,34997,35040, - 35082,35125,35167,35210,35252,35294,35337,35379, - 35421,35464,35506,35548,35590,35633,35675,35717, - 35759,35801,35843,35885,35927,35969,36011,36053, - 36095,36137,36179,36221,36263,36305,36347,36388, - 36430,36472,36514,36556,36597,36639,36681,36722, - 36764,36805,36847,36889,36930,36972,37013,37055, - 37096,37137,37179,37220,37262,37303,37344,37386, - 37427,37468,37509,37551,37592,37633,37674,37715, - 37756,37797,37838,37879,37920,37961,38002,38043, - 38084,38125,38166,38207,38248,38288,38329,38370, - 38411,38451,38492,38533,38573,38614,38655,38695, - 38736,38776,38817,38857,38898,38938,38979,39019, - 39059,39100,39140,39180,39221,39261,39301,39341, - 39382,39422,39462,39502,39542,39582,39622,39662, - 39702,39742,39782,39822,39862,39902,39942,39982, - 40021,40061,40101,40141,40180,40220,40260,40299, - 40339,40379,40418,40458,40497,40537,40576,40616, - 40655,40695,40734,40773,40813,40852,40891,40931, - 40970,41009,41048,41087,41127,41166,41205,41244, - 41283,41322,41361,41400,41439,41478,41517,41556, - 41595,41633,41672,41711,41750,41788,41827,41866, - 41904,41943,41982,42020,42059,42097,42136,42174, - 42213,42251,42290,42328,42366,42405,42443,42481, - 42520,42558,42596,42634,42672,42711,42749,42787, - 42825,42863,42901,42939,42977,43015,43053,43091, - 43128,43166,43204,43242,43280,43317,43355,43393, - 43430,43468,43506,43543,43581,43618,43656,43693, - 43731,43768,43806,43843,43880,43918,43955,43992, - 44029,44067,44104,44141,44178,44215,44252,44289, - 44326,44363,44400,44437,44474,44511,44548,44585, - 44622,44659,44695,44732,44769,44806,44842,44879, - 44915,44952,44989,45025,45062,45098,45135,45171, - 45207,45244,45280,45316,45353,45389,45425,45462, - 45498,45534,45570,45606,45642,45678,45714,45750, - 45786,45822,45858,45894,45930,45966,46002,46037, - 46073,46109,46145,46180,46216,46252,46287,46323, - 46358,46394,46429,46465,46500,46536,46571,46606, - 46642,46677,46712,46747,46783,46818,46853,46888, - 46923,46958,46993,47028,47063,47098,47133,47168, - 47203,47238,47273,47308,47342,47377,47412,47446, - 47481,47516,47550,47585,47619,47654,47688,47723, - 47757,47792,47826,47861,47895,47929,47963,47998, - 48032,48066,48100,48134,48168,48202,48237,48271, - 48305,48338,48372,48406,48440,48474,48508,48542, - 48575,48609,48643,48676,48710,48744,48777,48811, - 48844,48878,48911,48945,48978,49012,49045,49078, - 49112,49145,49178,49211,49244,49278,49311,49344, - 49377,49410,49443,49476,49509,49542,49575,49608, - 49640,49673,49706,49739,49771,49804,49837,49869, - 49902,49935,49967,50000,50032,50064,50097,50129, - 50162,50194,50226,50259,50291,50323,50355,50387, - 50420,50452,50484,50516,50548,50580,50612,50644, - 50675,50707,50739,50771,50803,50834,50866,50898, - 50929,50961,50993,51024,51056,51087,51119,51150, - 51182,51213,51244,51276,51307,51338,51369,51401, - 51432,51463,51494,51525,51556,51587,51618,51649, - 51680,51711,51742,51773,51803,51834,51865,51896, - 51926,51957,51988,52018,52049,52079,52110,52140, - 52171,52201,52231,52262,52292,52322,52353,52383, - 52413,52443,52473,52503,52534,52564,52594,52624, - 52653,52683,52713,52743,52773,52803,52832,52862, - 52892,52922,52951,52981,53010,53040,53069,53099, - 53128,53158,53187,53216,53246,53275,53304,53334, - 53363,53392,53421,53450,53479,53508,53537,53566, - 53595,53624,53653,53682,53711,53739,53768,53797, - 53826,53854,53883,53912,53940,53969,53997,54026, - 54054,54082,54111,54139,54167,54196,54224,54252, - 54280,54309,54337,54365,54393,54421,54449,54477, - 54505,54533,54560,54588,54616,54644,54672,54699, - 54727,54755,54782,54810,54837,54865,54892,54920, - 54947,54974,55002,55029,55056,55084,55111,55138, - 55165,55192,55219,55246,55274,55300,55327,55354, - 55381,55408,55435,55462,55489,55515,55542,55569, - 55595,55622,55648,55675,55701,55728,55754,55781, - 55807,55833,55860,55886,55912,55938,55965,55991, - 56017,56043,56069,56095,56121,56147,56173,56199, - 56225,56250,56276,56302,56328,56353,56379,56404, - 56430,56456,56481,56507,56532,56557,56583,56608, - 56633,56659,56684,56709,56734,56760,56785,56810, - 56835,56860,56885,56910,56935,56959,56984,57009, - 57034,57059,57083,57108,57133,57157,57182,57206, - 57231,57255,57280,57304,57329,57353,57377,57402, - 57426,57450,57474,57498,57522,57546,57570,57594, - 57618,57642,57666,57690,57714,57738,57762,57785, - 57809,57833,57856,57880,57903,57927,57950,57974, - 57997,58021,58044,58067,58091,58114,58137,58160, - 58183,58207,58230,58253,58276,58299,58322,58345, - 58367,58390,58413,58436,58459,58481,58504,58527, - 58549,58572,58594,58617,58639,58662,58684,58706, - 58729,58751,58773,58795,58818,58840,58862,58884, - 58906,58928,58950,58972,58994,59016,59038,59059, - 59081,59103,59125,59146,59168,59190,59211,59233, - 59254,59276,59297,59318,59340,59361,59382,59404, - 59425,59446,59467,59488,59509,59530,59551,59572, - 59593,59614,59635,59656,59677,59697,59718,59739, - 59759,59780,59801,59821,59842,59862,59883,59903, - 59923,59944,59964,59984,60004,60025,60045,60065, - 60085,60105,60125,60145,60165,60185,60205,60225, - 60244,60264,60284,60304,60323,60343,60363,60382, - 60402,60421,60441,60460,60479,60499,60518,60537, - 60556,60576,60595,60614,60633,60652,60671,60690, - 60709,60728,60747,60766,60785,60803,60822,60841, - 60859,60878,60897,60915,60934,60952,60971,60989, - 61007,61026,61044,61062,61081,61099,61117,61135, - 61153,61171,61189,61207,61225,61243,61261,61279, - 61297,61314,61332,61350,61367,61385,61403,61420, - 61438,61455,61473,61490,61507,61525,61542,61559, - 61577,61594,61611,61628,61645,61662,61679,61696, - 61713,61730,61747,61764,61780,61797,61814,61831, - 61847,61864,61880,61897,61913,61930,61946,61963, - 61979,61995,62012,62028,62044,62060,62076,62092, - 62108,62125,62141,62156,62172,62188,62204,62220, - 62236,62251,62267,62283,62298,62314,62329,62345, - 62360,62376,62391,62407,62422,62437,62453,62468, - 62483,62498,62513,62528,62543,62558,62573,62588, - 62603,62618,62633,62648,62662,62677,62692,62706, - 62721,62735,62750,62764,62779,62793,62808,62822, - 62836,62850,62865,62879,62893,62907,62921,62935, - 62949,62963,62977,62991,63005,63019,63032,63046, - 63060,63074,63087,63101,63114,63128,63141,63155, - 63168,63182,63195,63208,63221,63235,63248,63261, - 63274,63287,63300,63313,63326,63339,63352,63365, - 63378,63390,63403,63416,63429,63441,63454,63466, - 63479,63491,63504,63516,63528,63541,63553,63565, - 63578,63590,63602,63614,63626,63638,63650,63662, - 63674,63686,63698,63709,63721,63733,63745,63756, - 63768,63779,63791,63803,63814,63825,63837,63848, - 63859,63871,63882,63893,63904,63915,63927,63938, - 63949,63960,63971,63981,63992,64003,64014,64025, - 64035,64046,64057,64067,64078,64088,64099,64109, - 64120,64130,64140,64151,64161,64171,64181,64192, - 64202,64212,64222,64232,64242,64252,64261,64271, - 64281,64291,64301,64310,64320,64330,64339,64349, - 64358,64368,64377,64387,64396,64405,64414,64424, - 64433,64442,64451,64460,64469,64478,64487,64496, - 64505,64514,64523,64532,64540,64549,64558,64566, - 64575,64584,64592,64600,64609,64617,64626,64634, - 64642,64651,64659,64667,64675,64683,64691,64699, - 64707,64715,64723,64731,64739,64747,64754,64762, - 64770,64777,64785,64793,64800,64808,64815,64822, - 64830,64837,64844,64852,64859,64866,64873,64880, - 64887,64895,64902,64908,64915,64922,64929,64936, - 64943,64949,64956,64963,64969,64976,64982,64989, - 64995,65002,65008,65015,65021,65027,65033,65040, - 65046,65052,65058,65064,65070,65076,65082,65088, - 65094,65099,65105,65111,65117,65122,65128,65133, - 65139,65144,65150,65155,65161,65166,65171,65177, - 65182,65187,65192,65197,65202,65207,65212,65217, - 65222,65227,65232,65237,65242,65246,65251,65256, - 65260,65265,65270,65274,65279,65283,65287,65292, - 65296,65300,65305,65309,65313,65317,65321,65325, - 65329,65333,65337,65341,65345,65349,65352,65356, - 65360,65363,65367,65371,65374,65378,65381,65385, - 65388,65391,65395,65398,65401,65404,65408,65411, - 65414,65417,65420,65423,65426,65429,65431,65434, - 65437,65440,65442,65445,65448,65450,65453,65455, - 65458,65460,65463,65465,65467,65470,65472,65474, - 65476,65478,65480,65482,65484,65486,65488,65490, - 65492,65494,65496,65497,65499,65501,65502,65504, - 65505,65507,65508,65510,65511,65513,65514,65515, - 65516,65518,65519,65520,65521,65522,65523,65524, - 65525,65526,65527,65527,65528,65529,65530,65530, - 65531,65531,65532,65532,65533,65533,65534,65534, - 65534,65535,65535,65535,65535,65535,65535,65535 -}; +const fixed_t finesine[10240] = { + 25, 75, 125, 175, 226, 276, 326, 376, 427, 477, + 527, 578, 628, 678, 728, 779, 829, 879, 929, 980, + 1030, 1080, 1130, 1181, 1231, 1281, 1331, 1382, 1432, 1482, + 1532, 1583, 1633, 1683, 1733, 1784, 1834, 1884, 1934, 1985, + 2035, 2085, 2135, 2186, 2236, 2286, 2336, 2387, 2437, 2487, + 2537, 2587, 2638, 2688, 2738, 2788, 2839, 2889, 2939, 2989, + 3039, 3090, 3140, 3190, 3240, 3291, 3341, 3391, 3441, 3491, + 3541, 3592, 3642, 3692, 3742, 3792, 3843, 3893, 3943, 3993, + 4043, 4093, 4144, 4194, 4244, 4294, 4344, 4394, 4445, 4495, + 4545, 4595, 4645, 4695, 4745, 4796, 4846, 4896, 4946, 4996, + 5046, 5096, 5146, 5197, 5247, 5297, 5347, 5397, 5447, 5497, + 5547, 5597, 5647, 5697, 5748, 5798, 5848, 5898, 5948, 5998, + 6048, 6098, 6148, 6198, 6248, 6298, 6348, 6398, 6448, 6498, + 6548, 6598, 6648, 6698, 6748, 6798, 6848, 6898, 6948, 6998, + 7048, 7098, 7148, 7198, 7248, 7298, 7348, 7398, 7448, 7498, + 7548, 7598, 7648, 7697, 7747, 7797, 7847, 7897, 7947, 7997, + 8047, 8097, 8147, 8196, 8246, 8296, 8346, 8396, 8446, 8496, + 8545, 8595, 8645, 8695, 8745, 8794, 8844, 8894, 8944, 8994, + 9043, 9093, 9143, 9193, 9243, 9292, 9342, 9392, 9442, 9491, + 9541, 9591, 9640, 9690, 9740, 9790, 9839, 9889, 9939, 9988, + 10038, 10088, 10137, 10187, 10237, 10286, 10336, 10386, 10435, 10485, + 10534, 10584, 10634, 10683, 10733, 10782, 10832, 10882, 10931, 10981, + 11030, 11080, 11129, 11179, 11228, 11278, 11327, 11377, 11426, 11476, + 11525, 11575, 11624, 11674, 11723, 11773, 11822, 11872, 11921, 11970, + 12020, 12069, 12119, 12168, 12218, 12267, 12316, 12366, 12415, 12464, + 12514, 12563, 12612, 12662, 12711, 12760, 12810, 12859, 12908, 12957, + 13007, 13056, 13105, 13154, 13204, 13253, 13302, 13351, 13401, 13450, + 13499, 13548, 13597, 13647, 13696, 13745, 13794, 13843, 13892, 13941, + 13990, 14040, 14089, 14138, 14187, 14236, 14285, 14334, 14383, 14432, + 14481, 14530, 14579, 14628, 14677, 14726, 14775, 14824, 14873, 14922, + 14971, 15020, 15069, 15118, 15167, 15215, 15264, 15313, 15362, 15411, + 15460, 15509, 15557, 15606, 15655, 15704, 15753, 15802, 15850, 15899, + 15948, 15997, 16045, 16094, 16143, 16191, 16240, 16289, 16338, 16386, + 16435, 16484, 16532, 16581, 16629, 16678, 16727, 16775, 16824, 16872, + 16921, 16970, 17018, 17067, 17115, 17164, 17212, 17261, 17309, 17358, + 17406, 17455, 17503, 17551, 17600, 17648, 17697, 17745, 17793, 17842, + 17890, 17939, 17987, 18035, 18084, 18132, 18180, 18228, 18277, 18325, + 18373, 18421, 18470, 18518, 18566, 18614, 18663, 18711, 18759, 18807, + 18855, 18903, 18951, 19000, 19048, 19096, 19144, 19192, 19240, 19288, + 19336, 19384, 19432, 19480, 19528, 19576, 19624, 19672, 19720, 19768, + 19816, 19864, 19912, 19959, 20007, 20055, 20103, 20151, 20199, 20246, + 20294, 20342, 20390, 20438, 20485, 20533, 20581, 20629, 20676, 20724, + 20772, 20819, 20867, 20915, 20962, 21010, 21057, 21105, 21153, 21200, + 21248, 21295, 21343, 21390, 21438, 21485, 21533, 21580, 21628, 21675, + 21723, 21770, 21817, 21865, 21912, 21960, 22007, 22054, 22102, 22149, + 22196, 22243, 22291, 22338, 22385, 22433, 22480, 22527, 22574, 22621, + 22668, 22716, 22763, 22810, 22857, 22904, 22951, 22998, 23045, 23092, + 23139, 23186, 23233, 23280, 23327, 23374, 23421, 23468, 23515, 23562, + 23609, 23656, 23703, 23750, 23796, 23843, 23890, 23937, 23984, 24030, + 24077, 24124, 24171, 24217, 24264, 24311, 24357, 24404, 24451, 24497, + 24544, 24591, 24637, 24684, 24730, 24777, 24823, 24870, 24916, 24963, + 25009, 25056, 25102, 25149, 25195, 25241, 25288, 25334, 25381, 25427, + 25473, 25520, 25566, 25612, 25658, 25705, 25751, 25797, 25843, 25889, + 25936, 25982, 26028, 26074, 26120, 26166, 26212, 26258, 26304, 26350, + 26396, 26442, 26488, 26534, 26580, 26626, 26672, 26718, 26764, 26810, + 26856, 26902, 26947, 26993, 27039, 27085, 27131, 27176, 27222, 27268, + 27313, 27359, 27405, 27450, 27496, 27542, 27587, 27633, 27678, 27724, + 27770, 27815, 27861, 27906, 27952, 27997, 28042, 28088, 28133, 28179, + 28224, 28269, 28315, 28360, 28405, 28451, 28496, 28541, 28586, 28632, + 28677, 28722, 28767, 28812, 28858, 28903, 28948, 28993, 29038, 29083, + 29128, 29173, 29218, 29263, 29308, 29353, 29398, 29443, 29488, 29533, + 29577, 29622, 29667, 29712, 29757, 29801, 29846, 29891, 29936, 29980, + 30025, 30070, 30114, 30159, 30204, 30248, 30293, 30337, 30382, 30426, + 30471, 30515, 30560, 30604, 30649, 30693, 30738, 30782, 30826, 30871, + 30915, 30959, 31004, 31048, 31092, 31136, 31181, 31225, 31269, 31313, + 31357, 31402, 31446, 31490, 31534, 31578, 31622, 31666, 31710, 31754, + 31798, 31842, 31886, 31930, 31974, 32017, 32061, 32105, 32149, 32193, + 32236, 32280, 32324, 32368, 32411, 32455, 32499, 32542, 32586, 32630, + 32673, 32717, 32760, 32804, 32847, 32891, 32934, 32978, 33021, 33065, + 33108, 33151, 33195, 33238, 33281, 33325, 33368, 33411, 33454, 33498, + 33541, 33584, 33627, 33670, 33713, 33756, 33799, 33843, 33886, 33929, + 33972, 34015, 34057, 34100, 34143, 34186, 34229, 34272, 34315, 34358, + 34400, 34443, 34486, 34529, 34571, 34614, 34657, 34699, 34742, 34785, + 34827, 34870, 34912, 34955, 34997, 35040, 35082, 35125, 35167, 35210, + 35252, 35294, 35337, 35379, 35421, 35464, 35506, 35548, 35590, 35633, + 35675, 35717, 35759, 35801, 35843, 35885, 35927, 35969, 36011, 36053, + 36095, 36137, 36179, 36221, 36263, 36305, 36347, 36388, 36430, 36472, + 36514, 36555, 36597, 36639, 36681, 36722, 36764, 36805, 36847, 36889, + 36930, 36972, 37013, 37055, 37096, 37137, 37179, 37220, 37262, 37303, + 37344, 37386, 37427, 37468, 37509, 37551, 37592, 37633, 37674, 37715, + 37756, 37797, 37838, 37879, 37920, 37961, 38002, 38043, 38084, 38125, + 38166, 38207, 38248, 38288, 38329, 38370, 38411, 38451, 38492, 38533, + 38573, 38614, 38655, 38695, 38736, 38776, 38817, 38857, 38898, 38938, + 38979, 39019, 39059, 39100, 39140, 39180, 39221, 39261, 39301, 39341, + 39382, 39422, 39462, 39502, 39542, 39582, 39622, 39662, 39702, 39742, + 39782, 39822, 39862, 39902, 39942, 39982, 40021, 40061, 40101, 40141, + 40180, 40220, 40260, 40300, 40339, 40379, 40418, 40458, 40497, 40537, + 40576, 40616, 40655, 40695, 40734, 40773, 40813, 40852, 40891, 40931, + 40970, 41009, 41048, 41087, 41127, 41166, 41205, 41244, 41283, 41322, + 41361, 41400, 41439, 41478, 41517, 41556, 41595, 41633, 41672, 41711, + 41750, 41788, 41827, 41866, 41904, 41943, 41982, 42020, 42059, 42097, + 42136, 42174, 42213, 42251, 42290, 42328, 42366, 42405, 42443, 42481, + 42520, 42558, 42596, 42634, 42672, 42711, 42749, 42787, 42825, 42863, + 42901, 42939, 42977, 43015, 43053, 43091, 43128, 43166, 43204, 43242, + 43280, 43317, 43355, 43393, 43430, 43468, 43506, 43543, 43581, 43618, + 43656, 43693, 43731, 43768, 43806, 43843, 43880, 43918, 43955, 43992, + 44029, 44067, 44104, 44141, 44178, 44215, 44252, 44289, 44326, 44363, + 44400, 44437, 44474, 44511, 44548, 44585, 44622, 44659, 44695, 44732, + 44769, 44806, 44842, 44879, 44915, 44952, 44989, 45025, 45062, 45098, + 45135, 45171, 45207, 45244, 45280, 45316, 45353, 45389, 45425, 45462, + 45498, 45534, 45570, 45606, 45642, 45678, 45714, 45750, 45786, 45822, + 45858, 45894, 45930, 45966, 46002, 46037, 46073, 46109, 46145, 46180, + 46216, 46252, 46287, 46323, 46358, 46394, 46429, 46465, 46500, 46536, + 46571, 46606, 46642, 46677, 46712, 46747, 46783, 46818, 46853, 46888, + 46923, 46958, 46993, 47028, 47063, 47098, 47133, 47168, 47203, 47238, + 47273, 47308, 47342, 47377, 47412, 47446, 47481, 47516, 47550, 47585, + 47619, 47654, 47688, 47723, 47757, 47792, 47826, 47860, 47895, 47929, + 47963, 47998, 48032, 48066, 48100, 48134, 48168, 48202, 48237, 48271, + 48305, 48338, 48372, 48406, 48440, 48474, 48508, 48542, 48575, 48609, + 48643, 48676, 48710, 48744, 48777, 48811, 48844, 48878, 48911, 48945, + 48978, 49012, 49045, 49078, 49112, 49145, 49178, 49211, 49244, 49278, + 49311, 49344, 49377, 49410, 49443, 49476, 49509, 49542, 49575, 49608, + 49640, 49673, 49706, 49739, 49771, 49804, 49837, 49869, 49902, 49935, + 49967, 50000, 50032, 50065, 50097, 50129, 50162, 50194, 50226, 50259, + 50291, 50323, 50355, 50387, 50420, 50452, 50484, 50516, 50548, 50580, + 50612, 50644, 50675, 50707, 50739, 50771, 50803, 50834, 50866, 50898, + 50929, 50961, 50993, 51024, 51056, 51087, 51119, 51150, 51182, 51213, + 51244, 51276, 51307, 51338, 51369, 51401, 51432, 51463, 51494, 51525, + 51556, 51587, 51618, 51649, 51680, 51711, 51742, 51773, 51803, 51834, + 51865, 51896, 51926, 51957, 51988, 52018, 52049, 52079, 52110, 52140, + 52171, 52201, 52231, 52262, 52292, 52322, 52353, 52383, 52413, 52443, + 52473, 52503, 52534, 52564, 52594, 52624, 52653, 52683, 52713, 52743, + 52773, 52803, 52832, 52862, 52892, 52922, 52951, 52981, 53010, 53040, + 53069, 53099, 53128, 53158, 53187, 53216, 53246, 53275, 53304, 53334, + 53363, 53392, 53421, 53450, 53479, 53508, 53537, 53566, 53595, 53624, + 53653, 53682, 53711, 53739, 53768, 53797, 53826, 53854, 53883, 53911, + 53940, 53969, 53997, 54026, 54054, 54082, 54111, 54139, 54167, 54196, + 54224, 54252, 54280, 54308, 54337, 54365, 54393, 54421, 54449, 54477, + 54505, 54533, 54560, 54588, 54616, 54644, 54672, 54699, 54727, 54755, + 54782, 54810, 54837, 54865, 54892, 54920, 54947, 54974, 55002, 55029, + 55056, 55084, 55111, 55138, 55165, 55192, 55219, 55246, 55274, 55300, + 55327, 55354, 55381, 55408, 55435, 55462, 55489, 55515, 55542, 55569, + 55595, 55622, 55648, 55675, 55701, 55728, 55754, 55781, 55807, 55833, + 55860, 55886, 55912, 55938, 55965, 55991, 56017, 56043, 56069, 56095, + 56121, 56147, 56173, 56199, 56225, 56250, 56276, 56302, 56328, 56353, + 56379, 56404, 56430, 56456, 56481, 56507, 56532, 56557, 56583, 56608, + 56633, 56659, 56684, 56709, 56734, 56760, 56785, 56810, 56835, 56860, + 56885, 56910, 56935, 56959, 56984, 57009, 57034, 57059, 57083, 57108, + 57133, 57157, 57182, 57206, 57231, 57255, 57280, 57304, 57329, 57353, + 57377, 57402, 57426, 57450, 57474, 57498, 57522, 57546, 57570, 57594, + 57618, 57642, 57666, 57690, 57714, 57738, 57762, 57785, 57809, 57833, + 57856, 57880, 57903, 57927, 57950, 57974, 57997, 58021, 58044, 58067, + 58091, 58114, 58137, 58160, 58183, 58207, 58230, 58253, 58276, 58299, + 58322, 58345, 58367, 58390, 58413, 58436, 58459, 58481, 58504, 58527, + 58549, 58572, 58594, 58617, 58639, 58662, 58684, 58706, 58729, 58751, + 58773, 58795, 58818, 58840, 58862, 58884, 58906, 58928, 58950, 58972, + 58994, 59016, 59038, 59059, 59081, 59103, 59125, 59146, 59168, 59190, + 59211, 59233, 59254, 59276, 59297, 59318, 59340, 59361, 59382, 59404, + 59425, 59446, 59467, 59488, 59509, 59530, 59551, 59572, 59593, 59614, + 59635, 59656, 59677, 59697, 59718, 59739, 59759, 59780, 59801, 59821, + 59842, 59862, 59883, 59903, 59923, 59944, 59964, 59984, 60004, 60025, + 60045, 60065, 60085, 60105, 60125, 60145, 60165, 60185, 60205, 60225, + 60244, 60264, 60284, 60304, 60323, 60343, 60363, 60382, 60402, 60421, + 60441, 60460, 60479, 60499, 60518, 60537, 60556, 60576, 60595, 60614, + 60633, 60652, 60671, 60690, 60709, 60728, 60747, 60766, 60785, 60803, + 60822, 60841, 60859, 60878, 60897, 60915, 60934, 60952, 60971, 60989, + 61007, 61026, 61044, 61062, 61081, 61099, 61117, 61135, 61153, 61171, + 61189, 61207, 61225, 61243, 61261, 61279, 61297, 61314, 61332, 61350, + 61367, 61385, 61403, 61420, 61438, 61455, 61473, 61490, 61507, 61525, + 61542, 61559, 61577, 61594, 61611, 61628, 61645, 61662, 61679, 61696, + 61713, 61730, 61747, 61764, 61780, 61797, 61814, 61831, 61847, 61864, + 61880, 61897, 61913, 61930, 61946, 61963, 61979, 61995, 62012, 62028, + 62044, 62060, 62076, 62092, 62108, 62125, 62141, 62156, 62172, 62188, + 62204, 62220, 62236, 62251, 62267, 62283, 62298, 62314, 62329, 62345, + 62360, 62376, 62391, 62407, 62422, 62437, 62453, 62468, 62483, 62498, + 62513, 62528, 62543, 62558, 62573, 62588, 62603, 62618, 62633, 62648, + 62662, 62677, 62692, 62706, 62721, 62735, 62750, 62764, 62779, 62793, + 62808, 62822, 62836, 62850, 62865, 62879, 62893, 62907, 62921, 62935, + 62949, 62963, 62977, 62991, 63005, 63019, 63032, 63046, 63060, 63074, + 63087, 63101, 63114, 63128, 63141, 63155, 63168, 63182, 63195, 63208, + 63221, 63235, 63248, 63261, 63274, 63287, 63300, 63313, 63326, 63339, + 63352, 63365, 63378, 63390, 63403, 63416, 63429, 63441, 63454, 63466, + 63479, 63491, 63504, 63516, 63528, 63541, 63553, 63565, 63578, 63590, + 63602, 63614, 63626, 63638, 63650, 63662, 63674, 63686, 63698, 63709, + 63721, 63733, 63745, 63756, 63768, 63779, 63791, 63803, 63814, 63825, + 63837, 63848, 63859, 63871, 63882, 63893, 63904, 63915, 63927, 63938, + 63949, 63960, 63971, 63981, 63992, 64003, 64014, 64025, 64035, 64046, + 64057, 64067, 64078, 64088, 64099, 64109, 64120, 64130, 64140, 64151, + 64161, 64171, 64181, 64192, 64202, 64212, 64222, 64232, 64242, 64252, + 64261, 64271, 64281, 64291, 64301, 64310, 64320, 64330, 64339, 64349, + 64358, 64368, 64377, 64387, 64396, 64405, 64414, 64424, 64433, 64442, + 64451, 64460, 64469, 64478, 64487, 64496, 64505, 64514, 64523, 64532, + 64540, 64549, 64558, 64566, 64575, 64584, 64592, 64601, 64609, 64617, + 64626, 64634, 64642, 64651, 64659, 64667, 64675, 64683, 64691, 64699, + 64707, 64715, 64723, 64731, 64739, 64747, 64754, 64762, 64770, 64777, + 64785, 64793, 64800, 64808, 64815, 64822, 64830, 64837, 64844, 64852, + 64859, 64866, 64873, 64880, 64887, 64895, 64902, 64908, 64915, 64922, + 64929, 64936, 64943, 64949, 64956, 64963, 64969, 64976, 64982, 64989, + 64995, 65002, 65008, 65015, 65021, 65027, 65033, 65040, 65046, 65052, + 65058, 65064, 65070, 65076, 65082, 65088, 65094, 65099, 65105, 65111, + 65117, 65122, 65128, 65133, 65139, 65144, 65150, 65155, 65161, 65166, + 65171, 65177, 65182, 65187, 65192, 65197, 65202, 65207, 65212, 65217, + 65222, 65227, 65232, 65237, 65242, 65246, 65251, 65256, 65260, 65265, + 65270, 65274, 65279, 65283, 65287, 65292, 65296, 65300, 65305, 65309, + 65313, 65317, 65321, 65325, 65329, 65333, 65337, 65341, 65345, 65349, + 65352, 65356, 65360, 65363, 65367, 65371, 65374, 65378, 65381, 65385, + 65388, 65391, 65395, 65398, 65401, 65404, 65408, 65411, 65414, 65417, + 65420, 65423, 65426, 65429, 65431, 65434, 65437, 65440, 65442, 65445, + 65448, 65450, 65453, 65455, 65458, 65460, 65463, 65465, 65467, 65470, + 65472, 65474, 65476, 65478, 65480, 65482, 65484, 65486, 65488, 65490, + 65492, 65494, 65496, 65497, 65499, 65501, 65502, 65504, 65505, 65507, + 65508, 65510, 65511, 65513, 65514, 65515, 65516, 65518, 65519, 65520, + 65521, 65522, 65523, 65524, 65525, 65526, 65527, 65527, 65528, 65529, + 65530, 65530, 65531, 65531, 65532, 65532, 65533, 65533, 65534, 65534, + 65534, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, + 65535, 65535, 65535, 65535, 65535, 65534, 65534, 65534, 65533, 65533, + 65532, 65532, 65531, 65531, 65530, 65530, 65529, 65528, 65527, 65527, + 65526, 65525, 65524, 65523, 65522, 65521, 65520, 65519, 65518, 65516, + 65515, 65514, 65513, 65511, 65510, 65508, 65507, 65505, 65504, 65502, + 65501, 65499, 65497, 65496, 65494, 65492, 65490, 65488, 65486, 65484, + 65482, 65480, 65478, 65476, 65474, 65472, 65470, 65467, 65465, 65463, + 65460, 65458, 65455, 65453, 65450, 65448, 65445, 65442, 65440, 65437, + 65434, 65431, 65429, 65426, 65423, 65420, 65417, 65414, 65411, 65408, + 65404, 65401, 65398, 65395, 65391, 65388, 65385, 65381, 65378, 65374, + 65371, 65367, 65363, 65360, 65356, 65352, 65349, 65345, 65341, 65337, + 65333, 65329, 65325, 65321, 65317, 65313, 65309, 65305, 65300, 65296, + 65292, 65287, 65283, 65279, 65274, 65270, 65265, 65260, 65256, 65251, + 65246, 65242, 65237, 65232, 65227, 65222, 65217, 65212, 65207, 65202, + 65197, 65192, 65187, 65182, 65177, 65171, 65166, 65161, 65155, 65150, + 65144, 65139, 65133, 65128, 65122, 65117, 65111, 65105, 65099, 65094, + 65088, 65082, 65076, 65070, 65064, 65058, 65052, 65046, 65040, 65033, + 65027, 65021, 65015, 65008, 65002, 64995, 64989, 64982, 64976, 64969, + 64963, 64956, 64949, 64943, 64936, 64929, 64922, 64915, 64908, 64902, + 64895, 64887, 64880, 64873, 64866, 64859, 64852, 64844, 64837, 64830, + 64822, 64815, 64808, 64800, 64793, 64785, 64777, 64770, 64762, 64754, + 64747, 64739, 64731, 64723, 64715, 64707, 64699, 64691, 64683, 64675, + 64667, 64659, 64651, 64642, 64634, 64626, 64617, 64609, 64600, 64592, + 64584, 64575, 64566, 64558, 64549, 64540, 64532, 64523, 64514, 64505, + 64496, 64487, 64478, 64469, 64460, 64451, 64442, 64433, 64424, 64414, + 64405, 64396, 64387, 64377, 64368, 64358, 64349, 64339, 64330, 64320, + 64310, 64301, 64291, 64281, 64271, 64261, 64252, 64242, 64232, 64222, + 64212, 64202, 64192, 64181, 64171, 64161, 64151, 64140, 64130, 64120, + 64109, 64099, 64088, 64078, 64067, 64057, 64046, 64035, 64025, 64014, + 64003, 63992, 63981, 63971, 63960, 63949, 63938, 63927, 63915, 63904, + 63893, 63882, 63871, 63859, 63848, 63837, 63825, 63814, 63803, 63791, + 63779, 63768, 63756, 63745, 63733, 63721, 63709, 63698, 63686, 63674, + 63662, 63650, 63638, 63626, 63614, 63602, 63590, 63578, 63565, 63553, + 63541, 63528, 63516, 63504, 63491, 63479, 63466, 63454, 63441, 63429, + 63416, 63403, 63390, 63378, 63365, 63352, 63339, 63326, 63313, 63300, + 63287, 63274, 63261, 63248, 63235, 63221, 63208, 63195, 63182, 63168, + 63155, 63141, 63128, 63114, 63101, 63087, 63074, 63060, 63046, 63032, + 63019, 63005, 62991, 62977, 62963, 62949, 62935, 62921, 62907, 62893, + 62879, 62865, 62850, 62836, 62822, 62808, 62793, 62779, 62764, 62750, + 62735, 62721, 62706, 62692, 62677, 62662, 62648, 62633, 62618, 62603, + 62588, 62573, 62558, 62543, 62528, 62513, 62498, 62483, 62468, 62453, + 62437, 62422, 62407, 62391, 62376, 62360, 62345, 62329, 62314, 62298, + 62283, 62267, 62251, 62236, 62220, 62204, 62188, 62172, 62156, 62141, + 62125, 62108, 62092, 62076, 62060, 62044, 62028, 62012, 61995, 61979, + 61963, 61946, 61930, 61913, 61897, 61880, 61864, 61847, 61831, 61814, + 61797, 61780, 61764, 61747, 61730, 61713, 61696, 61679, 61662, 61645, + 61628, 61611, 61594, 61577, 61559, 61542, 61525, 61507, 61490, 61473, + 61455, 61438, 61420, 61403, 61385, 61367, 61350, 61332, 61314, 61297, + 61279, 61261, 61243, 61225, 61207, 61189, 61171, 61153, 61135, 61117, + 61099, 61081, 61062, 61044, 61026, 61007, 60989, 60971, 60952, 60934, + 60915, 60897, 60878, 60859, 60841, 60822, 60803, 60785, 60766, 60747, + 60728, 60709, 60690, 60671, 60652, 60633, 60614, 60595, 60576, 60556, + 60537, 60518, 60499, 60479, 60460, 60441, 60421, 60402, 60382, 60363, + 60343, 60323, 60304, 60284, 60264, 60244, 60225, 60205, 60185, 60165, + 60145, 60125, 60105, 60085, 60065, 60045, 60025, 60004, 59984, 59964, + 59944, 59923, 59903, 59883, 59862, 59842, 59821, 59801, 59780, 59759, + 59739, 59718, 59697, 59677, 59656, 59635, 59614, 59593, 59572, 59551, + 59530, 59509, 59488, 59467, 59446, 59425, 59404, 59382, 59361, 59340, + 59318, 59297, 59276, 59254, 59233, 59211, 59190, 59168, 59146, 59125, + 59103, 59081, 59059, 59038, 59016, 58994, 58972, 58950, 58928, 58906, + 58884, 58862, 58840, 58818, 58795, 58773, 58751, 58729, 58706, 58684, + 58662, 58639, 58617, 58594, 58572, 58549, 58527, 58504, 58481, 58459, + 58436, 58413, 58390, 58367, 58345, 58322, 58299, 58276, 58253, 58230, + 58207, 58183, 58160, 58137, 58114, 58091, 58067, 58044, 58021, 57997, + 57974, 57950, 57927, 57903, 57880, 57856, 57833, 57809, 57785, 57762, + 57738, 57714, 57690, 57666, 57642, 57618, 57594, 57570, 57546, 57522, + 57498, 57474, 57450, 57426, 57402, 57377, 57353, 57329, 57304, 57280, + 57255, 57231, 57206, 57182, 57157, 57133, 57108, 57083, 57059, 57034, + 57009, 56984, 56959, 56935, 56910, 56885, 56860, 56835, 56810, 56785, + 56760, 56734, 56709, 56684, 56659, 56633, 56608, 56583, 56557, 56532, + 56507, 56481, 56456, 56430, 56404, 56379, 56353, 56328, 56302, 56276, + 56250, 56225, 56199, 56173, 56147, 56121, 56095, 56069, 56043, 56017, + 55991, 55965, 55938, 55912, 55886, 55860, 55833, 55807, 55781, 55754, + 55728, 55701, 55675, 55648, 55622, 55595, 55569, 55542, 55515, 55489, + 55462, 55435, 55408, 55381, 55354, 55327, 55300, 55274, 55246, 55219, + 55192, 55165, 55138, 55111, 55084, 55056, 55029, 55002, 54974, 54947, + 54920, 54892, 54865, 54837, 54810, 54782, 54755, 54727, 54699, 54672, + 54644, 54616, 54588, 54560, 54533, 54505, 54477, 54449, 54421, 54393, + 54365, 54337, 54308, 54280, 54252, 54224, 54196, 54167, 54139, 54111, + 54082, 54054, 54026, 53997, 53969, 53940, 53911, 53883, 53854, 53826, + 53797, 53768, 53739, 53711, 53682, 53653, 53624, 53595, 53566, 53537, + 53508, 53479, 53450, 53421, 53392, 53363, 53334, 53304, 53275, 53246, + 53216, 53187, 53158, 53128, 53099, 53069, 53040, 53010, 52981, 52951, + 52922, 52892, 52862, 52832, 52803, 52773, 52743, 52713, 52683, 52653, + 52624, 52594, 52564, 52534, 52503, 52473, 52443, 52413, 52383, 52353, + 52322, 52292, 52262, 52231, 52201, 52171, 52140, 52110, 52079, 52049, + 52018, 51988, 51957, 51926, 51896, 51865, 51834, 51803, 51773, 51742, + 51711, 51680, 51649, 51618, 51587, 51556, 51525, 51494, 51463, 51432, + 51401, 51369, 51338, 51307, 51276, 51244, 51213, 51182, 51150, 51119, + 51087, 51056, 51024, 50993, 50961, 50929, 50898, 50866, 50834, 50803, + 50771, 50739, 50707, 50675, 50644, 50612, 50580, 50548, 50516, 50484, + 50452, 50420, 50387, 50355, 50323, 50291, 50259, 50226, 50194, 50162, + 50129, 50097, 50065, 50032, 50000, 49967, 49935, 49902, 49869, 49837, + 49804, 49771, 49739, 49706, 49673, 49640, 49608, 49575, 49542, 49509, + 49476, 49443, 49410, 49377, 49344, 49311, 49278, 49244, 49211, 49178, + 49145, 49112, 49078, 49045, 49012, 48978, 48945, 48911, 48878, 48844, + 48811, 48777, 48744, 48710, 48676, 48643, 48609, 48575, 48542, 48508, + 48474, 48440, 48406, 48372, 48338, 48304, 48271, 48237, 48202, 48168, + 48134, 48100, 48066, 48032, 47998, 47963, 47929, 47895, 47860, 47826, + 47792, 47757, 47723, 47688, 47654, 47619, 47585, 47550, 47516, 47481, + 47446, 47412, 47377, 47342, 47308, 47273, 47238, 47203, 47168, 47133, + 47098, 47063, 47028, 46993, 46958, 46923, 46888, 46853, 46818, 46783, + 46747, 46712, 46677, 46642, 46606, 46571, 46536, 46500, 46465, 46429, + 46394, 46358, 46323, 46287, 46252, 46216, 46180, 46145, 46109, 46073, + 46037, 46002, 45966, 45930, 45894, 45858, 45822, 45786, 45750, 45714, + 45678, 45642, 45606, 45570, 45534, 45498, 45462, 45425, 45389, 45353, + 45316, 45280, 45244, 45207, 45171, 45135, 45098, 45062, 45025, 44989, + 44952, 44915, 44879, 44842, 44806, 44769, 44732, 44695, 44659, 44622, + 44585, 44548, 44511, 44474, 44437, 44400, 44363, 44326, 44289, 44252, + 44215, 44178, 44141, 44104, 44067, 44029, 43992, 43955, 43918, 43880, + 43843, 43806, 43768, 43731, 43693, 43656, 43618, 43581, 43543, 43506, + 43468, 43430, 43393, 43355, 43317, 43280, 43242, 43204, 43166, 43128, + 43091, 43053, 43015, 42977, 42939, 42901, 42863, 42825, 42787, 42749, + 42711, 42672, 42634, 42596, 42558, 42520, 42481, 42443, 42405, 42366, + 42328, 42290, 42251, 42213, 42174, 42136, 42097, 42059, 42020, 41982, + 41943, 41904, 41866, 41827, 41788, 41750, 41711, 41672, 41633, 41595, + 41556, 41517, 41478, 41439, 41400, 41361, 41322, 41283, 41244, 41205, + 41166, 41127, 41088, 41048, 41009, 40970, 40931, 40891, 40852, 40813, + 40773, 40734, 40695, 40655, 40616, 40576, 40537, 40497, 40458, 40418, + 40379, 40339, 40300, 40260, 40220, 40180, 40141, 40101, 40061, 40021, + 39982, 39942, 39902, 39862, 39822, 39782, 39742, 39702, 39662, 39622, + 39582, 39542, 39502, 39462, 39422, 39382, 39341, 39301, 39261, 39221, + 39180, 39140, 39100, 39059, 39019, 38979, 38938, 38898, 38857, 38817, + 38776, 38736, 38695, 38655, 38614, 38573, 38533, 38492, 38451, 38411, + 38370, 38329, 38288, 38248, 38207, 38166, 38125, 38084, 38043, 38002, + 37961, 37920, 37879, 37838, 37797, 37756, 37715, 37674, 37633, 37592, + 37551, 37509, 37468, 37427, 37386, 37344, 37303, 37262, 37220, 37179, + 37137, 37096, 37055, 37013, 36972, 36930, 36889, 36847, 36805, 36764, + 36722, 36681, 36639, 36597, 36556, 36514, 36472, 36430, 36388, 36347, + 36305, 36263, 36221, 36179, 36137, 36095, 36053, 36011, 35969, 35927, + 35885, 35843, 35801, 35759, 35717, 35675, 35633, 35590, 35548, 35506, + 35464, 35421, 35379, 35337, 35294, 35252, 35210, 35167, 35125, 35082, + 35040, 34997, 34955, 34912, 34870, 34827, 34785, 34742, 34699, 34657, + 34614, 34571, 34529, 34486, 34443, 34400, 34358, 34315, 34272, 34229, + 34186, 34143, 34100, 34057, 34015, 33972, 33929, 33886, 33843, 33799, + 33756, 33713, 33670, 33627, 33584, 33541, 33498, 33454, 33411, 33368, + 33325, 33281, 33238, 33195, 33151, 33108, 33065, 33021, 32978, 32934, + 32891, 32847, 32804, 32760, 32717, 32673, 32630, 32586, 32542, 32499, + 32455, 32411, 32368, 32324, 32280, 32236, 32193, 32149, 32105, 32061, + 32017, 31974, 31930, 31886, 31842, 31798, 31754, 31710, 31666, 31622, + 31578, 31534, 31490, 31446, 31402, 31357, 31313, 31269, 31225, 31181, + 31136, 31092, 31048, 31004, 30959, 30915, 30871, 30826, 30782, 30738, + 30693, 30649, 30604, 30560, 30515, 30471, 30426, 30382, 30337, 30293, + 30248, 30204, 30159, 30114, 30070, 30025, 29980, 29936, 29891, 29846, + 29801, 29757, 29712, 29667, 29622, 29577, 29533, 29488, 29443, 29398, + 29353, 29308, 29263, 29218, 29173, 29128, 29083, 29038, 28993, 28948, + 28903, 28858, 28812, 28767, 28722, 28677, 28632, 28586, 28541, 28496, + 28451, 28405, 28360, 28315, 28269, 28224, 28179, 28133, 28088, 28042, + 27997, 27952, 27906, 27861, 27815, 27770, 27724, 27678, 27633, 27587, + 27542, 27496, 27450, 27405, 27359, 27313, 27268, 27222, 27176, 27131, + 27085, 27039, 26993, 26947, 26902, 26856, 26810, 26764, 26718, 26672, + 26626, 26580, 26534, 26488, 26442, 26396, 26350, 26304, 26258, 26212, + 26166, 26120, 26074, 26028, 25982, 25936, 25889, 25843, 25797, 25751, + 25705, 25658, 25612, 25566, 25520, 25473, 25427, 25381, 25334, 25288, + 25241, 25195, 25149, 25102, 25056, 25009, 24963, 24916, 24870, 24823, + 24777, 24730, 24684, 24637, 24591, 24544, 24497, 24451, 24404, 24357, + 24311, 24264, 24217, 24171, 24124, 24077, 24030, 23984, 23937, 23890, + 23843, 23796, 23750, 23703, 23656, 23609, 23562, 23515, 23468, 23421, + 23374, 23327, 23280, 23233, 23186, 23139, 23092, 23045, 22998, 22951, + 22904, 22857, 22810, 22763, 22716, 22668, 22621, 22574, 22527, 22480, + 22433, 22385, 22338, 22291, 22243, 22196, 22149, 22102, 22054, 22007, + 21960, 21912, 21865, 21817, 21770, 21723, 21675, 21628, 21580, 21533, + 21485, 21438, 21390, 21343, 21295, 21248, 21200, 21153, 21105, 21057, + 21010, 20962, 20915, 20867, 20819, 20772, 20724, 20676, 20629, 20581, + 20533, 20485, 20438, 20390, 20342, 20294, 20246, 20199, 20151, 20103, + 20055, 20007, 19959, 19912, 19864, 19816, 19768, 19720, 19672, 19624, + 19576, 19528, 19480, 19432, 19384, 19336, 19288, 19240, 19192, 19144, + 19096, 19048, 19000, 18951, 18903, 18855, 18807, 18759, 18711, 18663, + 18614, 18566, 18518, 18470, 18421, 18373, 18325, 18277, 18228, 18180, + 18132, 18084, 18035, 17987, 17939, 17890, 17842, 17793, 17745, 17697, + 17648, 17600, 17551, 17503, 17455, 17406, 17358, 17309, 17261, 17212, + 17164, 17115, 17067, 17018, 16970, 16921, 16872, 16824, 16775, 16727, + 16678, 16629, 16581, 16532, 16484, 16435, 16386, 16338, 16289, 16240, + 16191, 16143, 16094, 16045, 15997, 15948, 15899, 15850, 15802, 15753, + 15704, 15655, 15606, 15557, 15509, 15460, 15411, 15362, 15313, 15264, + 15215, 15167, 15118, 15069, 15020, 14971, 14922, 14873, 14824, 14775, + 14726, 14677, 14628, 14579, 14530, 14481, 14432, 14383, 14334, 14285, + 14236, 14187, 14138, 14089, 14040, 13990, 13941, 13892, 13843, 13794, + 13745, 13696, 13646, 13597, 13548, 13499, 13450, 13401, 13351, 13302, + 13253, 13204, 13154, 13105, 13056, 13007, 12957, 12908, 12859, 12810, + 12760, 12711, 12662, 12612, 12563, 12514, 12464, 12415, 12366, 12316, + 12267, 12218, 12168, 12119, 12069, 12020, 11970, 11921, 11872, 11822, + 11773, 11723, 11674, 11624, 11575, 11525, 11476, 11426, 11377, 11327, + 11278, 11228, 11179, 11129, 11080, 11030, 10981, 10931, 10882, 10832, + 10782, 10733, 10683, 10634, 10584, 10534, 10485, 10435, 10386, 10336, + 10286, 10237, 10187, 10137, 10088, 10038, 9988, 9939, 9889, 9839, + 9790, 9740, 9690, 9640, 9591, 9541, 9491, 9442, 9392, 9342, + 9292, 9243, 9193, 9143, 9093, 9043, 8994, 8944, 8894, 8844, + 8794, 8745, 8695, 8645, 8595, 8545, 8496, 8446, 8396, 8346, + 8296, 8246, 8196, 8147, 8097, 8047, 7997, 7947, 7897, 7847, + 7797, 7747, 7697, 7648, 7598, 7548, 7498, 7448, 7398, 7348, + 7298, 7248, 7198, 7148, 7098, 7048, 6998, 6948, 6898, 6848, + 6798, 6748, 6698, 6648, 6598, 6548, 6498, 6448, 6398, 6348, + 6298, 6248, 6198, 6148, 6098, 6048, 5998, 5948, 5898, 5848, + 5798, 5748, 5697, 5647, 5597, 5547, 5497, 5447, 5397, 5347, + 5297, 5247, 5197, 5146, 5096, 5046, 4996, 4946, 4896, 4846, + 4796, 4745, 4695, 4645, 4595, 4545, 4495, 4445, 4394, 4344, + 4294, 4244, 4194, 4144, 4093, 4043, 3993, 3943, 3893, 3843, + 3792, 3742, 3692, 3642, 3592, 3541, 3491, 3441, 3391, 3341, + 3291, 3240, 3190, 3140, 3090, 3039, 2989, 2939, 2889, 2839, + 2788, 2738, 2688, 2638, 2587, 2537, 2487, 2437, 2387, 2336, + 2286, 2236, 2186, 2135, 2085, 2035, 1985, 1934, 1884, 1834, + 1784, 1733, 1683, 1633, 1583, 1532, 1482, 1432, 1382, 1331, + 1281, 1231, 1181, 1130, 1080, 1030, 980, 929, 879, 829, + 779, 728, 678, 628, 578, 527, 477, 427, 376, 326, + 276, 226, 175, 125, 75, 25, -25, -75, -125, -175, + -226, -276, -326, -376, -427, -477, -527, -578, -628, -678, + -728, -779, -829, -879, -929, -980, -1030, -1080, -1130, -1181, + -1231, -1281, -1331, -1382, -1432, -1482, -1532, -1583, -1633, -1683, + -1733, -1784, -1834, -1884, -1934, -1985, -2035, -2085, -2135, -2186, + -2236, -2286, -2336, -2387, -2437, -2487, -2537, -2588, -2638, -2688, + -2738, -2788, -2839, -2889, -2939, -2989, -3039, -3090, -3140, -3190, + -3240, -3291, -3341, -3391, -3441, -3491, -3541, -3592, -3642, -3692, + -3742, -3792, -3843, -3893, -3943, -3993, -4043, -4093, -4144, -4194, + -4244, -4294, -4344, -4394, -4445, -4495, -4545, -4595, -4645, -4695, + -4745, -4796, -4846, -4896, -4946, -4996, -5046, -5096, -5146, -5197, + -5247, -5297, -5347, -5397, -5447, -5497, -5547, -5597, -5647, -5697, + -5748, -5798, -5848, -5898, -5948, -5998, -6048, -6098, -6148, -6198, + -6248, -6298, -6348, -6398, -6448, -6498, -6548, -6598, -6648, -6698, + -6748, -6798, -6848, -6898, -6948, -6998, -7048, -7098, -7148, -7198, + -7248, -7298, -7348, -7398, -7448, -7498, -7548, -7598, -7648, -7697, + -7747, -7797, -7847, -7897, -7947, -7997, -8047, -8097, -8147, -8196, + -8246, -8296, -8346, -8396, -8446, -8496, -8545, -8595, -8645, -8695, + -8745, -8794, -8844, -8894, -8944, -8994, -9043, -9093, -9143, -9193, + -9243, -9292, -9342, -9392, -9442, -9491, -9541, -9591, -9640, -9690, + -9740, -9790, -9839, -9889, -9939, -9988, -10038, -10088, -10137, -10187, + -10237, -10286, -10336, -10386, -10435, -10485, -10534, -10584, -10634, -10683, + -10733, -10782, -10832, -10882, -10931, -10981, -11030, -11080, -11129, -11179, + -11228, -11278, -11327, -11377, -11426, -11476, -11525, -11575, -11624, -11674, + -11723, -11773, -11822, -11872, -11921, -11970, -12020, -12069, -12119, -12168, + -12218, -12267, -12316, -12366, -12415, -12464, -12514, -12563, -12612, -12662, + -12711, -12760, -12810, -12859, -12908, -12957, -13007, -13056, -13105, -13154, + -13204, -13253, -13302, -13351, -13401, -13450, -13499, -13548, -13597, -13647, + -13696, -13745, -13794, -13843, -13892, -13941, -13990, -14040, -14089, -14138, + -14187, -14236, -14285, -14334, -14383, -14432, -14481, -14530, -14579, -14628, + -14677, -14726, -14775, -14824, -14873, -14922, -14971, -15020, -15069, -15118, + -15167, -15215, -15264, -15313, -15362, -15411, -15460, -15509, -15557, -15606, + -15655, -15704, -15753, -15802, -15850, -15899, -15948, -15997, -16045, -16094, + -16143, -16191, -16240, -16289, -16338, -16386, -16435, -16484, -16532, -16581, + -16629, -16678, -16727, -16775, -16824, -16872, -16921, -16970, -17018, -17067, + -17115, -17164, -17212, -17261, -17309, -17358, -17406, -17455, -17503, -17551, + -17600, -17648, -17697, -17745, -17793, -17842, -17890, -17939, -17987, -18035, + -18084, -18132, -18180, -18228, -18277, -18325, -18373, -18421, -18470, -18518, + -18566, -18614, -18663, -18711, -18759, -18807, -18855, -18903, -18951, -19000, + -19048, -19096, -19144, -19192, -19240, -19288, -19336, -19384, -19432, -19480, + -19528, -19576, -19624, -19672, -19720, -19768, -19816, -19864, -19912, -19959, + -20007, -20055, -20103, -20151, -20199, -20246, -20294, -20342, -20390, -20438, + -20485, -20533, -20581, -20629, -20676, -20724, -20772, -20819, -20867, -20915, + -20962, -21010, -21057, -21105, -21153, -21200, -21248, -21295, -21343, -21390, + -21438, -21485, -21533, -21580, -21628, -21675, -21723, -21770, -21817, -21865, + -21912, -21960, -22007, -22054, -22102, -22149, -22196, -22243, -22291, -22338, + -22385, -22433, -22480, -22527, -22574, -22621, -22668, -22716, -22763, -22810, + -22857, -22904, -22951, -22998, -23045, -23092, -23139, -23186, -23233, -23280, + -23327, -23374, -23421, -23468, -23515, -23562, -23609, -23656, -23703, -23750, + -23796, -23843, -23890, -23937, -23984, -24030, -24077, -24124, -24171, -24217, + -24264, -24311, -24357, -24404, -24451, -24497, -24544, -24591, -24637, -24684, + -24730, -24777, -24823, -24870, -24916, -24963, -25009, -25056, -25102, -25149, + -25195, -25241, -25288, -25334, -25381, -25427, -25473, -25520, -25566, -25612, + -25658, -25705, -25751, -25797, -25843, -25889, -25936, -25982, -26028, -26074, + -26120, -26166, -26212, -26258, -26304, -26350, -26396, -26442, -26488, -26534, + -26580, -26626, -26672, -26718, -26764, -26810, -26856, -26902, -26947, -26993, + -27039, -27085, -27131, -27176, -27222, -27268, -27313, -27359, -27405, -27450, + -27496, -27542, -27587, -27633, -27678, -27724, -27770, -27815, -27861, -27906, + -27952, -27997, -28042, -28088, -28133, -28179, -28224, -28269, -28315, -28360, + -28405, -28451, -28496, -28541, -28586, -28632, -28677, -28722, -28767, -28812, + -28858, -28903, -28948, -28993, -29038, -29083, -29128, -29173, -29218, -29263, + -29308, -29353, -29398, -29443, -29488, -29533, -29577, -29622, -29667, -29712, + -29757, -29801, -29846, -29891, -29936, -29980, -30025, -30070, -30114, -30159, + -30204, -30248, -30293, -30337, -30382, -30426, -30471, -30515, -30560, -30604, + -30649, -30693, -30738, -30782, -30826, -30871, -30915, -30959, -31004, -31048, + -31092, -31136, -31181, -31225, -31269, -31313, -31357, -31402, -31446, -31490, + -31534, -31578, -31622, -31666, -31710, -31754, -31798, -31842, -31886, -31930, + -31974, -32017, -32061, -32105, -32149, -32193, -32236, -32280, -32324, -32368, + -32411, -32455, -32499, -32542, -32586, -32630, -32673, -32717, -32760, -32804, + -32847, -32891, -32934, -32978, -33021, -33065, -33108, -33151, -33195, -33238, + -33281, -33325, -33368, -33411, -33454, -33498, -33541, -33584, -33627, -33670, + -33713, -33756, -33799, -33843, -33886, -33929, -33972, -34015, -34057, -34100, + -34143, -34186, -34229, -34272, -34315, -34358, -34400, -34443, -34486, -34529, + -34571, -34614, -34657, -34699, -34742, -34785, -34827, -34870, -34912, -34955, + -34997, -35040, -35082, -35125, -35167, -35210, -35252, -35294, -35337, -35379, + -35421, -35464, -35506, -35548, -35590, -35633, -35675, -35717, -35759, -35801, + -35843, -35885, -35927, -35969, -36011, -36053, -36095, -36137, -36179, -36221, + -36263, -36305, -36347, -36388, -36430, -36472, -36514, -36555, -36597, -36639, + -36681, -36722, -36764, -36805, -36847, -36889, -36930, -36972, -37013, -37055, + -37096, -37137, -37179, -37220, -37262, -37303, -37344, -37386, -37427, -37468, + -37509, -37551, -37592, -37633, -37674, -37715, -37756, -37797, -37838, -37879, + -37920, -37961, -38002, -38043, -38084, -38125, -38166, -38207, -38248, -38288, + -38329, -38370, -38411, -38451, -38492, -38533, -38573, -38614, -38655, -38695, + -38736, -38776, -38817, -38857, -38898, -38938, -38979, -39019, -39059, -39100, + -39140, -39180, -39221, -39261, -39301, -39341, -39382, -39422, -39462, -39502, + -39542, -39582, -39622, -39662, -39702, -39742, -39782, -39822, -39862, -39902, + -39942, -39982, -40021, -40061, -40101, -40141, -40180, -40220, -40260, -40299, + -40339, -40379, -40418, -40458, -40497, -40537, -40576, -40616, -40655, -40695, + -40734, -40773, -40813, -40852, -40891, -40931, -40970, -41009, -41048, -41087, + -41127, -41166, -41205, -41244, -41283, -41322, -41361, -41400, -41439, -41478, + -41517, -41556, -41595, -41633, -41672, -41711, -41750, -41788, -41827, -41866, + -41904, -41943, -41982, -42020, -42059, -42097, -42136, -42174, -42213, -42251, + -42290, -42328, -42366, -42405, -42443, -42481, -42520, -42558, -42596, -42634, + -42672, -42711, -42749, -42787, -42825, -42863, -42901, -42939, -42977, -43015, + -43053, -43091, -43128, -43166, -43204, -43242, -43280, -43317, -43355, -43393, + -43430, -43468, -43506, -43543, -43581, -43618, -43656, -43693, -43731, -43768, + -43806, -43843, -43880, -43918, -43955, -43992, -44029, -44067, -44104, -44141, + -44178, -44215, -44252, -44289, -44326, -44363, -44400, -44437, -44474, -44511, + -44548, -44585, -44622, -44659, -44695, -44732, -44769, -44806, -44842, -44879, + -44915, -44952, -44989, -45025, -45062, -45098, -45135, -45171, -45207, -45244, + -45280, -45316, -45353, -45389, -45425, -45462, -45498, -45534, -45570, -45606, + -45642, -45678, -45714, -45750, -45786, -45822, -45858, -45894, -45930, -45966, + -46002, -46037, -46073, -46109, -46145, -46180, -46216, -46252, -46287, -46323, + -46358, -46394, -46429, -46465, -46500, -46536, -46571, -46606, -46642, -46677, + -46712, -46747, -46783, -46818, -46853, -46888, -46923, -46958, -46993, -47028, + -47063, -47098, -47133, -47168, -47203, -47238, -47273, -47308, -47342, -47377, + -47412, -47446, -47481, -47516, -47550, -47585, -47619, -47654, -47688, -47723, + -47757, -47792, -47826, -47860, -47895, -47929, -47963, -47998, -48032, -48066, + -48100, -48134, -48168, -48202, -48236, -48271, -48304, -48338, -48372, -48406, + -48440, -48474, -48508, -48542, -48575, -48609, -48643, -48676, -48710, -48744, + -48777, -48811, -48844, -48878, -48911, -48945, -48978, -49012, -49045, -49078, + -49112, -49145, -49178, -49211, -49244, -49278, -49311, -49344, -49377, -49410, + -49443, -49476, -49509, -49542, -49575, -49608, -49640, -49673, -49706, -49739, + -49771, -49804, -49837, -49869, -49902, -49935, -49967, -50000, -50032, -50065, + -50097, -50129, -50162, -50194, -50226, -50259, -50291, -50323, -50355, -50387, + -50420, -50452, -50484, -50516, -50548, -50580, -50612, -50644, -50675, -50707, + -50739, -50771, -50803, -50834, -50866, -50898, -50929, -50961, -50993, -51024, + -51056, -51087, -51119, -51150, -51182, -51213, -51244, -51276, -51307, -51338, + -51369, -51401, -51432, -51463, -51494, -51525, -51556, -51587, -51618, -51649, + -51680, -51711, -51742, -51773, -51803, -51834, -51865, -51896, -51926, -51957, + -51988, -52018, -52049, -52079, -52110, -52140, -52171, -52201, -52231, -52262, + -52292, -52322, -52353, -52383, -52413, -52443, -52473, -52503, -52534, -52564, + -52594, -52624, -52653, -52683, -52713, -52743, -52773, -52803, -52832, -52862, + -52892, -52922, -52951, -52981, -53010, -53040, -53069, -53099, -53128, -53158, + -53187, -53216, -53246, -53275, -53304, -53334, -53363, -53392, -53421, -53450, + -53479, -53508, -53537, -53566, -53595, -53624, -53653, -53682, -53711, -53739, + -53768, -53797, -53826, -53854, -53883, -53911, -53940, -53969, -53997, -54026, + -54054, -54082, -54111, -54139, -54167, -54196, -54224, -54252, -54280, -54308, + -54337, -54365, -54393, -54421, -54449, -54477, -54505, -54533, -54560, -54588, + -54616, -54644, -54672, -54699, -54727, -54755, -54782, -54810, -54837, -54865, + -54892, -54920, -54947, -54974, -55002, -55029, -55056, -55084, -55111, -55138, + -55165, -55192, -55219, -55246, -55274, -55300, -55327, -55354, -55381, -55408, + -55435, -55462, -55489, -55515, -55542, -55569, -55595, -55622, -55648, -55675, + -55701, -55728, -55754, -55781, -55807, -55833, -55860, -55886, -55912, -55938, + -55965, -55991, -56017, -56043, -56069, -56095, -56121, -56147, -56173, -56199, + -56225, -56250, -56276, -56302, -56328, -56353, -56379, -56404, -56430, -56456, + -56481, -56507, -56532, -56557, -56583, -56608, -56633, -56659, -56684, -56709, + -56734, -56760, -56785, -56810, -56835, -56860, -56885, -56910, -56935, -56959, + -56984, -57009, -57034, -57059, -57083, -57108, -57133, -57157, -57182, -57206, + -57231, -57255, -57280, -57304, -57329, -57353, -57377, -57402, -57426, -57450, + -57474, -57498, -57522, -57546, -57570, -57594, -57618, -57642, -57666, -57690, + -57714, -57738, -57762, -57785, -57809, -57833, -57856, -57880, -57903, -57927, + -57950, -57974, -57997, -58021, -58044, -58067, -58091, -58114, -58137, -58160, + -58183, -58207, -58230, -58253, -58276, -58299, -58322, -58345, -58367, -58390, + -58413, -58436, -58459, -58481, -58504, -58527, -58549, -58572, -58594, -58617, + -58639, -58662, -58684, -58706, -58729, -58751, -58773, -58795, -58818, -58840, + -58862, -58884, -58906, -58928, -58950, -58972, -58994, -59016, -59038, -59059, + -59081, -59103, -59125, -59146, -59168, -59190, -59211, -59233, -59254, -59276, + -59297, -59318, -59340, -59361, -59382, -59404, -59425, -59446, -59467, -59488, + -59509, -59530, -59551, -59572, -59593, -59614, -59635, -59656, -59677, -59697, + -59718, -59739, -59759, -59780, -59801, -59821, -59842, -59862, -59883, -59903, + -59923, -59944, -59964, -59984, -60004, -60025, -60045, -60065, -60085, -60105, + -60125, -60145, -60165, -60185, -60205, -60225, -60244, -60264, -60284, -60304, + -60323, -60343, -60363, -60382, -60402, -60421, -60441, -60460, -60479, -60499, + -60518, -60537, -60556, -60576, -60595, -60614, -60633, -60652, -60671, -60690, + -60709, -60728, -60747, -60766, -60785, -60803, -60822, -60841, -60859, -60878, + -60897, -60915, -60934, -60952, -60971, -60989, -61007, -61026, -61044, -61062, + -61081, -61099, -61117, -61135, -61153, -61171, -61189, -61207, -61225, -61243, + -61261, -61279, -61297, -61314, -61332, -61350, -61367, -61385, -61403, -61420, + -61438, -61455, -61473, -61490, -61507, -61525, -61542, -61559, -61577, -61594, + -61611, -61628, -61645, -61662, -61679, -61696, -61713, -61730, -61747, -61764, + -61780, -61797, -61814, -61831, -61847, -61864, -61880, -61897, -61913, -61930, + -61946, -61963, -61979, -61995, -62012, -62028, -62044, -62060, -62076, -62092, + -62108, -62125, -62141, -62156, -62172, -62188, -62204, -62220, -62236, -62251, + -62267, -62283, -62298, -62314, -62329, -62345, -62360, -62376, -62391, -62407, + -62422, -62437, -62453, -62468, -62483, -62498, -62513, -62528, -62543, -62558, + -62573, -62588, -62603, -62618, -62633, -62648, -62662, -62677, -62692, -62706, + -62721, -62735, -62750, -62764, -62779, -62793, -62808, -62822, -62836, -62850, + -62865, -62879, -62893, -62907, -62921, -62935, -62949, -62963, -62977, -62991, + -63005, -63019, -63032, -63046, -63060, -63074, -63087, -63101, -63114, -63128, + -63141, -63155, -63168, -63182, -63195, -63208, -63221, -63235, -63248, -63261, + -63274, -63287, -63300, -63313, -63326, -63339, -63352, -63365, -63378, -63390, + -63403, -63416, -63429, -63441, -63454, -63466, -63479, -63491, -63504, -63516, + -63528, -63541, -63553, -63565, -63578, -63590, -63602, -63614, -63626, -63638, + -63650, -63662, -63674, -63686, -63698, -63709, -63721, -63733, -63745, -63756, + -63768, -63779, -63791, -63803, -63814, -63825, -63837, -63848, -63859, -63871, + -63882, -63893, -63904, -63915, -63927, -63938, -63949, -63960, -63971, -63981, + -63992, -64003, -64014, -64025, -64035, -64046, -64057, -64067, -64078, -64088, + -64099, -64109, -64120, -64130, -64140, -64151, -64161, -64171, -64181, -64192, + -64202, -64212, -64222, -64232, -64242, -64252, -64261, -64271, -64281, -64291, + -64301, -64310, -64320, -64330, -64339, -64349, -64358, -64368, -64377, -64387, + -64396, -64405, -64414, -64424, -64433, -64442, -64451, -64460, -64469, -64478, + -64487, -64496, -64505, -64514, -64523, -64532, -64540, -64549, -64558, -64566, + -64575, -64584, -64592, -64601, -64609, -64617, -64626, -64634, -64642, -64651, + -64659, -64667, -64675, -64683, -64691, -64699, -64707, -64715, -64723, -64731, + -64739, -64747, -64754, -64762, -64770, -64777, -64785, -64793, -64800, -64808, + -64815, -64822, -64830, -64837, -64844, -64852, -64859, -64866, -64873, -64880, + -64887, -64895, -64902, -64908, -64915, -64922, -64929, -64936, -64943, -64949, + -64956, -64963, -64969, -64976, -64982, -64989, -64995, -65002, -65008, -65015, + -65021, -65027, -65033, -65040, -65046, -65052, -65058, -65064, -65070, -65076, + -65082, -65088, -65094, -65099, -65105, -65111, -65117, -65122, -65128, -65133, + -65139, -65144, -65150, -65155, -65161, -65166, -65171, -65177, -65182, -65187, + -65192, -65197, -65202, -65207, -65212, -65217, -65222, -65227, -65232, -65237, + -65242, -65246, -65251, -65256, -65260, -65265, -65270, -65274, -65279, -65283, + -65287, -65292, -65296, -65300, -65305, -65309, -65313, -65317, -65321, -65325, + -65329, -65333, -65337, -65341, -65345, -65349, -65352, -65356, -65360, -65363, + -65367, -65371, -65374, -65378, -65381, -65385, -65388, -65391, -65395, -65398, + -65401, -65404, -65408, -65411, -65414, -65417, -65420, -65423, -65426, -65429, + -65431, -65434, -65437, -65440, -65442, -65445, -65448, -65450, -65453, -65455, + -65458, -65460, -65463, -65465, -65467, -65470, -65472, -65474, -65476, -65478, + -65480, -65482, -65484, -65486, -65488, -65490, -65492, -65494, -65496, -65497, + -65499, -65501, -65502, -65504, -65505, -65507, -65508, -65510, -65511, -65513, + -65514, -65515, -65516, -65518, -65519, -65520, -65521, -65522, -65523, -65524, + -65525, -65526, -65527, -65527, -65528, -65529, -65530, -65530, -65531, -65531, + -65532, -65532, -65533, -65533, -65534, -65534, -65534, -65535, -65535, -65535, + -65535, -65535, -65535, -65535, -65535, -65535, -65535, -65535, -65535, -65535, + -65535, -65534, -65534, -65534, -65533, -65533, -65532, -65532, -65531, -65531, + -65530, -65530, -65529, -65528, -65527, -65527, -65526, -65525, -65524, -65523, + -65522, -65521, -65520, -65519, -65518, -65516, -65515, -65514, -65513, -65511, + -65510, -65508, -65507, -65505, -65504, -65502, -65501, -65499, -65497, -65496, + -65494, -65492, -65490, -65488, -65486, -65484, -65482, -65480, -65478, -65476, + -65474, -65472, -65470, -65467, -65465, -65463, -65460, -65458, -65455, -65453, + -65450, -65448, -65445, -65442, -65440, -65437, -65434, -65431, -65429, -65426, + -65423, -65420, -65417, -65414, -65411, -65408, -65404, -65401, -65398, -65395, + -65391, -65388, -65385, -65381, -65378, -65374, -65371, -65367, -65363, -65360, + -65356, -65352, -65349, -65345, -65341, -65337, -65333, -65329, -65325, -65321, + -65317, -65313, -65309, -65305, -65300, -65296, -65292, -65287, -65283, -65279, + -65274, -65270, -65265, -65260, -65256, -65251, -65246, -65242, -65237, -65232, + -65227, -65222, -65217, -65212, -65207, -65202, -65197, -65192, -65187, -65182, + -65177, -65171, -65166, -65161, -65155, -65150, -65144, -65139, -65133, -65128, + -65122, -65117, -65111, -65105, -65099, -65094, -65088, -65082, -65076, -65070, + -65064, -65058, -65052, -65046, -65040, -65033, -65027, -65021, -65015, -65008, + -65002, -64995, -64989, -64982, -64976, -64969, -64963, -64956, -64949, -64943, + -64936, -64929, -64922, -64915, -64908, -64902, -64895, -64887, -64880, -64873, + -64866, -64859, -64852, -64844, -64837, -64830, -64822, -64815, -64808, -64800, + -64793, -64785, -64777, -64770, -64762, -64754, -64747, -64739, -64731, -64723, + -64715, -64707, -64699, -64691, -64683, -64675, -64667, -64659, -64651, -64642, + -64634, -64626, -64617, -64609, -64601, -64592, -64584, -64575, -64566, -64558, + -64549, -64540, -64532, -64523, -64514, -64505, -64496, -64487, -64478, -64469, + -64460, -64451, -64442, -64433, -64424, -64414, -64405, -64396, -64387, -64377, + -64368, -64358, -64349, -64339, -64330, -64320, -64310, -64301, -64291, -64281, + -64271, -64261, -64252, -64242, -64232, -64222, -64212, -64202, -64192, -64181, + -64171, -64161, -64151, -64140, -64130, -64120, -64109, -64099, -64088, -64078, + -64067, -64057, -64046, -64035, -64025, -64014, -64003, -63992, -63981, -63971, + -63960, -63949, -63938, -63927, -63915, -63904, -63893, -63882, -63871, -63859, + -63848, -63837, -63825, -63814, -63803, -63791, -63779, -63768, -63756, -63745, + -63733, -63721, -63709, -63698, -63686, -63674, -63662, -63650, -63638, -63626, + -63614, -63602, -63590, -63578, -63565, -63553, -63541, -63528, -63516, -63504, + -63491, -63479, -63466, -63454, -63441, -63429, -63416, -63403, -63390, -63378, + -63365, -63352, -63339, -63326, -63313, -63300, -63287, -63274, -63261, -63248, + -63235, -63221, -63208, -63195, -63182, -63168, -63155, -63141, -63128, -63114, + -63101, -63087, -63074, -63060, -63046, -63032, -63019, -63005, -62991, -62977, + -62963, -62949, -62935, -62921, -62907, -62893, -62879, -62865, -62850, -62836, + -62822, -62808, -62793, -62779, -62764, -62750, -62735, -62721, -62706, -62692, + -62677, -62662, -62648, -62633, -62618, -62603, -62588, -62573, -62558, -62543, + -62528, -62513, -62498, -62483, -62468, -62453, -62437, -62422, -62407, -62391, + -62376, -62360, -62345, -62329, -62314, -62298, -62283, -62267, -62251, -62236, + -62220, -62204, -62188, -62172, -62156, -62141, -62125, -62108, -62092, -62076, + -62060, -62044, -62028, -62012, -61995, -61979, -61963, -61946, -61930, -61913, + -61897, -61880, -61864, -61847, -61831, -61814, -61797, -61780, -61764, -61747, + -61730, -61713, -61696, -61679, -61662, -61645, -61628, -61611, -61594, -61577, + -61559, -61542, -61525, -61507, -61490, -61473, -61455, -61438, -61420, -61403, + -61385, -61367, -61350, -61332, -61314, -61297, -61279, -61261, -61243, -61225, + -61207, -61189, -61171, -61153, -61135, -61117, -61099, -61081, -61062, -61044, + -61026, -61007, -60989, -60971, -60952, -60934, -60915, -60897, -60878, -60859, + -60841, -60822, -60803, -60785, -60766, -60747, -60728, -60709, -60690, -60671, + -60652, -60633, -60614, -60595, -60576, -60556, -60537, -60518, -60499, -60479, + -60460, -60441, -60421, -60402, -60382, -60363, -60343, -60323, -60304, -60284, + -60264, -60244, -60225, -60205, -60185, -60165, -60145, -60125, -60105, -60085, + -60065, -60045, -60025, -60004, -59984, -59964, -59944, -59923, -59903, -59883, + -59862, -59842, -59821, -59801, -59780, -59759, -59739, -59718, -59697, -59677, + -59656, -59635, -59614, -59593, -59572, -59551, -59530, -59509, -59488, -59467, + -59446, -59425, -59404, -59382, -59361, -59340, -59318, -59297, -59276, -59254, + -59233, -59211, -59189, -59168, -59146, -59125, -59103, -59081, -59059, -59038, + -59016, -58994, -58972, -58950, -58928, -58906, -58884, -58862, -58840, -58818, + -58795, -58773, -58751, -58729, -58706, -58684, -58662, -58639, -58617, -58594, + -58572, -58549, -58527, -58504, -58481, -58459, -58436, -58413, -58390, -58367, + -58345, -58322, -58299, -58276, -58253, -58230, -58207, -58183, -58160, -58137, + -58114, -58091, -58067, -58044, -58021, -57997, -57974, -57950, -57927, -57903, + -57880, -57856, -57833, -57809, -57785, -57762, -57738, -57714, -57690, -57666, + -57642, -57618, -57594, -57570, -57546, -57522, -57498, -57474, -57450, -57426, + -57402, -57377, -57353, -57329, -57304, -57280, -57255, -57231, -57206, -57182, + -57157, -57133, -57108, -57083, -57059, -57034, -57009, -56984, -56959, -56935, + -56910, -56885, -56860, -56835, -56810, -56785, -56760, -56734, -56709, -56684, + -56659, -56633, -56608, -56583, -56557, -56532, -56507, -56481, -56456, -56430, + -56404, -56379, -56353, -56328, -56302, -56276, -56250, -56225, -56199, -56173, + -56147, -56121, -56095, -56069, -56043, -56017, -55991, -55965, -55938, -55912, + -55886, -55860, -55833, -55807, -55781, -55754, -55728, -55701, -55675, -55648, + -55622, -55595, -55569, -55542, -55515, -55489, -55462, -55435, -55408, -55381, + -55354, -55327, -55300, -55274, -55246, -55219, -55192, -55165, -55138, -55111, + -55084, -55056, -55029, -55002, -54974, -54947, -54920, -54892, -54865, -54837, + -54810, -54782, -54755, -54727, -54699, -54672, -54644, -54616, -54588, -54560, + -54533, -54505, -54477, -54449, -54421, -54393, -54365, -54337, -54308, -54280, + -54252, -54224, -54196, -54167, -54139, -54111, -54082, -54054, -54026, -53997, + -53969, -53940, -53911, -53883, -53854, -53826, -53797, -53768, -53739, -53711, + -53682, -53653, -53624, -53595, -53566, -53537, -53508, -53479, -53450, -53421, + -53392, -53363, -53334, -53304, -53275, -53246, -53216, -53187, -53158, -53128, + -53099, -53069, -53040, -53010, -52981, -52951, -52922, -52892, -52862, -52832, + -52803, -52773, -52743, -52713, -52683, -52653, -52624, -52594, -52564, -52534, + -52503, -52473, -52443, -52413, -52383, -52353, -52322, -52292, -52262, -52231, + -52201, -52171, -52140, -52110, -52079, -52049, -52018, -51988, -51957, -51926, + -51896, -51865, -51834, -51803, -51773, -51742, -51711, -51680, -51649, -51618, + -51587, -51556, -51525, -51494, -51463, -51432, -51401, -51369, -51338, -51307, + -51276, -51244, -51213, -51182, -51150, -51119, -51087, -51056, -51024, -50993, + -50961, -50929, -50898, -50866, -50834, -50803, -50771, -50739, -50707, -50675, + -50644, -50612, -50580, -50548, -50516, -50484, -50452, -50420, -50387, -50355, + -50323, -50291, -50259, -50226, -50194, -50162, -50129, -50097, -50065, -50032, + -50000, -49967, -49935, -49902, -49869, -49837, -49804, -49771, -49739, -49706, + -49673, -49640, -49608, -49575, -49542, -49509, -49476, -49443, -49410, -49377, + -49344, -49311, -49278, -49244, -49211, -49178, -49145, -49112, -49078, -49045, + -49012, -48978, -48945, -48911, -48878, -48844, -48811, -48777, -48744, -48710, + -48676, -48643, -48609, -48575, -48542, -48508, -48474, -48440, -48406, -48372, + -48338, -48305, -48271, -48237, -48202, -48168, -48134, -48100, -48066, -48032, + -47998, -47963, -47929, -47895, -47860, -47826, -47792, -47757, -47723, -47688, + -47654, -47619, -47585, -47550, -47516, -47481, -47446, -47412, -47377, -47342, + -47307, -47273, -47238, -47203, -47168, -47133, -47098, -47063, -47028, -46993, + -46958, -46923, -46888, -46853, -46818, -46783, -46747, -46712, -46677, -46642, + -46606, -46571, -46536, -46500, -46465, -46429, -46394, -46358, -46323, -46287, + -46251, -46216, -46180, -46145, -46109, -46073, -46037, -46002, -45966, -45930, + -45894, -45858, -45822, -45786, -45750, -45714, -45678, -45642, -45606, -45570, + -45534, -45498, -45462, -45425, -45389, -45353, -45316, -45280, -45244, -45207, + -45171, -45135, -45098, -45062, -45025, -44989, -44952, -44915, -44879, -44842, + -44806, -44769, -44732, -44695, -44659, -44622, -44585, -44548, -44511, -44474, + -44437, -44400, -44363, -44326, -44289, -44252, -44215, -44178, -44141, -44104, + -44067, -44029, -43992, -43955, -43918, -43880, -43843, -43806, -43768, -43731, + -43693, -43656, -43618, -43581, -43543, -43506, -43468, -43430, -43393, -43355, + -43317, -43280, -43242, -43204, -43166, -43128, -43091, -43053, -43015, -42977, + -42939, -42901, -42863, -42825, -42787, -42749, -42711, -42672, -42634, -42596, + -42558, -42520, -42481, -42443, -42405, -42366, -42328, -42290, -42251, -42213, + -42174, -42136, -42097, -42059, -42020, -41982, -41943, -41904, -41866, -41827, + -41788, -41750, -41711, -41672, -41633, -41595, -41556, -41517, -41478, -41439, + -41400, -41361, -41322, -41283, -41244, -41205, -41166, -41127, -41087, -41048, + -41009, -40970, -40931, -40891, -40852, -40813, -40773, -40734, -40695, -40655, + -40616, -40576, -40537, -40497, -40458, -40418, -40379, -40339, -40299, -40260, + -40220, -40180, -40141, -40101, -40061, -40021, -39982, -39942, -39902, -39862, + -39822, -39782, -39742, -39702, -39662, -39622, -39582, -39542, -39502, -39462, + -39422, -39382, -39341, -39301, -39261, -39221, -39180, -39140, -39100, -39059, + -39019, -38979, -38938, -38898, -38857, -38817, -38776, -38736, -38695, -38655, + -38614, -38573, -38533, -38492, -38451, -38411, -38370, -38329, -38288, -38248, + -38207, -38166, -38125, -38084, -38043, -38002, -37961, -37920, -37879, -37838, + -37797, -37756, -37715, -37674, -37633, -37592, -37550, -37509, -37468, -37427, + -37386, -37344, -37303, -37262, -37220, -37179, -37137, -37096, -37055, -37013, + -36972, -36930, -36889, -36847, -36805, -36764, -36722, -36681, -36639, -36597, + -36556, -36514, -36472, -36430, -36388, -36347, -36305, -36263, -36221, -36179, + -36137, -36095, -36053, -36011, -35969, -35927, -35885, -35843, -35801, -35759, + -35717, -35675, -35633, -35590, -35548, -35506, -35464, -35421, -35379, -35337, + -35294, -35252, -35210, -35167, -35125, -35082, -35040, -34997, -34955, -34912, + -34870, -34827, -34785, -34742, -34699, -34657, -34614, -34571, -34529, -34486, + -34443, -34400, -34358, -34315, -34272, -34229, -34186, -34143, -34100, -34057, + -34015, -33972, -33929, -33886, -33843, -33799, -33756, -33713, -33670, -33627, + -33584, -33541, -33498, -33454, -33411, -33368, -33325, -33281, -33238, -33195, + -33151, -33108, -33065, -33021, -32978, -32934, -32891, -32847, -32804, -32760, + -32717, -32673, -32630, -32586, -32542, -32499, -32455, -32411, -32368, -32324, + -32280, -32236, -32193, -32149, -32105, -32061, -32017, -31974, -31930, -31886, + -31842, -31798, -31754, -31710, -31666, -31622, -31578, -31534, -31490, -31446, + -31402, -31357, -31313, -31269, -31225, -31181, -31136, -31092, -31048, -31004, + -30959, -30915, -30871, -30826, -30782, -30738, -30693, -30649, -30604, -30560, + -30515, -30471, -30426, -30382, -30337, -30293, -30248, -30204, -30159, -30114, + -30070, -30025, -29980, -29936, -29891, -29846, -29801, -29757, -29712, -29667, + -29622, -29577, -29533, -29488, -29443, -29398, -29353, -29308, -29263, -29218, + -29173, -29128, -29083, -29038, -28993, -28948, -28903, -28858, -28812, -28767, + -28722, -28677, -28632, -28586, -28541, -28496, -28451, -28405, -28360, -28315, + -28269, -28224, -28179, -28133, -28088, -28042, -27997, -27952, -27906, -27861, + -27815, -27770, -27724, -27678, -27633, -27587, -27542, -27496, -27450, -27405, + -27359, -27313, -27268, -27222, -27176, -27131, -27085, -27039, -26993, -26947, + -26902, -26856, -26810, -26764, -26718, -26672, -26626, -26580, -26534, -26488, + -26442, -26396, -26350, -26304, -26258, -26212, -26166, -26120, -26074, -26028, + -25982, -25936, -25889, -25843, -25797, -25751, -25705, -25658, -25612, -25566, + -25520, -25473, -25427, -25381, -25334, -25288, -25241, -25195, -25149, -25102, + -25056, -25009, -24963, -24916, -24870, -24823, -24777, -24730, -24684, -24637, + -24591, -24544, -24497, -24451, -24404, -24357, -24311, -24264, -24217, -24171, + -24124, -24077, -24030, -23984, -23937, -23890, -23843, -23796, -23750, -23703, + -23656, -23609, -23562, -23515, -23468, -23421, -23374, -23327, -23280, -23233, + -23186, -23139, -23092, -23045, -22998, -22951, -22904, -22857, -22810, -22763, + -22716, -22668, -22621, -22574, -22527, -22480, -22432, -22385, -22338, -22291, + -22243, -22196, -22149, -22102, -22054, -22007, -21960, -21912, -21865, -21817, + -21770, -21723, -21675, -21628, -21580, -21533, -21485, -21438, -21390, -21343, + -21295, -21248, -21200, -21153, -21105, -21057, -21010, -20962, -20915, -20867, + -20819, -20772, -20724, -20676, -20629, -20581, -20533, -20485, -20438, -20390, + -20342, -20294, -20246, -20199, -20151, -20103, -20055, -20007, -19959, -19912, + -19864, -19816, -19768, -19720, -19672, -19624, -19576, -19528, -19480, -19432, + -19384, -19336, -19288, -19240, -19192, -19144, -19096, -19048, -19000, -18951, + -18903, -18855, -18807, -18759, -18711, -18663, -18614, -18566, -18518, -18470, + -18421, -18373, -18325, -18277, -18228, -18180, -18132, -18084, -18035, -17987, + -17939, -17890, -17842, -17793, -17745, -17697, -17648, -17600, -17551, -17503, + -17455, -17406, -17358, -17309, -17261, -17212, -17164, -17115, -17067, -17018, + -16970, -16921, -16872, -16824, -16775, -16727, -16678, -16629, -16581, -16532, + -16484, -16435, -16386, -16338, -16289, -16240, -16191, -16143, -16094, -16045, + -15997, -15948, -15899, -15850, -15802, -15753, -15704, -15655, -15606, -15557, + -15509, -15460, -15411, -15362, -15313, -15264, -15215, -15167, -15118, -15069, + -15020, -14971, -14922, -14873, -14824, -14775, -14726, -14677, -14628, -14579, + -14530, -14481, -14432, -14383, -14334, -14285, -14236, -14187, -14138, -14089, + -14040, -13990, -13941, -13892, -13843, -13794, -13745, -13696, -13647, -13597, + -13548, -13499, -13450, -13401, -13351, -13302, -13253, -13204, -13154, -13105, + -13056, -13007, -12957, -12908, -12859, -12810, -12760, -12711, -12662, -12612, + -12563, -12514, -12464, -12415, -12366, -12316, -12267, -12217, -12168, -12119, + -12069, -12020, -11970, -11921, -11872, -11822, -11773, -11723, -11674, -11624, + -11575, -11525, -11476, -11426, -11377, -11327, -11278, -11228, -11179, -11129, + -11080, -11030, -10981, -10931, -10882, -10832, -10782, -10733, -10683, -10634, + -10584, -10534, -10485, -10435, -10386, -10336, -10286, -10237, -10187, -10137, + -10088, -10038, -9988, -9939, -9889, -9839, -9790, -9740, -9690, -9640, + -9591, -9541, -9491, -9442, -9392, -9342, -9292, -9243, -9193, -9143, + -9093, -9043, -8994, -8944, -8894, -8844, -8794, -8745, -8695, -8645, + -8595, -8545, -8496, -8446, -8396, -8346, -8296, -8246, -8196, -8147, + -8097, -8047, -7997, -7947, -7897, -7847, -7797, -7747, -7697, -7648, + -7598, -7548, -7498, -7448, -7398, -7348, -7298, -7248, -7198, -7148, + -7098, -7048, -6998, -6948, -6898, -6848, -6798, -6748, -6698, -6648, + -6598, -6548, -6498, -6448, -6398, -6348, -6298, -6248, -6198, -6148, + -6098, -6048, -5998, -5948, -5898, -5848, -5798, -5747, -5697, -5647, + -5597, -5547, -5497, -5447, -5397, -5347, -5297, -5247, -5197, -5146, + -5096, -5046, -4996, -4946, -4896, -4846, -4796, -4745, -4695, -4645, + -4595, -4545, -4495, -4445, -4394, -4344, -4294, -4244, -4194, -4144, + -4093, -4043, -3993, -3943, -3893, -3843, -3792, -3742, -3692, -3642, + -3592, -3541, -3491, -3441, -3391, -3341, -3291, -3240, -3190, -3140, + -3090, -3039, -2989, -2939, -2889, -2839, -2788, -2738, -2688, -2638, + -2588, -2537, -2487, -2437, -2387, -2336, -2286, -2236, -2186, -2135, + -2085, -2035, -1985, -1934, -1884, -1834, -1784, -1733, -1683, -1633, + -1583, -1532, -1482, -1432, -1382, -1331, -1281, -1231, -1181, -1130, + -1080, -1030, -980, -929, -879, -829, -779, -728, -678, -628, + -578, -527, -477, -427, -376, -326, -276, -226, -175, -125, + -75, -25, 25, 75, 125, 175, 226, 276, 326, 376, + 427, 477, 527, 578, 628, 678, 728, 779, 829, 879, + 929, 980, 1030, 1080, 1130, 1181, 1231, 1281, 1331, 1382, + 1432, 1482, 1532, 1583, 1633, 1683, 1733, 1784, 1834, 1884, + 1934, 1985, 2035, 2085, 2135, 2186, 2236, 2286, 2336, 2387, + 2437, 2487, 2537, 2587, 2638, 2688, 2738, 2788, 2839, 2889, + 2939, 2989, 3039, 3090, 3140, 3190, 3240, 3291, 3341, 3391, + 3441, 3491, 3542, 3592, 3642, 3692, 3742, 3792, 3843, 3893, + 3943, 3993, 4043, 4093, 4144, 4194, 4244, 4294, 4344, 4394, + 4445, 4495, 4545, 4595, 4645, 4695, 4745, 4796, 4846, 4896, + 4946, 4996, 5046, 5096, 5146, 5197, 5247, 5297, 5347, 5397, + 5447, 5497, 5547, 5597, 5647, 5697, 5747, 5798, 5848, 5898, + 5948, 5998, 6048, 6098, 6148, 6198, 6248, 6298, 6348, 6398, + 6448, 6498, 6548, 6598, 6648, 6698, 6748, 6798, 6848, 6898, + 6948, 6998, 7048, 7098, 7148, 7198, 7248, 7298, 7348, 7398, + 7448, 7498, 7548, 7598, 7648, 7697, 7747, 7797, 7847, 7897, + 7947, 7997, 8047, 8097, 8147, 8196, 8246, 8296, 8346, 8396, + 8446, 8496, 8545, 8595, 8645, 8695, 8745, 8794, 8844, 8894, + 8944, 8994, 9043, 9093, 9143, 9193, 9243, 9292, 9342, 9392, + 9442, 9491, 9541, 9591, 9640, 9690, 9740, 9790, 9839, 9889, + 9939, 9988, 10038, 10088, 10137, 10187, 10237, 10286, 10336, 10386, + 10435, 10485, 10534, 10584, 10634, 10683, 10733, 10782, 10832, 10882, + 10931, 10981, 11030, 11080, 11129, 11179, 11228, 11278, 11327, 11377, + 11426, 11476, 11525, 11575, 11624, 11674, 11723, 11773, 11822, 11872, + 11921, 11970, 12020, 12069, 12119, 12168, 12218, 12267, 12316, 12366, + 12415, 12464, 12514, 12563, 12612, 12662, 12711, 12760, 12810, 12859, + 12908, 12957, 13007, 13056, 13105, 13154, 13204, 13253, 13302, 13351, + 13401, 13450, 13499, 13548, 13597, 13647, 13696, 13745, 13794, 13843, + 13892, 13941, 13990, 14040, 14089, 14138, 14187, 14236, 14285, 14334, + 14383, 14432, 14481, 14530, 14579, 14628, 14677, 14726, 14775, 14824, + 14873, 14922, 14971, 15020, 15069, 15118, 15167, 15215, 15264, 15313, + 15362, 15411, 15460, 15509, 15557, 15606, 15655, 15704, 15753, 15802, + 15850, 15899, 15948, 15997, 16045, 16094, 16143, 16191, 16240, 16289, + 16338, 16386, 16435, 16484, 16532, 16581, 16629, 16678, 16727, 16775, + 16824, 16872, 16921, 16970, 17018, 17067, 17115, 17164, 17212, 17261, + 17309, 17358, 17406, 17455, 17503, 17551, 17600, 17648, 17697, 17745, + 17793, 17842, 17890, 17939, 17987, 18035, 18084, 18132, 18180, 18228, + 18277, 18325, 18373, 18421, 18470, 18518, 18566, 18614, 18663, 18711, + 18759, 18807, 18855, 18903, 18951, 19000, 19048, 19096, 19144, 19192, + 19240, 19288, 19336, 19384, 19432, 19480, 19528, 19576, 19624, 19672, + 19720, 19768, 19816, 19864, 19912, 19959, 20007, 20055, 20103, 20151, + 20199, 20246, 20294, 20342, 20390, 20438, 20485, 20533, 20581, 20629, + 20676, 20724, 20772, 20819, 20867, 20915, 20962, 21010, 21057, 21105, + 21153, 21200, 21248, 21295, 21343, 21390, 21438, 21485, 21533, 21580, + 21628, 21675, 21723, 21770, 21817, 21865, 21912, 21960, 22007, 22054, + 22102, 22149, 22196, 22243, 22291, 22338, 22385, 22432, 22480, 22527, + 22574, 22621, 22668, 22716, 22763, 22810, 22857, 22904, 22951, 22998, + 23045, 23092, 23139, 23186, 23233, 23280, 23327, 23374, 23421, 23468, + 23515, 23562, 23609, 23656, 23703, 23750, 23796, 23843, 23890, 23937, + 23984, 24030, 24077, 24124, 24171, 24217, 24264, 24311, 24357, 24404, + 24451, 24497, 24544, 24591, 24637, 24684, 24730, 24777, 24823, 24870, + 24916, 24963, 25009, 25056, 25102, 25149, 25195, 25241, 25288, 25334, + 25381, 25427, 25473, 25520, 25566, 25612, 25658, 25705, 25751, 25797, + 25843, 25889, 25936, 25982, 26028, 26074, 26120, 26166, 26212, 26258, + 26304, 26350, 26396, 26442, 26488, 26534, 26580, 26626, 26672, 26718, + 26764, 26810, 26856, 26902, 26947, 26993, 27039, 27085, 27131, 27176, + 27222, 27268, 27313, 27359, 27405, 27450, 27496, 27542, 27587, 27633, + 27678, 27724, 27770, 27815, 27861, 27906, 27952, 27997, 28042, 28088, + 28133, 28179, 28224, 28269, 28315, 28360, 28405, 28451, 28496, 28541, + 28586, 28632, 28677, 28722, 28767, 28812, 28858, 28903, 28948, 28993, + 29038, 29083, 29128, 29173, 29218, 29263, 29308, 29353, 29398, 29443, + 29488, 29533, 29577, 29622, 29667, 29712, 29757, 29801, 29846, 29891, + 29936, 29980, 30025, 30070, 30114, 30159, 30204, 30248, 30293, 30337, + 30382, 30427, 30471, 30516, 30560, 30604, 30649, 30693, 30738, 30782, + 30826, 30871, 30915, 30959, 31004, 31048, 31092, 31136, 31181, 31225, + 31269, 31313, 31357, 31402, 31446, 31490, 31534, 31578, 31622, 31666, + 31710, 31754, 31798, 31842, 31886, 31930, 31974, 32017, 32061, 32105, + 32149, 32193, 32236, 32280, 32324, 32368, 32411, 32455, 32499, 32542, + 32586, 32630, 32673, 32717, 32760, 32804, 32847, 32891, 32934, 32978, + 33021, 33065, 33108, 33151, 33195, 33238, 33281, 33325, 33368, 33411, + 33454, 33498, 33541, 33584, 33627, 33670, 33713, 33756, 33799, 33843, + 33886, 33929, 33972, 34015, 34057, 34100, 34143, 34186, 34229, 34272, + 34315, 34358, 34400, 34443, 34486, 34529, 34571, 34614, 34657, 34699, + 34742, 34785, 34827, 34870, 34912, 34955, 34997, 35040, 35082, 35125, + 35167, 35210, 35252, 35294, 35337, 35379, 35421, 35464, 35506, 35548, + 35590, 35633, 35675, 35717, 35759, 35801, 35843, 35885, 35927, 35969, + 36011, 36053, 36095, 36137, 36179, 36221, 36263, 36305, 36347, 36388, + 36430, 36472, 36514, 36556, 36597, 36639, 36681, 36722, 36764, 36805, + 36847, 36889, 36930, 36972, 37013, 37055, 37096, 37137, 37179, 37220, + 37262, 37303, 37344, 37386, 37427, 37468, 37509, 37551, 37592, 37633, + 37674, 37715, 37756, 37797, 37838, 37879, 37920, 37961, 38002, 38043, + 38084, 38125, 38166, 38207, 38248, 38288, 38329, 38370, 38411, 38451, + 38492, 38533, 38573, 38614, 38655, 38695, 38736, 38776, 38817, 38857, + 38898, 38938, 38979, 39019, 39059, 39100, 39140, 39180, 39221, 39261, + 39301, 39341, 39382, 39422, 39462, 39502, 39542, 39582, 39622, 39662, + 39702, 39742, 39782, 39822, 39862, 39902, 39942, 39982, 40021, 40061, + 40101, 40141, 40180, 40220, 40260, 40299, 40339, 40379, 40418, 40458, + 40497, 40537, 40576, 40616, 40655, 40695, 40734, 40773, 40813, 40852, + 40891, 40931, 40970, 41009, 41048, 41087, 41127, 41166, 41205, 41244, + 41283, 41322, 41361, 41400, 41439, 41478, 41517, 41556, 41595, 41633, + 41672, 41711, 41750, 41788, 41827, 41866, 41904, 41943, 41982, 42020, + 42059, 42097, 42136, 42174, 42213, 42251, 42290, 42328, 42366, 42405, + 42443, 42481, 42520, 42558, 42596, 42634, 42672, 42711, 42749, 42787, + 42825, 42863, 42901, 42939, 42977, 43015, 43053, 43091, 43128, 43166, + 43204, 43242, 43280, 43317, 43355, 43393, 43430, 43468, 43506, 43543, + 43581, 43618, 43656, 43693, 43731, 43768, 43806, 43843, 43880, 43918, + 43955, 43992, 44029, 44067, 44104, 44141, 44178, 44215, 44252, 44289, + 44326, 44363, 44400, 44437, 44474, 44511, 44548, 44585, 44622, 44659, + 44695, 44732, 44769, 44806, 44842, 44879, 44915, 44952, 44989, 45025, + 45062, 45098, 45135, 45171, 45207, 45244, 45280, 45316, 45353, 45389, + 45425, 45462, 45498, 45534, 45570, 45606, 45642, 45678, 45714, 45750, + 45786, 45822, 45858, 45894, 45930, 45966, 46002, 46037, 46073, 46109, + 46145, 46180, 46216, 46252, 46287, 46323, 46358, 46394, 46429, 46465, + 46500, 46536, 46571, 46606, 46642, 46677, 46712, 46747, 46783, 46818, + 46853, 46888, 46923, 46958, 46993, 47028, 47063, 47098, 47133, 47168, + 47203, 47238, 47273, 47308, 47342, 47377, 47412, 47446, 47481, 47516, + 47550, 47585, 47619, 47654, 47688, 47723, 47757, 47792, 47826, 47861, + 47895, 47929, 47963, 47998, 48032, 48066, 48100, 48134, 48168, 48202, + 48237, 48271, 48305, 48338, 48372, 48406, 48440, 48474, 48508, 48542, + 48575, 48609, 48643, 48676, 48710, 48744, 48777, 48811, 48844, 48878, + 48911, 48945, 48978, 49012, 49045, 49078, 49112, 49145, 49178, 49211, + 49244, 49278, 49311, 49344, 49377, 49410, 49443, 49476, 49509, 49542, + 49575, 49608, 49640, 49673, 49706, 49739, 49771, 49804, 49837, 49869, + 49902, 49935, 49967, 50000, 50032, 50064, 50097, 50129, 50162, 50194, + 50226, 50259, 50291, 50323, 50355, 50387, 50420, 50452, 50484, 50516, + 50548, 50580, 50612, 50644, 50675, 50707, 50739, 50771, 50803, 50834, + 50866, 50898, 50929, 50961, 50993, 51024, 51056, 51087, 51119, 51150, + 51182, 51213, 51244, 51276, 51307, 51338, 51369, 51401, 51432, 51463, + 51494, 51525, 51556, 51587, 51618, 51649, 51680, 51711, 51742, 51773, + 51803, 51834, 51865, 51896, 51926, 51957, 51988, 52018, 52049, 52079, + 52110, 52140, 52171, 52201, 52231, 52262, 52292, 52322, 52353, 52383, + 52413, 52443, 52473, 52503, 52534, 52564, 52594, 52624, 52653, 52683, + 52713, 52743, 52773, 52803, 52832, 52862, 52892, 52922, 52951, 52981, + 53010, 53040, 53069, 53099, 53128, 53158, 53187, 53216, 53246, 53275, + 53304, 53334, 53363, 53392, 53421, 53450, 53479, 53508, 53537, 53566, + 53595, 53624, 53653, 53682, 53711, 53739, 53768, 53797, 53826, 53854, + 53883, 53912, 53940, 53969, 53997, 54026, 54054, 54082, 54111, 54139, + 54167, 54196, 54224, 54252, 54280, 54309, 54337, 54365, 54393, 54421, + 54449, 54477, 54505, 54533, 54560, 54588, 54616, 54644, 54672, 54699, + 54727, 54755, 54782, 54810, 54837, 54865, 54892, 54920, 54947, 54974, + 55002, 55029, 55056, 55084, 55111, 55138, 55165, 55192, 55219, 55246, + 55274, 55300, 55327, 55354, 55381, 55408, 55435, 55462, 55489, 55515, + 55542, 55569, 55595, 55622, 55648, 55675, 55701, 55728, 55754, 55781, + 55807, 55833, 55860, 55886, 55912, 55938, 55965, 55991, 56017, 56043, + 56069, 56095, 56121, 56147, 56173, 56199, 56225, 56250, 56276, 56302, + 56328, 56353, 56379, 56404, 56430, 56456, 56481, 56507, 56532, 56557, + 56583, 56608, 56633, 56659, 56684, 56709, 56734, 56760, 56785, 56810, + 56835, 56860, 56885, 56910, 56935, 56959, 56984, 57009, 57034, 57059, + 57083, 57108, 57133, 57157, 57182, 57206, 57231, 57255, 57280, 57304, + 57329, 57353, 57377, 57402, 57426, 57450, 57474, 57498, 57522, 57546, + 57570, 57594, 57618, 57642, 57666, 57690, 57714, 57738, 57762, 57785, + 57809, 57833, 57856, 57880, 57903, 57927, 57950, 57974, 57997, 58021, + 58044, 58067, 58091, 58114, 58137, 58160, 58183, 58207, 58230, 58253, + 58276, 58299, 58322, 58345, 58367, 58390, 58413, 58436, 58459, 58481, + 58504, 58527, 58549, 58572, 58594, 58617, 58639, 58662, 58684, 58706, + 58729, 58751, 58773, 58795, 58818, 58840, 58862, 58884, 58906, 58928, + 58950, 58972, 58994, 59016, 59038, 59059, 59081, 59103, 59125, 59146, + 59168, 59190, 59211, 59233, 59254, 59276, 59297, 59318, 59340, 59361, + 59382, 59404, 59425, 59446, 59467, 59488, 59509, 59530, 59551, 59572, + 59593, 59614, 59635, 59656, 59677, 59697, 59718, 59739, 59759, 59780, + 59801, 59821, 59842, 59862, 59883, 59903, 59923, 59944, 59964, 59984, + 60004, 60025, 60045, 60065, 60085, 60105, 60125, 60145, 60165, 60185, + 60205, 60225, 60244, 60264, 60284, 60304, 60323, 60343, 60363, 60382, + 60402, 60421, 60441, 60460, 60479, 60499, 60518, 60537, 60556, 60576, + 60595, 60614, 60633, 60652, 60671, 60690, 60709, 60728, 60747, 60766, + 60785, 60803, 60822, 60841, 60859, 60878, 60897, 60915, 60934, 60952, + 60971, 60989, 61007, 61026, 61044, 61062, 61081, 61099, 61117, 61135, + 61153, 61171, 61189, 61207, 61225, 61243, 61261, 61279, 61297, 61314, + 61332, 61350, 61367, 61385, 61403, 61420, 61438, 61455, 61473, 61490, + 61507, 61525, 61542, 61559, 61577, 61594, 61611, 61628, 61645, 61662, + 61679, 61696, 61713, 61730, 61747, 61764, 61780, 61797, 61814, 61831, + 61847, 61864, 61880, 61897, 61913, 61930, 61946, 61963, 61979, 61995, + 62012, 62028, 62044, 62060, 62076, 62092, 62108, 62125, 62141, 62156, + 62172, 62188, 62204, 62220, 62236, 62251, 62267, 62283, 62298, 62314, + 62329, 62345, 62360, 62376, 62391, 62407, 62422, 62437, 62453, 62468, + 62483, 62498, 62513, 62528, 62543, 62558, 62573, 62588, 62603, 62618, + 62633, 62648, 62662, 62677, 62692, 62706, 62721, 62735, 62750, 62764, + 62779, 62793, 62808, 62822, 62836, 62850, 62865, 62879, 62893, 62907, + 62921, 62935, 62949, 62963, 62977, 62991, 63005, 63019, 63032, 63046, + 63060, 63074, 63087, 63101, 63114, 63128, 63141, 63155, 63168, 63182, + 63195, 63208, 63221, 63235, 63248, 63261, 63274, 63287, 63300, 63313, + 63326, 63339, 63352, 63365, 63378, 63390, 63403, 63416, 63429, 63441, + 63454, 63466, 63479, 63491, 63504, 63516, 63528, 63541, 63553, 63565, + 63578, 63590, 63602, 63614, 63626, 63638, 63650, 63662, 63674, 63686, + 63698, 63709, 63721, 63733, 63745, 63756, 63768, 63779, 63791, 63803, + 63814, 63825, 63837, 63848, 63859, 63871, 63882, 63893, 63904, 63915, + 63927, 63938, 63949, 63960, 63971, 63981, 63992, 64003, 64014, 64025, + 64035, 64046, 64057, 64067, 64078, 64088, 64099, 64109, 64120, 64130, + 64140, 64151, 64161, 64171, 64181, 64192, 64202, 64212, 64222, 64232, + 64242, 64252, 64261, 64271, 64281, 64291, 64301, 64310, 64320, 64330, + 64339, 64349, 64358, 64368, 64377, 64387, 64396, 64405, 64414, 64424, + 64433, 64442, 64451, 64460, 64469, 64478, 64487, 64496, 64505, 64514, + 64523, 64532, 64540, 64549, 64558, 64566, 64575, 64584, 64592, 64600, + 64609, 64617, 64626, 64634, 64642, 64651, 64659, 64667, 64675, 64683, + 64691, 64699, 64707, 64715, 64723, 64731, 64739, 64747, 64754, 64762, + 64770, 64777, 64785, 64793, 64800, 64808, 64815, 64822, 64830, 64837, + 64844, 64852, 64859, 64866, 64873, 64880, 64887, 64895, 64902, 64908, + 64915, 64922, 64929, 64936, 64943, 64949, 64956, 64963, 64969, 64976, + 64982, 64989, 64995, 65002, 65008, 65015, 65021, 65027, 65033, 65040, + 65046, 65052, 65058, 65064, 65070, 65076, 65082, 65088, 65094, 65099, + 65105, 65111, 65117, 65122, 65128, 65133, 65139, 65144, 65150, 65155, + 65161, 65166, 65171, 65177, 65182, 65187, 65192, 65197, 65202, 65207, + 65212, 65217, 65222, 65227, 65232, 65237, 65242, 65246, 65251, 65256, + 65260, 65265, 65270, 65274, 65279, 65283, 65287, 65292, 65296, 65300, + 65305, 65309, 65313, 65317, 65321, 65325, 65329, 65333, 65337, 65341, + 65345, 65349, 65352, 65356, 65360, 65363, 65367, 65371, 65374, 65378, + 65381, 65385, 65388, 65391, 65395, 65398, 65401, 65404, 65408, 65411, + 65414, 65417, 65420, 65423, 65426, 65429, 65431, 65434, 65437, 65440, + 65442, 65445, 65448, 65450, 65453, 65455, 65458, 65460, 65463, 65465, + 65467, 65470, 65472, 65474, 65476, 65478, 65480, 65482, 65484, 65486, + 65488, 65490, 65492, 65494, 65496, 65497, 65499, 65501, 65502, 65504, + 65505, 65507, 65508, 65510, 65511, 65513, 65514, 65515, 65516, 65518, + 65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526, 65527, 65527, + 65528, 65529, 65530, 65530, 65531, 65531, 65532, 65532, 65533, 65533, + 65534, 65534, 65534, 65535, 65535, 65535, 65535, 65535, 65535, 65535}; -const fixed_t *finecosine = &finesine[FINEANGLES/4]; +const fixed_t *finecosine = &finesine[FINEANGLES / 4]; -const angle_t tantoangle[2049] = -{ - 0,333772,667544,1001315,1335086,1668857,2002626,2336395, - 2670163,3003929,3337694,3671457,4005219,4338979,4672736,5006492, - 5340245,5673995,6007743,6341488,6675230,7008968,7342704,7676435, - 8010164,8343888,8677609,9011325,9345037,9678744,10012447,10346145, - 10679838,11013526,11347209,11680887,12014558,12348225,12681885,13015539, - 13349187,13682829,14016464,14350092,14683714,15017328,15350936,15684536, - 16018129,16351714,16685291,17018860,17352422,17685974,18019518,18353054, - 18686582,19020100,19353610,19687110,20020600,20354080,20687552,21021014, - 21354466,21687906,22021338,22354758,22688168,23021568,23354956,23688332, - 24021698,24355052,24688396,25021726,25355046,25688352,26021648,26354930, - 26688200,27021456,27354702,27687932,28021150,28354356,28687548,29020724, - 29353888,29687038,30020174,30353296,30686404,31019496,31352574,31685636, - 32018684,32351718,32684734,33017736,33350722,33683692,34016648,34349584, - 34682508,35015412,35348300,35681172,36014028,36346868,36679688,37012492, - 37345276,37678044,38010792,38343524,38676240,39008936,39341612,39674272, - 40006912,40339532,40672132,41004716,41337276,41669820,42002344,42334848, - 42667332,42999796,43332236,43664660,43997060,44329444,44661800,44994140, - 45326456,45658752,45991028,46323280,46655512,46987720,47319908,47652072, - 47984212,48316332,48648428,48980500,49312548,49644576,49976580,50308556, - 50640512,50972444,51304352,51636236,51968096,52299928,52631740,52963524, - 53295284,53627020,53958728,54290412,54622068,54953704,55285308,55616888, - 55948444,56279972,56611472,56942948,57274396,57605816,57937212,58268576, - 58599916,58931228,59262512,59593768,59924992,60256192,60587364,60918508, - 61249620,61580704,61911760,62242788,62573788,62904756,63235692,63566604, - 63897480,64228332,64559148,64889940,65220696,65551424,65882120,66212788, - 66543420,66874024,67204600,67535136,67865648,68196120,68526568,68856984, - 69187360,69517712,69848024,70178304,70508560,70838776,71168960,71499112, - 71829224,72159312,72489360,72819376,73149360,73479304,73809216,74139096, - 74468936,74798744,75128520,75458264,75787968,76117632,76447264,76776864, - 77106424,77435952,77765440,78094888,78424304,78753688,79083032,79412336, - 79741608,80070840,80400032,80729192,81058312,81387392,81716432,82045440, - 82374408,82703336,83032224,83361080,83689896,84018664,84347400,84676096, - 85004760,85333376,85661952,85990488,86318984,86647448,86975864,87304240, - 87632576,87960872,88289128,88617344,88945520,89273648,89601736,89929792, - 90257792,90585760,90913688,91241568,91569408,91897200,92224960,92552672, - 92880336,93207968,93535552,93863088,94190584,94518040,94845448,95172816, - 95500136,95827416,96154648,96481832,96808976,97136080,97463136,97790144, - 98117112,98444032,98770904,99097736,99424520,99751256,100077944,100404592, - 100731192,101057744,101384248,101710712,102037128,102363488,102689808,103016080, - 103342312,103668488,103994616,104320696,104646736,104972720,105298656,105624552, - 105950392,106276184,106601928,106927624,107253272,107578872,107904416,108229920, - 108555368,108880768,109206120,109531416,109856664,110181872,110507016,110832120, - 111157168,111482168,111807112,112132008,112456856,112781648,113106392,113431080, - 113755720,114080312,114404848,114729328,115053760,115378136,115702464,116026744, - 116350960,116675128,116999248,117323312,117647320,117971272,118295176,118619024, - 118942816,119266560,119590248,119913880,120237456,120560984,120884456,121207864, - 121531224,121854528,122177784,122500976,122824112,123147200,123470224,123793200, - 124116120,124438976,124761784,125084528,125407224,125729856,126052432,126374960, - 126697424,127019832,127342184,127664472,127986712,128308888,128631008,128953072, - 129275080,129597024,129918912,130240744,130562520,130884232,131205888,131527480, - 131849016,132170496,132491912,132813272,133134576,133455816,133776992,134098120, - 134419184,134740176,135061120,135382000,135702816,136023584,136344272,136664912, - 136985488,137306016,137626464,137946864,138267184,138587456,138907664,139227808, - 139547904,139867920,140187888,140507776,140827616,141147392,141467104,141786752, - 142106336,142425856,142745312,143064720,143384048,143703312,144022512,144341664, - 144660736,144979744,145298704,145617584,145936400,146255168,146573856,146892480, - 147211040,147529536,147847968,148166336,148484640,148802880,149121056,149439152, - 149757200,150075168,150393072,150710912,151028688,151346400,151664048,151981616, - 152299136,152616576,152933952,153251264,153568496,153885680,154202784,154519824, - 154836784,155153696,155470528,155787296,156104000,156420624,156737200,157053696, - 157370112,157686480,158002768,158318976,158635136,158951216,159267232,159583168, - 159899040,160214848,160530592,160846256,161161840,161477376,161792832,162108208, - 162423520,162738768,163053952,163369040,163684080,163999040,164313936,164628752, - 164943504,165258176,165572784,165887312,166201776,166516160,166830480,167144736, - 167458912,167773008,168087040,168400992,168714880,169028688,169342432,169656096, - 169969696,170283216,170596672,170910032,171223344,171536576,171849728,172162800, - 172475808,172788736,173101600,173414384,173727104,174039728,174352288,174664784, - 174977200,175289536,175601792,175913984,176226096,176538144,176850096,177161984, - 177473792,177785536,178097200,178408784,178720288,179031728,179343088,179654368, - 179965568,180276704,180587744,180898720,181209616,181520448,181831184,182141856, - 182452448,182762960,183073408,183383760,183694048,184004240,184314368,184624416, - 184934400,185244288,185554096,185863840,186173504,186483072,186792576,187102000, - 187411344,187720608,188029808,188338912,188647936,188956896,189265760,189574560, - 189883264,190191904,190500448,190808928,191117312,191425632,191733872,192042016, - 192350096,192658096,192966000,193273840,193581584,193889264,194196848,194504352, - 194811792,195119136,195426400,195733584,196040688,196347712,196654656,196961520, - 197268304,197574992,197881616,198188144,198494592,198800960,199107248,199413456, - 199719584,200025616,200331584,200637456,200943248,201248960,201554576,201860128, - 202165584,202470960,202776256,203081456,203386592,203691632,203996592,204301472, - 204606256,204910976,205215600,205520144,205824592,206128960,206433248,206737456, - 207041584,207345616,207649568,207953424,208257216,208560912,208864512,209168048, - 209471488,209774832,210078112,210381296,210684384,210987408,211290336,211593184, - 211895936,212198608,212501184,212803680,213106096,213408432,213710672,214012816, - 214314880,214616864,214918768,215220576,215522288,215823920,216125472,216426928, - 216728304,217029584,217330784,217631904,217932928,218233856,218534704,218835472, - 219136144,219436720,219737216,220037632,220337952,220638192,220938336,221238384, - 221538352,221838240,222138032,222437728,222737344,223036880,223336304,223635664, - 223934912,224234096,224533168,224832160,225131072,225429872,225728608,226027232, - 226325776,226624240,226922608,227220880,227519056,227817152,228115168,228413088, - 228710912,229008640,229306288,229603840,229901312,230198688,230495968,230793152, - 231090256,231387280,231684192,231981024,232277760,232574416,232870960,233167440, - 233463808,233760096,234056288,234352384,234648384,234944304,235240128,235535872, - 235831504,236127056,236422512,236717888,237013152,237308336,237603424,237898416, - 238193328,238488144,238782864,239077488,239372016,239666464,239960816,240255072, - 240549232,240843312,241137280,241431168,241724960,242018656,242312256,242605776, - 242899200,243192512,243485744,243778896,244071936,244364880,244657744,244950496, - 245243168,245535744,245828224,246120608,246412912,246705104,246997216,247289216, - 247581136,247872960,248164688,248456320,248747856,249039296,249330640,249621904, - 249913056,250204128,250495088,250785968,251076736,251367424,251658016,251948512, - 252238912,252529200,252819408,253109520,253399536,253689456,253979280,254269008, - 254558640,254848176,255137632,255426976,255716224,256005376,256294432,256583392, - 256872256,257161024,257449696,257738272,258026752,258315136,258603424,258891600, - 259179696,259467696,259755600,260043392,260331104,260618704,260906224,261193632, - 261480960,261768176,262055296,262342320,262629248,262916080,263202816,263489456, - 263776000,264062432,264348784,264635024,264921168,265207216,265493168,265779024, - 266064784,266350448,266636000,266921472,267206832,267492096,267777264,268062336, - 268347312,268632192,268916960,269201632,269486208,269770688,270055072,270339360, - 270623552,270907616,271191616,271475488,271759296,272042976,272326560,272610048, - 272893440,273176736,273459936,273743040,274026048,274308928,274591744,274874432, - 275157024,275439520,275721920,276004224,276286432,276568512,276850528,277132416, - 277414240,277695936,277977536,278259040,278540448,278821728,279102944,279384032, - 279665056,279945952,280226752,280507456,280788064,281068544,281348960,281629248, - 281909472,282189568,282469568,282749440,283029248,283308960,283588544,283868032, - 284147424,284426720,284705920,284985024,285264000,285542912,285821696,286100384, - 286378976,286657440,286935840,287214112,287492320,287770400,288048384,288326240, - 288604032,288881696,289159264,289436768,289714112,289991392,290268576,290545632, - 290822592,291099456,291376224,291652896,291929440,292205888,292482272,292758528, - 293034656,293310720,293586656,293862496,294138240,294413888,294689440,294964864, - 295240192,295515424,295790560,296065600,296340512,296615360,296890080,297164704, - 297439200,297713632,297987936,298262144,298536256,298810240,299084160,299357952, - 299631648,299905248,300178720,300452128,300725408,300998592,301271680,301544640, - 301817536,302090304,302362976,302635520,302908000,303180352,303452608,303724768, - 303996800,304268768,304540608,304812320,305083968,305355520,305626944,305898272, - 306169472,306440608,306711616,306982528,307253344,307524064,307794656,308065152, - 308335552,308605856,308876032,309146112,309416096,309685984,309955744,310225408, - 310494976,310764448,311033824,311303072,311572224,311841280,312110208,312379040, - 312647776,312916416,313184960,313453376,313721696,313989920,314258016,314526016, - 314793920,315061728,315329408,315597024,315864512,316131872,316399168,316666336, - 316933408,317200384,317467232,317733984,318000640,318267200,318533632,318799968, - 319066208,319332352,319598368,319864288,320130112,320395808,320661408,320926912, - 321192320,321457632,321722816,321987904,322252864,322517760,322782528,323047200, - 323311744,323576192,323840544,324104800,324368928,324632992,324896928,325160736, - 325424448,325688096,325951584,326215008,326478304,326741504,327004608,327267584, - 327530464,327793248,328055904,328318496,328580960,328843296,329105568,329367712, - 329629760,329891680,330153536,330415264,330676864,330938400,331199808,331461120, - 331722304,331983392,332244384,332505280,332766048,333026752,333287296,333547776, - 333808128,334068384,334328544,334588576,334848512,335108352,335368064,335627712, - 335887200,336146624,336405920,336665120,336924224,337183200,337442112,337700864, - 337959552,338218112,338476576,338734944,338993184,339251328,339509376,339767296, - 340025120,340282848,340540480,340797984,341055392,341312704,341569888,341826976, - 342083968,342340832,342597600,342854272,343110848,343367296,343623648,343879904, - 344136032,344392064,344648000,344903808,345159520,345415136,345670656,345926048, - 346181344,346436512,346691616,346946592,347201440,347456224,347710880,347965440, - 348219872,348474208,348728448,348982592,349236608,349490528,349744320,349998048, - 350251648,350505152,350758528,351011808,351264992,351518048,351771040,352023872, - 352276640,352529280,352781824,353034272,353286592,353538816,353790944,354042944, - 354294880,354546656,354798368,355049952,355301440,355552800,355804096,356055264, - 356306304,356557280,356808128,357058848,357309504,357560032,357810464,358060768, - 358311008,358561088,358811104,359060992,359310784,359560480,359810048,360059520, - 360308896,360558144,360807296,361056352,361305312,361554144,361802880,362051488, - 362300032,362548448,362796736,363044960,363293056,363541024,363788928,364036704, - 364284384,364531936,364779392,365026752,365274016,365521152,365768192,366015136, - 366261952,366508672,366755296,367001792,367248192,367494496,367740704,367986784, - 368232768,368478656,368724416,368970080,369215648,369461088,369706432,369951680, - 370196800,370441824,370686752,370931584,371176288,371420896,371665408,371909792, - 372154080,372398272,372642336,372886304,373130176,373373952,373617600,373861152, - 374104608,374347936,374591168,374834304,375077312,375320224,375563040,375805760, - 376048352,376290848,376533248,376775520,377017696,377259776,377501728,377743584, - 377985344,378227008,378468544,378709984,378951328,379192544,379433664,379674688, - 379915584,380156416,380397088,380637696,380878176,381118560,381358848,381599040, - 381839104,382079072,382318912,382558656,382798304,383037856,383277280,383516640, - 383755840,383994976,384233984,384472896,384711712,384950400,385188992,385427488, - 385665888,385904160,386142336,386380384,386618368,386856224,387093984,387331616, - 387569152,387806592,388043936,388281152,388518272,388755296,388992224,389229024, - 389465728,389702336,389938816,390175200,390411488,390647680,390883744,391119712, - 391355584,391591328,391826976,392062528,392297984,392533312,392768544,393003680, - 393238720,393473632,393708448,393943168,394177760,394412256,394646656,394880960, - 395115136,395349216,395583200,395817088,396050848,396284512,396518080,396751520, - 396984864,397218112,397451264,397684288,397917248,398150080,398382784,398615424, - 398847936,399080320,399312640,399544832,399776928,400008928,400240832,400472608, - 400704288,400935872,401167328,401398720,401629984,401861120,402092192,402323136, - 402553984,402784736,403015360,403245888,403476320,403706656,403936896,404167008, - 404397024,404626944,404856736,405086432,405316032,405545536,405774912,406004224, - 406233408,406462464,406691456,406920320,407149088,407377760,407606336,407834784, - 408063136,408291392,408519520,408747584,408975520,409203360,409431072,409658720, - 409886240,410113664,410340992,410568192,410795296,411022304,411249216,411476032, - 411702720,411929312,412155808,412382176,412608480,412834656,413060736,413286720, - 413512576,413738336,413964000,414189568,414415040,414640384,414865632,415090784, - 415315840,415540800,415765632,415990368,416215008,416439552,416663968,416888288, - 417112512,417336640,417560672,417784576,418008384,418232096,418455712,418679200, - 418902624,419125920,419349120,419572192,419795200,420018080,420240864,420463552, - 420686144,420908608,421130976,421353280,421575424,421797504,422019488,422241344, - 422463104,422684768,422906336,423127776,423349120,423570400,423791520,424012576, - 424233536,424454368,424675104,424895744,425116288,425336736,425557056,425777280, - 425997408,426217440,426437376,426657184,426876928,427096544,427316064,427535488, - 427754784,427974016,428193120,428412128,428631040,428849856,429068544,429287168, - 429505664,429724064,429942368,430160576,430378656,430596672,430814560,431032352, - 431250048,431467616,431685120,431902496,432119808,432336992,432554080,432771040, - 432987936,433204736,433421408,433637984,433854464,434070848,434287104,434503296, - 434719360,434935360,435151232,435367008,435582656,435798240,436013696,436229088, - 436444352,436659520,436874592,437089568,437304416,437519200,437733856,437948416, - 438162880,438377248,438591520,438805696,439019744,439233728,439447584,439661344, - 439875008,440088576,440302048,440515392,440728672,440941824,441154880,441367872, - 441580736,441793472,442006144,442218720,442431168,442643552,442855808,443067968, - 443280032,443492000,443703872,443915648,444127296,444338880,444550336,444761696, - 444972992,445184160,445395232,445606176,445817056,446027840,446238496,446449088, - 446659552,446869920,447080192,447290400,447500448,447710432,447920320,448130112, - 448339776,448549376,448758848,448968224,449177536,449386720,449595808,449804800, - 450013664,450222464,450431168,450639776,450848256,451056640,451264960,451473152, - 451681248,451889248,452097152,452304960,452512672,452720288,452927808,453135232, - 453342528,453549760,453756864,453963904,454170816,454377632,454584384,454791008, - 454997536,455203968,455410304,455616544,455822688,456028704,456234656,456440512, - 456646240,456851904,457057472,457262912,457468256,457673536,457878688,458083744, - 458288736,458493600,458698368,458903040,459107616,459312096,459516480,459720768, - 459924960,460129056,460333056,460536960,460740736,460944448,461148064,461351584, - 461554976,461758304,461961536,462164640,462367680,462570592,462773440,462976160, - 463178816,463381344,463583776,463786144,463988384,464190560,464392608,464594560, - 464796448,464998208,465199872,465401472,465602944,465804320,466005600,466206816, - 466407904,466608896,466809824,467010624,467211328,467411936,467612480,467812896, - 468013216,468213440,468413600,468613632,468813568,469013440,469213184,469412832, - 469612416,469811872,470011232,470210528,470409696,470608800,470807776,471006688, - 471205472,471404192,471602784,471801312,471999712,472198048,472396288,472594400, - 472792448,472990400,473188256,473385984,473583648,473781216,473978688,474176064, - 474373344,474570528,474767616,474964608,475161504,475358336,475555040,475751648, - 475948192,476144608,476340928,476537184,476733312,476929376,477125344,477321184, - 477516960,477712640,477908224,478103712,478299104,478494400,478689600,478884704, - 479079744,479274656,479469504,479664224,479858880,480053408,480247872,480442240, - 480636512,480830656,481024736,481218752,481412640,481606432,481800128,481993760, - 482187264,482380704,482574016,482767264,482960416,483153472,483346432,483539296, - 483732064,483924768,484117344,484309856,484502240,484694560,484886784,485078912, - 485270944,485462880,485654720,485846464,486038144,486229696,486421184,486612576, - 486803840,486995040,487186176,487377184,487568096,487758912,487949664,488140320, - 488330880,488521312,488711712,488901984,489092160,489282240,489472256,489662176, - 489851968,490041696,490231328,490420896,490610336,490799712,490988960,491178144, - 491367232,491556224,491745120,491933920,492122656,492311264,492499808,492688256, - 492876608,493064864,493253056,493441120,493629120,493817024,494004832,494192544, - 494380160,494567712,494755136,494942496,495129760,495316928,495504000,495691008, - 495877888,496064704,496251424,496438048,496624608,496811040,496997408,497183680, - 497369856,497555936,497741920,497927840,498113632,498299360,498484992,498670560, - 498856000,499041376,499226656,499411840,499596928,499781920,499966848,500151680, - 500336416,500521056,500705600,500890080,501074464,501258752,501442944,501627040, - 501811072,501995008,502178848,502362592,502546240,502729824,502913312,503096704, - 503280000,503463232,503646368,503829408,504012352,504195200,504377984,504560672, - 504743264,504925760,505108192,505290496,505472736,505654912,505836960,506018944, - 506200832,506382624,506564320,506745952,506927488,507108928,507290272,507471552, - 507652736,507833824,508014816,508195744,508376576,508557312,508737952,508918528, - 509099008,509279392,509459680,509639904,509820032,510000064,510180000,510359872, - 510539648,510719328,510898944,511078432,511257856,511437216,511616448,511795616, - 511974688,512153664,512332576,512511392,512690112,512868768,513047296,513225792, - 513404160,513582432,513760640,513938784,514116800,514294752,514472608,514650368, - 514828064,515005664,515183168,515360608,515537952,515715200,515892352,516069440, - 516246432,516423328,516600160,516776896,516953536,517130112,517306592,517482976, - 517659264,517835488,518011616,518187680,518363648,518539520,518715296,518891008, - 519066624,519242144,519417600,519592960,519768256,519943424,520118528,520293568, - 520468480,520643328,520818112,520992800,521167392,521341888,521516320,521690656, - 521864896,522039072,522213152,522387168,522561056,522734912,522908640,523082304, - 523255872,523429376,523602784,523776096,523949312,524122464,524295552,524468512, - 524641440,524814240,524986976,525159616,525332192,525504640,525677056,525849344, - 526021568,526193728,526365792,526537760,526709632,526881440,527053152,527224800, - 527396352,527567840,527739200,527910528,528081728,528252864,528423936,528594880, - 528765760,528936576,529107296,529277920,529448480,529618944,529789344,529959648, - 530129856,530300000,530470048,530640000,530809888,530979712,531149440,531319072, - 531488608,531658080,531827488,531996800,532166016,532335168,532504224,532673184, - 532842080,533010912,533179616,533348288,533516832,533685312,533853728,534022048, - 534190272,534358432,534526496,534694496,534862400,535030240,535197984,535365632, - 535533216,535700704,535868128,536035456,536202720,536369888,536536992,536704000, - 536870912 -}; +const angle_t tantoangle[2049] = { + 0, 333772, 667544, 1001315, 1335086, 1668857, 2002626, + 2336395, 2670163, 3003929, 3337694, 3671457, 4005219, 4338979, + 4672736, 5006492, 5340245, 5673995, 6007743, 6341488, 6675230, + 7008968, 7342704, 7676435, 8010164, 8343888, 8677609, 9011325, + 9345037, 9678744, 10012447, 10346145, 10679838, 11013526, 11347209, + 11680887, 12014558, 12348225, 12681885, 13015539, 13349187, 13682829, + 14016464, 14350092, 14683714, 15017328, 15350936, 15684536, 16018129, + 16351714, 16685291, 17018860, 17352422, 17685974, 18019518, 18353054, + 18686582, 19020100, 19353610, 19687110, 20020600, 20354080, 20687552, + 21021014, 21354466, 21687906, 22021338, 22354758, 22688168, 23021568, + 23354956, 23688332, 24021698, 24355052, 24688396, 25021726, 25355046, + 25688352, 26021648, 26354930, 26688200, 27021456, 27354702, 27687932, + 28021150, 28354356, 28687548, 29020724, 29353888, 29687038, 30020174, + 30353296, 30686404, 31019496, 31352574, 31685636, 32018684, 32351718, + 32684734, 33017736, 33350722, 33683692, 34016648, 34349584, 34682508, + 35015412, 35348300, 35681172, 36014028, 36346868, 36679688, 37012492, + 37345276, 37678044, 38010792, 38343524, 38676240, 39008936, 39341612, + 39674272, 40006912, 40339532, 40672132, 41004716, 41337276, 41669820, + 42002344, 42334848, 42667332, 42999796, 43332236, 43664660, 43997060, + 44329444, 44661800, 44994140, 45326456, 45658752, 45991028, 46323280, + 46655512, 46987720, 47319908, 47652072, 47984212, 48316332, 48648428, + 48980500, 49312548, 49644576, 49976580, 50308556, 50640512, 50972444, + 51304352, 51636236, 51968096, 52299928, 52631740, 52963524, 53295284, + 53627020, 53958728, 54290412, 54622068, 54953704, 55285308, 55616888, + 55948444, 56279972, 56611472, 56942948, 57274396, 57605816, 57937212, + 58268576, 58599916, 58931228, 59262512, 59593768, 59924992, 60256192, + 60587364, 60918508, 61249620, 61580704, 61911760, 62242788, 62573788, + 62904756, 63235692, 63566604, 63897480, 64228332, 64559148, 64889940, + 65220696, 65551424, 65882120, 66212788, 66543420, 66874024, 67204600, + 67535136, 67865648, 68196120, 68526568, 68856984, 69187360, 69517712, + 69848024, 70178304, 70508560, 70838776, 71168960, 71499112, 71829224, + 72159312, 72489360, 72819376, 73149360, 73479304, 73809216, 74139096, + 74468936, 74798744, 75128520, 75458264, 75787968, 76117632, 76447264, + 76776864, 77106424, 77435952, 77765440, 78094888, 78424304, 78753688, + 79083032, 79412336, 79741608, 80070840, 80400032, 80729192, 81058312, + 81387392, 81716432, 82045440, 82374408, 82703336, 83032224, 83361080, + 83689896, 84018664, 84347400, 84676096, 85004760, 85333376, 85661952, + 85990488, 86318984, 86647448, 86975864, 87304240, 87632576, 87960872, + 88289128, 88617344, 88945520, 89273648, 89601736, 89929792, 90257792, + 90585760, 90913688, 91241568, 91569408, 91897200, 92224960, 92552672, + 92880336, 93207968, 93535552, 93863088, 94190584, 94518040, 94845448, + 95172816, 95500136, 95827416, 96154648, 96481832, 96808976, 97136080, + 97463136, 97790144, 98117112, 98444032, 98770904, 99097736, 99424520, + 99751256, 100077944, 100404592, 100731192, 101057744, 101384248, 101710712, + 102037128, 102363488, 102689808, 103016080, 103342312, 103668488, 103994616, + 104320696, 104646736, 104972720, 105298656, 105624552, 105950392, 106276184, + 106601928, 106927624, 107253272, 107578872, 107904416, 108229920, 108555368, + 108880768, 109206120, 109531416, 109856664, 110181872, 110507016, 110832120, + 111157168, 111482168, 111807112, 112132008, 112456856, 112781648, 113106392, + 113431080, 113755720, 114080312, 114404848, 114729328, 115053760, 115378136, + 115702464, 116026744, 116350960, 116675128, 116999248, 117323312, 117647320, + 117971272, 118295176, 118619024, 118942816, 119266560, 119590248, 119913880, + 120237456, 120560984, 120884456, 121207864, 121531224, 121854528, 122177784, + 122500976, 122824112, 123147200, 123470224, 123793200, 124116120, 124438976, + 124761784, 125084528, 125407224, 125729856, 126052432, 126374960, 126697424, + 127019832, 127342184, 127664472, 127986712, 128308888, 128631008, 128953072, + 129275080, 129597024, 129918912, 130240744, 130562520, 130884232, 131205888, + 131527480, 131849016, 132170496, 132491912, 132813272, 133134576, 133455816, + 133776992, 134098120, 134419184, 134740176, 135061120, 135382000, 135702816, + 136023584, 136344272, 136664912, 136985488, 137306016, 137626464, 137946864, + 138267184, 138587456, 138907664, 139227808, 139547904, 139867920, 140187888, + 140507776, 140827616, 141147392, 141467104, 141786752, 142106336, 142425856, + 142745312, 143064720, 143384048, 143703312, 144022512, 144341664, 144660736, + 144979744, 145298704, 145617584, 145936400, 146255168, 146573856, 146892480, + 147211040, 147529536, 147847968, 148166336, 148484640, 148802880, 149121056, + 149439152, 149757200, 150075168, 150393072, 150710912, 151028688, 151346400, + 151664048, 151981616, 152299136, 152616576, 152933952, 153251264, 153568496, + 153885680, 154202784, 154519824, 154836784, 155153696, 155470528, 155787296, + 156104000, 156420624, 156737200, 157053696, 157370112, 157686480, 158002768, + 158318976, 158635136, 158951216, 159267232, 159583168, 159899040, 160214848, + 160530592, 160846256, 161161840, 161477376, 161792832, 162108208, 162423520, + 162738768, 163053952, 163369040, 163684080, 163999040, 164313936, 164628752, + 164943504, 165258176, 165572784, 165887312, 166201776, 166516160, 166830480, + 167144736, 167458912, 167773008, 168087040, 168400992, 168714880, 169028688, + 169342432, 169656096, 169969696, 170283216, 170596672, 170910032, 171223344, + 171536576, 171849728, 172162800, 172475808, 172788736, 173101600, 173414384, + 173727104, 174039728, 174352288, 174664784, 174977200, 175289536, 175601792, + 175913984, 176226096, 176538144, 176850096, 177161984, 177473792, 177785536, + 178097200, 178408784, 178720288, 179031728, 179343088, 179654368, 179965568, + 180276704, 180587744, 180898720, 181209616, 181520448, 181831184, 182141856, + 182452448, 182762960, 183073408, 183383760, 183694048, 184004240, 184314368, + 184624416, 184934400, 185244288, 185554096, 185863840, 186173504, 186483072, + 186792576, 187102000, 187411344, 187720608, 188029808, 188338912, 188647936, + 188956896, 189265760, 189574560, 189883264, 190191904, 190500448, 190808928, + 191117312, 191425632, 191733872, 192042016, 192350096, 192658096, 192966000, + 193273840, 193581584, 193889264, 194196848, 194504352, 194811792, 195119136, + 195426400, 195733584, 196040688, 196347712, 196654656, 196961520, 197268304, + 197574992, 197881616, 198188144, 198494592, 198800960, 199107248, 199413456, + 199719584, 200025616, 200331584, 200637456, 200943248, 201248960, 201554576, + 201860128, 202165584, 202470960, 202776256, 203081456, 203386592, 203691632, + 203996592, 204301472, 204606256, 204910976, 205215600, 205520144, 205824592, + 206128960, 206433248, 206737456, 207041584, 207345616, 207649568, 207953424, + 208257216, 208560912, 208864512, 209168048, 209471488, 209774832, 210078112, + 210381296, 210684384, 210987408, 211290336, 211593184, 211895936, 212198608, + 212501184, 212803680, 213106096, 213408432, 213710672, 214012816, 214314880, + 214616864, 214918768, 215220576, 215522288, 215823920, 216125472, 216426928, + 216728304, 217029584, 217330784, 217631904, 217932928, 218233856, 218534704, + 218835472, 219136144, 219436720, 219737216, 220037632, 220337952, 220638192, + 220938336, 221238384, 221538352, 221838240, 222138032, 222437728, 222737344, + 223036880, 223336304, 223635664, 223934912, 224234096, 224533168, 224832160, + 225131072, 225429872, 225728608, 226027232, 226325776, 226624240, 226922608, + 227220880, 227519056, 227817152, 228115168, 228413088, 228710912, 229008640, + 229306288, 229603840, 229901312, 230198688, 230495968, 230793152, 231090256, + 231387280, 231684192, 231981024, 232277760, 232574416, 232870960, 233167440, + 233463808, 233760096, 234056288, 234352384, 234648384, 234944304, 235240128, + 235535872, 235831504, 236127056, 236422512, 236717888, 237013152, 237308336, + 237603424, 237898416, 238193328, 238488144, 238782864, 239077488, 239372016, + 239666464, 239960816, 240255072, 240549232, 240843312, 241137280, 241431168, + 241724960, 242018656, 242312256, 242605776, 242899200, 243192512, 243485744, + 243778896, 244071936, 244364880, 244657744, 244950496, 245243168, 245535744, + 245828224, 246120608, 246412912, 246705104, 246997216, 247289216, 247581136, + 247872960, 248164688, 248456320, 248747856, 249039296, 249330640, 249621904, + 249913056, 250204128, 250495088, 250785968, 251076736, 251367424, 251658016, + 251948512, 252238912, 252529200, 252819408, 253109520, 253399536, 253689456, + 253979280, 254269008, 254558640, 254848176, 255137632, 255426976, 255716224, + 256005376, 256294432, 256583392, 256872256, 257161024, 257449696, 257738272, + 258026752, 258315136, 258603424, 258891600, 259179696, 259467696, 259755600, + 260043392, 260331104, 260618704, 260906224, 261193632, 261480960, 261768176, + 262055296, 262342320, 262629248, 262916080, 263202816, 263489456, 263776000, + 264062432, 264348784, 264635024, 264921168, 265207216, 265493168, 265779024, + 266064784, 266350448, 266636000, 266921472, 267206832, 267492096, 267777264, + 268062336, 268347312, 268632192, 268916960, 269201632, 269486208, 269770688, + 270055072, 270339360, 270623552, 270907616, 271191616, 271475488, 271759296, + 272042976, 272326560, 272610048, 272893440, 273176736, 273459936, 273743040, + 274026048, 274308928, 274591744, 274874432, 275157024, 275439520, 275721920, + 276004224, 276286432, 276568512, 276850528, 277132416, 277414240, 277695936, + 277977536, 278259040, 278540448, 278821728, 279102944, 279384032, 279665056, + 279945952, 280226752, 280507456, 280788064, 281068544, 281348960, 281629248, + 281909472, 282189568, 282469568, 282749440, 283029248, 283308960, 283588544, + 283868032, 284147424, 284426720, 284705920, 284985024, 285264000, 285542912, + 285821696, 286100384, 286378976, 286657440, 286935840, 287214112, 287492320, + 287770400, 288048384, 288326240, 288604032, 288881696, 289159264, 289436768, + 289714112, 289991392, 290268576, 290545632, 290822592, 291099456, 291376224, + 291652896, 291929440, 292205888, 292482272, 292758528, 293034656, 293310720, + 293586656, 293862496, 294138240, 294413888, 294689440, 294964864, 295240192, + 295515424, 295790560, 296065600, 296340512, 296615360, 296890080, 297164704, + 297439200, 297713632, 297987936, 298262144, 298536256, 298810240, 299084160, + 299357952, 299631648, 299905248, 300178720, 300452128, 300725408, 300998592, + 301271680, 301544640, 301817536, 302090304, 302362976, 302635520, 302908000, + 303180352, 303452608, 303724768, 303996800, 304268768, 304540608, 304812320, + 305083968, 305355520, 305626944, 305898272, 306169472, 306440608, 306711616, + 306982528, 307253344, 307524064, 307794656, 308065152, 308335552, 308605856, + 308876032, 309146112, 309416096, 309685984, 309955744, 310225408, 310494976, + 310764448, 311033824, 311303072, 311572224, 311841280, 312110208, 312379040, + 312647776, 312916416, 313184960, 313453376, 313721696, 313989920, 314258016, + 314526016, 314793920, 315061728, 315329408, 315597024, 315864512, 316131872, + 316399168, 316666336, 316933408, 317200384, 317467232, 317733984, 318000640, + 318267200, 318533632, 318799968, 319066208, 319332352, 319598368, 319864288, + 320130112, 320395808, 320661408, 320926912, 321192320, 321457632, 321722816, + 321987904, 322252864, 322517760, 322782528, 323047200, 323311744, 323576192, + 323840544, 324104800, 324368928, 324632992, 324896928, 325160736, 325424448, + 325688096, 325951584, 326215008, 326478304, 326741504, 327004608, 327267584, + 327530464, 327793248, 328055904, 328318496, 328580960, 328843296, 329105568, + 329367712, 329629760, 329891680, 330153536, 330415264, 330676864, 330938400, + 331199808, 331461120, 331722304, 331983392, 332244384, 332505280, 332766048, + 333026752, 333287296, 333547776, 333808128, 334068384, 334328544, 334588576, + 334848512, 335108352, 335368064, 335627712, 335887200, 336146624, 336405920, + 336665120, 336924224, 337183200, 337442112, 337700864, 337959552, 338218112, + 338476576, 338734944, 338993184, 339251328, 339509376, 339767296, 340025120, + 340282848, 340540480, 340797984, 341055392, 341312704, 341569888, 341826976, + 342083968, 342340832, 342597600, 342854272, 343110848, 343367296, 343623648, + 343879904, 344136032, 344392064, 344648000, 344903808, 345159520, 345415136, + 345670656, 345926048, 346181344, 346436512, 346691616, 346946592, 347201440, + 347456224, 347710880, 347965440, 348219872, 348474208, 348728448, 348982592, + 349236608, 349490528, 349744320, 349998048, 350251648, 350505152, 350758528, + 351011808, 351264992, 351518048, 351771040, 352023872, 352276640, 352529280, + 352781824, 353034272, 353286592, 353538816, 353790944, 354042944, 354294880, + 354546656, 354798368, 355049952, 355301440, 355552800, 355804096, 356055264, + 356306304, 356557280, 356808128, 357058848, 357309504, 357560032, 357810464, + 358060768, 358311008, 358561088, 358811104, 359060992, 359310784, 359560480, + 359810048, 360059520, 360308896, 360558144, 360807296, 361056352, 361305312, + 361554144, 361802880, 362051488, 362300032, 362548448, 362796736, 363044960, + 363293056, 363541024, 363788928, 364036704, 364284384, 364531936, 364779392, + 365026752, 365274016, 365521152, 365768192, 366015136, 366261952, 366508672, + 366755296, 367001792, 367248192, 367494496, 367740704, 367986784, 368232768, + 368478656, 368724416, 368970080, 369215648, 369461088, 369706432, 369951680, + 370196800, 370441824, 370686752, 370931584, 371176288, 371420896, 371665408, + 371909792, 372154080, 372398272, 372642336, 372886304, 373130176, 373373952, + 373617600, 373861152, 374104608, 374347936, 374591168, 374834304, 375077312, + 375320224, 375563040, 375805760, 376048352, 376290848, 376533248, 376775520, + 377017696, 377259776, 377501728, 377743584, 377985344, 378227008, 378468544, + 378709984, 378951328, 379192544, 379433664, 379674688, 379915584, 380156416, + 380397088, 380637696, 380878176, 381118560, 381358848, 381599040, 381839104, + 382079072, 382318912, 382558656, 382798304, 383037856, 383277280, 383516640, + 383755840, 383994976, 384233984, 384472896, 384711712, 384950400, 385188992, + 385427488, 385665888, 385904160, 386142336, 386380384, 386618368, 386856224, + 387093984, 387331616, 387569152, 387806592, 388043936, 388281152, 388518272, + 388755296, 388992224, 389229024, 389465728, 389702336, 389938816, 390175200, + 390411488, 390647680, 390883744, 391119712, 391355584, 391591328, 391826976, + 392062528, 392297984, 392533312, 392768544, 393003680, 393238720, 393473632, + 393708448, 393943168, 394177760, 394412256, 394646656, 394880960, 395115136, + 395349216, 395583200, 395817088, 396050848, 396284512, 396518080, 396751520, + 396984864, 397218112, 397451264, 397684288, 397917248, 398150080, 398382784, + 398615424, 398847936, 399080320, 399312640, 399544832, 399776928, 400008928, + 400240832, 400472608, 400704288, 400935872, 401167328, 401398720, 401629984, + 401861120, 402092192, 402323136, 402553984, 402784736, 403015360, 403245888, + 403476320, 403706656, 403936896, 404167008, 404397024, 404626944, 404856736, + 405086432, 405316032, 405545536, 405774912, 406004224, 406233408, 406462464, + 406691456, 406920320, 407149088, 407377760, 407606336, 407834784, 408063136, + 408291392, 408519520, 408747584, 408975520, 409203360, 409431072, 409658720, + 409886240, 410113664, 410340992, 410568192, 410795296, 411022304, 411249216, + 411476032, 411702720, 411929312, 412155808, 412382176, 412608480, 412834656, + 413060736, 413286720, 413512576, 413738336, 413964000, 414189568, 414415040, + 414640384, 414865632, 415090784, 415315840, 415540800, 415765632, 415990368, + 416215008, 416439552, 416663968, 416888288, 417112512, 417336640, 417560672, + 417784576, 418008384, 418232096, 418455712, 418679200, 418902624, 419125920, + 419349120, 419572192, 419795200, 420018080, 420240864, 420463552, 420686144, + 420908608, 421130976, 421353280, 421575424, 421797504, 422019488, 422241344, + 422463104, 422684768, 422906336, 423127776, 423349120, 423570400, 423791520, + 424012576, 424233536, 424454368, 424675104, 424895744, 425116288, 425336736, + 425557056, 425777280, 425997408, 426217440, 426437376, 426657184, 426876928, + 427096544, 427316064, 427535488, 427754784, 427974016, 428193120, 428412128, + 428631040, 428849856, 429068544, 429287168, 429505664, 429724064, 429942368, + 430160576, 430378656, 430596672, 430814560, 431032352, 431250048, 431467616, + 431685120, 431902496, 432119808, 432336992, 432554080, 432771040, 432987936, + 433204736, 433421408, 433637984, 433854464, 434070848, 434287104, 434503296, + 434719360, 434935360, 435151232, 435367008, 435582656, 435798240, 436013696, + 436229088, 436444352, 436659520, 436874592, 437089568, 437304416, 437519200, + 437733856, 437948416, 438162880, 438377248, 438591520, 438805696, 439019744, + 439233728, 439447584, 439661344, 439875008, 440088576, 440302048, 440515392, + 440728672, 440941824, 441154880, 441367872, 441580736, 441793472, 442006144, + 442218720, 442431168, 442643552, 442855808, 443067968, 443280032, 443492000, + 443703872, 443915648, 444127296, 444338880, 444550336, 444761696, 444972992, + 445184160, 445395232, 445606176, 445817056, 446027840, 446238496, 446449088, + 446659552, 446869920, 447080192, 447290400, 447500448, 447710432, 447920320, + 448130112, 448339776, 448549376, 448758848, 448968224, 449177536, 449386720, + 449595808, 449804800, 450013664, 450222464, 450431168, 450639776, 450848256, + 451056640, 451264960, 451473152, 451681248, 451889248, 452097152, 452304960, + 452512672, 452720288, 452927808, 453135232, 453342528, 453549760, 453756864, + 453963904, 454170816, 454377632, 454584384, 454791008, 454997536, 455203968, + 455410304, 455616544, 455822688, 456028704, 456234656, 456440512, 456646240, + 456851904, 457057472, 457262912, 457468256, 457673536, 457878688, 458083744, + 458288736, 458493600, 458698368, 458903040, 459107616, 459312096, 459516480, + 459720768, 459924960, 460129056, 460333056, 460536960, 460740736, 460944448, + 461148064, 461351584, 461554976, 461758304, 461961536, 462164640, 462367680, + 462570592, 462773440, 462976160, 463178816, 463381344, 463583776, 463786144, + 463988384, 464190560, 464392608, 464594560, 464796448, 464998208, 465199872, + 465401472, 465602944, 465804320, 466005600, 466206816, 466407904, 466608896, + 466809824, 467010624, 467211328, 467411936, 467612480, 467812896, 468013216, + 468213440, 468413600, 468613632, 468813568, 469013440, 469213184, 469412832, + 469612416, 469811872, 470011232, 470210528, 470409696, 470608800, 470807776, + 471006688, 471205472, 471404192, 471602784, 471801312, 471999712, 472198048, + 472396288, 472594400, 472792448, 472990400, 473188256, 473385984, 473583648, + 473781216, 473978688, 474176064, 474373344, 474570528, 474767616, 474964608, + 475161504, 475358336, 475555040, 475751648, 475948192, 476144608, 476340928, + 476537184, 476733312, 476929376, 477125344, 477321184, 477516960, 477712640, + 477908224, 478103712, 478299104, 478494400, 478689600, 478884704, 479079744, + 479274656, 479469504, 479664224, 479858880, 480053408, 480247872, 480442240, + 480636512, 480830656, 481024736, 481218752, 481412640, 481606432, 481800128, + 481993760, 482187264, 482380704, 482574016, 482767264, 482960416, 483153472, + 483346432, 483539296, 483732064, 483924768, 484117344, 484309856, 484502240, + 484694560, 484886784, 485078912, 485270944, 485462880, 485654720, 485846464, + 486038144, 486229696, 486421184, 486612576, 486803840, 486995040, 487186176, + 487377184, 487568096, 487758912, 487949664, 488140320, 488330880, 488521312, + 488711712, 488901984, 489092160, 489282240, 489472256, 489662176, 489851968, + 490041696, 490231328, 490420896, 490610336, 490799712, 490988960, 491178144, + 491367232, 491556224, 491745120, 491933920, 492122656, 492311264, 492499808, + 492688256, 492876608, 493064864, 493253056, 493441120, 493629120, 493817024, + 494004832, 494192544, 494380160, 494567712, 494755136, 494942496, 495129760, + 495316928, 495504000, 495691008, 495877888, 496064704, 496251424, 496438048, + 496624608, 496811040, 496997408, 497183680, 497369856, 497555936, 497741920, + 497927840, 498113632, 498299360, 498484992, 498670560, 498856000, 499041376, + 499226656, 499411840, 499596928, 499781920, 499966848, 500151680, 500336416, + 500521056, 500705600, 500890080, 501074464, 501258752, 501442944, 501627040, + 501811072, 501995008, 502178848, 502362592, 502546240, 502729824, 502913312, + 503096704, 503280000, 503463232, 503646368, 503829408, 504012352, 504195200, + 504377984, 504560672, 504743264, 504925760, 505108192, 505290496, 505472736, + 505654912, 505836960, 506018944, 506200832, 506382624, 506564320, 506745952, + 506927488, 507108928, 507290272, 507471552, 507652736, 507833824, 508014816, + 508195744, 508376576, 508557312, 508737952, 508918528, 509099008, 509279392, + 509459680, 509639904, 509820032, 510000064, 510180000, 510359872, 510539648, + 510719328, 510898944, 511078432, 511257856, 511437216, 511616448, 511795616, + 511974688, 512153664, 512332576, 512511392, 512690112, 512868768, 513047296, + 513225792, 513404160, 513582432, 513760640, 513938784, 514116800, 514294752, + 514472608, 514650368, 514828064, 515005664, 515183168, 515360608, 515537952, + 515715200, 515892352, 516069440, 516246432, 516423328, 516600160, 516776896, + 516953536, 517130112, 517306592, 517482976, 517659264, 517835488, 518011616, + 518187680, 518363648, 518539520, 518715296, 518891008, 519066624, 519242144, + 519417600, 519592960, 519768256, 519943424, 520118528, 520293568, 520468480, + 520643328, 520818112, 520992800, 521167392, 521341888, 521516320, 521690656, + 521864896, 522039072, 522213152, 522387168, 522561056, 522734912, 522908640, + 523082304, 523255872, 523429376, 523602784, 523776096, 523949312, 524122464, + 524295552, 524468512, 524641440, 524814240, 524986976, 525159616, 525332192, + 525504640, 525677056, 525849344, 526021568, 526193728, 526365792, 526537760, + 526709632, 526881440, 527053152, 527224800, 527396352, 527567840, 527739200, + 527910528, 528081728, 528252864, 528423936, 528594880, 528765760, 528936576, + 529107296, 529277920, 529448480, 529618944, 529789344, 529959648, 530129856, + 530300000, 530470048, 530640000, 530809888, 530979712, 531149440, 531319072, + 531488608, 531658080, 531827488, 531996800, 532166016, 532335168, 532504224, + 532673184, 532842080, 533010912, 533179616, 533348288, 533516832, 533685312, + 533853728, 534022048, 534190272, 534358432, 534526496, 534694496, 534862400, + 535030240, 535197984, 535365632, 535533216, 535700704, 535868128, 536035456, + 536202720, 536369888, 536536992, 536704000, 536870912}; // Now where did these came from? -const byte gammatable[5][256] = -{ - { - 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, - 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, - 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96, - 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, - 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - }, +const byte gammatable[5][256] = { + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}, - { - 2,4,5,7,8,10,11,12,14,15,16,18,19,20,21,23, - 24,25,26,27,29,30,31,32,33,34,36,37,38,39,40,41, - 42,44,45,46,47,48,49,50,51,52,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108, - 109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,129,130,131,132,133,134,135,136,137,138,139, - 140,141,142,143,144,145,146,147,148,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,163,164,165,166,167,168,169, - 170,171,172,173,174,175,175,176,177,178,179,180,181,182,183,184, - 185,186,186,187,188,189,190,191,192,193,194,195,196,196,197,198, - 199,200,201,202,203,204,205,205,206,207,208,209,210,211,212,213, - 214,214,215,216,217,218,219,220,221,222,222,223,224,225,226,227, - 228,229,230,230,231,232,233,234,235,236,237,237,238,239,240,241, - 242,243,244,245,245,246,247,248,249,250,251,252,252,253,254,255 - }, + {2, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 23, + 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, + 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 214, 215, 216, 217, 218, 219, 220, 221, 222, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 245, 246, 247, 248, 249, 250, 251, 252, 252, 253, 254, 255}, - { - 4,7,9,11,13,15,17,19,21,22,24,26,27,29,30,32, - 33,35,36,38,39,40,42,43,45,46,47,48,50,51,52,54, - 55,56,57,59,60,61,62,63,65,66,67,68,69,70,72,73, - 74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,100,101,102,103,104,105,106,107, - 108,109,110,111,112,113,114,114,115,116,117,118,119,120,121,122, - 123,124,125,126,127,128,129,130,131,132,133,133,134,135,136,137, - 138,139,140,141,142,143,144,144,145,146,147,148,149,150,151,152, - 153,153,154,155,156,157,158,159,160,160,161,162,163,164,165,166, - 166,167,168,169,170,171,172,172,173,174,175,176,177,178,178,179, - 180,181,182,183,183,184,185,186,187,188,188,189,190,191,192,193, - 193,194,195,196,197,197,198,199,200,201,201,202,203,204,205,206, - 206,207,208,209,210,210,211,212,213,213,214,215,216,217,217,218, - 219,220,221,221,222,223,224,224,225,226,227,228,228,229,230,231, - 231,232,233,234,235,235,236,237,238,238,239,240,241,241,242,243, - 244,244,245,246,247,247,248,249,250,251,251,252,253,254,254,255 - }, + {4, 7, 9, 11, 13, 15, 17, 19, 21, 22, 24, 26, 27, 29, 30, 32, + 33, 35, 36, 38, 39, 40, 42, 43, 45, 46, 47, 48, 50, 51, 52, 54, + 55, 56, 57, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 153, 154, 155, 156, 157, 158, 159, 160, 160, 161, 162, 163, 164, 165, 166, + 166, 167, 168, 169, 170, 171, 172, 172, 173, 174, 175, 176, 177, 178, 178, 179, + 180, 181, 182, 183, 183, 184, 185, 186, 187, 188, 188, 189, 190, 191, 192, 193, + 193, 194, 195, 196, 197, 197, 198, 199, 200, 201, 201, 202, 203, 204, 205, 206, + 206, 207, 208, 209, 210, 210, 211, 212, 213, 213, 214, 215, 216, 217, 217, 218, + 219, 220, 221, 221, 222, 223, 224, 224, 225, 226, 227, 228, 228, 229, 230, 231, + 231, 232, 233, 234, 235, 235, 236, 237, 238, 238, 239, 240, 241, 241, 242, 243, + 244, 244, 245, 246, 247, 247, 248, 249, 250, 251, 251, 252, 253, 254, 254, 255}, - { - 8,12,16,19,22,24,27,29,31,34,36,38,40,41,43,45, - 47,49,50,52,53,55,57,58,60,61,63,64,65,67,68,70, - 71,72,74,75,76,77,79,80,81,82,84,85,86,87,88,90, - 91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107, - 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133,134,135,135,136,137,138, - 139,140,141,142,143,143,144,145,146,147,148,149,150,150,151,152, - 153,154,155,155,156,157,158,159,160,160,161,162,163,164,165,165, - 166,167,168,169,169,170,171,172,173,173,174,175,176,176,177,178, - 179,180,180,181,182,183,183,184,185,186,186,187,188,189,189,190, - 191,192,192,193,194,195,195,196,197,197,198,199,200,200,201,202, - 202,203,204,205,205,206,207,207,208,209,210,210,211,212,212,213, - 214,214,215,216,216,217,218,219,219,220,221,221,222,223,223,224, - 225,225,226,227,227,228,229,229,230,231,231,232,233,233,234,235, - 235,236,237,237,238,238,239,240,240,241,242,242,243,244,244,245, - 246,246,247,247,248,249,249,250,251,251,252,253,253,254,254,255 - }, + {8, 12, 16, 19, 22, 24, 27, 29, 31, 34, 36, 38, 40, 41, 43, 45, + 47, 49, 50, 52, 53, 55, 57, 58, 60, 61, 63, 64, 65, 67, 68, 70, + 71, 72, 74, 75, 76, 77, 79, 80, 81, 82, 84, 85, 86, 87, 88, 90, + 91, 92, 93, 94, 95, 96, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 143, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, + 153, 154, 155, 155, 156, 157, 158, 159, 160, 160, 161, 162, 163, 164, 165, 165, + 166, 167, 168, 169, 169, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, + 179, 180, 180, 181, 182, 183, 183, 184, 185, 186, 186, 187, 188, 189, 189, 190, + 191, 192, 192, 193, 194, 195, 195, 196, 197, 197, 198, 199, 200, 200, 201, 202, + 202, 203, 204, 205, 205, 206, 207, 207, 208, 209, 210, 210, 211, 212, 212, 213, + 214, 214, 215, 216, 216, 217, 218, 219, 219, 220, 221, 221, 222, 223, 223, 224, + 225, 225, 226, 227, 227, 228, 229, 229, 230, 231, 231, 232, 233, 233, 234, 235, + 235, 236, 237, 237, 238, 238, 239, 240, 240, 241, 242, 242, 243, 244, 244, 245, + 246, 246, 247, 247, 248, 249, 249, 250, 251, 251, 252, 253, 253, 254, 254, 255}, - { - 16,23,28,32,36,39,42,45,48,50,53,55,57,60,62,64, - 66,68,69,71,73,75,76,78,80,81,83,84,86,87,89,90, - 92,93,94,96,97,98,100,101,102,103,105,106,107,108,109,110, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,128, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 143,144,145,146,147,148,149,150,150,151,152,153,154,155,155,156, - 157,158,159,159,160,161,162,163,163,164,165,166,166,167,168,169, - 169,170,171,172,172,173,174,175,175,176,177,177,178,179,180,180, - 181,182,182,183,184,184,185,186,187,187,188,189,189,190,191,191, - 192,193,193,194,195,195,196,196,197,198,198,199,200,200,201,202, - 202,203,203,204,205,205,206,207,207,208,208,209,210,210,211,211, - 212,213,213,214,214,215,216,216,217,217,218,219,219,220,220,221, - 221,222,223,223,224,224,225,225,226,227,227,228,228,229,229,230, - 230,231,232,232,233,233,234,234,235,235,236,236,237,237,238,239, - 239,240,240,241,241,242,242,243,243,244,244,245,245,246,246,247, - 247,248,248,249,249,250,250,251,251,252,252,253,254,254,255,255 - } -}; - + {16, 23, 28, 32, 36, 39, 42, 45, 48, 50, 53, 55, 57, 60, 62, 64, + 66, 68, 69, 71, 73, 75, 76, 78, 80, 81, 83, 84, 86, 87, 89, 90, + 92, 93, 94, 96, 97, 98, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 143, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155, 155, 156, + 157, 158, 159, 159, 160, 161, 162, 163, 163, 164, 165, 166, 166, 167, 168, 169, + 169, 170, 171, 172, 172, 173, 174, 175, 175, 176, 177, 177, 178, 179, 180, 180, + 181, 182, 182, 183, 184, 184, 185, 186, 187, 187, 188, 189, 189, 190, 191, 191, + 192, 193, 193, 194, 195, 195, 196, 196, 197, 198, 198, 199, 200, 200, 201, 202, + 202, 203, 203, 204, 205, 205, 206, 207, 207, 208, 208, 209, 210, 210, 211, 211, + 212, 213, 213, 214, 214, 215, 216, 216, 217, 217, 218, 219, 219, 220, 220, 221, + 221, 222, 223, 223, 224, 224, 225, 225, 226, 227, 227, 228, 228, 229, 229, 230, + 230, 231, 232, 232, 233, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 239, + 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, + 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 254, 254, 255, 255}}; diff --git a/src/v_diskicon.c b/src/v_diskicon.c index fad2434582..7ab1b6e850 100644 --- a/src/v_diskicon.c +++ b/src/v_diskicon.c @@ -29,7 +29,7 @@ // Only display the disk icon if more then this much bytes have been read // during the previous tic. -static const int diskicon_threshold = 20*1024; +static const int diskicon_threshold = 20 * 1024; // Two buffers: disk_data contains the data representing the disk icon // (raw, not a patch_t) while saved_background is an equivalently-sized @@ -44,14 +44,14 @@ static int loading_disk_yoffs = 0; static size_t recent_bytes_read = 0; static boolean disk_drawn; -static void CopyRegion(pixel_t *dest, int dest_pitch, - pixel_t *src, int src_pitch, - int w, int h) +static void CopyRegion(pixel_t *dest, int dest_pitch, pixel_t *src, int src_pitch, int w, + int h) { pixel_t *s, *d; int y; - s = src; d = dest; + s = src; + d = dest; for (y = 0; y < h; ++y) { memcpy(d, s, w * sizeof(*d)); @@ -66,8 +66,8 @@ static void SaveDiskData(const char *disk_lump, int xoffs, int yoffs) patch_t *disk; // Allocate a complete temporary screen where we'll draw the patch. - tmpscreen = Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*tmpscreen), - PU_STATIC, NULL); + tmpscreen = + Z_Malloc(SCREENWIDTH * SCREENHEIGHT * sizeof(*tmpscreen), PU_STATIC, NULL); memset(tmpscreen, 0, SCREENWIDTH * SCREENHEIGHT * sizeof(*tmpscreen)); V_UseBuffer(tmpscreen); @@ -79,15 +79,14 @@ static void SaveDiskData(const char *disk_lump, int xoffs, int yoffs) disk_data = NULL; } - disk_data = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H * sizeof(*disk_data), - PU_STATIC, NULL); + disk_data = + Z_Malloc(LOADING_DISK_W * LOADING_DISK_H * sizeof(*disk_data), PU_STATIC, NULL); // Draw the patch and save the result to disk_data. disk = W_CacheLumpName(disk_lump, PU_STATIC); V_DrawPatch(loading_disk_xoffs, loading_disk_yoffs, disk); - CopyRegion(disk_data, LOADING_DISK_W, - tmpscreen + yoffs * SCREENWIDTH + xoffs, SCREENWIDTH, - LOADING_DISK_W, LOADING_DISK_H); + CopyRegion(disk_data, LOADING_DISK_W, tmpscreen + yoffs * SCREENWIDTH + xoffs, + SCREENWIDTH, LOADING_DISK_W, LOADING_DISK_H); W_ReleaseLumpName(disk_lump); V_RestoreBuffer(); @@ -105,9 +104,8 @@ void V_EnableLoadingDisk(const char *lump_name, int xoffs, int yoffs) saved_background = NULL; } - saved_background = Z_Malloc(LOADING_DISK_W * LOADING_DISK_H - * sizeof(*saved_background), - PU_STATIC, NULL); + saved_background = Z_Malloc( + LOADING_DISK_W * LOADING_DISK_H * sizeof(*saved_background), PU_STATIC, NULL); SaveDiskData(lump_name, xoffs, yoffs); } @@ -118,9 +116,7 @@ void V_BeginRead(size_t nbytes) static pixel_t *DiskRegionPointer(void) { - return I_VideoBuffer - + loading_disk_yoffs * SCREENWIDTH - + loading_disk_xoffs; + return I_VideoBuffer + loading_disk_yoffs * SCREENWIDTH + loading_disk_xoffs; } void V_DrawDiskIcon(void) @@ -128,13 +124,11 @@ void V_DrawDiskIcon(void) if (disk_data != NULL && recent_bytes_read > diskicon_threshold) { // Save the background behind the disk before we draw it. - CopyRegion(saved_background, LOADING_DISK_W, - DiskRegionPointer(), SCREENWIDTH, + CopyRegion(saved_background, LOADING_DISK_W, DiskRegionPointer(), SCREENWIDTH, LOADING_DISK_W, LOADING_DISK_H); // Write the disk to the screen buffer. - CopyRegion(DiskRegionPointer(), SCREENWIDTH, - disk_data, LOADING_DISK_W, + CopyRegion(DiskRegionPointer(), SCREENWIDTH, disk_data, LOADING_DISK_W, LOADING_DISK_W, LOADING_DISK_H); disk_drawn = true; } @@ -147,11 +141,9 @@ void V_RestoreDiskBackground(void) if (disk_drawn) { // Restore the background. - CopyRegion(DiskRegionPointer(), SCREENWIDTH, - saved_background, LOADING_DISK_W, + CopyRegion(DiskRegionPointer(), SCREENWIDTH, saved_background, LOADING_DISK_W, LOADING_DISK_W, LOADING_DISK_H); disk_drawn = false; } } - diff --git a/src/v_video.c b/src/v_video.c index ba7b79e0fd..7b079fc64a 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -58,87 +58,66 @@ byte *xlatab = NULL; static pixel_t *dest_screen = NULL; -int dirtybox[4]; +int dirtybox[4]; // haleyjd 08/28/10: clipping callback function for patches. // This is needed for Chocolate Strife, which clips patches to the screen. static vpatchclipfunc_t patchclip_callback = NULL; // -// V_MarkRect -// -void V_MarkRect(int x, int y, int width, int height) -{ - // If we are temporarily using an alternate screen, do not +// V_MarkRect +// +void V_MarkRect(int x, int y, int width, int height) +{ + // If we are temporarily using an alternate screen, do not // affect the update box. if (dest_screen == I_VideoBuffer) { - M_AddToBox (dirtybox, x, y); - M_AddToBox (dirtybox, x + width-1, y + height-1); + M_AddToBox(dirtybox, x, y); + M_AddToBox(dirtybox, x + width - 1, y + height - 1); } -} - +} + // -// V_CopyRect -// -void V_CopyRect(int srcx, int srcy, pixel_t *source, - int width, int height, - int destx, int desty) -{ +// V_CopyRect +// +void V_CopyRect(int srcx, int srcy, pixel_t *source, int width, int height, int destx, + int desty) +{ pixel_t *src; pixel_t *dest; - -#ifdef RANGECHECK - if (srcx < 0 - || srcx + width > SCREENWIDTH - || srcy < 0 - || srcy + height > SCREENHEIGHT - || destx < 0 - || destx + width > SCREENWIDTH - || desty < 0 - || desty + height > SCREENHEIGHT) - { - I_Error ("Bad V_CopyRect"); - } -#endif - - V_MarkRect(destx, desty, width, height); - - src = source + SCREENWIDTH * srcy + srcx; - dest = dest_screen + SCREENWIDTH * desty + destx; - - for ( ; height>0 ; height--) - { + +#ifdef RANGECHECK + if (srcx < 0 || srcx + width > SCREENWIDTH || srcy < 0 || + srcy + height > SCREENHEIGHT || destx < 0 || destx + width > SCREENWIDTH || + desty < 0 || desty + height > SCREENHEIGHT) + { + I_Error("Bad V_CopyRect"); + } +#endif + + V_MarkRect(destx, desty, width, height); + + src = source + SCREENWIDTH * srcy + srcx; + dest = dest_screen + SCREENWIDTH * desty + destx; + + for (; height > 0; height--) + { memcpy(dest, src, width * sizeof(*dest)); - src += SCREENWIDTH; - dest += SCREENWIDTH; - } -} - -// -// V_SetPatchClipCallback -// -// haleyjd 08/28/10: Added for Strife support. -// By calling this function, you can setup runtime error checking for patch -// clipping. Strife never caused errors by drawing patches partway off-screen. -// Some versions of vanilla DOOM also behaved differently than the default -// implementation, so this could possibly be extended to those as well for -// accurate emulation. -// -void V_SetPatchClipCallback(vpatchclipfunc_t func) -{ - patchclip_callback = func; + src += SCREENWIDTH; + dest += SCREENWIDTH; + } } // // V_DrawPatch -// Masks a column based masked pic to the screen. +// Masks a column based masked pic to the screen. // void V_DrawPatch(int x, int y, patch_t *patch) -{ +{ int count; int col; column_t *column; @@ -151,17 +130,15 @@ void V_DrawPatch(int x, int y, patch_t *patch) x -= SHORT(patch->leftoffset); // haleyjd 08/28/10: Strife needs silent error checking here. - if(patchclip_callback) + if (patchclip_callback) { - if(!patchclip_callback(patch, x, y)) + if (!patchclip_callback(patch, x, y)) return; } #ifdef RANGECHECK - if (x < 0 - || x + SHORT(patch->width) > SCREENWIDTH - || y < 0 - || y + SHORT(patch->height) > SCREENHEIGHT) + if (x < 0 || x + SHORT(patch->width) > SCREENWIDTH || y < 0 || + y + SHORT(patch->height) > SCREENHEIGHT) { I_Error("Bad V_DrawPatch"); } @@ -174,15 +151,15 @@ void V_DrawPatch(int x, int y, patch_t *patch) w = SHORT(patch->width); - for ( ; colcolumnofs[col])); + column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); // step through the posts in a column while (column->topdelta != 0xff) { - source = (byte *)column + 3; - dest = desttop + column->topdelta*SCREENWIDTH; + source = (byte *) column + 3; + dest = desttop + column->topdelta * SCREENWIDTH; count = column->length; while (count--) @@ -190,7 +167,7 @@ void V_DrawPatch(int x, int y, patch_t *patch) *dest = *source++; dest += SCREENWIDTH; } - column = (column_t *)((byte *)column + column->length + 4); + column = (column_t *) ((byte *) column + column->length + 4); } } } @@ -204,108 +181,43 @@ void V_DrawPatch(int x, int y, patch_t *patch) void V_DrawPatchFlipped(int x, int y, patch_t *patch) { int count; - int col; - column_t *column; + int col; + column_t *column; pixel_t *desttop; pixel_t *dest; - byte *source; - int w; - - y -= SHORT(patch->topoffset); - x -= SHORT(patch->leftoffset); + byte *source; + int w; + + y -= SHORT(patch->topoffset); + x -= SHORT(patch->leftoffset); // haleyjd 08/28/10: Strife needs silent error checking here. - if(patchclip_callback) + if (patchclip_callback) { - if(!patchclip_callback(patch, x, y)) + if (!patchclip_callback(patch, x, y)) return; } -#ifdef RANGECHECK - if (x < 0 - || x + SHORT(patch->width) > SCREENWIDTH - || y < 0 - || y + SHORT(patch->height) > SCREENHEIGHT) +#ifdef RANGECHECK + if (x < 0 || x + SHORT(patch->width) > SCREENWIDTH || y < 0 || + y + SHORT(patch->height) > SCREENHEIGHT) { I_Error("Bad V_DrawPatchFlipped"); } #endif - V_MarkRect (x, y, SHORT(patch->width), SHORT(patch->height)); + V_MarkRect(x, y, SHORT(patch->width), SHORT(patch->height)); col = 0; desttop = dest_screen + y * SCREENWIDTH + x; w = SHORT(patch->width); - for ( ; colcolumnofs[w-1-col])); - - // step through the posts in a column - while (column->topdelta != 0xff ) - { - source = (byte *)column + 3; - dest = desttop + column->topdelta*SCREENWIDTH; - count = column->length; - - while (count--) - { - *dest = *source++; - dest += SCREENWIDTH; - } - column = (column_t *)((byte *)column + column->length + 4); - } - } -} - - - -// -// V_DrawPatchDirect -// Draws directly to the screen on the pc. -// - -void V_DrawPatchDirect(int x, int y, patch_t *patch) -{ - V_DrawPatch(x, y, patch); -} - -// -// V_DrawTLPatch -// -// Masks a column based translucent masked pic to the screen. -// - -void V_DrawTLPatch(int x, int y, patch_t * patch) -{ - int count, col; - column_t *column; - pixel_t *desttop, *dest; - byte *source; - int w; - - y -= SHORT(patch->topoffset); - x -= SHORT(patch->leftoffset); - - if (x < 0 - || x + SHORT(patch->width) > SCREENWIDTH - || y < 0 - || y + SHORT(patch->height) > SCREENHEIGHT) - { - I_Error("Bad V_DrawTLPatch"); - } - - col = 0; - desttop = dest_screen + y * SCREENWIDTH + x; - - w = SHORT(patch->width); for (; col < w; x++, col++, desttop++) { - column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); + column = (column_t *) ((byte *) patch + LONG(patch->columnofs[w - 1 - col])); // step through the posts in a column - while (column->topdelta != 0xff) { source = (byte *) column + 3; @@ -314,7 +226,7 @@ void V_DrawTLPatch(int x, int y, patch_t * patch) while (count--) { - *dest = tinttable[*dest + ((*source++) << 8)]; + *dest = *source++; dest += SCREENWIDTH; } column = (column_t *) ((byte *) column + column->length + 4); @@ -322,225 +234,53 @@ void V_DrawTLPatch(int x, int y, patch_t * patch) } } -// -// V_DrawXlaPatch -// -// villsa [STRIFE] Masks a column based translucent masked pic to the screen. -// - -void V_DrawXlaPatch(int x, int y, patch_t * patch) -{ - int count, col; - column_t *column; - pixel_t *desttop, *dest; - byte *source; - int w; - - y -= SHORT(patch->topoffset); - x -= SHORT(patch->leftoffset); - - if(patchclip_callback) - { - if(!patchclip_callback(patch, x, y)) - return; - } - - col = 0; - desttop = dest_screen + y * SCREENWIDTH + x; - - w = SHORT(patch->width); - for(; col < w; x++, col++, desttop++) - { - column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); - - // step through the posts in a column - - while(column->topdelta != 0xff) - { - source = (byte *) column + 3; - dest = desttop + column->topdelta * SCREENWIDTH; - count = column->length; - - while(count--) - { - *dest = xlatab[*dest + ((*source) << 8)]; - source++; - dest += SCREENWIDTH; - } - column = (column_t *) ((byte *) column + column->length + 4); - } - } -} // -// V_DrawAltTLPatch -// -// Masks a column based translucent masked pic to the screen. +// V_DrawPatchDirect +// Draws directly to the screen on the pc. // -void V_DrawAltTLPatch(int x, int y, patch_t * patch) +void V_DrawPatchDirect(int x, int y, patch_t *patch) { - int count, col; - column_t *column; - pixel_t *desttop, *dest; - byte *source; - int w; - - y -= SHORT(patch->topoffset); - x -= SHORT(patch->leftoffset); - - if (x < 0 - || x + SHORT(patch->width) > SCREENWIDTH - || y < 0 - || y + SHORT(patch->height) > SCREENHEIGHT) - { - I_Error("Bad V_DrawAltTLPatch"); - } - - col = 0; - desttop = dest_screen + y * SCREENWIDTH + x; - - w = SHORT(patch->width); - for (; col < w; x++, col++, desttop++) - { - column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); - - // step through the posts in a column - - while (column->topdelta != 0xff) - { - source = (byte *) column + 3; - dest = desttop + column->topdelta * SCREENWIDTH; - count = column->length; - - while (count--) - { - *dest = tinttable[((*dest) << 8) + *source++]; - dest += SCREENWIDTH; - } - column = (column_t *) ((byte *) column + column->length + 4); - } - } + V_DrawPatch(x, y, patch); } // -// V_DrawShadowedPatch -// -// Masks a column based masked pic to the screen. +// V_DrawBlock +// Draw a linear block of pixels into the view buffer. // -void V_DrawShadowedPatch(int x, int y, patch_t *patch) +void V_DrawBlock(int x, int y, int width, int height, pixel_t *src) { - int count, col; - column_t *column; - pixel_t *desttop, *dest; - byte *source; - pixel_t *desttop2, *dest2; - int w; - - y -= SHORT(patch->topoffset); - x -= SHORT(patch->leftoffset); + pixel_t *dest; - if (x < 0 - || x + SHORT(patch->width) > SCREENWIDTH - || y < 0 - || y + SHORT(patch->height) > SCREENHEIGHT) +#ifdef RANGECHECK + if (x < 0 || x + width > SCREENWIDTH || y < 0 || y + height > SCREENHEIGHT) { - I_Error("Bad V_DrawShadowedPatch"); + I_Error("Bad V_DrawBlock"); } +#endif - col = 0; - desttop = dest_screen + y * SCREENWIDTH + x; - desttop2 = dest_screen + (y + 2) * SCREENWIDTH + x + 2; - - w = SHORT(patch->width); - for (; col < w; x++, col++, desttop++, desttop2++) - { - column = (column_t *) ((byte *) patch + LONG(patch->columnofs[col])); - - // step through the posts in a column - - while (column->topdelta != 0xff) - { - source = (byte *) column + 3; - dest = desttop + column->topdelta * SCREENWIDTH; - dest2 = desttop2 + column->topdelta * SCREENWIDTH; - count = column->length; + V_MarkRect(x, y, width, height); - while (count--) - { - *dest2 = tinttable[((*dest2) << 8)]; - dest2 += SCREENWIDTH; - *dest = *source++; - dest += SCREENWIDTH; + dest = dest_screen + y * SCREENWIDTH + x; - } - column = (column_t *) ((byte *) column + column->length + 4); - } + while (height--) + { + memcpy(dest, src, width * sizeof(*dest)); + src += width; + dest += SCREENWIDTH; } } -// -// Load tint table from TINTTAB lump. -// - -void V_LoadTintTable(void) -{ - tinttable = W_CacheLumpName("TINTTAB", PU_STATIC); -} - -// -// V_LoadXlaTable -// -// villsa [STRIFE] Load xla table from XLATAB lump. -// - -void V_LoadXlaTable(void) -{ - xlatab = W_CacheLumpName("XLATAB", PU_STATIC); -} - -// -// V_DrawBlock -// Draw a linear block of pixels into the view buffer. -// - -void V_DrawBlock(int x, int y, int width, int height, pixel_t *src) -{ - pixel_t *dest; - -#ifdef RANGECHECK - if (x < 0 - || x + width >SCREENWIDTH - || y < 0 - || y + height > SCREENHEIGHT) - { - I_Error ("Bad V_DrawBlock"); - } -#endif - - V_MarkRect (x, y, width, height); - - dest = dest_screen + y * SCREENWIDTH + x; - - while (height--) - { - memcpy (dest, src, width * sizeof(*dest)); - src += width; - dest += SCREENWIDTH; - } -} - void V_DrawFilledBox(int x, int y, int w, int h, int c) { - pixel_t *buf, *buf1; int x1, y1; - - buf = I_VideoBuffer + SCREENWIDTH * y + x; + pixel_t *buf = I_VideoBuffer + SCREENWIDTH * y + x; for (y1 = 0; y1 < h; ++y1) { - buf1 = buf; + pixel_t *buf1 = buf; for (x1 = 0; x1 < w; ++x1) { @@ -581,26 +321,16 @@ void V_DrawVertLine(int x, int y, int h, int c) void V_DrawBox(int x, int y, int w, int h, int c) { V_DrawHorizLine(x, y, w, c); - V_DrawHorizLine(x, y+h-1, w, c); + V_DrawHorizLine(x, y + h - 1, w, c); V_DrawVertLine(x, y, h, c); - V_DrawVertLine(x+w-1, y, h, c); + V_DrawVertLine(x + w - 1, y, h, c); } // -// Draw a "raw" screen (lump containing raw data to blit directly -// to the screen) +// V_Init // - -void V_DrawRawScreen(pixel_t *raw) +void V_Init(void) { - memcpy(dest_screen, raw, SCREENWIDTH * SCREENHEIGHT * sizeof(*dest_screen)); -} - -// -// V_Init -// -void V_Init (void) -{ // no-op! // There used to be separate screens that could be drawn to; these are // now handled in the upper layers. @@ -624,91 +354,6 @@ void V_RestoreBuffer(void) // SCREEN SHOTS // -typedef PACKED_STRUCT ( -{ - char manufacturer; - char version; - char encoding; - char bits_per_pixel; - - unsigned short xmin; - unsigned short ymin; - unsigned short xmax; - unsigned short ymax; - - unsigned short hres; - unsigned short vres; - - unsigned char palette[48]; - - char reserved; - char color_planes; - unsigned short bytes_per_line; - unsigned short palette_type; - - char filler[58]; - unsigned char data; // unbounded -}) pcx_t; - - -// -// WritePCXfile -// - -void WritePCXfile(char *filename, pixel_t *data, - int width, int height, - byte *palette) -{ - int i; - int length; - pcx_t* pcx; - byte* pack; - - pcx = Z_Malloc (width*height*2+1000, PU_STATIC, NULL); - - pcx->manufacturer = 0x0a; // PCX id - pcx->version = 5; // 256 color - pcx->encoding = 1; // uncompressed - pcx->bits_per_pixel = 8; // 256 color - pcx->xmin = 0; - pcx->ymin = 0; - pcx->xmax = SHORT(width-1); - pcx->ymax = SHORT(height-1); - pcx->hres = SHORT(1); - pcx->vres = SHORT(1); - memset (pcx->palette,0,sizeof(pcx->palette)); - pcx->reserved = 0; // PCX spec: reserved byte must be zero - pcx->color_planes = 1; // chunky image - pcx->bytes_per_line = SHORT(width); - pcx->palette_type = SHORT(2); // not a grey scale - memset (pcx->filler,0,sizeof(pcx->filler)); - - // pack the image - pack = &pcx->data; - - for (i=0 ; i= mouse_threshold) { // Undo acceleration and get back the original mouse speed - original_speed = speed - mouse_threshold; + int original_speed = speed - mouse_threshold; original_speed = (int) (original_speed / mouse_acceleration); original_speed += mouse_threshold; @@ -939,14 +549,12 @@ static void DrawAcceleratingBox(int speed) if (linelen < redline_x) { V_DrawHorizLine(MOUSE_SPEED_BOX_X + 1, - MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, - linelen, white); + MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, linelen, white); } else { V_DrawHorizLine(MOUSE_SPEED_BOX_X + 1, - MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, - redline_x, white); + MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, redline_x, white); V_DrawHorizLine(MOUSE_SPEED_BOX_X + redline_x, MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, linelen - redline_x, yellow); @@ -977,8 +585,7 @@ static void DrawNonAcceleratingBox(int speed) // Draw horizontal "thermometer": linelen = speed * (MOUSE_SPEED_BOX_WIDTH - 1) / max_seen_speed; - V_DrawHorizLine(MOUSE_SPEED_BOX_X + 1, - MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, + V_DrawHorizLine(MOUSE_SPEED_BOX_X + 1, MOUSE_SPEED_BOX_Y + MOUSE_SPEED_BOX_HEIGHT / 2, linelen, white); } @@ -1001,10 +608,10 @@ void V_DrawMouseSpeedBox(int speed) // Calculate box position - V_DrawFilledBox(MOUSE_SPEED_BOX_X, MOUSE_SPEED_BOX_Y, - MOUSE_SPEED_BOX_WIDTH, MOUSE_SPEED_BOX_HEIGHT, bgcolor); - V_DrawBox(MOUSE_SPEED_BOX_X, MOUSE_SPEED_BOX_Y, - MOUSE_SPEED_BOX_WIDTH, MOUSE_SPEED_BOX_HEIGHT, bordercolor); + V_DrawFilledBox(MOUSE_SPEED_BOX_X, MOUSE_SPEED_BOX_Y, MOUSE_SPEED_BOX_WIDTH, + MOUSE_SPEED_BOX_HEIGHT, bgcolor); + V_DrawBox(MOUSE_SPEED_BOX_X, MOUSE_SPEED_BOX_Y, MOUSE_SPEED_BOX_WIDTH, + MOUSE_SPEED_BOX_HEIGHT, bordercolor); V_DrawHorizLine(MOUSE_SPEED_BOX_X + 1, MOUSE_SPEED_BOX_Y + 4, MOUSE_SPEED_BOX_WIDTH - 2, black); @@ -1019,4 +626,3 @@ void V_DrawMouseSpeedBox(int speed) DrawNonAcceleratingBox(speed); } } - diff --git a/src/v_video.h b/src/v_video.h index f9c18f9a74..801f27790a 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -56,10 +56,7 @@ void V_CopyRect(int srcx, int srcy, pixel_t *source, void V_DrawPatch(int x, int y, patch_t *patch); void V_DrawPatchFlipped(int x, int y, patch_t *patch); -void V_DrawTLPatch(int x, int y, patch_t *patch); void V_DrawAltTLPatch(int x, int y, patch_t * patch); -void V_DrawShadowedPatch(int x, int y, patch_t *patch); -void V_DrawXlaPatch(int x, int y, patch_t * patch); // villsa [STRIFE] void V_DrawPatchDirect(int x, int y, patch_t *patch); // Draw a linear block of pixels into the view buffer. @@ -94,14 +91,6 @@ void V_ScreenShot(const char *format); // Load the lookup table for translucency calculations from the TINTTAB // lump. -void V_LoadTintTable(void); - -// villsa [STRIFE] -// Load the lookup table for translucency calculations from the XLATAB -// lump. - -void V_LoadXlaTable(void); - void V_DrawMouseSpeedBox(int speed); #endif diff --git a/src/w_checksum.c b/src/w_checksum.c index 09d8d2a6ce..d764a4f067 100644 --- a/src/w_checksum.c +++ b/src/w_checksum.c @@ -45,8 +45,8 @@ static int GetFileNumber(wad_file_t *handle) // Not found in list. This is a new file we haven't seen yet. // Allocate another slot for this file. - open_wadfiles = I_Realloc(open_wadfiles, - sizeof(wad_file_t *) * (num_open_wadfiles + 1)); + open_wadfiles = + I_Realloc(open_wadfiles, sizeof(wad_file_t *) * (num_open_wadfiles + 1)); open_wadfiles[num_open_wadfiles] = handle; result = num_open_wadfiles; @@ -85,4 +85,3 @@ void W_Checksum(sha1_digest_t digest) SHA1_Final(digest, &sha1_context); } - diff --git a/src/w_file.c b/src/w_file.c index b56b78fc0c..f8eae4561f 100644 --- a/src/w_file.c +++ b/src/w_file.c @@ -26,8 +26,7 @@ #include "w_file.h" -static wad_file_class_t *wad_file_classes[] = -{ +static wad_file_class_t *wad_file_classes[] = { #ifdef HAVE_MMAP &posix_wad_file, #endif @@ -55,7 +54,7 @@ wad_file_t *W_OpenFile(const char *path) result = NULL; - for (i=0; iOpenFile(path); @@ -73,9 +72,7 @@ void W_CloseFile(wad_file_t *wad) wad->file_class->CloseFile(wad); } -size_t W_Read(wad_file_t *wad, unsigned int offset, - void *buffer, size_t buffer_len) +size_t W_Read(wad_file_t *wad, unsigned int offset, void *buffer, size_t buffer_len) { return wad->file_class->Read(wad, offset, buffer, buffer_len); } - diff --git a/src/w_file_posix.c b/src/w_file_posix.c index d4fdc22f9e..07235219b1 100644 --- a/src/w_file_posix.c +++ b/src/w_file_posix.c @@ -44,25 +44,23 @@ static void MapFile(posix_wad_file_t *wad, const char *filename) int flags; // Mapped area can be read and written to. Ideally - // this should be read-only, as none of the Doom code should + // this should be read-only, as none of the Doom code should // change the WAD files after being read. However, there may // be code lurking in the source that does. - protection = PROT_READ|PROT_WRITE; + protection = PROT_READ | PROT_WRITE; // Writes to the mapped area result in private changes that are // *not* written to disk. flags = MAP_PRIVATE; - result = mmap(NULL, wad->wad.length, - protection, flags, - wad->handle, 0); + result = mmap(NULL, wad->wad.length, protection, flags, wad->handle, 0); - if (result == NULL || result == (void *)-1) + if (result == NULL || result == (void *) -1) { - fprintf(stderr, "W_POSIX_OpenFile: Unable to mmap() %s - %s\n", - filename, strerror(errno)); + fprintf(stderr, "W_POSIX_OpenFile: Unable to mmap() %s - %s\n", filename, + strerror(errno)); } else { @@ -74,7 +72,7 @@ unsigned int GetFileLength(int handle) { return lseek(handle, 0, SEEK_END); } - + static wad_file_t *W_POSIX_OpenFile(const char *path) { posix_wad_file_t *result; @@ -121,16 +119,14 @@ static void W_POSIX_CloseFile(wad_file_t *wad) Z_Free(posix_wad); } -// Read data from the specified position in the file into the +// Read data from the specified position in the file into the // provided buffer. Returns the number of bytes read. -size_t W_POSIX_Read(wad_file_t *wad, unsigned int offset, - void *buffer, size_t buffer_len) +size_t W_POSIX_Read(wad_file_t *wad, unsigned int offset, void *buffer, size_t buffer_len) { posix_wad_file_t *posix_wad; byte *byte_buffer; size_t bytes_read; - int result; posix_wad = (posix_wad_file_t *) wad; @@ -143,13 +139,17 @@ size_t W_POSIX_Read(wad_file_t *wad, unsigned int offset, bytes_read = 0; byte_buffer = buffer; - while (buffer_len > 0) { - result = read(posix_wad->handle, byte_buffer, buffer_len); + while (buffer_len > 0) + { + int result = read(posix_wad->handle, byte_buffer, buffer_len); - if (result < 0) { + if (result < 0) + { perror("W_POSIX_Read"); break; - } else if (result == 0) { + } + else if (result == 0) + { break; } @@ -164,8 +164,7 @@ size_t W_POSIX_Read(wad_file_t *wad, unsigned int offset, } -wad_file_class_t posix_wad_file = -{ +wad_file_class_t posix_wad_file = { W_POSIX_OpenFile, W_POSIX_CloseFile, W_POSIX_Read, @@ -173,4 +172,3 @@ wad_file_class_t posix_wad_file = #endif /* #ifdef HAVE_MMAP */ - diff --git a/src/w_file_stdc.c b/src/w_file_stdc.c index 90846a4e15..e96854376e 100644 --- a/src/w_file_stdc.c +++ b/src/w_file_stdc.c @@ -63,11 +63,10 @@ static void W_StdC_CloseFile(wad_file_t *wad) Z_Free(stdc_wad); } -// Read data from the specified position in the file into the +// Read data from the specified position in the file into the // provided buffer. Returns the number of bytes read. -size_t W_StdC_Read(wad_file_t *wad, unsigned int offset, - void *buffer, size_t buffer_len) +size_t W_StdC_Read(wad_file_t *wad, unsigned int offset, void *buffer, size_t buffer_len) { stdc_wad_file_t *stdc_wad; size_t result; @@ -86,11 +85,8 @@ size_t W_StdC_Read(wad_file_t *wad, unsigned int offset, } -wad_file_class_t stdc_wad_file = -{ +wad_file_class_t stdc_wad_file = { W_StdC_OpenFile, W_StdC_CloseFile, W_StdC_Read, }; - - diff --git a/src/w_main.c b/src/w_main.c index f39f82099a..c31d702446 100644 --- a/src/w_main.c +++ b/src/w_main.c @@ -67,12 +67,12 @@ boolean W_ParseCommandLine(void) void W_CheckCorrectIWAD(GameMission_t mission) { - // A lump name that is unique to a particular game type (DOOM). + // A lump name that is unique to a particular game type (DOOM). // POSSA1 is the first frame of a zombie trooper. // If we don't see this in an IWAD, it is probably the wrong // type. // i.e mindoom -iwad hexen.wad - const char* unique_lump = "POSSA1"; + const char *unique_lump = "POSSA1"; lumpindex_t lumpnum; lumpnum = W_CheckNumForName(unique_lump); diff --git a/src/w_merge.c b/src/w_merge.c index ea5e82bb24..835c4b5d45 100644 --- a/src/w_merge.c +++ b/src/w_merge.c @@ -30,692 +30,17 @@ #include "w_wad.h" #include "z_zone.h" -typedef enum -{ - SECTION_NORMAL, - SECTION_FLATS, +typedef enum +{ + SECTION_NORMAL, + SECTION_FLATS, SECTION_SPRITES, } section_t; typedef struct { - lumpinfo_t **lumps; - int numlumps; } searchlist_t; typedef struct { - char sprname[4]; - char frame; - lumpinfo_t *angle_lumps[8]; } sprite_frame_t; - -static searchlist_t iwad; -static searchlist_t iwad_sprites; -static searchlist_t pwad; - -static searchlist_t iwad_flats; -static searchlist_t pwad_sprites; -static searchlist_t pwad_flats; - -// lumps with these sprites must be replaced in the IWAD -static sprite_frame_t *sprite_frames; -static int num_sprite_frames; -static int sprite_frames_alloced; - -// Search in a list to find a lump with a particular name -// Linear search (slow!) -// -// Returns -1 if not found - -static int FindInList(searchlist_t *list, const char *name) -{ - int i; - - for (i=0; inumlumps; ++i) - { - if (!strncasecmp(list->lumps[i]->name, name, 8)) - return i; - } - - return -1; -} - -static boolean SetupList(searchlist_t *list, searchlist_t *src_list, - const char *startname, const char *endname, - const char *startname2, const char *endname2) -{ - int startlump, endlump; - - list->numlumps = 0; - startlump = FindInList(src_list, startname); - - if (startname2 != NULL && startlump < 0) - { - startlump = FindInList(src_list, startname2); - } - - if (startlump >= 0) - { - endlump = FindInList(src_list, endname); - - if (endname2 != NULL && endlump < 0) - { - endlump = FindInList(src_list, endname2); - } - - if (endlump > startlump) - { - list->lumps = src_list->lumps + startlump + 1; - list->numlumps = endlump - startlump - 1; - return true; - } - } - - return false; -} - -// Sets up the sprite/flat search lists - -static void SetupLists(void) -{ - // IWAD - - if (!SetupList(&iwad_flats, &iwad, "F_START", "F_END", NULL, NULL)) - { - I_Error("Flats section not found in IWAD"); - } - - if (!SetupList(&iwad_sprites, &iwad, "S_START", "S_END", NULL, NULL)) - - { - I_Error("Sprites section not found in IWAD"); - } - - // PWAD - - SetupList(&pwad_flats, &pwad, "F_START", "F_END", "FF_START", "FF_END"); - SetupList(&pwad_sprites, &pwad, "S_START", "S_END", "SS_START", "SS_END"); -} - -// Initialize the replace list - -static void InitSpriteList(void) -{ - if (sprite_frames == NULL) - { - sprite_frames_alloced = 128; - sprite_frames = Z_Malloc(sizeof(*sprite_frames) * sprite_frames_alloced, - PU_STATIC, NULL); - } - - num_sprite_frames = 0; -} - -static boolean ValidSpriteLumpName(char *name) -{ - if (name[0] == '\0' || name[1] == '\0' - || name[2] == '\0' || name[3] == '\0') - { - return false; - } - - // First frame: - - if (name[4] == '\0' || !isdigit(name[5])) - { - return false; - } - - // Second frame (optional): - - if (name[6] != '\0' && !isdigit(name[7])) - { - return false; - } - - return true; -} - -// Find a sprite frame - -static sprite_frame_t *FindSpriteFrame(char *name, int frame) -{ - sprite_frame_t *result; - int i; - - // Search the list and try to find the frame - - for (i=0; isprname, name, 4) && cur->frame == frame) - { - return cur; - } - } - - // Not found in list; Need to add to the list - - // Grow list? - - if (num_sprite_frames >= sprite_frames_alloced) - { - sprite_frame_t *newframes; - - newframes = Z_Malloc(sprite_frames_alloced * 2 * sizeof(*sprite_frames), - PU_STATIC, NULL); - memcpy(newframes, sprite_frames, - sprite_frames_alloced * sizeof(*sprite_frames)); - Z_Free(sprite_frames); - sprite_frames_alloced *= 2; - sprite_frames = newframes; - } - - // Add to end of list - - result = &sprite_frames[num_sprite_frames]; - memcpy(result->sprname, name, 4); - result->frame = frame; - - for (i=0; i<8; ++i) - result->angle_lumps[i] = NULL; - - ++num_sprite_frames; - - return result; -} - -// Check if sprite lump is needed in the new wad - -static boolean SpriteLumpNeeded(lumpinfo_t *lump) -{ - sprite_frame_t *sprite; - int angle_num; - int i; - - if (!ValidSpriteLumpName(lump->name)) - { - return true; - } - - // check the first frame - - sprite = FindSpriteFrame(lump->name, lump->name[4]); - angle_num = lump->name[5] - '0'; - - if (angle_num == 0) - { - // must check all frames - - for (i=0; i<8; ++i) - { - if (sprite->angle_lumps[i] == lump) - return true; - } - } - else - { - // check if this lump is being used for this frame - - if (sprite->angle_lumps[angle_num - 1] == lump) - return true; - } - - // second frame if any - - // no second frame? - if (lump->name[6] == '\0') - return false; - - sprite = FindSpriteFrame(lump->name, lump->name[6]); - angle_num = lump->name[7] - '0'; - - if (angle_num == 0) - { - // must check all frames - - for (i=0; i<8; ++i) - { - if (sprite->angle_lumps[i] == lump) - return true; - } - } - else - { - // check if this lump is being used for this frame - - if (sprite->angle_lumps[angle_num - 1] == lump) - return true; - } - - return false; -} - -static void AddSpriteLump(lumpinfo_t *lump) -{ - sprite_frame_t *sprite; - int angle_num; - int i; - - if (!ValidSpriteLumpName(lump->name)) - { - return; - } - - // first angle - - sprite = FindSpriteFrame(lump->name, lump->name[4]); - angle_num = lump->name[5] - '0'; - - if (angle_num == 0) - { - for (i=0; i<8; ++i) - sprite->angle_lumps[i] = lump; - } - else - { - sprite->angle_lumps[angle_num - 1] = lump; - } - - // second angle - - // no second angle? - - if (lump->name[6] == '\0') - return; - - sprite = FindSpriteFrame(lump->name, lump->name[6]); - angle_num = lump->name[7] - '0'; - - if (angle_num == 0) - { - for (i=0; i<8; ++i) - sprite->angle_lumps[i] = lump; - } - else - { - sprite->angle_lumps[angle_num - 1] = lump; - } -} - -// Generate the list. Run at the start, before merging - -static void GenerateSpriteList(void) -{ - int i; - - InitSpriteList(); - - // Add all sprites from the IWAD - - for (i=0; iname, "F_START", 8)) - { - current_section = SECTION_FLATS; - } - else if (!strncasecmp(lump->name, "S_START", 8)) - { - current_section = SECTION_SPRITES; - } - - newlumps[num_newlumps++] = lump; - - break; - - case SECTION_FLATS: - - // Have we reached the end of the section? - - if (!strncasecmp(lump->name, "F_END", 8)) - { - // Add all new flats from the PWAD to the end - // of the section - - for (n=0; nname); - - if (lumpindex < 0) - { - newlumps[num_newlumps++] = lump; - } - } - - break; - - case SECTION_SPRITES: - - // Have we reached the end of the section? - - if (!strncasecmp(lump->name, "S_END", 8)) - { - // add all the PWAD sprites - - for (n=0; nname, "F_START", 8) - || !strncasecmp(lump->name, "FF_START", 8)) - { - current_section = SECTION_FLATS; - } - else if (!strncasecmp(lump->name, "S_START", 8) - || !strncasecmp(lump->name, "SS_START", 8)) - { - current_section = SECTION_SPRITES; - } - else - { - // Don't include the headers of sections - - newlumps[num_newlumps++] = lump; - } - break; - - case SECTION_FLATS: - - // PWAD flats are ignored (already merged) - - if (!strncasecmp(lump->name, "FF_END", 8) - || !strncasecmp(lump->name, "F_END", 8)) - { - // end of section - current_section = SECTION_NORMAL; - } - break; - - case SECTION_SPRITES: - - // PWAD sprites are ignored (already merged) - - if (!strncasecmp(lump->name, "SS_END", 8) - || !strncasecmp(lump->name, "S_END", 8)) - { - // end of section - current_section = SECTION_NORMAL; - } - break; - } - } - - // Switch to the new lumpinfo, and free the old one - - free(lumpinfo); - lumpinfo = newlumps; - numlumps = num_newlumps; -} - -void W_PrintDirectory(void) -{ - unsigned int i, n; - - // debug - for (i=0; iname[n] != '\0'; ++n) - putchar(lumpinfo[i]->name[n]); - putchar('\n'); - } -} - -// Merge in a file by name -void W_MergeFile(const char *filename) -{ - int old_numlumps; - - old_numlumps = numlumps; - - // Load PWAD - - if (W_AddFile(filename) == NULL) - return; - - // IWAD is at the start, PWAD was appended to the end - - iwad.lumps = lumpinfo; - iwad.numlumps = old_numlumps; - - pwad.lumps = lumpinfo + old_numlumps; - pwad.numlumps = numlumps - old_numlumps; - - // Setup sprite/flat lists - - SetupLists(); - - // Generate list of sprites to be replaced by the PWAD - - GenerateSpriteList(); - - // Perform the merge - - DoMerge(); -} - -// Replace lumps in the given list with lumps from the PWAD - -static void W_NWTAddLumps(searchlist_t *list) -{ - int i; - - // Go through the IWAD list given, replacing lumps with lumps of - // the same name from the PWAD - for (i=0; inumlumps; ++i) - { - int index; - - index = FindInList(&pwad, list->lumps[i]->name); - - if (index > 0) - { - memcpy(list->lumps[i], pwad.lumps[index], - sizeof(lumpinfo_t)); - } - } -} - -// Merge sprites and flats in the way NWT does with its -af and -as -// command-line options. - -void W_NWTMergeFile(const char *filename, int flags) -{ - int old_numlumps; - - old_numlumps = numlumps; - - // Load PWAD - - if (W_AddFile(filename) == NULL) - return; - - // IWAD is at the start, PWAD was appended to the end - - iwad.lumps = lumpinfo; - iwad.numlumps = old_numlumps; - - pwad.lumps = lumpinfo + old_numlumps; - pwad.numlumps = numlumps - old_numlumps; - - // Setup sprite/flat lists - - SetupLists(); - - // Merge in flats? - - if (flags & W_NWT_MERGE_FLATS) - { - W_NWTAddLumps(&iwad_flats); - } - - // Sprites? - - if (flags & W_NWT_MERGE_SPRITES) - { - W_NWTAddLumps(&iwad_sprites); - } - - // Discard the PWAD - - numlumps = old_numlumps; -} - -// Simulates the NWT -merge command line parameter. What this does is load -// a PWAD, then search the IWAD sprites, removing any sprite lumps that also -// exist in the PWAD. - -void W_NWTDashMerge(const char *filename) -{ - wad_file_t *wad_file; - int old_numlumps; - int i; - - old_numlumps = numlumps; - - // Load PWAD - - wad_file = W_AddFile(filename); - - if (wad_file == NULL) - { - return; - } - - // IWAD is at the start, PWAD was appended to the end - - iwad.lumps = lumpinfo; - iwad.numlumps = old_numlumps; - - pwad.lumps = lumpinfo + old_numlumps; - pwad.numlumps = numlumps - old_numlumps; - - // Setup sprite/flat lists - - SetupLists(); - - // Search through the IWAD sprites list. - - for (i=0; iname) >= 0) - { - // Replace this entry with an empty string. This is what - // nwt -merge does. - - M_StringCopy(iwad_sprites.lumps[i]->name, "", 8); - } - } - - // Discard PWAD - // The PWAD must now be added in again with -file. - - numlumps = old_numlumps; - - W_CloseFile(wad_file); -} - diff --git a/src/w_merge.h b/src/w_merge.h index b88c9a3a1e..56f461e82d 100644 --- a/src/w_merge.h +++ b/src/w_merge.h @@ -24,21 +24,5 @@ #define W_NWT_MERGE_SPRITES 0x1 #define W_NWT_MERGE_FLATS 0x2 -// Add a new WAD and merge it into the main directory - -void W_MergeFile(const char *filename); - -// NWT-style merging - -void W_NWTMergeFile(const char *filename, int flags); - -// Acts the same as NWT's "-merge" option. - -void W_NWTDashMerge(const char *filename); - -// Debug function that prints the WAD directory. - -void W_PrintDirectory(void); - #endif /* #ifndef W_MERGE_H */ diff --git a/src/w_wad.c b/src/w_wad.c index 1b091834f7..afd39e4123 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -17,8 +17,6 @@ // - - #include #include #include @@ -35,20 +33,18 @@ #include "w_wad.h" -typedef PACKED_STRUCT ( -{ +typedef PACKED_STRUCT({ // Should be "IWAD" or "PWAD". - char identification[4]; - int numlumps; - int infotableofs; + char identification[4]; + int numlumps; + int infotableofs; }) wadinfo_t; -typedef PACKED_STRUCT ( -{ - int filepos; - int size; - char name[8]; +typedef PACKED_STRUCT({ + int filepos; + int size; + char name[8]; }) filelump_t; // @@ -79,9 +75,9 @@ unsigned int W_LumpNameHash(const char *s) unsigned int result = 5381; unsigned int i; - for (i=0; i < 8 && s[i] != '\0'; ++i) + for (i = 0; i < 8 && s[i] != '\0'; ++i) { - result = ((result << 5) ^ result ) ^ toupper(s[i]); + result = ((result << 5) ^ result) ^ toupper(s[i]); } return result; @@ -100,12 +96,11 @@ unsigned int W_LumpNameHash(const char *s) // Other files are single lumps with the base filename // for the lump name. -wad_file_t *W_AddFile (const char *filename) +wad_file_t *W_AddFile(const char *filename) { wadinfo_t header; lumpindex_t i; wad_file_t *wad_file; - int length; int startlump; filelump_t *fileinfo; filelump_t *filerover; @@ -136,64 +131,66 @@ wad_file_t *W_AddFile (const char *filename) if (wad_file == NULL) { - printf (" couldn't open %s\n", filename); - return NULL; + printf(" couldn't open %s\n", filename); + return NULL; } - if (strcasecmp(filename+strlen(filename)-3 , "wad" ) ) + if (strcasecmp(filename + strlen(filename) - 3, "wad")) { - // single lump file + // single lump file // fraggle: Swap the filepos and size here. The WAD directory // parsing code expects a little-endian directory, so will swap // them back. Effectively we're constructing a "fake WAD directory" // here, as it would appear on disk. - fileinfo = Z_Malloc(sizeof(filelump_t), PU_STATIC, 0); - fileinfo->filepos = LONG(0); - fileinfo->size = LONG(wad_file->length); + fileinfo = Z_Malloc(sizeof(filelump_t), PU_STATIC, 0); + fileinfo->filepos = LONG(0); + fileinfo->size = LONG(wad_file->length); // Name the lump after the base of the filename (without the // extension). - M_ExtractFileBase (filename, fileinfo->name); - numfilelumps = 1; + M_ExtractFileBase(filename, fileinfo->name); + numfilelumps = 1; } else { - // WAD file + // WAD file W_Read(wad_file, 0, &header, sizeof(header)); - if (strncmp(header.identification,"IWAD",4)) - { - // Homebrew levels? - if (strncmp(header.identification,"PWAD",4)) - { - W_CloseFile(wad_file); - I_Error ("Wad file %s doesn't have IWAD " - "or PWAD id\n", filename); - } - - // ???modifiedgame = true; - } + if (strncmp(header.identification, "IWAD", 4)) + { + // Homebrew levels? + if (strncmp(header.identification, "PWAD", 4)) + { + W_CloseFile(wad_file); + I_Error("Wad file %s doesn't have IWAD " + "or PWAD id\n", + filename); + } + + // ???modifiedgame = true; + } - header.numlumps = LONG(header.numlumps); + header.numlumps = LONG(header.numlumps); - // Vanilla Doom doesn't like WADs with more than 4046 lumps - // https://www.doomworld.com/vb/post/1010985 - if (!strncmp(header.identification,"PWAD",4) && header.numlumps > 4046) - { - W_CloseFile(wad_file); - I_Error ("Error: Vanilla limit for lumps in a WAD is 4046, " - "PWAD %s has %d", filename, header.numlumps); - } + // Vanilla Doom doesn't like WADs with more than 4046 lumps + // https://www.doomworld.com/vb/post/1010985 + if (!strncmp(header.identification, "PWAD", 4) && header.numlumps > 4046) + { + W_CloseFile(wad_file); + I_Error("Error: Vanilla limit for lumps in a WAD is 4046, " + "PWAD %s has %d", + filename, header.numlumps); + } - header.infotableofs = LONG(header.infotableofs); - length = header.numlumps*sizeof(filelump_t); - fileinfo = Z_Malloc(length, PU_STATIC, 0); + header.infotableofs = LONG(header.infotableofs); + int length = header.numlumps * sizeof(filelump_t); + fileinfo = Z_Malloc(length, PU_STATIC, 0); W_Read(wad_file, header.infotableofs, fileinfo, length); - numfilelumps = header.numlumps; + numfilelumps = header.numlumps; } // Increase size of numlumps array to accomodate the new file. @@ -242,17 +239,6 @@ wad_file_t *W_AddFile (const char *filename) } - -// -// W_NumLumps -// -int W_NumLumps (void) -{ - return numlumps; -} - - - // // W_CheckNumForName // Returns -1 if name not found. @@ -301,8 +287,6 @@ lumpindex_t W_CheckNumForName(const char *name) } - - // // W_GetNumForName // Calls W_CheckNumForName, but bombs out if not found. @@ -311,13 +295,13 @@ lumpindex_t W_GetNumForName(const char *name) { lumpindex_t i; - i = W_CheckNumForName (name); + i = W_CheckNumForName(name); if (i < 0) { - I_Error ("W_GetNumForName: %s not found!", name); + I_Error("W_GetNumForName: %s not found!", name); } - + return i; } @@ -330,14 +314,13 @@ int W_LumpLength(lumpindex_t lump) { if (lump >= numlumps) { - I_Error ("W_LumpLength: %i >= numlumps", lump); + I_Error("W_LumpLength: %i >= numlumps", lump); } return lumpinfo[lump]->size; } - // // W_ReadLump // Loads the lump into the given buffer, @@ -350,7 +333,7 @@ void W_ReadLump(lumpindex_t lump, void *dest) if (lump >= numlumps) { - I_Error ("W_ReadLump: %i >= numlumps", lump); + I_Error("W_ReadLump: %i >= numlumps", lump); } l = lumpinfo[lump]; @@ -361,14 +344,11 @@ void W_ReadLump(lumpindex_t lump, void *dest) if (c < l->size) { - I_Error("W_ReadLump: only read %i of %i on lump %i", - c, l->size, lump); + I_Error("W_ReadLump: only read %i of %i on lump %i", c, l->size, lump); } } - - // // W_CacheLumpNum // @@ -376,7 +356,7 @@ void W_ReadLump(lumpindex_t lump, void *dest) // the lump data. // // 'tag' is the type of zone memory buffer to allocate for the lump -// (usually PU_STATIC or PU_CACHE). If the lump is loaded as +// (usually PU_STATIC or PU_CACHE). If the lump is loaded as // PU_STATIC, it should be released back using W_ReleaseLumpNum // when no longer needed (do not use Z_ChangeTag). // @@ -386,9 +366,9 @@ void *W_CacheLumpNum(lumpindex_t lumpnum, int tag) byte *result; lumpinfo_t *lump; - if ((unsigned)lumpnum >= numlumps) + if ((unsigned) lumpnum >= numlumps) { - I_Error ("W_CacheLumpNum: %i >= numlumps", lumpnum); + I_Error("W_CacheLumpNum: %i >= numlumps", lumpnum); } lump = lumpinfo[lumpnum]; @@ -416,15 +396,14 @@ void *W_CacheLumpNum(lumpindex_t lumpnum, int tag) // Not yet loaded, so load it now lump->cache = Z_Malloc(W_LumpLength(lumpnum), tag, &lump->cache); - W_ReadLump (lumpnum, lump->cache); + W_ReadLump(lumpnum, lump->cache); result = lump->cache; } - + return result; } - // // W_CacheLumpName // @@ -433,12 +412,12 @@ void *W_CacheLumpName(const char *name, int tag) return W_CacheLumpNum(W_GetNumForName(name), tag); } -// -// Release a lump back to the cache, so that it can be reused later +// +// Release a lump back to the cache, so that it can be reused later // without having to read from disk again, or alternatively, discarded // if we run out of memory. // -// Back in Vanilla Doom, this was just done using Z_ChangeTag +// Back in Vanilla Doom, this was just done using Z_ChangeTag // directly, but now that we have WAD mmap, things are a bit more // complicated ... // @@ -447,9 +426,9 @@ void W_ReleaseLumpNum(lumpindex_t lumpnum) { lumpinfo_t *lump; - if ((unsigned)lumpnum >= numlumps) + if ((unsigned) lumpnum >= numlumps) { - I_Error ("W_ReleaseLumpNum: %i >= numlumps", lumpnum); + I_Error("W_ReleaseLumpNum: %i >= numlumps", lumpnum); } lump = lumpinfo[lumpnum]; @@ -539,7 +518,6 @@ void W_Profile (void) void W_GenerateHashTable(void) { - lumpindex_t i; // Free the old hash table, if there is one: if (lumphash != NULL) @@ -552,12 +530,12 @@ void W_GenerateHashTable(void) { lumphash = Z_Malloc(sizeof(lumpindex_t) * numlumps, PU_STATIC, NULL); - for (i = 0; i < numlumps; ++i) + for (lumpindex_t i = 0; i < numlumps; ++i) { lumphash[i] = -1; } - for (i = 0; i < numlumps; ++i) + for (int i = 0; i < numlumps; ++i) { unsigned int hash; @@ -620,10 +598,10 @@ void W_Reload(void) const char *W_WadNameForLump(const lumpinfo_t *lump) { - return M_BaseName(lump->wad_file->path); + return M_BaseName(lump->wad_file->path); } boolean W_IsIWADLump(const lumpinfo_t *lump) { - return lump->wad_file == lumpinfo[0]->wad_file; + return lump->wad_file == lumpinfo[0]->wad_file; } diff --git a/src/z_native.c b/src/z_native.c index c7f8f3cd55..5276cbad7c 100644 --- a/src/z_native.c +++ b/src/z_native.c @@ -27,7 +27,7 @@ #include "i_system.h" #include "doomtype.h" -#define ZONEID 0x1d4a11 +#define ZONEID 0x1d4a11 typedef struct memblock_s memblock_t; @@ -42,7 +42,7 @@ struct memblock_s }; // Linked list of allocated blocks for each tag type - + static memblock_t *allocated_blocks[PU_NUM_TAGS]; #ifdef TESTING @@ -79,7 +79,7 @@ void test_free(void *data) } #define malloc test_malloc -#define free test_free +#define free test_free #endif /* #ifdef TESTING */ @@ -91,7 +91,7 @@ static void Z_InsertBlock(memblock_t *block) block->prev = NULL; block->next = allocated_blocks[block->tag]; allocated_blocks[block->tag] = block; - + if (block->next != NULL) { block->next->prev = block; @@ -132,7 +132,7 @@ static void Z_RemoveBlock(memblock_t *block) // // Z_Init // -void Z_Init (void) +void Z_Init(void) { memset(allocated_blocks, 0, sizeof(allocated_blocks)); printf("zone memory: Using native C allocator.\n"); @@ -142,17 +142,17 @@ void Z_Init (void) // // Z_Free // -void Z_Free (void* ptr) +void Z_Free(void *ptr) { - memblock_t* block; + memblock_t *block; - block = (memblock_t *) ((byte *)ptr - sizeof(memblock_t)); + block = (memblock_t *) ((byte *) ptr - sizeof(memblock_t)); if (block->id != ZONEID) { - I_Error ("Z_Free: freed a pointer without ZONEID"); + I_Error("Z_Free: freed a pointer without ZONEID"); } - + if (block->tag != PU_FREE && block->user != NULL) { // clear the user's mark @@ -208,7 +208,7 @@ static boolean ClearCache(int size) if (block == NULL) { // No blocks left to free; we've done our best. - + break; } @@ -245,16 +245,17 @@ void *Z_Malloc(int size, int tag, void *user) if (tag < 0 || tag >= PU_NUM_TAGS || tag == PU_FREE) { I_Error("Z_Malloc: attempted to allocate a block with an invalid " - "tag: %i", tag); + "tag: %i", + tag); } if (user == NULL && tag >= PU_PURGELEVEL) { - I_Error ("Z_Malloc: an owner is required for purgable blocks"); + I_Error("Z_Malloc: an owner is required for purgable blocks"); } // Malloc a block of the required size - + newblock = NULL; while (newblock == NULL) @@ -271,7 +272,7 @@ void *Z_Malloc(int size, int tag, void *user) } newblock->tag = tag; - + // Hook into the linked list for this tag type newblock->id = ZONEID; @@ -287,12 +288,11 @@ void *Z_Malloc(int size, int tag, void *user) { *newblock->user = result; } - + return result; } - // // Z_FreeTags // @@ -301,14 +301,14 @@ void Z_FreeTags(int lowtag, int hightag) { int i; - for (i=lowtag; i<= hightag; ++i) + for (i = lowtag; i <= hightag; ++i) { memblock_t *block; memblock_t *next; // Free all in this chain - for (block=allocated_blocks[i]; block != NULL; ) + for (block = allocated_blocks[i]; block != NULL;) { next = block->next; @@ -318,7 +318,7 @@ void Z_FreeTags(int lowtag, int hightag) { *block->user = NULL; } - + free(block); // Jump to the next in the chain @@ -326,143 +326,60 @@ void Z_FreeTags(int lowtag, int hightag) block = next; } - // This chain is empty now + // This chain is empty now - allocated_blocks[i] = NULL; + allocated_blocks[i] = NULL; } } - - -// -// Z_DumpHeap -// -void Z_DumpHeap(int lowtag, int hightag) -{ - // broken - -#if 0 - memblock_t* block; - - printf ("zone size: %i location: %p\n", - mainzone->size,mainzone); - - printf ("tag range: %i to %i\n", - lowtag, hightag); - - for (block = mainzone->blocklist.next ; ; block = block->next) - { - if (block->tag >= lowtag && block->tag <= hightag) - printf ("block:%p size:%7i user:%p tag:%3i\n", - block, block->size, block->user, block->tag); - - if (block->next == &mainzone->blocklist) - { - // all blocks have been hit - break; - } - - if ( (byte *)block + block->size != (byte *)block->next) - printf ("ERROR: block size does not touch the next block\n"); - - if ( block->next->prev != block) - printf ("ERROR: next block doesn't have proper back link\n"); - - if (block->tag == PU_FREE && block->next->tag == PU_FREE) - printf ("ERROR: two consecutive free blocks\n"); - } -#endif -} - - -// -// Z_FileDumpHeap -// -void Z_FileDumpHeap(FILE *f) -{ - // broken -#if 0 - memblock_t* block; - - fprintf (f,"zone size: %i location: %p\n",mainzone->size,mainzone); - - for (block = mainzone->blocklist.next ; ; block = block->next) - { - fprintf (f,"block:%p size:%7i user:%p tag:%3i\n", - block, block->size, block->user, block->tag); - - if (block->next == &mainzone->blocklist) - { - // all blocks have been hit - break; - } - - if ( (byte *)block + block->size != (byte *)block->next) - fprintf (f,"ERROR: block size does not touch the next block\n"); - - if ( block->next->prev != block) - fprintf (f,"ERROR: next block doesn't have proper back link\n"); - - if (block->tag == PU_FREE && block->next->tag == PU_FREE) - fprintf (f,"ERROR: two consecutive free blocks\n"); - } -#endif -} - - - // // Z_CheckHeap // -void Z_CheckHeap (void) +void Z_CheckHeap(void) { - memblock_t *block; - memblock_t *prev; - int i; // Check all chains - for (i=0; inext) + for (block = allocated_blocks[i]; block != NULL; block = block->next) { if (block->id != ZONEID) { I_Error("Z_CheckHeap: Block without a ZONEID!"); } - + if (block->prev != prev) { I_Error("Z_CheckHeap: Doubly-linked list corrupted!"); } - + prev = block; } } } - - // // Z_ChangeTag // void Z_ChangeTag2(void *ptr, int tag, const char *file, int line) { - memblock_t* block; - - block = (memblock_t *) ((byte *)ptr - sizeof(memblock_t)); + memblock_t *block; + + block = (memblock_t *) ((byte *) ptr - sizeof(memblock_t)); if (block->id != ZONEID) - I_Error("%s:%i: Z_ChangeTag: block without a ZONEID!", - file, line); + I_Error("%s:%i: Z_ChangeTag: block without a ZONEID!", file, line); if (tag >= PU_PURGELEVEL && block->user == NULL) I_Error("%s:%i: Z_ChangeTag: an owner is required " - "for purgable blocks", file, line); + "for purgable blocks", + file, line); // Remove the block from its current list, and rehook it into // its new list. @@ -471,36 +388,3 @@ void Z_ChangeTag2(void *ptr, int tag, const char *file, int line) block->tag = tag; Z_InsertBlock(block); } - -void Z_ChangeUser(void *ptr, void **user) -{ - memblock_t* block; - - block = (memblock_t *) ((byte *)ptr - sizeof(memblock_t)); - - if (block->id != ZONEID) - { - I_Error("Z_ChangeUser: Tried to change user for invalid block!"); - } - - block->user = user; - *user = ptr; -} - - -// -// Z_FreeMemory -// - -int Z_FreeMemory(void) -{ - // Limited by the system?? - - return -1; -} - -unsigned int Z_ZoneSize(void) -{ - return 0; -} - diff --git a/src/z_zone.c b/src/z_zone.c index c5c2dbf7c1..03a3694b85 100644 --- a/src/z_zone.c +++ b/src/z_zone.c @@ -34,84 +34,55 @@ // // It is of no value to free a cachable block, // because it will get overwritten automatically if needed. -// - +// + #define MEM_ALIGN sizeof(void *) -#define ZONEID 0x1d4a11 +#define ZONEID 0x1d4a11 typedef struct memblock_s { - int size; // including the header and possibly tiny fragments - void** user; - int tag; // PU_FREE if this is free - int id; // should be ZONEID - struct memblock_s* next; - struct memblock_s* prev; + int size; // including the header and possibly tiny fragments + void **user; + int tag; // PU_FREE if this is free + int id; // should be ZONEID + struct memblock_s *next; + struct memblock_s *prev; } memblock_t; typedef struct { // total bytes malloced, including header - int size; + int size; // start / end cap for linked list - memblock_t blocklist; - - memblock_t* rover; - -} memzone_t; + memblock_t blocklist; + memblock_t *rover; + +} memzone_t; static memzone_t *mainzone; static boolean zero_on_free; static boolean scan_on_free; - -// -// Z_ClearZone -// -void Z_ClearZone (memzone_t* zone) -{ - memblock_t* block; - - // set the entire zone to one free block - zone->blocklist.next = - zone->blocklist.prev = - block = (memblock_t *)( (byte *)zone + sizeof(memzone_t) ); - - zone->blocklist.user = (void *)zone; - zone->blocklist.tag = PU_STATIC; - zone->rover = block; - - block->prev = block->next = &zone->blocklist; - - // a free block. - block->tag = PU_FREE; - - block->size = zone->size - sizeof(memzone_t); -} - - - // // Z_Init // -void Z_Init (void) +void Z_Init(void) { - memblock_t* block; - int size; + memblock_t *block; + int size; - mainzone = (memzone_t *)I_ZoneBase (&size); + mainzone = (memzone_t *) I_ZoneBase(&size); mainzone->size = size; // set the entire zone to one free block - mainzone->blocklist.next = - mainzone->blocklist.prev = - block = (memblock_t *)( (byte *)mainzone + sizeof(memzone_t) ); + mainzone->blocklist.next = mainzone->blocklist.prev = block = + (memblock_t *) ((byte *) mainzone + sizeof(memzone_t)); - mainzone->blocklist.user = (void *)mainzone; + mainzone->blocklist.user = (void *) mainzone; mainzone->blocklist.tag = PU_STATIC; mainzone->rover = block; @@ -141,22 +112,21 @@ static void ScanForBlock(void *start, void *end) { memblock_t *block; void **mem; - int i, len, tag; block = mainzone->blocklist.next; while (block->next != &mainzone->blocklist) { - tag = block->tag; + int tag = block->tag; if (tag == PU_STATIC || tag == PU_LEVEL || tag == PU_LEVSPEC) { // Scan for pointers on the assumption that pointers are aligned // on word boundaries (word size depending on pointer size): mem = (void **) ((byte *) block + sizeof(memblock_t)); - len = (block->size - sizeof(memblock_t)) / sizeof(void *); + int len = (block->size - sizeof(memblock_t)) / sizeof(void *); - for (i = 0; i < len; ++i) + for (int i = 0; i < len; ++i) { if (start <= mem[i] && mem[i] <= end) { @@ -175,20 +145,20 @@ static void ScanForBlock(void *start, void *end) // // Z_Free // -void Z_Free (void* ptr) +void Z_Free(void *ptr) { - memblock_t* block; - memblock_t* other; + memblock_t *block; + memblock_t *other; - block = (memblock_t *) ( (byte *)ptr - sizeof(memblock_t)); + block = (memblock_t *) ((byte *) ptr - sizeof(memblock_t)); if (block->id != ZONEID) - I_Error ("Z_Free: freed a pointer without ZONEID"); + I_Error("Z_Free: freed a pointer without ZONEID"); if (block->tag != PU_FREE && block->user != NULL) { - // clear the user's mark - *block->user = 0; + // clear the user's mark + *block->user = 0; } // mark as free @@ -204,8 +174,7 @@ void Z_Free (void* ptr) } if (scan_on_free) { - ScanForBlock(ptr, - (byte *) ptr + block->size - sizeof(memblock_t)); + ScanForBlock(ptr, (byte *) ptr + block->size - sizeof(memblock_t)); } other = block->prev; @@ -237,29 +206,24 @@ void Z_Free (void* ptr) } - // // Z_Malloc // You can pass a NULL user if the tag is < PU_PURGELEVEL. // -#define MINFRAGMENT 64 +#define MINFRAGMENT 64 -void* -Z_Malloc -( int size, - int tag, - void* user ) +void *Z_Malloc(int size, int tag, void *user) { - int extra; - memblock_t* start; - memblock_t* rover; - memblock_t* newblock; - memblock_t* base; + int extra; + memblock_t *start; + memblock_t *rover; + memblock_t *newblock; + memblock_t *base; void *result; size = (size + MEM_ALIGN - 1) & ~(MEM_ALIGN - 1); - + // scan through the block list, // looking for the first free block // of sufficient size, @@ -267,25 +231,25 @@ Z_Malloc // account for size of block header size += sizeof(memblock_t); - + // if there is a free block behind the rover, // back up over them base = mainzone->rover; - + if (base->prev->tag == PU_FREE) base = base->prev; - + rover = base; start = base->prev; - + do { if (rover == start) { // scanned all the way around the list - I_Error ("Z_Malloc: failed on allocation of %i bytes", size); + I_Error("Z_Malloc: failed on allocation of %i bytes", size); } - + if (rover->tag != PU_FREE) { if (rover->tag < PU_PURGELEVEL) @@ -300,7 +264,7 @@ Z_Malloc // the rover can be the base block base = base->prev; - Z_Free ((byte *)rover+sizeof(memblock_t)); + Z_Free((byte *) rover + sizeof(memblock_t)); base = base->next; rover = base->next; } @@ -312,18 +276,18 @@ Z_Malloc } while (base->tag != PU_FREE || base->size < size); - + // found a block big enough extra = base->size - size; - - if (extra > MINFRAGMENT) + + if (extra > MINFRAGMENT) { // there will be a free fragment after the allocated block - newblock = (memblock_t *) ((byte *)base + size ); + newblock = (memblock_t *) ((byte *) base + size); newblock->size = extra; - + newblock->tag = PU_FREE; - newblock->user = NULL; + newblock->user = NULL; newblock->prev = base; newblock->next = base->next; newblock->next->prev = newblock; @@ -331,14 +295,14 @@ Z_Malloc base->next = newblock; base->size = size; } - - if (user == NULL && tag >= PU_PURGELEVEL) - I_Error ("Z_Malloc: an owner is required for purgable blocks"); + + if (user == NULL && tag >= PU_PURGELEVEL) + I_Error("Z_Malloc: an owner is required for purgable blocks"); base->user = user; base->tag = tag; - result = (void *) ((byte *)base + sizeof(memblock_t)); + result = (void *) ((byte *) base + sizeof(memblock_t)); if (base->user) { @@ -346,207 +310,80 @@ Z_Malloc } // next allocation will start looking here - mainzone->rover = base->next; - + mainzone->rover = base->next; + base->id = ZONEID; - + return result; } - // // Z_FreeTags // -void -Z_FreeTags -( int lowtag, - int hightag ) +void Z_FreeTags(int lowtag, int hightag) { - memblock_t* block; - memblock_t* next; - - for (block = mainzone->blocklist.next ; - block != &mainzone->blocklist ; - block = next) - { - // get link before freeing - next = block->next; - - // free block? - if (block->tag == PU_FREE) - continue; - - if (block->tag >= lowtag && block->tag <= hightag) - Z_Free ( (byte *)block+sizeof(memblock_t)); - } -} + memblock_t *block; + memblock_t *next; + for (block = mainzone->blocklist.next; block != &mainzone->blocklist; block = next) + { + // get link before freeing + next = block->next; + // free block? + if (block->tag == PU_FREE) + continue; -// -// Z_DumpHeap -// Note: TFileDumpHeap( stdout ) ? -// -void -Z_DumpHeap -( int lowtag, - int hightag ) -{ - memblock_t* block; - - printf ("zone size: %i location: %p\n", - mainzone->size,mainzone); - - printf ("tag range: %i to %i\n", - lowtag, hightag); - - for (block = mainzone->blocklist.next ; ; block = block->next) - { - if (block->tag >= lowtag && block->tag <= hightag) - printf ("block:%p size:%7i user:%p tag:%3i\n", - block, block->size, block->user, block->tag); - - if (block->next == &mainzone->blocklist) - { - // all blocks have been hit - break; - } - - if ( (byte *)block + block->size != (byte *)block->next) - printf ("ERROR: block size does not touch the next block\n"); - - if ( block->next->prev != block) - printf ("ERROR: next block doesn't have proper back link\n"); - - if (block->tag == PU_FREE && block->next->tag == PU_FREE) - printf ("ERROR: two consecutive free blocks\n"); + if (block->tag >= lowtag && block->tag <= hightag) + Z_Free((byte *) block + sizeof(memblock_t)); } } // -// Z_FileDumpHeap +// Z_CheckHeap // -void Z_FileDumpHeap (FILE* f) +void Z_CheckHeap(void) { - memblock_t* block; - - fprintf (f,"zone size: %i location: %p\n",mainzone->size,mainzone); - - for (block = mainzone->blocklist.next ; ; block = block->next) + memblock_t *block; + + for (block = mainzone->blocklist.next;; block = block->next) { - fprintf (f,"block:%p size:%7i user:%p tag:%3i\n", - block, block->size, block->user, block->tag); - - if (block->next == &mainzone->blocklist) - { - // all blocks have been hit - break; - } - - if ( (byte *)block + block->size != (byte *)block->next) - fprintf (f,"ERROR: block size does not touch the next block\n"); - - if ( block->next->prev != block) - fprintf (f,"ERROR: next block doesn't have proper back link\n"); - - if (block->tag == PU_FREE && block->next->tag == PU_FREE) - fprintf (f,"ERROR: two consecutive free blocks\n"); - } -} + if (block->next == &mainzone->blocklist) + { + // all blocks have been hit + break; + } + if ((byte *) block + block->size != (byte *) block->next) + I_Error("Z_CheckHeap: block size does not touch the next block\n"); + if (block->next->prev != block) + I_Error("Z_CheckHeap: next block doesn't have proper back link\n"); -// -// Z_CheckHeap -// -void Z_CheckHeap (void) -{ - memblock_t* block; - - for (block = mainzone->blocklist.next ; ; block = block->next) - { - if (block->next == &mainzone->blocklist) - { - // all blocks have been hit - break; - } - - if ( (byte *)block + block->size != (byte *)block->next) - I_Error ("Z_CheckHeap: block size does not touch the next block\n"); - - if ( block->next->prev != block) - I_Error ("Z_CheckHeap: next block doesn't have proper back link\n"); - - if (block->tag == PU_FREE && block->next->tag == PU_FREE) - I_Error ("Z_CheckHeap: two consecutive free blocks\n"); + if (block->tag == PU_FREE && block->next->tag == PU_FREE) + I_Error("Z_CheckHeap: two consecutive free blocks\n"); } } - - // // Z_ChangeTag // void Z_ChangeTag2(void *ptr, int tag, const char *file, int line) { - memblock_t* block; - - block = (memblock_t *) ((byte *)ptr - sizeof(memblock_t)); + memblock_t *block; + + block = (memblock_t *) ((byte *) ptr - sizeof(memblock_t)); if (block->id != ZONEID) - I_Error("%s:%i: Z_ChangeTag: block without a ZONEID!", - file, line); + I_Error("%s:%i: Z_ChangeTag: block without a ZONEID!", file, line); if (tag >= PU_PURGELEVEL && block->user == NULL) I_Error("%s:%i: Z_ChangeTag: an owner is required " - "for purgable blocks", file, line); + "for purgable blocks", + file, line); block->tag = tag; } - -void Z_ChangeUser(void *ptr, void **user) -{ - memblock_t* block; - - block = (memblock_t *) ((byte *)ptr - sizeof(memblock_t)); - - if (block->id != ZONEID) - { - I_Error("Z_ChangeUser: Tried to change user for invalid block!"); - } - - block->user = user; - *user = ptr; -} - - - -// -// Z_FreeMemory -// -int Z_FreeMemory (void) -{ - memblock_t* block; - int free; - - free = 0; - - for (block = mainzone->blocklist.next ; - block != &mainzone->blocklist; - block = block->next) - { - if (block->tag == PU_FREE || block->tag >= PU_PURGELEVEL) - free += block->size; - } - - return free; -} - -unsigned int Z_ZoneSize(void) -{ - return mainzone->size; -} - diff --git a/src/z_zone.h b/src/z_zone.h index 22bd626431..9f32d5d1b3 100644 --- a/src/z_zone.h +++ b/src/z_zone.h @@ -58,7 +58,6 @@ void Z_DumpHeap (int lowtag, int hightag); void Z_FileDumpHeap (FILE *f); void Z_CheckHeap (void); void Z_ChangeTag2 (void *ptr, int tag, const char *file, int line); -void Z_ChangeUser(void *ptr, void **user); int Z_FreeMemory (void); unsigned int Z_ZoneSize(void);