scummvm/engines/icb/set_pc.cpp
2020-06-28 08:54:42 +02:00

1876 lines
121 KiB
C++

/* ResidualVM - A 3D game interpreter
*
* ResidualVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the AUTHORS
* file distributed with this source distribution.
*
* Additional copyright for this file:
* Copyright (C) 1999-2000 Revolution Software Ltd.
* This code is based on source code created by Revolution Software,
* used with permission.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#define FORBIDDEN_SYMBOL_EXCEPTION_rand
#include "engines/icb/common/px_rccommon.h"
#include "p4_generic.h"
#include "set.h"
#include "global_objects.h"
#include "global_switches.h"
#include "surface_manager.h"
#include "shake.h"
#include "res_man.h"
#include "mission.h"
#include "jpeg.h"
#include "engines/icb/common/px_capri_maths.h"
#include "engines/icb/common/pc_props.h"
#include "engines/icb/sound/direct_sound.h"
#include "engines/icb/sound/fx_manager.h"
#include "engines/icb/icb.h"
// Types to be deleted soon
#include "direct_input.h"
namespace ICB {
#define RAND_16BIT (rand() + rand() + rand())
#define RAND_32BIT ((RAND_16BIT << 16) | (RAND_16BIT))
#define RAND_BIT(bit) ((rands[(bit) >> 5]) & (1 << ((bit)&31)))
// Need tempory access to the zbuffer
extern char *pZ;
// 640*480 global rect - SCREEN_WIDTH*SCREEN_DEPTH !!!!!!!
RECT full_rect; // used for blting from safe to working buffer, etc
//----------- Bookyakasha Rydem and Sparkles !!!!!
uint32 sparkle_bmp[6 * 32 * 32] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05050505, 0x3D3D3D3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E0E0E0E, 0x79797979, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x0C0C0C0C, 0xD2D2D2D2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x3C3C3C3C, 0x77777777, 0xEDEDEDED, 0xFDFDFDFD, 0xD4D4D4D4, 0x99999999, 0x4B4B4B4B, 0x1D1D1D1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1F1F1F1F, 0xC2C2C2C2, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0F0F0F0F, 0x7D7D7D7D,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x06060606, 0x40404040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0F0F0F0F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3D3D3D3D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5E5E5E5E, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x91919191, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAEAEAEAE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC9C9C9C9, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xE9E9E9E9,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x85858585, 0xDDDDDDDD, 0x7F7F7F7F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0C0C, 0x1C1C1C1C,
0x36363636, 0x4F4F4F4F, 0x8A8A8A8A, 0xB2B2B2B2, 0xD1D1D1D1, 0xEFEFEFEF, 0xFDFDFDFD, 0xF9F9F9F9, 0xF9F9F9F9, 0xF0F0F0F0, 0xDADADADA, 0xC4C4C4C4, 0xA8A8A8A8, 0x82828282,
0x54545454, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8B8B8B8B, 0xF5F5F5F5, 0x90909090, 0x36363636,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0xF4F4F4F4, 0x06060606, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xCCCCCCCC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAFAFAFAF, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x95959595,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x66666666, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x41414141, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03030303, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0A0A0A0A, 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0A0A0A0A, 0x30303030, 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x37373737, 0x3C3C3C3C, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x55555555, 0x18181818, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3A3A3A3A, 0x64646464, 0x04040404, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9B9B9B9B, 0x4F4F4F4F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1B1B1B1B, 0xD3D3D3D3, 0x03030303,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x92929292, 0xA0A0A0A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x27272727, 0x14141414, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x02020202, 0x11111111, 0xF3F3F3F3, 0x3A3A3A3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1C1C1C1C, 0x53535353, 0x6B6B6B6B, 0x4A4A4A4A,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x16161616, 0x92929292, 0xE9E9E9E9, 0x08080808, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x29292929, 0x8D8D8D8D, 0xD1D1D1D1, 0x9B9B9B9B, 0x2A2A2A2A, 0x19191919, 0x16161616, 0x03030303, 0x00000000, 0x58585858, 0xE4E4E4E4, 0xA3A3A3A3,
0x16161616, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20202020, 0x8F8F8F8F, 0xF2F2F2F2, 0xDDDDDDDD, 0x98989898, 0x62626262,
0x59595959, 0xCCCCCCCC, 0xFCFCFCFC, 0x7A7A7A7A, 0x0C0C0C0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2C2C2C2C, 0xA4A4A4A4, 0xF3F3F3F3, 0xF4F4F4F4, 0xD8D8D8D8, 0xF2F2F2F2, 0xF1F1F1F1, 0x7E7E7E7E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02020202, 0x12121212, 0x40404040, 0xAEAEAEAE, 0xF9F9F9F9, 0xFDFDFDFD, 0xFDFDFDFD, 0xB5B5B5B5, 0x55555555, 0x1A1A1A1A,
0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43434343, 0xDFDFDFDF, 0xF4F4F4F4,
0xD8D8D8D8, 0xF4F4F4F4, 0xF7F7F7F7, 0xACACACAC, 0x38383838, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x4E4E4E4E, 0xF8F8F8F8, 0xD3D3D3D3, 0x3D3D3D3D, 0x58585858, 0x93939393, 0xD2D2D2D2, 0xF3F3F3F3, 0x99999999, 0x26262626, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E0E0E0E, 0x8E8E8E8E, 0xF6F6F6F6, 0x6A6A6A6A, 0x00000000, 0x00000000, 0x14141414, 0x17171717, 0x25252525, 0x88888888,
0xC5C5C5C5, 0x9A9A9A9A, 0x3F3F3F3F, 0x07070707, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xD4D4D4D4, 0xAFAFAFAF, 0x26262626, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x36363636, 0x89898989, 0x67676767, 0x1F1F1F1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18181818, 0xFBFBFBFB,
0x35353535, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1B1B1B1B, 0x2A2A2A2A, 0x52525252, 0x34343434,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x89898989, 0xB4B4B4B4, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02020202, 0xDEDEDEDE, 0x31313131, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3B3B3B3B, 0xABABABAB, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01010101, 0x76767676,
0x3B3B3B3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x15151515, 0x76767676, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x46464646, 0x35353535, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3D3D3D3D, 0x08080808, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x21212121, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x04040404, 0x12121212, 0x07070707, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0F0F0F0F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18181818, 0x30303030, 0x2C2C2C2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10101010, 0x53535353, 0x0E0E0E0E,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07070707, 0x44444444,
0x38383838, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07070707,
0x42424242, 0x70707070, 0x2D2D2D2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x23232323, 0x63636363, 0x57575757, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x2C2C2C2C, 0x73737373, 0x41414141, 0x07070707, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10101010, 0xA6A6A6A6, 0x6E6E6E6E, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06060606, 0x4F4F4F4F, 0x9B9B9B9B, 0x41414141, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1A1A1A1A,
0xD1D1D1D1, 0x75757575, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x5C5C5C5C, 0xD8D8D8D8, 0x80808080, 0x10101010, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20202020, 0xEBEBEBEB, 0x88888888, 0x25252525, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0C0C, 0x43434343, 0xB5B5B5B5,
0x62626262, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x56565656, 0xFFFFFFFF, 0xAAAAAAAA, 0x42424242, 0x00000000,
0x46464646, 0x8A8A8A8A, 0xEDEDEDED, 0xA4A4A4A4, 0x0C0C0C0C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x09090909,
0x7E7E7E7E, 0xFBFBFBFB, 0xB6B6B6B6, 0x7C7C7C7C, 0xC1C1C1C1, 0xF0F0F0F0, 0xBEBEBEBE, 0x2D2D2D2D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0C0C, 0x8E8E8E8E, 0xFAFAFAFA, 0xE7E7E7E7, 0xF4F4F4F4, 0xE7E7E7E7, 0x37373737, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x68686868, 0xE7E7E7E7, 0xFEFEFEFE, 0xFDFDFDFD, 0xA7A7A7A7,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x18181818, 0xA0A0A0A0,
0xFEFEFEFE, 0xE9E9E9E9, 0xF1F1F1F1, 0xCCCCCCCC, 0x37373737, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x0D0D0D0D, 0x88888888, 0xFCFCFCFC, 0xC4C4C4C4, 0x54545454, 0x94949494, 0xF4F4F4F4, 0xC0C0C0C0, 0x1E1E1E1E, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4B4B4B4B, 0xD4D4D4D4, 0xA5A5A5A5, 0x36363636, 0x00000000, 0x1B1B1B1B, 0x77777777, 0xF1F1F1F1, 0xA8A8A8A8,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x09090909, 0x73737373, 0xE9E9E9E9, 0x97979797, 0x30303030, 0x07070707, 0x00000000,
0x00000000, 0x1B1B1B1B, 0x4E4E4E4E, 0xE5E5E5E5, 0x75757575, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4B4B4B4B, 0xC3C3C3C3, 0x8C8C8C8C,
0x1F1F1F1F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08080808, 0x22222222, 0xD6D6D6D6, 0x5F5F5F5F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2D2D2D2D, 0x80808080, 0x48484848, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x21212121, 0xB4B4B4B4,
0x54545454, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x30303030, 0x83838383, 0x69696969, 0x0E0E0E0E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x1C1C1C1C, 0xA0A0A0A0, 0x3A3A3A3A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0C0C, 0x78787878, 0x40404040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x19191919, 0x86868686, 0x15151515, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08080808, 0x58585858, 0x2C2C2C2C, 0x0B0B0B0B, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x25252525,
0x58585858, 0x1C1C1C1C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1D1D1D1D,
0x28282828, 0x08080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x06060606, 0x25252525, 0x08080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0B0B0B0B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x15151515, 0x0D0D0D0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20202020, 0x2E2E2E2E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C0C0C0C, 0x58585858, 0x03030303, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x7D7D7D7D, 0x31313131, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x58585858, 0x96969696, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC9C9C9C9, 0x31313131, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x77777777, 0xACACACAC, 0x04040404, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1C1C1C1C, 0xF3F3F3F3, 0x40404040, 0x03030303, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x1F1F1F1F, 0x5D5D5D5D, 0x12121212, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0F0F0F0F, 0xD5D5D5D5, 0xAEAEAEAE, 0x1F1F1F1F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x50505050, 0x81818181, 0x81818181, 0x2C2C2C2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0E0E0E0E, 0x8E8E8E8E,
0xF5F5F5F5, 0x60606060, 0x02020202, 0x0B0B0B0B, 0x18181818, 0x07070707, 0x27272727, 0xA2A2A2A2, 0xD2D2D2D2, 0x99999999, 0x33333333, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x45454545, 0xF5F5F5F5, 0xB9B9B9B9, 0x71717171, 0x76767676, 0x94949494, 0xD7D7D7D7, 0xFBFBFBFB, 0x9E9E9E9E, 0x1F1F1F1F, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43434343, 0xDBDBDBDB, 0xF7F7F7F7, 0xE8E8E8E8, 0xF6F6F6F6, 0xF4F4F4F4, 0xA5A5A5A5,
0x22222222, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01010101, 0x13131313, 0x4E4E4E4E, 0xC3C3C3C3, 0xFAFAFAFA, 0xFDFDFDFD,
0xFCFCFCFC, 0xD9D9D9D9, 0x60606060, 0x1B1B1B1B, 0x04040404, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20202020, 0xAAAAAAAA,
0xF8F8F8F8, 0xF8F8F8F8, 0xE4E4E4E4, 0xEAEAEAEA, 0xEBEBEBEB, 0x67676767, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x2A2A2A2A, 0xA7A7A7A7, 0xFDFDFDFD, 0xD2D2D2D2, 0x9B9B9B9B, 0x74747474, 0x38383838, 0xA7A7A7A7, 0xFBFBFBFB, 0x5F5F5F5F, 0x05050505, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x38383838, 0x9A9A9A9A, 0xDFDFDFDF, 0x95959595, 0x20202020, 0x13131313, 0x18181818, 0x00000000, 0x00000000, 0x3F3F3F3F, 0xE9E9E9E9, 0xA8A8A8A8,
0x14141414, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x15151515, 0x59595959, 0x71717171, 0x45454545, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x14141414, 0x92929292, 0xECECECEC, 0x19191919, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x36363636, 0x2F2F2F2F, 0x0F0F0F0F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02020202, 0x25252525, 0xE9E9E9E9, 0x35353535, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02020202, 0x83838383, 0x9D9D9D9D, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x18181818, 0xCACACACA, 0x07070707, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x90909090, 0x5A5A5A5A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2C2C2C2C, 0x96969696, 0x04040404, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x7B7B7B7B, 0x1D1D1D1D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43434343, 0x3B3B3B3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04040404, 0x39393939, 0x03030303, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x02020202, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x42424242, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x79797979,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x8B8B8B8B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xAEAEAEAE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xC9C9C9C9, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0xE2E2E2E2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFAFAFAFA, 0x0D0D0D0D, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x13131313, 0xFDFDFDFD, 0x1F1F1F1F, 0x02020202, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03030303, 0x4A4A4A4A, 0xFAFAFAFA,
0x4B4B4B4B, 0x04040404, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x09090909, 0x63636363, 0xF9F9F9F9, 0x70707070, 0x08080808, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10101010, 0xA4A4A4A4, 0xFDFDFDFD, 0xB0B0B0B0, 0x06060606, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04040404, 0x2F2F2F2F, 0x4E4E4E4E, 0x66666666, 0x7F7F7F7F, 0xC5C5C5C5, 0xFDFDFDFD, 0xD0D0D0D0, 0x7F7F7F7F,
0x66666666, 0x4E4E4E4E, 0x2F2F2F2F, 0x04040404, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x32323232, 0x52525252, 0x6D6D6D6D, 0x9D9D9D9D, 0xC6C6C6C6, 0xDFDFDFDF, 0xEBEBEBEB, 0xF9F9F9F9, 0xFDFDFDFD, 0xFCFCFCFC, 0xFAFAFAFA,
0xFCFCFCFC, 0xFDFDFDFD, 0xFDFDFDFD, 0xFDFDFDFD, 0xFDFDFDFD, 0xFBFBFBFB, 0xF5F5F5F5, 0xECECECEC, 0xD9D9D9D9, 0xC0C0C0C0, 0xAFAFAFAF, 0x9C9C9C9C, 0x78787878, 0x3B3B3B3B,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04040404,
0x2F2F2F2F, 0x4E4E4E4E, 0x66666666, 0x7F7F7F7F, 0xC5C5C5C5, 0xFDFDFDFD, 0xBDBDBDBD, 0x7F7F7F7F, 0x66666666, 0x4E4E4E4E, 0x2F2F2F2F, 0x04040404, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01010101, 0x01010101, 0x91919191, 0xFDFDFDFD, 0xA0A0A0A0, 0x01010101, 0x01010101, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x66666666, 0xFDFDFDFD,
0x7B7B7B7B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x48484848, 0xFDFDFDFD, 0x57575757, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1D1D1D1D, 0xFDFDFDFD, 0x2C2C2C2C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFDFDFDFD, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0xF2F2F2F2, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xDADADADA, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xA7A7A7A7, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A8A8A8A,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x6B6B6B6B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3B3B3B3B, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000};
void ShakeRects(RECT &sourceRect, RECT &destRect) {
int xShift = GetShakeX();
int yShift = GetShakeY();
if (yShift > 0) {
destRect.top += yShift;
sourceRect.bottom -= yShift;
} else {
destRect.bottom += yShift;
sourceRect.top -= yShift;
}
if (xShift > 0) {
destRect.left += xShift;
sourceRect.right -= xShift;
} else {
destRect.right += xShift;
sourceRect.left -= xShift;
}
}
int ShakePropRects(RECT &rect, RECT &source) {
int xShift = GetShakeX();
int yShift = GetShakeY();
rect.top += yShift;
rect.bottom += yShift;
rect.left += xShift;
rect.right += xShift;
int check = 0;
if (rect.top < 0) {
source.top -= rect.top;
rect.top = 0;
++check;
}
if (rect.left < 0) {
source.left -= rect.left;
rect.left = 0;
++check;
}
if (rect.bottom > SCREEN_DEPTH) {
source.bottom -= (rect.bottom - SCREEN_DEPTH);
rect.bottom = SCREEN_DEPTH;
++check;
}
if (rect.right > SCREEN_WIDTH) {
source.right -= (rect.right - SCREEN_WIDTH);
rect.right = SCREEN_WIDTH;
++check;
}
if (check == 0)
return 1;
if ((rect.right - rect.left) <= 0)
return 0;
if ((rect.bottom - rect.top) <= 0)
return 0;
return 1;
}
_set::_set() {
// set object constructor
// setup all the data structures for a single set
set_name[0] = '\0';
set_cluster[0] = '\0';
m_setOk = 0;
m_TotalPropSurfaces = 0;
m_props = 0;
memset(m_propSurfaces, 0x00, sizeof(int) * MAX_PROP_STATES);
InitWeather(WEATHER_NONE, 0, 0, 0, 0, 0);
}
_set::~_set() { Reset(); }
void _set::ReInit() {
// Free all the prop surface that have been created.
if (m_setOk) {
// Remove all the old surface
for (int s = 0; s < m_TotalPropSurfaces; s++) {
if (m_propSurfaces[s])
surface_manager->Kill_surface(m_propSurfaces[s]);
}
m_TotalPropSurfaces = 0;
surface_manager->Kill_surface(bg_buffer_id);
}
// Reload the backdrop and props
Init_base_bitmap_buffers();
}
bool8 _set::Init(const char *camera_name, const char *clustered_camera_name) {
// Check if this camera is already the current one
if (strcmp(clustered_camera_name, set_cluster) == 0)
return FALSE8;
// Get rid of all the graphics for the last set
Reset();
// Create the new set cluster path
sprintf(set_cluster, SET_PATH, MS->Fetch_h_session_name(), clustered_camera_name);
set_cluster_hash = HashString(set_cluster);
// And the name of the set file within the cluster
pxString p_rcvf = "p.rcvf";
uint32 p_rcvf_hash = HashString(p_rcvf);
// Keep the non clustered name of the camera ( not really needed but nicer for error messages)
strcpy(set_name, camera_name);
// Load this camera
m_currentCamera = (_pcSetHeader *)rs_bg->Res_open(p_rcvf, p_rcvf_hash, set_cluster, set_cluster_hash);
if (m_currentCamera->id != PCSETFILE_ID)
Fatal_error("Unsupported set files. Set id is %d. should be %d", m_currentCamera->id, PCSETFILE_ID);
// Hack the camera into the format we want.
HackMakeCamera();
// Load the base bitmap into safe and working buffers.
Init_base_bitmap_buffers();
return TRUE8;
}
void _set::Reset() {
// Free all the prop surface that have been created.
if (m_setOk) {
strcpy(set_name, "None");
// Remove all the old surface
for (int s = 0; s < m_TotalPropSurfaces; s++) {
if (m_propSurfaces[s])
surface_manager->Kill_surface(m_propSurfaces[s]);
}
m_TotalPropSurfaces = 0;
surface_manager->Kill_surface(bg_buffer_id);
delete m_props;
m_props = 0;
}
m_setOk = 0;
}
bool8 _set::DoesCameraExist(const char * /*camera_name*/, const char *camera_cluster_name) {
// Compute the set_cluster name, which is:
// <#mission>/<#session>/<#camera_name>.clu
sprintf(set_cluster, SET_PATH, MS->Fetch_h_session_name(), camera_cluster_name);
set_cluster_hash = HashString(set_cluster);
pxString rvcam = "p.rcvf";
uint32 h_rvcam = HashString(rvcam);
if (rs_bg->Test_file(rvcam, h_rvcam, set_cluster, set_cluster_hash) == 0) {
rvcam = "p.rvcam";
h_rvcam = HashString(rvcam);
if (rs_bg->Test_file(rvcam, h_rvcam, set_cluster, set_cluster_hash) == 0)
return FALSE8;
}
return TRUE8;
}
bool8 _set::DoesPropExist(const char *propName) {
if (!OK())
return FALSE8;
for (uint32 i = 0; i < GetPropQty(); i++) {
if (strcmp(propName, GetPropName(i)) == 0)
return TRUE8;
}
return FALSE8;
}
void _set::Init_base_bitmap_buffers() {
// Get the camera
/*PXcamera camera = */ GetCamera();
uint8 *bgPtr;
// Look for the non z99 version first
bgPtr = GetBackground();
// Check this is a valid support set type
if ((*(uint32 *)bgPtr) != 7)
Fatal_error("Camera %s is out of date.", set_url);
// Find the shadow table
uint32 *shadowTable = ((uint32 *)bgPtr) + 1;
// Create a safe buffer to store the backdrop in
bg_buffer_id = surface_manager->Create_new_surface("Background", SCREEN_WIDTH, SCREEN_DEPTH, VIDEO);
// Fill the buffer with solid pink so we can find hole in it more easily
surface_manager->Fill_surface(bg_buffer_id, 0x008080ff);
// Find the start of this shadow data
uint8 *ptr = bgPtr + shadowTable[0];
// Decode the jpeg background
JpegDecoder decoder;
decoder.ReadImage(ptr, bg_buffer_id);
// find the start of the weather data
int32 *weatherPtr = (int *)(bgPtr + shadowTable[1]);
InitWeather(*(weatherPtr), *(weatherPtr + 1), *(weatherPtr + 2), *(weatherPtr + 3), *(weatherPtr + 4), *(weatherPtr + 5));
// Flush the actor z buffer
if (pZ)
memset(pZ, 0xff, 640 * 480 * 2);
// Load all the props now
Load_props();
// Everythings ok with the set once we've got here
m_setOk = 1;
}
void _set::Load_props() {
uint32 p;
uint32 s;
// Check that we don't have any prop surfaces in memory
if (m_TotalPropSurfaces != 0)
Fatal_error("Set::Load_props called but there are still props using surfaces !");
// Reset the surface array
memset(m_propSurfaces, 0x00, sizeof(int) * MAX_PROP_STATES);
// Set up the props
delete m_props;
// Load the prop file
m_props = new pcPropFile(((uint8 *)m_currentCamera) + m_currentCamera->propOffset);
pcPropFile *propFile = GetProps();
// Which version are we using ?
if (propFile->GetSchema() != PCPROP_SCHEMA)
Fatal_error("[LOAD_PROPS] - Invalid prop file with schema %d, should have schema %d", propFile->GetSchema(), PCPROP_SCHEMA);
// Get the prop quantity
uint32 propQty = propFile->GetPropQty();
// Go through each prop creating the surfaces for it. Load them all as low res first
uint32 totalStates = 0;
for (p = 0; p < propQty; p++) {
// Keep track of where this props state surfaces start (2 surfaces per state)
m_propSurfaceIds[p] = totalStates;
// Get this prop
pcPropRGB *pProp = propFile->GetProp(p);
// How many states does it have ?
uint32 stateQty = pProp->GetStateQty();
// Loading them all in low res first
m_propResolutions[p] = 0;
// Create surfaces for each state
for (s = 0; s < stateQty; s++) {
// Get this prop state
pcPropRGBState *pState = pProp->GetState(s);
// Does it have any background tiles for this state ?
if (pState->GetLRBgTileQty() > 0) {
// Create a surface for bg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("lb%s(%d)", pProp->GetName(), s), pState->GetLRBgSurfaceWidth(),
pState->GetLRBgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0)
Fatal_error("Out of video memory trying to load %s frame %d", pProp->GetName(), s);
m_propSurfaces[totalStates << 1] = sid;
Tdebug("LoadProps.txt", "LowRes Background %s state %d in %d", pProp->GetName(), s, sid);
}
// Does it have any foreground tiles for this state ?
if (pState->GetLRFgTileQty() > 0) {
// Create a surface for fg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("lf%s(%d)", pProp->GetName(), s), pState->GetLRFgSurfaceWidth(),
pState->GetLRFgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0)
Fatal_error("Out of video memory trying to load %s frame %d", pProp->GetName(), s);
m_propSurfaces[(totalStates << 1) + 1] = sid;
Tdebug("LoadProps.txt", "LowRes Foreground %s state %d in %d", pProp->GetName(), s, sid);
}
totalStates++;
}
}
m_TotalPropSurfaces = totalStates << 1;
// Ok all the low res surfaces are created. Now try replacing each one with high res versions where possible.
for (p = 0; p < propQty; p++) {
// Get this prop
pcPropRGB *pProp = propFile->GetProp(p);
// How many states does it have ?
uint32 stateQty = pProp->GetStateQty();
// Delete all the surfaces for this prop
uint32 propState = m_propSurfaceIds[p];
for (s = 0; s < stateQty; s++) {
if (m_propSurfaces[(propState << 1)]) {
surface_manager->Kill_surface(m_propSurfaces[(propState << 1)]);
Tdebug("LoadProps.txt", "Killing LowRes Background %s state %d in %d", pProp->GetName(), s, m_propSurfaces[(propState << 1)]);
m_propSurfaces[(propState << 1)] = 0;
}
if (m_propSurfaces[(propState << 1) + 1]) {
surface_manager->Kill_surface(m_propSurfaces[(propState << 1) + 1]);
Tdebug("LoadProps.txt", "Killing LowRes Foreground %s state %d in %d", pProp->GetName(), s, m_propSurfaces[(propState << 1) + 1]);
m_propSurfaces[(propState << 1) + 1] = 0;
}
propState++;
}
// Now try to creat it all at high res
m_propResolutions[p] = 1;
propState = m_propSurfaceIds[p];
for (s = 0; s < stateQty; s++) {
// Get this prop state
pcPropRGBState *pState = pProp->GetState(s);
// Does it have any background tiles for this state ?
if (pState->GetHRBgTileQty() > 0) {
// Create a surface for bg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("hb%s(%d)", pProp->GetName(), s), pState->GetHRBgSurfaceWidth(),
pState->GetHRBgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0) {
m_propResolutions[p] = 0;
break;
}
Tdebug("LoadProps.txt", "HighRes Background %s state %d in %d", pProp->GetName(), s, sid);
m_propSurfaces[propState << 1] = sid;
}
// Does it have any foreground tiles for this state ?
if (pState->GetHRFgTileQty() > 0) {
// Create a surface for fg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("hf%s(%d)", pProp->GetName(), s), pState->GetHRFgSurfaceWidth(),
pState->GetHRFgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0) {
m_propResolutions[p] = 0;
break;
}
Tdebug("LoadProps.txt", "HighRes Foreground %s state %d in %d", pProp->GetName(), s, sid);
m_propSurfaces[(propState << 1) + 1] = sid;
}
propState++;
}
// Did it all fit ok ?
if (m_propResolutions[p] == 0) {
// No.... back to low res then. Delete all the surfaces we did create
propState = m_propSurfaceIds[p];
for (s = 0; s < stateQty; s++) {
if (m_propSurfaces[(propState << 1)]) {
surface_manager->Kill_surface(m_propSurfaces[(propState << 1)]);
Tdebug("LoadProps.txt", "Killing HighRes Background %s state %d in %d", pProp->GetName(), s, m_propSurfaces[(propState << 1)]);
m_propSurfaces[(propState << 1)] = 0;
}
if (m_propSurfaces[(propState << 1) + 1]) {
surface_manager->Kill_surface(m_propSurfaces[(propState << 1) + 1]);
Tdebug("LoadProps.txt", "Killing HighRes Foreground %s state %d in %d", pProp->GetName(), s, m_propSurfaces[(propState << 1) + 1]);
m_propSurfaces[(propState << 1) + 1] = 0;
}
propState++;
}
// No.... back to low res then. Delete all the surfaces we did create
propState = m_propSurfaceIds[p];
for (s = 0; s < stateQty; s++) {
// Get this prop state
pcPropRGBState *pState = pProp->GetState(s);
// Does it have any background tiles for this state ?
if (pState->GetLRBgTileQty() > 0) {
// Create a surface for bg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("lb%s(%d)", pProp->GetName(), s), pState->GetLRBgSurfaceWidth(),
pState->GetLRBgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0)
Fatal_error("Out of video memory trying to load %s frame %d", pProp->GetName(), s);
Tdebug("LoadProps.txt", "LowRes Background %s state %d in %d", pProp->GetName(), s, sid);
m_propSurfaces[propState << 1] = sid;
}
// Does it have any foreground tiles for this state ?
if (pState->GetLRFgTileQty() > 0) {
// Create a surface for fg prop state
uint32 sid = surface_manager->Create_new_surface(pxVString("lf%s(%d)", pProp->GetName(), s), pState->GetLRFgSurfaceWidth(),
pState->GetLRFgSurfaceHeight(), VIDEO);
// Did it fit in video memory ?
if (sid == 0)
Fatal_error("Out of video memory trying to load %s frame %d", pProp->GetName(), s);
Tdebug("LoadProps.txt", "LowRes Foreground %s state %d in %d", pProp->GetName(), s, sid);
m_propSurfaces[(propState << 1) + 1] = sid;
}
propState++;
}
}
}
// Now fill in all the prop surfaces
for (p = 0; p < propQty; p++) {
// Get this prop
pcPropRGB *pProp = propFile->GetProp(p);
// How many states does it have ?
uint32 stateQty = pProp->GetStateQty();
// Find the surfaces for this prop
uint32 propState = m_propSurfaceIds[p];
// Load them all
for (s = 0; s < stateQty; s++) {
pcPropRGBState *pState = pProp->GetState(s);
// Get the palette for this prop state
uint32 *palPtr = pState->GetPalette();
// Which surface did we create for this prop state
uint32 sid = m_propSurfaces[(propState << 1)];
// Does this prop have a background ?
if (sid) {
// Set the colour key for the surface
surface_manager->Set_transparent_colour_key(sid, 0x00ff00ff);
// Fill the surface with the transparent colour
surface_manager->Fill_surface(sid, 0x00ff00ff);
// Lock the surface so we can decompress into it
uint32 *safe_ad = (uint32 *)surface_manager->Lock_surface(sid);
uint32 pitch = surface_manager->Get_pitch(sid) >> 2;
// Now decode either 32 bit
uint8 *pRle;
uint32 y;
uint32 xcount;
if (m_propResolutions[p]) {
pRle = pState->GetHRBgRlePtr();
y = pState->GetHRBgSurfaceHeight();
xcount = pState->GetHRBgSurfaceWidth();
} else {
pRle = pState->GetLRBgRlePtr();
y = pState->GetLRBgSurfaceHeight();
xcount = pState->GetLRBgSurfaceWidth();
}
for (; y; y--) {
uint32 count = xcount;
uint32 *rowAd = safe_ad;
while (count) {
count -= *pRle;
rowAd += *pRle;
pRle++;
uint8 c2 = *pRle++;
count -= c2;
while (c2) {
c2--;
*rowAd++ = palPtr[*pRle++];
}
}
safe_ad += pitch;
}
// unlock the surface
surface_manager->Unlock_surface(sid);
}
// Which surface did we create for this prop state
sid = m_propSurfaces[(propState << 1) + 1];
// Does this prop have a background ?
if (sid) {
// Set the colour key for the surface
surface_manager->Set_transparent_colour_key(sid, 0x00ff00ff);
// Fill the surface with the transparent colour
surface_manager->Fill_surface(sid, 0x00ff00ff);
// Lock the surface so we can decompress into it
uint32 *safe_ad = (uint32 *)surface_manager->Lock_surface(sid);
uint32 pitch = surface_manager->Get_pitch(sid) >> 2;
// Now decode either 32 bit
uint8 *pRle;
uint32 y;
uint32 xcount;
if (m_propResolutions[p]) {
pRle = pState->GetHRFgRlePtr();
y = pState->GetHRFgSurfaceHeight();
xcount = pState->GetHRFgSurfaceWidth();
} else {
pRle = pState->GetLRFgRlePtr();
y = pState->GetLRFgSurfaceHeight();
xcount = pState->GetLRFgSurfaceWidth();
}
for (; y; y--) {
uint32 count = xcount;
uint32 *rowAd = safe_ad;
while (count) {
count -= *pRle;
rowAd += *pRle;
pRle++;
uint8 c2 = *pRle++;
count -= c2;
while (c2) {
c2--;
*rowAd++ = palPtr[*pRle++];
}
}
safe_ad += pitch;
}
// unlock the surface
surface_manager->Unlock_surface(sid);
}
propState++;
}
}
}
void _set::RefreshBackdrop() {
RECT destRect = full_rect;
RECT sourceRect = full_rect;
// Update the screen rects for shake screen
ShakeRects(sourceRect, destRect);
// And blit
surface_manager->Blit_surface_to_surface(bg_buffer_id, working_buffer_id, &sourceRect, &destRect);
}
void _set::Set_draw(bool8 helper) {
uint32 p;
// Keep some space for the creation of hilite
static uint32 hilite_palette[256];
// Might need to create a surface for a hilited prop
uint32 hilite_sid = 0;
// Make sure the selected prop id thingy is up to date
MS->GetSelectedPropId();
// Rectangles
RECT sourceRect, destRect;
// Load the prop file
pcPropFile *propFile = GetProps();
// Check if we are using the sexy new file format
if (propFile->GetSchema() != PCPROP_SCHEMA)
Fatal_error("[SET_DRAW] - Invalid prop file with schema %d, should have schema %d", propFile->GetSchema(), PCPROP_SCHEMA);
// Get the prop quantity
uint32 propQty = propFile->GetPropQty();
// Draw each props background
for (p = 0; p < propQty; p++) {
// Get this prop
pcPropRGB *pProp = propFile->GetProp(p);
// Get the state for this prop
uint32 state = g_mission->session->Fetch_prop_state((char *)pProp->GetName());
// Get the state
pcPropRGBState *pState = pProp->GetState(state);
// Find the surface id for this state
uint32 sid = m_propSurfaces[(m_propSurfaceIds[p] + state) << 1];
// Draw it in the appropriate resolution
if (m_propResolutions[p]) {
// How many tiles to draw ?
uint32 tileQty = pState->GetHRBgTileQty();
// Get a pointer to the tile rectangles
RECT *pTileRects = pState->GetTileRects() + ((pState->GetLRBgTileQty() + pState->GetLRFgTileQty()) << 1);
// Draw the background tiles first
for (uint32 t = 0; (sid != 0) && (t < tileQty); t++) {
// Sort out transparent blit flag - no transparency if frag view is on
uint32 flag = (helper) ? 0 : DDBLT_KEYSRC;
// Sort out the source and destination rectangles
sourceRect = *pTileRects++;
destRect = *pTileRects++;
// Update the screen rects for shake screen
if (ShakePropRects(destRect, sourceRect)) {
// Do the blit
surface_manager->Blit_surface_to_surface(sid, working_buffer_id, &sourceRect, &destRect, flag);
}
}
} else {
// How many tiles to draw ?
uint32 tileQty = pState->GetLRBgTileQty();
// Get a pointer to the tile rectangles
RECT *pTileRects = pState->GetTileRects();
// Draw the background tiles first
for (uint32 t = 0; (sid != 0) && (t < tileQty); t++) {
// Sort out transparent blit flag - no transparency if frag view is on
uint32 flag = (helper) ? 0 : DDBLT_KEYSRC;
// Sort out the source and destination rectangles
sourceRect = *pTileRects++;
destRect = *pTileRects++;
// Update the screen rects for shake screen
if (ShakePropRects(destRect, sourceRect)) {
// Do the blit
surface_manager->Blit_surface_to_surface(sid, working_buffer_id, &sourceRect, &destRect, flag);
}
}
}
}
// Now draw each props foreground
for (p = 0; p < propQty; p++) {
// Get this prop
pcPropRGB *pProp = propFile->GetProp(p);
// Get the state for this prop
uint32 state = g_mission->session->Fetch_prop_state((char *)pProp->GetName());
// Get the state
pcPropRGBState *pState = pProp->GetState(state);
// Which surface is it in ?
uint32 sid = m_propSurfaces[((m_propSurfaceIds[p] + state) << 1) + 1];
// Draw it in the appropriate resolution
if (m_propResolutions[p]) {
// How many tiles to draw ?
uint32 tileQty = pState->GetHRFgTileQty();
// Get a pointer to the foreground tile rectangles
RECT *pTileRects = pState->GetTileRects() + ((pState->GetHRBgTileQty() + pState->GetLRBgTileQty() + pState->GetLRFgTileQty()) << 1);
// Is this prop selected
if ((tileQty != 0) && MS->IsPropSelected((char *)pProp->GetName())) {
// Get the rgb highlite multipliers ready for mmx ing
u_char multiplier[8] = {0, 0, 0, 0, 0, 0, 0, 0};
MS->GetSelectedPropRGB(multiplier[0], multiplier[2], multiplier[4]);
// Hilite the palette
#if 1
// 32-bit BGR pixel
uint8 *pixel = (uint8 *)&hilite_palette;
for (int c = 0; c < 256; c++) {
// Multiply from RGB components
for (int i = 0; i < 3; i++) {
pixel[i] = (pixel[i] * multiplier[i * 2]) >> 7;
}
pixel += 4;
}
#else
// Get a pointer to the palettte
uint32 *palPtr = pState->GetPalette();
_asm {
; // Load the counters and pointers
mov ecx, 256
mov esi, palPtr
lea edi, hilite_palette
; // Load the MMX multiplier
movq MM0, [multiplier]
sub esi, 4
sub edi, 4
; // Clear an MMX register to use with the unpack instruction
psrlw MM1, 16
prop_palette_hilite_label1:
movd MM2, [esi+ecx*4]
; // unpack the colour
punpcklbw MM2, MM1
; // Multiply the colour by the multiplier
pmullw MM2, MM0
; // Scale it back
psrlw MM2, 7
; // Re pack the colour back to bytes
packuswb MM2, MM1
; // Now store this new colour
movd [edi+ecx*4], MM2
; // Decrement the counter an off again
dec ecx
; // Are we finished ?
jne prop_palette_hilite_label1
; // finshed !
emms
}
#endif
// Create a surface for this hilited prop state
sid = hilite_sid = surface_manager->Create_new_surface("hilite_prop", pState->GetHRFgSurfaceWidth(), pState->GetHRFgSurfaceHeight(), EITHER);
// Set the colour key for the surface
surface_manager->Set_transparent_colour_key(hilite_sid, 0x00ff00ff);
// Fill the surface with the transparent colour
surface_manager->Fill_surface(hilite_sid, 0x00ff00ff);
// Lock the surface so we can decompress into it
uint8 *safe_ad = (uint8 *)surface_manager->Lock_surface(hilite_sid);
uint32 pitch = surface_manager->Get_pitch(hilite_sid);
// Now decode 32 bit
uint8 *pRle = pState->GetHRFgRlePtr();
uint32 *ad = (uint32 *)safe_ad;
for (int y = pState->GetHRFgSurfaceHeight(); y; y--) {
uint32 count = pState->GetHRFgSurfaceWidth();
uint32 *rowAd = ad;
while (count) {
count -= *pRle;
rowAd += *pRle;
pRle++;
uint8 c2 = *pRle++;
count -= c2;
while (c2) {
c2--;
*rowAd++ = hilite_palette[*pRle++];
}
}
ad += pitch / 4;
}
// unlock the surface
surface_manager->Unlock_surface(hilite_sid);
}
// Now draw the foreground tiles
for (uint32 t = 0; (sid != 0) && (t < tileQty); t++) {
// Sort out transparent blit flag - no transparency if frag view is on
uint32 flag = (helper) ? 0 : DDBLT_KEYSRC;
// Sort out the source and destination rectangles
sourceRect = *pTileRects++;
destRect = *pTileRects++;
// Update the screen rects for shake screen
if (ShakePropRects(destRect, sourceRect)) {
// Do the blit
surface_manager->Blit_surface_to_surface(sid, working_buffer_id, &sourceRect, &destRect, flag);
}
}
} else {
// How many tiles to draw ?
uint32 tileQty = pState->GetLRFgTileQty();
// Get a pointer to the foreground tile rectangles
RECT *pTileRects = pState->GetTileRects() + (pState->GetLRBgTileQty() << 1);
// Is this prop selected
if ((tileQty != 0) && MS->IsPropSelected((char *)pProp->GetName())) {
// Get the rgb highlite multipliers ready for mmx ing
u_char multiplier[8] = {0, 0, 0, 0, 0, 0, 0, 0};
MS->GetSelectedPropRGB(multiplier[0], multiplier[2], multiplier[4]);
// Hilite the palette
#if 1
// 32-bit BGR pixel
uint8 *pixel = (uint8 *)&hilite_palette;
for (int c = 0; c < 256; c++) {
// Multiply from RGB components
for (int i = 0; i < 3; i++) {
pixel[i] = (pixel[i] * multiplier[i * 2]) >> 7;
}
pixel += 4;
}
#else
// Get a pointer to the palettte
uint32 *palPtr = pState->GetPalette();
_asm {
; // Load the counters and pointers
mov ecx, 256
mov esi, palPtr
lea edi, hilite_palette
; // Load the MMX multiplier
movq MM0, [multiplier]
sub esi, 4
sub edi, 4
; // Clear an MMX register to use with the unpack instruction
psrlw MM1, 16
prop_palette_hilite_label2:
movd MM2, [esi+ecx*4]
; // unpack the colour
punpcklbw MM2, MM1
; // Multiply the colour by the multiplier
pmullw MM2, MM0
; // Scale it back
psrlw MM2, 7
; // Re pack the colour back to bytes
packuswb MM2, MM1
; // Now store this new colour
movd [edi+ecx*4], MM2
; // Decrement the counter an off again
dec ecx
; // Are we finished ?
jne prop_palette_hilite_label2
; // finshed !
emms
}
#endif
// Create a surface for this hilited prop state
sid = hilite_sid = surface_manager->Create_new_surface("hilite_prop", pState->GetLRFgSurfaceWidth(), pState->GetLRFgSurfaceHeight(), EITHER);
// Set the colour key for the surface
surface_manager->Set_transparent_colour_key(hilite_sid, 0x00ff00ff);
// Fill the surface with the transparent colour
surface_manager->Fill_surface(hilite_sid, 0x00ff00ff);
// Lock the surface so we can decompress into it
uint8 *safe_ad = (uint8 *)surface_manager->Lock_surface(hilite_sid);
uint32 pitch = surface_manager->Get_pitch(hilite_sid);
// Now decode 32 bit
uint8 *pRle = pState->GetLRFgRlePtr();
uint32 *ad = (uint32 *)safe_ad;
for (int y = pState->GetLRFgSurfaceHeight(); y; y--) {
uint32 count = pState->GetLRFgSurfaceWidth();
uint32 *rowAd = ad;
while (count) {
count -= *pRle;
rowAd += *pRle;
pRle++;
uint8 c2 = *pRle++;
count -= c2;
while (c2) {
c2--;
*rowAd++ = hilite_palette[*pRle++];
}
}
ad += pitch / 4;
}
// unlock the surface
surface_manager->Unlock_surface(hilite_sid);
}
// Now draw the foreground tiles
for (uint32 t = 0; (sid != 0) && (t < tileQty); t++) {
// Sort out transparent blit flag - no transparency if frag view is on
uint32 flag = (helper) ? 0 : DDBLT_KEYSRC;
// Sort out the source and destination rectangles
sourceRect = *pTileRects++;
destRect = *pTileRects++;
// Update the screen rects for shake screen
if (ShakePropRects(destRect, sourceRect)) {
// Do the blit
surface_manager->Blit_surface_to_surface(sid, working_buffer_id, &sourceRect, &destRect, flag);
}
}
}
}
if (hilite_sid)
surface_manager->Kill_surface(hilite_sid);
DrawSparkles();
}
void _set::InitWeather(int type, int particleQty, int lightning, int windX, int windY, int windZ) {
m_wType = type;
m_wLightningTimer = 0;
m_wWindX = windX;
m_wWindY = windY;
m_wWindZ = windZ;
m_wParticleQty = particleQty;
m_wLightning = lightning;
if (m_wParticleQty > WEATHER_MAX_PARTICLES)
m_wParticleQty = WEATHER_MAX_PARTICLES;
for (int i = WEATHER_MAX_PARTICLES; i >= 0; i--) {
m_wParticleX[i] = (int16)((g_icb->getRandomSource()->getRandomNumber(WEATHER_SCREEN_WIDTH - 1)) - WEATHER_HALF_SCREEN_WIDTH);
m_wParticleY[i] = (int16)((g_icb->getRandomSource()->getRandomNumber(WEATHER_SCREEN_HEIGHT - 1)) - WEATHER_HALF_SCREEN_HEIGHT);
m_wParticleZ[i] = (int16)((g_icb->getRandomSource()->getRandomNumber(WEATHER_SCREEN_DEPTH - 1)) - WEATHER_HALF_SCREEN_DEPTH);
if (m_wType == WEATHER_RAIN) {
m_wParticleDX[i] = (int8)0;
m_wParticleDY[i] = (int8)((g_icb->getRandomSource()->getRandomNumber(50 - 1)) + 40);
m_wParticleDZ[i] = (int8)0;
} else if (m_wType == WEATHER_SNOW) {
m_wParticleDX[i] = (int8)((g_icb->getRandomSource()->getRandomNumber(20 - 1)) - 10); // left/right // -10 - 10
m_wParticleDY[i] = (int8)((g_icb->getRandomSource()->getRandomNumber(10 - 1))); // downwards // 10 - 0
m_wParticleDZ[i] = (int8)((g_icb->getRandomSource()->getRandomNumber(20 - 1)) - 10); // in out... // -10 - 10
}
}
}
void _set::DrawSparkles() {
static unsigned char step = 0;
static uint32 animation[] = {1024 * 0, 1024 * 1, 1024 * 2, 1024 * 3, 1024 * 4, 1024 * 5, 1024 * 2, 1024 * 3, 1024 * 4, 1024 * 5, 1024 * 1, 1024 * 0};
step++;
if (step > 32)
step = 0;
if (step > 11)
return;
for (uint i = 0; i < MS->total_objects; i++) {
_logic *L = MS->logic_structs[i];
// if object visable to camera
if ((L->sparkleOn) && (MS->Object_visible_to_camera(i))) {
PXvector screen;
bool8 isShown;
PXvector position;
L->GetPosition(position.x, position.y, position.z);
PXvector pos;
L->GetPosition(pos.x, pos.y, pos.z);
position.x += L->sparkleX;
position.y += L->sparkleY;
position.z += L->sparkleZ;
// get screen position...
PXWorldToFilm(position, GetCamera(), isShown, screen);
// on screen, okay...
if (isShown) {
uint32 *pPixels = (uint32 *)surface_manager->Lock_surface(working_buffer_id);
uint32 pitch = surface_manager->Get_pitch(working_buffer_id);
uint32 offset = ((pitch >> 2) * (225 - (int)screen.y)) + (int)screen.x + 305;
uint32 *colours = &sparkle_bmp[animation[step]];
uint32 *sPtr = pPixels + offset;
#if 1
uint8 *pixels = (uint8 *)&sPtr;
uint8 *colors = (uint8 *)&colours;
for (uint32 lines = 0; lines < 32; lines++) {
for (int xPos = 0; xPos < 32; xPos++) {
// 32-bit BGRA pixel
uint8 *pixel = &pixels[xPos * 4];
// Add BGRA components
for (int p = 0; p < 4; p++) {
pixel[p] = MIN(255, pixel[p] + colors[p]);
}
}
// Next line
pixels += pitch;
}
#else
__asm {
mov edi, sPtr
mov esi, colours
pxor MM2, MM2
mov edx, 32
loopy_loops:
mov ecx, 32
mov ebx, edi
loopx_loops:
movd MM1, [edi]
movd MM0, [esi]
paddusb MM0, MM1
movd [edi], MM0
add edi, 4
add esi, 4
dec ecx
jne loopx_loops
mov edi, ebx
add edi, pitch
dec edx
jne loopy_loops
emms
}
#endif
surface_manager->Unlock_surface(working_buffer_id);
}
}
}
return;
}
void _set::DrawWeather() {
// Get the camera info that we need
PXcamera &camera = GetCamera();
float myCos = camera.view.m[1][1] / -4096.0f;
float mySin = camera.view.m[2][1] / -4096.0f;
int d = (camera.focLen) / 4;
int a = 512;
uint32 rands[WEATHER_MAX_PARTICLES / 32];
int i;
// initialise random bits (for movement)
for (i = 0; i < (WEATHER_MAX_PARTICLES / 32); i++)
rands[i] = RAND_32BIT;
if (m_wType == WEATHER_RAIN) {
for (i = m_wParticleQty; i--;) {
// add velocity to position (+ extra wind)
m_wParticleX[i] = (int16)(m_wParticleX[i] + m_wWindX);
m_wParticleY[i] = (int16)(m_wParticleY[i] + m_wParticleDY[i] + m_wWindY);
m_wParticleZ[i] = (int16)(m_wParticleZ[i] + m_wWindZ);
// wrap around
if (m_wParticleX[i] > WEATHER_HALF_SCREEN_WIDTH) {
m_wParticleX[i] -= WEATHER_SCREEN_WIDTH;
} else if (m_wParticleX[i] < -WEATHER_HALF_SCREEN_WIDTH) {
m_wParticleX[i] += WEATHER_SCREEN_WIDTH;
}
if (m_wParticleY[i] > WEATHER_HALF_SCREEN_HEIGHT) {
m_wParticleY[i] -= WEATHER_SCREEN_HEIGHT;
} else if (m_wParticleY[i] < -WEATHER_HALF_SCREEN_HEIGHT) {
m_wParticleY[i] += WEATHER_SCREEN_HEIGHT;
}
if (m_wParticleZ[i] > WEATHER_HALF_SCREEN_DEPTH) {
m_wParticleZ[i] -= WEATHER_SCREEN_DEPTH;
} else if (m_wParticleZ[i] < -WEATHER_HALF_SCREEN_DEPTH) {
m_wParticleZ[i] += WEATHER_SCREEN_DEPTH;
}
int16 sx, sy, ss, sx2, sy2, ss2; // screen x, screen y, screen size,
// rotate around camera ypan
int pX = m_wParticleX[i];
int pY = m_wParticleY[i];
int pZ1 = m_wParticleZ[i];
int pX2 = pX - m_wParticleDX[i] - m_wWindX;
int pY2 = pY - m_wParticleDY[i] - m_wWindY;
int pZ2 = pZ1 - m_wParticleDZ[i] - m_wWindZ;
ss = (int16)(myCos * pZ1 + mySin * pY);
ss2 = (int16)(myCos * pZ2 + mySin * pY2);
if ((ss + a) != 0 && (ss2 + a) != 0) {
sx = (int16)(WEATHER_HALF_SCREEN_WIDTH + (pX * d) / (ss + a)); // + (((128+256+ss)*pX)>>9));
sy = (int16)(WEATHER_HALF_SCREEN_HEIGHT + ((int)(myCos * pY - mySin * pZ1) * d) / (ss + a));
sx2 = (int16)(WEATHER_HALF_SCREEN_WIDTH + (pX2 * d) / (ss2 + a)); // + (((128+256+ss)*pX)>>9));
sy2 = (int16)(WEATHER_HALF_SCREEN_HEIGHT + ((int)(myCos * pY2 - mySin * pZ2) * d) / (ss2 + a));
// setup semi trans (possibly) polygon...
// and draw
int16 ssCol, ss2Col;
ssCol = (int16)((-ss + 256) / 32); // 0-16
// check for negative (should NEVER happen)
if (ssCol < 0)
ssCol = 0;
ss2Col = (int16)((-ss2 + 256) / 32); // 0-16
// check for negative (could happen...)
if (ss2Col < 0)
ss2Col = 0;
ssCol += 6; // 8-24
ss2Col += 8; // 10-26
_rgb c0, c1;
c0.red = c0.green = c0.blue = c0.alpha = (uint8)ssCol;
c1.red = c1.green = c1.blue = c1.alpha = (uint8)ss2Col;
AdditiveGouraudLine(sx, sy, c0, sx2, sy2, c1, working_buffer_id);
}
}
} else if (m_wType == WEATHER_SNOW) {
uint32 *pPixels = (uint32 *)surface_manager->Lock_surface(working_buffer_id);
uint32 pitch = surface_manager->Get_pitch(working_buffer_id) >> 2;
// wind acceleration for this frame
int dx = (g_icb->getRandomSource()->getRandomNumber(3 - 1)) - 1; // -1 - 1
int dy = (g_icb->getRandomSource()->getRandomNumber(4 - 1)) - 1; // -1 - 2
int dz = (g_icb->getRandomSource()->getRandomNumber(3 - 1)) - 1; // -1 - 1
for (i = m_wParticleQty; i--;) {
// adjust velocities (it is a random test as to weather any particular m_wParticle picks up this change
if (RAND_BIT(i))
m_wParticleDX[i] = (int8)(m_wParticleDX[i] + dx);
if (RAND_BIT((i + 7) % WEATHER_MAX_PARTICLES))
m_wParticleDY[i] = (int8)(m_wParticleDY[i] + dy);
if (RAND_BIT((i + 17) % WEATHER_MAX_PARTICLES))
m_wParticleDZ[i] = (int8)(m_wParticleDZ[i] + dz);
// check limits on velocities
if (m_wParticleDX[i] > 5) // -5 - 5
m_wParticleDX[i] = 5;
else if (m_wParticleDX[i] < -5)
m_wParticleDX[i] = -5;
if (m_wParticleDY[i] > 9) // -9 - 1
m_wParticleDY[i] = 9;
else if (m_wParticleDY[i] < -1)
m_wParticleDY[i] = -1;
if (m_wParticleDZ[i] > 5) // -5 - 5
m_wParticleDZ[i] = 5;
else if (m_wParticleDZ[i] < -5)
m_wParticleDZ[i] = -5;
// add velocity to position (+ extra wind)
m_wParticleX[i] = (int16)(m_wParticleX[i] + m_wParticleDX[i] + m_wWindX);
m_wParticleY[i] = (int16)(m_wParticleY[i] + m_wParticleDY[i] + m_wWindY);
m_wParticleZ[i] = (int16)(m_wParticleZ[i] + m_wParticleDZ[i] + m_wWindZ);
// wrap around
if (m_wParticleX[i] >= WEATHER_HALF_SCREEN_WIDTH) {
m_wParticleX[i] -= WEATHER_SCREEN_WIDTH;
} else if (m_wParticleX[i] <= -WEATHER_HALF_SCREEN_WIDTH) {
m_wParticleX[i] += WEATHER_SCREEN_WIDTH;
}
if (m_wParticleY[i] >= WEATHER_HALF_SCREEN_HEIGHT) {
m_wParticleY[i] -= WEATHER_SCREEN_HEIGHT;
} else if (m_wParticleY[i] <= -WEATHER_HALF_SCREEN_HEIGHT) {
m_wParticleY[i] += WEATHER_SCREEN_HEIGHT;
}
if (m_wParticleZ[i] >= WEATHER_HALF_SCREEN_DEPTH) {
m_wParticleZ[i] -= WEATHER_SCREEN_DEPTH;
} else if (m_wParticleZ[i] <= -WEATHER_HALF_SCREEN_DEPTH) {
m_wParticleZ[i] += WEATHER_SCREEN_DEPTH;
}
int32 sx, sy, ss; // screen x, screen y, screen size,
int pX = m_wParticleX[i];
int pY = m_wParticleY[i];
int pZ1 = m_wParticleZ[i];
ss = (int16)(myCos * pZ1 + mySin * pY);
if ((ss + a) != 0) {
sx = (int16)(WEATHER_HALF_SCREEN_WIDTH + (pX * d) / (ss + a)); // + (((128+256+ss)*pX)>>9));
sy = (int16)(WEATHER_HALF_SCREEN_HEIGHT + ((int)(myCos * pY - mySin * pZ1) * d) / (ss + a));
uint8 tCol = (uint8)(40 + (ss >> 1));
uint32 offset = (pitch * sy) + sx;
if ((sx >= 0) && (sy >= 0) && (sy < 478) && (sx < 638)) {
if (ss < 0) {
uint8 *sPtr = (uint8 *)(pPixels + offset);
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
} else {
uint8 *sPtr = (uint8 *)(pPixels + offset);
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
sPtr = (uint8 *)(pPixels + offset + pitch);
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
*sPtr = ((*sPtr + tCol) < 255) ? (uint8)((*sPtr) + tCol) : (uint8)255;
sPtr++;
}
}
}
}
surface_manager->Unlock_surface(working_buffer_id);
}
// Add lightning
if (m_wLightning) {
if (m_wLightningTimer) {
m_wLightningTimer--;
if (m_wLightningTimer == 0) {
surface_manager->FadeMode() = 0;
} else {
surface_manager->FadeAlpha() = (uint8)(surface_manager->FadeAlpha() - 0x20);
surface_manager->FadeToRed() /= 2;
surface_manager->FadeToGreen() /= 2;
surface_manager->FadeToBlue() /= 2;
}
} else {
if (g_icb->getRandomSource()->getRandomNumber(80 - 1) == 0) {
if (surface_manager->FadeMode() == 0) {
m_wLightningTimer = g_icb->getRandomSource()->getRandomNumber(10 - 1) + 2;
surface_manager->FadeMode() = 1;
surface_manager->FadeToRed() = 0xa0;
surface_manager->FadeToGreen() = 0xb0;
surface_manager->FadeToBlue() = 0xff;
surface_manager->FadeFromRed() = 0xa0;
surface_manager->FadeFromGreen() = 0xb0;
surface_manager->FadeFromBlue() = 0xff;
surface_manager->FadeAlpha() = 0xff;
}
}
}
}
}
void _set::HackMakeCamera() {
float *oldCameraData;
if (m_currentCamera->id == PCSETFILE_ID)
oldCameraData = (float *)(((uint8 *)m_currentCamera) + m_currentCamera->cameraOffset);
else
oldCameraData = (float *)rs_bg->Res_open(rvcam_file_name, rvcam_file_hash, set_cluster, set_cluster_hash, 0);
/* Old Camera Format
-------------------
int is_shooting; // flag: 0 means 'does not record an image', 1 means 'does'.
float pos.x
float pos.y
float pos.z
float orient.ex.x
float orient.ex.y
float orient.ex.z
float orient.ey.x
float orient.ey.y
float orient.ey.z
float orient.ez.x
float orient.ez.y
float orient.ez.z
float film.foclen
int film.pos.x
int film.pos.y
int film.size.x
int film.size.y
ADimage * imageptr; // Address of pixelmap.
*/
const float SCALE_TOLERANCE = 1.0e-3f;
const float UNIT_SCALE = 1.0f;
// Find scalings in the input matrix
float matrix[3][3];
matrix[0][0] = *(oldCameraData + 4);
matrix[0][1] = *(oldCameraData + 5);
matrix[0][2] = *(oldCameraData + 6);
matrix[1][0] = *(oldCameraData + 7);
matrix[1][1] = *(oldCameraData + 8);
matrix[1][2] = *(oldCameraData + 9);
matrix[2][0] = *(oldCameraData + 10);
matrix[2][1] = *(oldCameraData + 11);
matrix[2][2] = *(oldCameraData + 12);
float scalex = (float)sqrt(matrix[0][0] * matrix[0][0] + matrix[1][0] * matrix[1][0] + matrix[2][0] * matrix[2][0]);
float scaley = (float)sqrt(matrix[0][1] * matrix[0][1] + matrix[1][1] * matrix[1][1] + matrix[2][1] * matrix[2][1]);
float scalez = (float)sqrt(matrix[0][2] * matrix[0][2] + matrix[1][2] * matrix[1][2] + matrix[2][2] * matrix[2][2]);
if (fabs(scalex - scaley) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scalex != scaley %f != %f", scalex, scaley);
}
if (fabs(scalex - scalez) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scalex != scalez %f != %f", scalex, scalez);
}
if (fabs(scaley - scalez) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scaley != scalez %f != %f", scaley, scalez);
}
// Remove the x-scaling
if (fabs(scalex - UNIT_SCALE) > SCALE_TOLERANCE) {
matrix[0][0] /= scalex;
matrix[1][0] /= scalex;
matrix[2][0] /= scalex;
}
// Remove the y-scaling
if (fabs(scaley - UNIT_SCALE) > SCALE_TOLERANCE) {
matrix[0][1] /= scaley;
matrix[1][1] /= scaley;
matrix[2][1] /= scaley;
}
// Remove the z-scaling
if (fabs(scalez - UNIT_SCALE) > SCALE_TOLERANCE) {
matrix[0][2] /= scalez;
matrix[1][2] /= scalez;
matrix[2][2] /= scalez;
}
// check the scalings in the input matrix
scalex = (float)sqrt(matrix[0][0] * matrix[0][0] + matrix[1][0] * matrix[1][0] + matrix[2][0] * matrix[2][0]);
scaley = (float)sqrt(matrix[0][1] * matrix[0][1] + matrix[1][1] * matrix[1][1] + matrix[2][1] * matrix[2][1]);
scalez = (float)sqrt(matrix[0][2] * matrix[0][2] + matrix[1][2] * matrix[1][2] + matrix[2][2] * matrix[2][2]);
if (fabs(scalex - scaley) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scalex != scaley %f != %f", scalex, scaley);
}
if (fabs(scalex - scalez) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scalex != scalez %f != %f", scalex, scalez);
}
if (fabs(scaley - scalez) > SCALE_TOLERANCE) {
Fatal_error("ERROR : Camera scaley != scalez %f != %f", scaley, scalez);
}
m_camera.view.m[0][0] = (int16)(matrix[0][0] * ONE);
m_camera.view.m[0][1] = (int16)(matrix[0][1] * ONE);
m_camera.view.m[0][2] = (int16)(matrix[0][2] * ONE);
m_camera.view.m[1][0] = (int16)(-matrix[1][0] * ONE);
m_camera.view.m[1][1] = (int16)(-matrix[1][1] * ONE);
m_camera.view.m[1][2] = (int16)(-matrix[1][2] * ONE);
m_camera.view.m[2][0] = (int16)(-matrix[2][0] * 4 * ONE);
m_camera.view.m[2][1] = (int16)(-matrix[2][1] * 4 * ONE);
m_camera.view.m[2][2] = (int16)(-matrix[2][2] * 4 * ONE);
int TR2vx = (int)(-(*(oldCameraData + 1)) * m_camera.view.m[0][0] - (*(oldCameraData + 2)) * m_camera.view.m[0][1] - (*(oldCameraData + 3)) * m_camera.view.m[0][2]);
int TR2vy = (int)(-(*(oldCameraData + 1)) * m_camera.view.m[1][0] - (*(oldCameraData + 2)) * m_camera.view.m[1][1] - (*(oldCameraData + 3)) * m_camera.view.m[1][2]);
int TR2vz = (int)(-(*(oldCameraData + 1)) * m_camera.view.m[2][0] - (*(oldCameraData + 2)) * m_camera.view.m[2][1] - (*(oldCameraData + 3)) * m_camera.view.m[2][2]);
// Multiply the translation by rotation matrix
// to get into how PSX does the projection
// e.g. rotate by matrix then add translation
m_camera.view.t[0] = TR2vx >> 12;
m_camera.view.t[1] = TR2vy >> 12;
m_camera.view.t[2] = TR2vz >> 12;
m_camera.focLen = (uint16)((*(oldCameraData + 13)) * -4.0);
gte_SetRotMatrix(&m_camera.view);
gte_SetTransMatrix(&m_camera.view);
int stheta = m_camera.view.m[0][2];
int ctheta = m_camera.view.m[0][0];
float fpan;
int scrnPan;
if (ctheta != 0) {
fpan = (float)atan((float)stheta / (float)ctheta) / (2.0f * M_PI);
scrnPan = (int)(fpan * ONE);
// second & third quadrant (90-270 degrees) : pan += 180 (pan is -ve(90-180), (180-270)+ve)
if (ctheta < 0)
scrnPan += ONE / 2;
} else {
// ctheta = 0
fpan = 1.0f / 4.0f;
scrnPan = (int)(fpan * ONE);
// -180 degrees
if (stheta <= 0)
scrnPan += (ONE / 2);
}
m_camera.pan = scrnPan;
}
// read in init values for set from file
void _set::LoadGFXInfo(Common::SeekableReadStream *stream) {
// TODO: Add a proper stream-read of the rects.
stream->read(&surface_manager->BorderRect(), sizeof(RECT)); // FIXME endian and alignment
// FIXME: Plug a deserializer into surface-manager directly instead of exposing these.
surface_manager->BorderRed() = stream->readByte();
surface_manager->BorderGreen() = stream->readByte();
surface_manager->BorderBlue() = stream->readByte();
surface_manager->BorderAlpha() = stream->readByte();
surface_manager->BorderMode() = stream->readUint32LE();
surface_manager->FadeMode() = stream->readUint32LE();
surface_manager->FadeToRed() = stream->readByte();
surface_manager->FadeToGreen() = stream->readByte();
surface_manager->FadeToBlue() = stream->readByte();
surface_manager->FadeFromRed() = stream->readByte();
surface_manager->FadeFromGreen() = stream->readByte();
surface_manager->FadeFromBlue() = stream->readByte();
surface_manager->FadeAlpha() = stream->readByte();
}
// write out current init values1 to file
void _set::SaveGFXInfo(Common::WriteStream *stream) {
// TODO: Refactor.
// FIXME HACK TODO: Don't write rects this way:
stream->write(&surface_manager->BorderRect(), sizeof(RECT));
stream->writeByte(surface_manager->BorderRed());
stream->writeByte(surface_manager->BorderGreen());
stream->writeByte(surface_manager->BorderBlue());
stream->writeByte(surface_manager->BorderAlpha());
stream->writeUint32LE(surface_manager->BorderMode());
stream->writeUint32LE(surface_manager->FadeMode());
stream->writeByte(surface_manager->FadeToRed());
stream->writeByte(surface_manager->FadeToGreen());
stream->writeByte(surface_manager->FadeToBlue());
stream->writeByte(surface_manager->FadeFromRed());
stream->writeByte(surface_manager->FadeFromGreen());
stream->writeByte(surface_manager->FadeFromBlue());
stream->writeByte(surface_manager->FadeAlpha());
}
} // End of namespace ICB