From 37d6410f37662c71c504cf5e8a495959aade6ee8 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sun, 26 Jul 2020 13:35:36 +0300 Subject: [PATCH 01/58] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index c3cbe69..3bce6d7 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,6 @@ inspired by OpenTomb project http://opentomb.github.io/ * [Discord channel](https://discord.gg/EF8JaQB) * [Tomb Raider Forums thread](http://www.tombraiderforums.com/showthread.php?t=216618) -## Roadmap -- graphics improvements -- bug fixes -- RELEASE 1 -- OpenLara 2... - ## Screenshots ![Waterfall](http://xproger.info/projects/OpenLara/shots/waterfall.jpg) ![Double-aim](http://xproger.info/projects/OpenLara/shots/multi-aim.jpg) From e7ffb928bf82f86dab6da8939d3c376b87ea65ac Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 12 Aug 2020 08:15:02 +0300 Subject: [PATCH 02/58] GBA initial commit --- src/platform/gba/Makefile | 167 +++++ src/platform/gba/OpenLara.sln | 31 + src/platform/gba/OpenLara.vcxproj | 163 +++++ src/platform/gba/common.h | 269 ++++++++ src/platform/gba/common.iwram.cpp | 993 ++++++++++++++++++++++++++++++ src/platform/gba/icon.png | Bin 0 -> 546 bytes src/platform/gba/main.cpp | 595 ++++++++++++++++++ src/platform/gba/profile.bat | 1 + src/platform/gba/sdiv32.s | 51 ++ src/platform/gba/udiv32.s | 79 +++ 10 files changed, 2349 insertions(+) create mode 100644 src/platform/gba/Makefile create mode 100644 src/platform/gba/OpenLara.sln create mode 100644 src/platform/gba/OpenLara.vcxproj create mode 100644 src/platform/gba/common.h create mode 100644 src/platform/gba/common.iwram.cpp create mode 100644 src/platform/gba/icon.png create mode 100644 src/platform/gba/main.cpp create mode 100644 src/platform/gba/profile.bat create mode 100644 src/platform/gba/sdiv32.s create mode 100644 src/platform/gba/udiv32.s diff --git a/src/platform/gba/Makefile b/src/platform/gba/Makefile new file mode 100644 index 0000000..2c9c2d0 --- /dev/null +++ b/src/platform/gba/Makefile @@ -0,0 +1,167 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/gba_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# INCLUDES is a list of directories containing extra header files +# DATA is a list of directories containing binary data +# GRAPHICS is a list of directories containing files to be processed by grit +# +# All directories are specified relative to the project directory where +# the makefile is found +# +#--------------------------------------------------------------------------------- +TARGET := OpenLara +BUILD := build +SOURCES := . +INCLUDES := include +DATA := data +MUSIC := + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -g -Wall -O3\ + -mcpu=arm7tdmi -mtune=arm7tdmi\ + -fomit-frame-pointer\ + -ffast-math\ + $(ARCH) + +CFLAGS += $(INCLUDE) + +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := -g $(ARCH) +LDFLAGS = -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# any extra libraries we wish to link with the project +#--------------------------------------------------------------------------------- +LIBS := -lmm -lgba + + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBGBA) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- + + +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/$(TARGET) + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) \ + $(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +ifneq ($(strip $(MUSIC)),) + export AUDIOFILES := $(foreach dir,$(notdir $(wildcard $(MUSIC)/*.*)),$(CURDIR)/$(MUSIC)/$(dir)) + BINFILES += soundbank.bin +endif + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES_BIN := $(addsuffix .o,$(BINFILES)) + +export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) + +export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) + +export INCLUDE := $(foreach dir,$(INCLUDES),-iquote $(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) + +.PHONY: $(BUILD) clean + +#--------------------------------------------------------------------------------- +$(BUILD): + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba + + +#--------------------------------------------------------------------------------- +else + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- + +$(OUTPUT).gba : $(OUTPUT).elf + +$(OUTPUT).elf : $(OFILES) + +$(OFILES_SOURCES) : $(HFILES) + +#--------------------------------------------------------------------------------- +# The bin2o rule should be copied and modified +# for each extension used in the data directories +#--------------------------------------------------------------------------------- + +#--------------------------------------------------------------------------------- +# rule to build soundbank from music files +#--------------------------------------------------------------------------------- +soundbank.bin soundbank.h : $(AUDIOFILES) +#--------------------------------------------------------------------------------- + @mmutil $^ -osoundbank.bin -hsoundbank.h + +#--------------------------------------------------------------------------------- +# This rule links in binary data with the .bin extension +#--------------------------------------------------------------------------------- +%.PHD.o %_PHD.h : %.PHD +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + + +-include $(DEPSDIR)/*.d + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/src/platform/gba/OpenLara.sln b/src/platform/gba/OpenLara.sln new file mode 100644 index 0000000..5cfa43b --- /dev/null +++ b/src/platform/gba/OpenLara.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1022 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenLara", "OpenLara.vcxproj", "{990C6F40-6226-4011-B52C-FF042EBB7F15}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Debug|x64.ActiveCfg = Debug|x64 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Debug|x64.Build.0 = Debug|x64 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Debug|x86.ActiveCfg = Debug|Win32 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Debug|x86.Build.0 = Debug|Win32 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Release|x64.ActiveCfg = Release|x64 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Release|x64.Build.0 = Release|x64 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Release|x86.ActiveCfg = Release|Win32 + {990C6F40-6226-4011-B52C-FF042EBB7F15}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8D133CA9-7AA0-4806-9B61-82E8A3044A15} + EndGlobalSection +EndGlobal diff --git a/src/platform/gba/OpenLara.vcxproj b/src/platform/gba/OpenLara.vcxproj new file mode 100644 index 0000000..fca9492 --- /dev/null +++ b/src/platform/gba/OpenLara.vcxproj @@ -0,0 +1,163 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + 15.0 + {990C6F40-6226-4011-B52C-FF042EBB7F15} + Win32Proj + OpenLara + 10.0.17763.0 + + + + Application + true + v141 + NotSet + + + Application + false + v141 + true + NotSet + + + Application + true + v141 + Unicode + + + Application + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level2 + Disabled + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level3 + Disabled + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level2 + MaxSpeed + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + Level3 + MaxSpeed + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + \ No newline at end of file diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h new file mode 100644 index 0000000..da6c4ed --- /dev/null +++ b/src/platform/gba/common.h @@ -0,0 +1,269 @@ +#ifndef H_COMMON +#define H_COMMON + +#ifdef _WIN32 +#define _CRT_SECURE_NO_WARNINGS +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#include +#include +#include +#include +#include + +//#define USE_MODE_5 + +#ifdef USE_MODE_5 + #define WIDTH 160 + #define HEIGHT 128 + #define FRAME_WIDTH 160 + #define FRAME_HEIGHT 128 + #define PIXEL_SIZE 1 +#else // MODE_4 + #define WIDTH 240 + #define HEIGHT 160 + #define FRAME_WIDTH 240 + #define FRAME_HEIGHT 160 + #define PIXEL_SIZE 2 +#endif + +#define WND_SCALE 4 + +typedef signed char int8; +typedef signed short int16; +typedef signed int int32; +typedef signed long long int64; +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef int16 Index; + +#define PI 3.14159265358979323846f +#define PIH (PI * 0.5f) +#define PI2 (PI * 2.0f) +#define DEG2RAD (PI / 180.0f) +#define RAD2DEG (180.0f / PI) + +#ifdef _WIN32 + extern uint8* LEVEL1_PHD; + + extern uint32 VRAM[WIDTH * HEIGHT]; + + #ifdef USE_MODE_5 + extern uint16 fb[WIDTH * HEIGHT]; + #else + extern uint8 fb[WIDTH * HEIGHT]; + #endif + + #define IWRAM_CODE + #define EWRAM_DATA + + #define dmaCopy(src,dst,size) memcpy(dst,src,size) + #define ALIGN4 + + struct ObjAffineSource { + int16 sX; + int16 sY; + uint16 theta; + }; + + struct ObjAffineDest { + int16 pa; + int16 pb; + int16 pc; + int16 pd; + }; + + static void ObjAffineSet(ObjAffineSource *source, ObjAffineDest *dest, int32 num, int32 offset) { + float ang = (source->theta >> 8) * PI / 128.0f; + + int32 c = int32(cosf(ang) * 16384.0f); + int32 s = int32(sinf(ang) * 16384.0f); + + dest->pa = ( source->sX * c) >> 14; + dest->pb = (-source->sX * s) >> 14; + dest->pc = ( source->sY * s) >> 14; + dest->pd = ( source->sY * c) >> 14; + } + +#else + #define ALIGN4 __attribute__ ((aligned (4))) + + extern uint32 fb; +#endif + +enum InputKey { + IK_UP, + IK_RIGHT, + IK_DOWN, + IK_LEFT, + IK_A, + IK_B, + IK_L, + IK_R, + IK_MAX +}; + +extern bool keys[IK_MAX]; + +struct Quad { + Index indices[4]; + uint16 flags; +}; + +struct Triangle { + Index indices[3]; + uint16 flags; +}; + +struct Room { + struct Info { + int32 x, z; + int32 yBottom, yTop; + }; + + struct Vertex { + int16 x, y, z; + uint16 lighting; + }; + + struct Sprite { + Index index; + uint16 texture; + }; + + struct Portal { + struct Vertex { + int16 x, y, z; + }; + + uint16 roomIndex; + Vertex n; + Vertex v[4]; + }; + + struct Sector { + uint16 floorIndex; + uint16 boxIndex; + uint8 roomBelow; + int8 floor; + uint8 roomAbove; + int8 ceiling; + }; + + struct Light { + // int32 x, y, z; + // uint16 intensity; + // uint32 radius; + uint8 dummy[18]; + }; + + struct Mesh { + // int32 x, y, z; + // uint16 rotation; + // uint16 intensity; + // uint16 meshID; + uint8 dummy[18]; + }; + + Info info; + uint32 dataSize; +/* + uint16 vCount; + Vertex* vertices; + + uint16 qCount; + Quad* quads; + + uint16 tCount; + Triangle* triangles; + + uint16 sCount; + Sprite* sprites; +*/ +}; + +struct Node { + uint32 flags; + int32 x, y, z; +}; + +struct Model { + uint16 type; + uint16 index; + uint16 mCount; + uint16 mStart; + uint32 node; + uint32 frame; + uint16 animation; +}; + +struct Texture { + uint16 attribute; + uint16 tile:14, :2; + uint8 xh0, x0, yh0, y0; + uint8 xh1, x1, yh1, y1; + uint8 xh2, x2, yh2, y2; + uint8 xh3, x3, yh3, y3; +}; + +struct Sprite { + uint16 tile; + uint8 u, v; + uint16 w, h; + int16 l, t, r, b; +}; + +struct SpriteSequence { + uint16 type; + uint16 unused; + int16 sCount; + int16 sStart; +}; + +struct Rect { + int32 x0; + int32 y0; + int32 x1; + int32 y1; +}; + +struct Vertex { + int16 x, y; + int16 z; + uint8 u, v, g, clip; +}; + +struct Face { + uint16 flags; + int16 depth; + int16 start; + int8 indices[4]; +}; + +#define MAX_VERTICES 1024 +#define MAX_FACES 384 +#define MAX_DIST (16 * 1024) + +#define FACE_TRIANGLE 0x8000 +#define FACE_COLORED 0x4000 +#define FACE_TEXTURE 0x3FFF + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +void drawGlyph(int32 index, int32 x, int32 y); +void clear(); + +#endif \ No newline at end of file diff --git a/src/platform/gba/common.iwram.cpp b/src/platform/gba/common.iwram.cpp new file mode 100644 index 0000000..8b33a6e --- /dev/null +++ b/src/platform/gba/common.iwram.cpp @@ -0,0 +1,993 @@ +#include "common.h" + +#define DIV_TABLE_SIZE 512 + +uint16 divTable[DIV_TABLE_SIZE]; + +#ifdef _WIN32 + uint8* LEVEL1_PHD; + + uint32 VRAM[WIDTH * HEIGHT]; + + #ifdef USE_MODE_5 + uint16 fb[WIDTH * HEIGHT]; + #else + uint8 fb[WIDTH * HEIGHT]; + #endif + + #define MyDiv(Number, Divisor) ((Number) / (Divisor)) +#else + uint32 fb = VRAM; + + #define MyDiv(Number, Divisor) ((Number) / (Divisor)) + //#define MyDiv(Number, Divisor) Div(Number, Divisor) +#endif + +#define FixedInvS(x) ((x < 0) ? -divTable[abs(x)] : divTable[x]) +#define FixedInvU(x) divTable[x] + +bool keys[IK_MAX] = {}; + +#if defined(USE_MODE_5) || defined(_WIN32) +uint16 palette[256]; +#endif + +uint8 lightmap[256 * 32]; + +Vertex gVertices[MAX_VERTICES]; +uint32 gVerticesCount = 0; + +EWRAM_DATA Face gFaces[MAX_FACES]; +int32 gFacesCount = 0; + +Rect clip; + +const uint8* tiles[15]; + +const uint8* curTile; + +uint16 mipMask; + +int32 fps; + +int32 camSinY; +int32 camCosY; + +int32 camX = 75162; +int32 camY = 3072 - 1024; +int32 camZ = 5000; + +Vertex* Ledges[4]; +Vertex* Redges[4]; +int32 Lindex, Rindex; + +uint16 roomsCount; +const Room* rooms; + +uint32 texturesCount; +const Texture* textures; + +const Sprite* sprites; + +uint32 spriteSequencesCount; +const SpriteSequence* spriteSequences; + +int32 seqGlyphs; + +const uint8* meshData; +const uint32* meshOffsets; + +const int32* nodes; +const Model* models; + +#ifdef WIN32 + #define INLINE inline +#else + #define INLINE __attribute__((always_inline)) inline +#endif + +int32 clamp(int32 x, int32 a, int32 b) { + return x < a ? a : (x > b ? b : x); +} + +template +inline void swap(T &a, T &b) { + T tmp = a; + a = b; + b = tmp; +} + +bool checkBackface(const Vertex *a, const Vertex *b, const Vertex *c) { + return (b->x - a->x) * (c->y - a->y) - + (c->x - a->x) * (b->y - a->y) <= 0; +} + +INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&b) { + if (t->y > m->y) swap(t, m); + if (t->y > b->y) swap(t, b); + if (m->y > b->y) swap(m, b); +} + +INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&o, Vertex *&b) { + if (t->y > m->y) swap(t, m); + if (o->y > b->y) swap(o, b); + if (t->y > o->y) swap(t, o); + if (m->y > b->y) swap(m, b); + if (m->y > o->y) swap(m, o); +} + +int32 classify(const Vertex* v) { + return (v->x < clip.x0 ? 1 : 0) | + (v->x > clip.x1 ? 2 : 0) | + (v->y < clip.y0 ? 4 : 0) | + (v->y > clip.y1 ? 8 : 0); +} + +void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z) { +#ifdef _WIN32 + if (gVerticesCount >= MAX_VERTICES) { + DebugBreak(); + return; + } +#endif + + Vertex &res = gVertices[gVerticesCount++]; + + int32 px = vx + x; + int32 pz = vz + z; + + int32 cz = px * camSinY + pz * camCosY; + cz >>= 16; + + // znear / zfar clip + if (cz < 32 || cz > MAX_DIST) { + res.z = -1; + return; + } + + int32 py = vy + y; + +#if 0 + int32 cx = (px * camCosY - pz * camSinY) >> 16; + int32 cy = py; + + uint32 czInv = MyDiv(1 << 16, uint32(cz)); + + cx = cx * czInv; + cy = cy * czInv; +#else + int32 cx = px * camCosY - pz * camSinY; + int32 cy = py << 16; + + cx = MyDiv(cx, cz); + cy = MyDiv(cy, cz); +#endif + cy = cy * FRAME_WIDTH / FRAME_HEIGHT; + + cx = clamp(cx, -2 << 16, 2 << 16); + cy = clamp(cy, -2 << 16, 2 << 16); + + res.x = ( ( (1 << 16) + cx ) * (FRAME_WIDTH / 2) ) >> 16; + res.y = ( ( (1 << 16) + cy ) * (FRAME_HEIGHT / 2) ) >> 16; + res.z = cz; + res.clip = classify(&res); + + int32 fog = vg - ((cz * cz) >> 15); + if (fog < 0) { + fog = 0; + } + + res.g = uint32(255 - (fog >> 5)) >> 3; +} + +#define FETCH_T() curTile[(t & 0xFF00) | (t >> 24)] +#define FETCH_T_MIP() curTile[(t & 0xFF00) | (t >> 24) & mipMask] +#define FETCH_GT() lightmap[(g & 0x1F00) | FETCH_T()] +#define FETCH_G(palIndex) lightmap[(g & 0x1F00) | palIndex] +#define FETCH_GT_PAL() palette[FETCH_GT()] +#define FETCH_G_PAL(palIndex) palette[FETCH_G(palIndex)] + +struct Edge { + int32 h; + int32 x; + int32 g; + uint32 t; + int32 dx; + int32 dg; + uint32 dt; + + int32 index; + Vertex* vert[8]; + + Edge() : h(0), dx(0), dg(0), dt(0) {} + + INLINE void stepG() { + x += dx; + g += dg; + } + + INLINE void stepGT() { + x += dx; + g += dg; + t += dt; + } + + INLINE bool nextG() { + if (index == 0) { + return false; + } + + Vertex* v1 = vert[index--]; + Vertex* v2 = vert[index]; + + h = v2->y - v1->y; + x = v1->x << 16; + g = v1->g << 16; + + if (h > 1) { + uint32 d = FixedInvU(h); + + dx = d * (v2->x - v1->x); + dg = d * (v2->g - v1->g); + } + + return true; + } + + INLINE bool nextGT() { + if (index == 0) { + return false; + } + + Vertex* v1 = vert[index--]; + Vertex* v2 = vert[index]; + + h = v2->y - v1->y; + x = v1->x << 16; + g = v1->g << 16; + t = (v1->u << 24) | (v1->v << 8); + + if (h > 1) { + uint32 d = FixedInvU(h); + + dx = d * (v2->x - v1->x); + dg = d * (v2->g - v1->g); + + int32 du = d * (v2->u - v1->u); + int32 dv = d * (v2->v - v1->v); + + dt = ((du << 8) & 0xFFFF0000) | int16(dv >> 8); + } + + return true; + } +}; + +INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, int32 dgdx) { + #ifdef USE_MODE_5 + uint16* pixel = buffer + x1; + int32 width = (x2 - x1); + + while (width--) + { + *pixel++ = FETCH_G_PAL(palIndex); + g += dgdx; + } + #else + if (x1 & 1) + { + uint16 &p = *(uint16*)((uint8*)buffer + x1 - 1); + p = (p & 0x00FF) | (FETCH_G(palIndex) << 8); + g += dgdx; + x1++; + } + + int32 width = (x2 - x1) >> 1; + uint16* pixel = (uint16*)((uint8*)buffer + x1); + + dgdx <<= 1; + + if (width && (x1 & 3)) + { + uint16 p = FETCH_G(palIndex); + *pixel++ = p | (FETCH_G(palIndex) << 8); + + g += dgdx; + + width--; + } + + while (width-- > 0) + { + uint32 p = FETCH_G(palIndex); + p |= (FETCH_G(palIndex) << 8); + + g += dgdx; + + if (width-- > 0) + { + p |= (FETCH_G(palIndex) << 16); + p |= (FETCH_G(palIndex) << 24); + + g += dgdx; + + *(uint32*)pixel = p; + pixel += 2; + } else { + *(uint16*)pixel = p; + pixel += 1; + } + } + + if (x2 & 1) + { + *pixel = (*pixel & 0xFF00) | FETCH_G(palIndex); + } + #endif +} + +INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, int32 dgdx, uint32 dtdx) { + #ifdef USE_MODE_5 + uint16* pixel = buffer + x1; + int32 width = (x2 - x1); + + while (width--) + { + *pixel++ = FETCH_GT_PAL(); + t += dtdx; + g += dgdx; + } + #else + if (x1 & 1) + { + uint16 &p = *(uint16*)((uint8*)buffer + x1 - 1); + p = (p & 0x00FF) | (FETCH_GT() << 8); + t += dtdx; + g += dgdx; + x1++; + } + + int32 width = (x2 - x1) >> 1; + uint16* pixel = (uint16*)((uint8*)buffer + x1); + + dgdx <<= 1; + + if (width && (x1 & 3)) + { + uint16 p = FETCH_GT(); + t += dtdx; + *pixel++ = p | (FETCH_GT() << 8); + t += dtdx; + + g += dgdx; + + width--; + } + + while (width-- > 0) + { + uint32 p = FETCH_GT(); + t += dtdx; + p |= (FETCH_GT() << 8); + t += dtdx; + + g += dgdx; + + if (width-- > 0) + { + p |= (FETCH_GT() << 16); + t += dtdx; + p |= (FETCH_GT() << 24); + t += dtdx; + + g += dgdx; + + *(uint32*)pixel = p; + pixel += 2; + } else { + *(uint16*)pixel = p; + pixel += 1; + } + } + + if (x2 & 1) + { + *pixel = (*pixel & 0xFF00) | FETCH_GT(); + } + #endif +} + +void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) +{ + while (1) + { + while (L.h <= 0) + { + if (!L.nextG()) + { + return; + } + } + + while (R.h <= 0) + { + if (!R.nextG()) + { + return; + } + } + + int32 h = MIN(L.h, R.h); + L.h -= h; + R.h -= h; + + while (h--) { + int32 x1 = L.x >> 16; + int32 x2 = R.x >> 16; + + if (x2 > x1) + { + int32 d = FixedInvU(x2 - x1); + + int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; + + scanlineG(buffer, x1, x2, palIndex, L.g >> 8, dgdx); + } + + buffer += WIDTH / PIXEL_SIZE; + + L.stepG(); + R.stepG(); + } + } +} + +void rasterizeGT(uint16* buffer, Edge &L, Edge &R) +{ + while (1) + { + while (L.h <= 0) + { + if (!L.nextGT()) + { + return; + } + } + + while (R.h <= 0) + { + if (!R.nextGT()) + { + return; + } + } + + int32 h = MIN(L.h, R.h); + L.h -= h; + R.h -= h; + + while (h--) { + int32 x1 = L.x >> 16; + int32 x2 = R.x >> 16; + + if (x2 > x1) + { + uint32 d = FixedInvU(x2 - x1); + + int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; + + uint32 u = d * ((R.t >> 16) - (L.t >> 16)); + uint32 v = d * ((R.t & 0xFFFF) - (L.t & 0xFFFF)); + uint32 dtdx = (u & 0xFFFF0000) | (v >> 16); + + scanlineGT(buffer, x1, x2, L.g >> 8, L.t, dgdx, dtdx); + } + + buffer += WIDTH / PIXEL_SIZE; + + L.stepGT(); + R.stepGT(); + } + } +} + +void drawTriangle(uint16 flags, int32 start, const int8* indices) +{ + Vertex *v1, *v2, *v3; + + bool clipped = indices[0] == indices[1]; + + if (clipped) { + v1 = gVertices + start; + v2 = v1 + 1; + v3 = v1 + 2; + } else { + v1 = gVertices + start; + v2 = v1 + indices[1]; + v3 = v1 + indices[2]; + } + + uint16 palIndex = flags & FACE_TEXTURE; + + if (!(flags & FACE_COLORED)) { + const Texture &tex = textures[palIndex]; + palIndex = 0xFFFF; + curTile = tiles[tex.tile]; + if (!clipped) { + v1->u = tex.x0; + v1->v = tex.y0; + v2->u = tex.x1; + v2->v = tex.y1; + v3->u = tex.x2; + v3->v = tex.y2; + } + } + + sortVertices(v1, v2, v3); + + int32 temp = (v2->y - v1->y) * FixedInvU(v3->y - v1->y); + + int32 longest = ((temp * (v3->x - v1->x)) >> 16) + (v1->x - v2->x); + if (longest == 0) + { + return; + } + + Edge L, R; + + if (longest < 0) + { + R.vert[0] = v3; + R.vert[1] = v2; + R.vert[2] = v1; + R.index = 2; + L.vert[0] = v3; + L.vert[1] = v1; + L.index = 1; + } + else + { + L.vert[0] = v3; + L.vert[1] = v2; + L.vert[2] = v1; + L.index = 2; + R.vert[0] = v3; + R.vert[1] = v1; + R.index = 1; + } + + if (palIndex != 0xFFFF) { + rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + } else { + rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + } +} + +void drawQuad(uint16 flags, int32 start, const int8* indices) { + Vertex *v1, *v2, *v3, *v4; + + bool clipped = indices[0] == indices[1]; + + if (clipped) { + v1 = gVertices + start; + v2 = v1 + 1; + v3 = v1 + 2; + v4 = v1 + 3; + } else { + v1 = gVertices + start; + v2 = v1 + indices[1]; + v3 = v1 + indices[2]; + v4 = v1 + indices[3]; + } + + uint16 palIndex = flags & FACE_TEXTURE; + + if (!(flags & FACE_COLORED)) { + const Texture &tex = textures[palIndex]; + palIndex = 0xFFFF; + curTile = tiles[tex.tile]; + if (!clipped) { + v1->u = int32(tex.x0); + v1->v = int32(tex.y0); + v2->u = int32(tex.x1); + v2->v = int32(tex.y1); + v3->u = int32(tex.x2); + v3->v = int32(tex.y2); + v4->u = int32(tex.x3); + v4->v = int32(tex.y3); + } + } + + sortVertices(v1, v2, v3, v4); + + int32 temp = (v2->y - v1->y) * FixedInvU(v4->y - v1->y); + + int32 longest = ((temp * (v4->x - v1->x)) >> 16) + (v1->x - v2->x); + if (longest == 0) + { + return; + } + + Edge L, R; + + if (checkBackface(v1, v4, v2) == checkBackface(v1, v4, v3)) + { + if (longest < 0) + { + L.vert[0] = v4; + L.vert[1] = v1; + L.index = 1; + R.vert[0] = v4; + R.vert[1] = v3; + R.vert[2] = v2; + R.vert[3] = v1; + R.index = 3; + } + else + { + R.vert[0] = v4; + R.vert[1] = v1; + R.index = 1; + L.vert[0] = v4; + L.vert[1] = v3; + L.vert[2] = v2; + L.vert[3] = v1; + L.index = 3; + } + } + else + { + R.vert[0] = v4; + R.vert[1] = v3; + R.vert[2] = v1; + R.index = 2; + L.vert[0] = v4; + L.vert[1] = v2; + L.vert[2] = v1; + L.index = 2; + + if (longest < 0) + { + swap(L.vert[1], R.vert[1]); + } + } + + if (palIndex != 0xFFFF) { + rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + } else { + rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + } +} + +void drawPoly(uint16 flags, int32 start, int32 count) { + uint16 palIndex = flags & FACE_TEXTURE; + + if (!(flags & FACE_COLORED)) { + const Texture &tex = textures[palIndex]; + palIndex = 0xFFFF; + curTile = tiles[tex.tile]; + } + + int32 minY = 0x7FFF; + int32 maxY = -0x7FFF; + int32 t = start, b = start; + + for (int i = 0; i < count; i++) { + Vertex *v = gVertices + start + i; + + if (v->y < minY) { + minY = v->y; + t = i; + } + + if (v->y > maxY) { + maxY = v->y; + b = i; + } + } + + Edge L, R; + L.vert[L.index = 0] = gVertices + start + b; + R.vert[R.index = 0] = gVertices + start + b; + + for (int i = 0; i < count; i++) { + int32 idx = (b + count + i) % count; + + L.vert[++L.index] = gVertices + start + idx; + + if (idx == t) { + break; + } + } + + for (int i = 0; i < count; i++) { + int32 idx = (b + count - i) % count; + + R.vert[++R.index] = gVertices + start + idx; + + if (idx == t) { + break; + } + } + + Vertex *v1 = gVertices + start + t; + + if (palIndex != 0xFFFF) { + rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + } else { + rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + } +} + +void drawGlyph(int32 index, int32 x, int32 y) { + const Sprite* sprite = sprites + spriteSequences[seqGlyphs].sStart + index; + + int32 w = sprite->r - sprite->l; + int32 h = sprite->b - sprite->t; + + w = (w >> 1) << 1; // make it even + + int32 ix = x + sprite->l; + int32 iy = y + sprite->t; + + uint16* ptr = (uint16*)fb + iy * (WIDTH / PIXEL_SIZE) + (ix >> 1); + + const uint8* glyphData = tiles[sprite->tile] + 256 * sprite->v + sprite->u; + + while (h--) + { + const uint8* p = glyphData; + + for (int i = 0; i < (w / 2); i++) { + + if (p[0] || p[1]) { + uint16 d = ptr[i]; + + if (p[0]) d = (d & 0xFF00) | p[0]; + if (p[1]) d = (d & 0x00FF) | (p[1] << 8); + + ptr[i] = d; + } + + p += 2; + } + + ptr += WIDTH / PIXEL_SIZE; + glyphData += 256; + } +} + +void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) +{ + #define LERP(a,b,t) (b + ((a - b) * t >> 16)) + + #define CLIP_AXIS(x, y, edge, output) {\ + uint32 t = MyDiv((edge - b->x) << 16, a->x - b->x);\ + Vertex* v = output + count++;\ + v->x = edge;\ + v->y = LERP(a->y, b->y, t);\ + v->z = LERP(a->z, b->z, t);\ + v->u = LERP(a->u, b->u, t);\ + v->v = LERP(a->v, b->v, t);\ + v->g = LERP(a->g, b->g, t);\ + } + + #define CLIP_VERTEX(x, y, x0, x1, input, output) {\ + const Vertex *a, *b = input[pCount - 1];\ + for (int32 i = 0; i < pCount; i++) {\ + a = b;\ + b = input[i];\ + if (a->x < x0) {\ + if (b->x < x0) continue;\ + CLIP_AXIS(x, y, x0, output);\ + } else if (a->x > x1) {\ + if (b->x > x1) continue;\ + CLIP_AXIS(x, y, x1, output);\ + }\ + if (b->x < x0) {\ + CLIP_AXIS(x, y, x0, output);\ + } else if (b->x > x1) {\ + CLIP_AXIS(x, y, x1, output);\ + } else {\ + output[count++] = *b;\ + }\ + }\ + if (count < 3) return;\ + } + + if (!(flags & FACE_COLORED)) { + const Texture &tex = textures[flags & FACE_TEXTURE]; + curTile = tiles[tex.tile]; + poly[0]->u = int32(tex.x0); + poly[0]->v = int32(tex.y0); + poly[1]->u = int32(tex.x1); + poly[1]->v = int32(tex.y1); + poly[2]->u = int32(tex.x2); + poly[2]->v = int32(tex.y2); + if (pCount == 4) { + poly[3]->u = int32(tex.x3); + poly[3]->v = int32(tex.y3); + } + } + + Vertex tmp[8]; + int32 count = 0; + +// clip x + int32 x0 = clip.x0; + int32 x1 = clip.x1; + CLIP_VERTEX(x, y, x0, x1, poly, tmp); + + pCount = count; + count = 0; + + Vertex* output = gVertices + gVerticesCount; + +// clip y + int32 y0 = clip.y0; + int32 y1 = clip.y1; + CLIP_VERTEX(y, x, y0, y1, &tmp, output); + + Face &f = gFaces[gFacesCount++]; + f.flags = flags; + f.start = gVerticesCount; + f.indices[0] = count; + f.indices[1] = count; + /* + if (count == 3) { + f.flags |= FACE_TRIANGLE; + f.depth = (output[0].z + output[1].z + output[2].z) / 3; + } else if (count == 4) { + f.depth = (output[0].z + output[1].z + output[2].z + output[3].z) >> 2; + } else*/ { + int32 depth = output[0].z; + for (int32 i = 1; i < count; i++) { + depth = (depth + output[i].z) >> 1; + } + f.depth = depth; + } + + gVerticesCount += count; +} + +void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { +#ifdef _WIN32 + if (gFacesCount >= MAX_FACES) { + DebugBreak(); + } +#endif + Vertex* v1 = gVertices + startVertex + indices[0]; + Vertex* v2 = gVertices + startVertex + indices[1]; + Vertex* v3 = gVertices + startVertex + indices[2]; + Vertex* v4 = gVertices + startVertex + indices[3]; + + if (v1->z < 0 || v2->z < 0 || v3->z < 0 || v4->z < 0) + return; + + if (checkBackface(v1, v2, v3)) + return; + + if (v1->clip & v2->clip & v3->clip & v4->clip) + return; + + if (v1->clip | v2->clip | v3->clip | v4->clip) { + Vertex* poly[4] = { v1, v2, v3, v4 }; + faceAddPolyClip(flags, poly, 4); + } else { + Face &f = gFaces[gFacesCount++]; + f.flags = flags; + f.depth = (v1->z + v2->z + v3->z + v4->z) >> 2; + f.start = startVertex + indices[0]; + f.indices[0] = 0; + f.indices[1] = indices[1] - indices[0]; + f.indices[2] = indices[2] - indices[0]; + f.indices[3] = indices[3] - indices[0]; + } +} + +void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { +#ifdef _WIN32 + if (gFacesCount >= MAX_FACES) { + DebugBreak(); + } +#endif + Vertex* v1 = gVertices + startVertex + indices[0]; + Vertex* v2 = gVertices + startVertex + indices[1]; + Vertex* v3 = gVertices + startVertex + indices[2]; + + if (v1->z < 0 || v2->z < 0 || v3->z < 0) + return; + + if (checkBackface(v1, v2, v3)) + return; + + if (v1->clip & v2->clip & v3->clip) + return; + + if (v1->clip | v2->clip | v3->clip) { + Vertex* poly[3] = { v1, v2, v3 }; + faceAddPolyClip(flags, poly, 3); + } else { + Face &f = gFaces[gFacesCount++]; + f.flags = flags | FACE_TRIANGLE; + f.depth = (v1->z + v2->z + v3->z) / 3; + f.start = startVertex + indices[0]; + f.indices[0] = 0; + f.indices[1] = indices[1] - indices[0]; + f.indices[2] = indices[2] - indices[0]; + } +} + +int faceCmp(const void *a, const void *b) { + return ((Face*)b)->depth - ((Face*)a)->depth; +} + +//int32 gFacesCountMax, gVerticesCountMax; + +void flush() { + if (gFacesCount) { + qsort(gFaces, gFacesCount, sizeof(Face), faceCmp); + + //const uint16 mips[] = { 0xFFFF, 0xFEFE, 0xFCFC, 0xF8F8 }; + + for (int32 i = 0; i < gFacesCount; i++) { + const Face &f = gFaces[i]; + + // TODO + //mipMask = mips[MIN(3, f.depth / 2048)]; + + if (f.flags & FACE_TRIANGLE) { + drawTriangle(f.flags, f.start, f.indices); + } else { + if (f.indices[0] == f.indices[1] /* && f.indices[0] > 4 */) { + drawPoly(f.flags, f.start, f.indices[0]); + } else { + drawQuad(f.flags, f.start, f.indices); + } + } + } + } + + //if (gFacesCount > gFacesCountMax) gFacesCountMax = gFacesCount; + //if (gVerticesCount > gVerticesCountMax) gVerticesCountMax = gVerticesCount; + //printf("%d %d\n", gFacesCountMax, gVerticesCountMax); + + gVerticesCount = 0; + gFacesCount = 0; +} + +void initRender() { + divTable[0] = 0; + for (uint32 i = 1; i < DIV_TABLE_SIZE; i++) { + divTable[i] = MyDiv(1 << 16, i); + } +} + +void clear() { + uint32* dst = (uint32*)fb; + + #ifdef USE_MODE_5 + uint32* end = dst + (WIDTH * HEIGHT >> 1); + #else + uint32* end = dst + (WIDTH * HEIGHT >> 2); + #endif + + while (dst < end) { + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + } +} \ No newline at end of file diff --git a/src/platform/gba/icon.png b/src/platform/gba/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1c882e35adf1f857b05bff914340f1542671f820 GIT binary patch literal 546 zcmV+-0^R+IP)1t9HhN1aJcvDfrc)!4i zuEuP)Q!3sYKEW<688Y7mFi7t+3oJ1t1NUv9gTo-T!x!*y;TI!*e9q~%72?5cav4TF zY%t)%DP~(Q6@#%nuOT6d#VT2uz;-Zx!lCGY^yAM}c&hT4*7EBRZt-?=g`%%WF2aW( z$G|b<68zHMu?WH050z(6lTZv7taYU2eiGMt`51A&^b!KVAj29-I{uya@isr&0Nl9? zHAY~NVMLN-$T_T&3ot+et1!+1AU+)qQtGZ8;)@%}&4URMvWAD-sD4cD^ zZ4Fuv{LycS|MS(w_B;tDvn#Z8tQ8Xws7QAr&V8o~`MPeBbY+r#)fHG^uhE|NZ$`?D kI1~G^U~rGDj<$s1A8P~9ZdmdTaR2}S07*qoM6N<$f>~AO4gdfE literal 0 HcmV?d00001 diff --git a/src/platform/gba/main.cpp b/src/platform/gba/main.cpp new file mode 100644 index 0000000..305a8fc --- /dev/null +++ b/src/platform/gba/main.cpp @@ -0,0 +1,595 @@ +#ifndef _WIN32 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "LEVEL1_PHD.h" +#endif + +#include "common.h" + +//#define PROFILE + +#if defined(USE_MODE_5) || defined(_WIN32) +extern uint16 palette[256]; +#endif + +extern uint8 lightmap[256 * 32]; + +extern Vertex gVertices[MAX_VERTICES]; +extern uint32 gVerticesCount; + +extern Face gFaces[MAX_FACES]; +extern int32 gFacesCount; + +extern Rect clip; + +extern const uint8* tiles[15]; + +extern const uint8* curTile; +uint32 tilesCount; + +extern int32 fps; + +uint16 camRotY = 16 << 8; + +extern int32 camSinY; +extern int32 camCosY; + +extern int32 camX; +extern int32 camY; +extern int32 camZ; + +extern uint16 roomsCount; +extern const Room* rooms; + +extern uint32 texturesCount; +extern const Texture* textures; + +extern const Sprite* sprites; + +extern uint32 spriteSequencesCount; +extern const SpriteSequence* spriteSequences; + +extern int32 seqGlyphs; + +extern const uint8* meshData; +extern const uint32* meshOffsets; + +extern const int32* nodes; +extern const Model* models; + +extern void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z); +extern void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex); +extern void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex); +extern void flush(); +extern void initRender(); + +void drawRoom(int16 roomIndex) { + const Room *room = rooms; + + //Room::Portal *portals; + uint16 portalsCount; + + //Room::Sector* sectors; + uint16 zSectors, xSectors; + + //uint16 ambient; + + //Room::Light* lights; + uint16 lightsCount; + + //Room::Mesh* meshes; + uint16 meshesCount; + + uint8 *ptr = (uint8*)room; + + while (roomIndex--) { + uint32 dataSize; + memcpy(&dataSize, &room->dataSize, sizeof(dataSize)); + ptr += sizeof(Room) + dataSize * 2; + + portalsCount = *((uint16*)ptr); + ptr += 2; + //portals = (Room::Portal*)ptr; + ptr += sizeof(Room::Portal) * portalsCount; + + zSectors = *((uint16*)ptr); + ptr += 2; + xSectors = *((uint16*)ptr); + ptr += 2; + //sectors = (Room::Sector*)sectors; + ptr += sizeof(Room::Sector) * zSectors * xSectors; + + //ambient = *((uint16*)ptr); + ptr += 2; + + lightsCount = *((uint16*)ptr); + ptr += 2; + //lights = (Room::Light*)ptr; + ptr += sizeof(Room::Light) * lightsCount; + + meshesCount = *((uint16*)ptr); + ptr += 2; + //meshes = (Room::Mesh*)ptr; + ptr += sizeof(Room::Mesh) * meshesCount; + + ptr += 2 + 2; // skip alternateRoom and flags + + room = (Room*)ptr; + } + + ptr += sizeof(Room); + + uint16 vCount = *((uint16*)ptr); + ptr += 2; + Room::Vertex* vertices = (Room::Vertex*)ptr; + ptr += sizeof(Room::Vertex) * vCount; + + // non-aligned data + int32 roomX; + int32 roomZ; + memcpy(&roomX, &room->info.x, sizeof(roomX)); + memcpy(&roomZ, &room->info.z, sizeof(roomZ)); + + int32 dx = -camX + roomX; + int32 dy = -camY; + int32 dz = -camZ + roomZ; + + int32 startVertex = gVerticesCount; + + for (uint16 i = 0; i < vCount; i++) { + const Room::Vertex &v = vertices[i]; + transform(v.x, v.y, v.z, v.lighting, dx, dy, dz); + } + + uint16 qCount = *((uint16*)ptr); + ptr += 2; + Quad* quads = (Quad*)ptr; + ptr += sizeof(Quad) * qCount; + + for (uint16 i = 0; i < qCount; i++) { + faceAddQuad(quads[i].flags, quads[i].indices, startVertex); + } + + uint16 tCount = *((uint16*)ptr); + ptr += 2; + Triangle* triangles = (Triangle*)ptr; + ptr += sizeof(Triangle) * tCount; + + for (uint16 i = 0; i < tCount; i++) { + faceAddTriangle(triangles[i].flags, triangles[i].indices, startVertex); + } +} + +void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { + uint32 offset = meshOffsets[meshIndex]; + const uint8* ptr = meshData + offset; + + //int16 cx = *(int16*)ptr; ptr += 2; + //int16 cy = *(int16*)ptr; ptr += 2; + //int16 cz = *(int16*)ptr; ptr += 2; + //int16 r = *(int16*)ptr; ptr += 2; + //ptr += 2; // skip flags + ptr += 2 * 5; + + int16 vCount = *(int16*)ptr; ptr += 2; + const int16* vertices = (int16*)ptr; + ptr += vCount * 3 * sizeof(int16); + + int16 nCount = *(int16*)ptr; ptr += 2; + //const int16* normals = (int16*)ptr; + if (nCount > 0) { // normals + ptr += nCount * 3 * sizeof(int16); + } else { // intensity + ptr += vCount * sizeof(int16); + } + + int16 rCount = *(int16*)ptr; ptr += 2; + Quad* rFaces = (Quad*)ptr; ptr += rCount * sizeof(Quad); + + int16 tCount = *(int16*)ptr; ptr += 2; + Triangle* tFaces = (Triangle*)ptr; ptr += tCount * sizeof(Triangle); + + int16 crCount = *(int16*)ptr; ptr += 2; + Quad* crFaces = (Quad*)ptr; ptr += crCount * sizeof(Quad); + + int16 ctCount = *(int16*)ptr; ptr += 2; + Triangle* ctFaces = (Triangle*)ptr; ptr += ctCount * sizeof(Triangle); + + int32 startVertex = gVerticesCount; + + int32 dx = x - camX; + int32 dy = y - camY; + int32 dz = z - camZ; + + const int16* v = vertices; + for (uint16 i = 0; i < vCount; i++) { + transform(v[0], v[1], v[2], 4096, dx, dy, dz); + v += 3; + } + + for (int i = 0; i < rCount; i++) { + faceAddQuad(rFaces[i].flags, rFaces[i].indices, startVertex); + } + + for (int i = 0; i < crCount; i++) { + faceAddQuad(crFaces[i].flags | FACE_COLORED, crFaces[i].indices, startVertex); + } + + for (int i = 0; i < tCount; i++) { + faceAddTriangle(tFaces[i].flags, tFaces[i].indices, startVertex); + } + + for (int i = 0; i < ctCount; i++) { + faceAddTriangle(ctFaces[i].flags | FACE_COLORED, ctFaces[i].indices, startVertex); + } +} + +void drawModel(int32 modelIndex, int32 x, int32 y, int32 z) { + const Model* model = models + modelIndex; + + // non-aligned access + uint32 node, frame; + memcpy(&node, &model->node, sizeof(node)); + memcpy(&frame, &model->frame, sizeof(frame)); + + Node bones[32]; + memcpy(bones, nodes + node, (model->mCount - 1) * sizeof(Node)); + + const Node* n = bones; + + struct StackItem { + int32 x, y, z; + } stack[4]; + StackItem *s = stack; + + drawMesh(model->mStart, x, y, z); + + for (int i = 1; i < model->mCount; i++) { + if (n->flags & 1) { + s--; + x = s->x; + y = s->y; + z = s->z; + } + + if (n->flags & 2) { + s->x = x; + s->y = y; + s->z = z; + s++; + } + + x += n->x; + y += n->y; + z += n->z; + n++; + + drawMesh(model->mStart + i, x, y, z); + } +} + +void readLevel(const uint8 *data) { + tilesCount = *((uint32*)(data + 4)); + for (uint32 i = 0; i < tilesCount; i++) { + tiles[i] = data + 8 + 256 * 256 * i; + } + + roomsCount = *((uint16*)(data + 720908)); + rooms = (Room*)(data + 720908 + 2); + + texturesCount = *((uint32*)(data + 1271686)); + textures = (Texture*)(data + 1271686 + 4); + + sprites = (Sprite*)(data + 1289634); + + spriteSequencesCount = *((uint32*)(data + 1292130)); + spriteSequences = (SpriteSequence*)(data + 1292130 + 4); + + for (uint32 i = 0; i < spriteSequencesCount; i++) { + if (spriteSequences[i].type == 190) { + seqGlyphs = i; + break; + } + } + + meshData = data + 908172 + 4; + meshOffsets = (uint32*)(data + 975724 + 4); + + nodes = (int32*)(data + 990318); + + models = (Model*)(data + 1270670); + + const uint8* f_lightmap = data + 1320576; + memcpy(lightmap, f_lightmap, sizeof(lightmap)); + +#if !(defined(USE_MODE_5) || defined(_WIN32)) + uint16 palette[256]; +#endif + + const uint8* f_palette = data + 1328768; + + const uint8* p = f_palette; + + for (int i = 0; i < 256; i++) { + palette[i] = (p[0] >> 1) | ((p[1] >> 1) << 5) | ((p[2] >> 1) << 10); + p += 3; + } + +#ifndef _WIN32 + palette[1] = RGB8(0, 255, 0); + + #ifndef USE_MODE_5 + SetPalette(palette); + #endif +#endif +} + +#ifdef _WIN32 + #define CAM_SPEED (1 << 3) + #define CAM_ROT_SPEED (1 << 3) +#else + #define CAM_SPEED (1 << 6) + #define CAM_ROT_SPEED (1 << 8) +#endif + + +void updateCamera() { + if (keys[IK_LEFT]) camRotY -= CAM_ROT_SPEED; + if (keys[IK_RIGHT]) camRotY += CAM_ROT_SPEED; + + { + ALIGN4 ObjAffineSource src; + ALIGN4 ObjAffineDest dst; + + src.sX = 0x0100; + src.sY = 0x0100; + src.theta = camRotY; + + ObjAffineSet(&src, &dst, 1, 2); + + camCosY = dst.pd << 8; + camSinY = dst.pc << 8; + } + + int32 dx = camSinY; + int32 dz = camCosY; + + dx *= CAM_SPEED; + dz *= CAM_SPEED; + + dx >>= 16; + dz >>= 16; + + if (keys[IK_UP]) { + camX += int32(dx); + camZ += int32(dz); + } + + if (keys[IK_DOWN]) { + camX -= int32(dx); + camZ -= int32(dz); + } + + if (keys[IK_L]) { + camX -= int32(dz); + camZ += int32(dx); + } + + if (keys[IK_R]) { + camX += int32(dz); + camZ -= int32(dx); + } + + if (keys[IK_A]) camY -= CAM_SPEED; + if (keys[IK_B]) camY += CAM_SPEED; + + clip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; +} + +void drawNumber(int32 number, int32 x, int32 y) { + const int32 widths[] = { 12, 8, 10, 10, 10, 10, 10, 10, 10, 10 }; + + while (number > 0) { + x -= widths[number % 10]; + drawGlyph(52 + (number % 10), x, y); + number /= 10; + } +} + +void update(int32 frames) { + for (int32 i = 0; i < frames; i++) { + updateCamera(); + } +} + +void render() { + clear(); + + drawRoom(6); + flush(); + + drawRoom(0); + drawModel(0, 75162, 3072 - 512, 5000 + 1024); + flush(); + + drawNumber(fps, WIDTH, 16); +} + +#ifdef _WIN32 +HDC hDC; + +void VBlankIntrWait() { + #ifdef USE_MODE_5 + for (int i = 0; i < WIDTH * HEIGHT; i++) { + uint16 c = fb[i]; + VRAM[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; + } + #else + for (int i = 0; i < WIDTH * HEIGHT; i++) { + uint16 c = palette[fb[i]]; + VRAM[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; + } + #endif + + const BITMAPINFO bmi = { sizeof(BITMAPINFOHEADER), WIDTH, -HEIGHT, 1, 32, BI_RGB, 0, 0, 0, 0, 0 }; + StretchDIBits(hDC, 0, 0, 240 * WND_SCALE, 160 * WND_SCALE, 0, 0, WIDTH, HEIGHT, VRAM, &bmi, DIB_RGB_COLORS, SRCCOPY); +} + +LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { + switch (msg) { + case WM_DESTROY : + PostQuitMessage(0); + break; + case WM_KEYDOWN : + case WM_KEYUP : { + InputKey key = IK_MAX; + switch (wParam) { + case VK_UP : key = IK_UP; break; + case VK_RIGHT : key = IK_RIGHT; break; + case VK_DOWN : key = IK_DOWN; break; + case VK_LEFT : key = IK_LEFT; break; + case 'Z' : key = IK_A; break; + case 'X' : key = IK_B; break; + case 'A' : key = IK_L; break; + case 'S' : key = IK_R; break; + } + if (key != IK_MAX) { + keys[key] = msg != WM_KEYUP; + } + break; + } + default : + return DefWindowProc(hWnd, msg, wParam, lParam); + } + return 0; +} +#endif + +int32 frameIndex = 0; +int32 fpsCounter = 0; + +void vblank() { + frameIndex++; +} + +int main(void) { +#ifdef _WIN32 + { + FILE *f = fopen("C:/Projects/TR/TR1_ANDROID/LEVEL1.PHD", "rb"); + fseek(f, 0, SEEK_END); + int32 size = ftell(f); + fseek(f, 0, SEEK_SET); + LEVEL1_PHD = new uint8[size]; + fread(LEVEL1_PHD, 1, size, f); + fclose(f); + } +#else + // set low latency mode via WAITCNT register (thanks to GValiente) + #define BIT_SET(y, flag) (y |= (flag)) + #define REG_WAITCNT_NV *(u16*)(REG_BASE + 0x0204) + + BIT_SET(REG_WAITCNT_NV, 0x0008 | 0x0010 | 0x4000); +#endif + + initRender(); + + readLevel(LEVEL1_PHD); + +#ifdef _WIN32 + RECT r = { 0, 0, 240 * WND_SCALE, 160 * WND_SCALE }; + + AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, false); + int wx = (GetSystemMetrics(SM_CXSCREEN) - (r.right - r.left)) / 2; + int wy = (GetSystemMetrics(SM_CYSCREEN) - (r.bottom - r.top)) / 2; + + HWND hWnd = CreateWindow("static", "OpenLara GBA", WS_OVERLAPPEDWINDOW, wx + r.left, wy + r.top, r.right - r.left, r.bottom - r.top, 0, 0, 0, 0); + hDC = GetDC(hWnd); + + SetWindowLong(hWnd, GWL_WNDPROC, (LONG)&wndProc); + ShowWindow(hWnd, SW_SHOWDEFAULT); + + MSG msg; + + do { + if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } else { + + update(1); + render(); + + VBlankIntrWait(); + } + } while (msg.message != WM_QUIT); + +#else + irqInit(); + irqSet(IRQ_VBLANK, vblank); + irqEnable(IRQ_VBLANK); + + uint16 mode = BG2_ON | BACKBUFFER; + + #ifdef USE_MODE_5 + mode |= MODE_5; + + REG_BG2PA = 256 - 64 - 16 - 4 - 1; + REG_BG2PD = 256 - 48 - 2; + #else + mode |= MODE_4; + #endif + + int32 lastFrameIndex = -1; + + #ifdef PROFILE + int counter = 0; + #endif + + while (1) { + //VBlankIntrWait(); + + #ifdef PROFILE + if (counter++ >= 10) return 0; + #endif + + SetMode(mode ^= BACKBUFFER); + fb ^= 0xA000; + + scanKeys(); + uint16 key = keysDown() | keysHeld(); + keys[IK_UP] = (key & KEY_UP); + keys[IK_RIGHT] = (key & KEY_RIGHT); + keys[IK_DOWN] = (key & KEY_DOWN); + keys[IK_LEFT] = (key & KEY_LEFT); + keys[IK_A] = (key & KEY_A); + keys[IK_B] = (key & KEY_B); + keys[IK_L] = (key & KEY_L); + keys[IK_R] = (key & KEY_R); + + int32 frame = frameIndex; + update(frame - lastFrameIndex); + lastFrameIndex = frame; + + render(); + + fpsCounter++; + if (frameIndex >= 60) { + frameIndex -= 60; + lastFrameIndex -= 60; + + fps = fpsCounter; + + fpsCounter = 0; + } + + } +#endif +} diff --git a/src/platform/gba/profile.bat b/src/platform/gba/profile.bat new file mode 100644 index 0000000..8cf71a2 --- /dev/null +++ b/src/platform/gba/profile.bat @@ -0,0 +1 @@ +NO$GBA C:\Projects\OpenLara\src\platform\gba\OpenLara.elf \ No newline at end of file diff --git a/src/platform/gba/sdiv32.s b/src/platform/gba/sdiv32.s new file mode 100644 index 0000000..a28236e --- /dev/null +++ b/src/platform/gba/sdiv32.s @@ -0,0 +1,51 @@ +@-------------------------------------------------------------------------------- +@ udiv.s +@-------------------------------------------------------------------------------- +@ Provides an implementation of signed division +@-------------------------------------------------------------------------------- + +@ refer to the unsigned division + .extern __aeabi_uidivmod + .extern __aeabi_uidiv + +@ r0: the numerator / r1: the denominator +@ after it, r0 has the quotient and r1 has the modulo + .section .iwram, "ax", %progbits + .align 2 + .arm + .global __aeabi_idivmod + .type __aeabi_idivmod STT_FUNC +__aeabi_idivmod: + + .section .iwram, "ax", %progbits + .align 2 + .arm + .global __aeabi_idiv + .type __aeabi_idiv STT_FUNC +__aeabi_idiv: + + @ Move the lr to r12 and make the numbers positive + mov r12, lr + + cmp r0, #0 + rsblt r0, #0 + orrlt r12, #1 << 30 + + cmp r1, #0 + rsblt r1, #0 + orrlt r12, #1 << 31 + + @ Call the unsigned division + .extern udiv32pastzero + bl udiv32pastzero + + @ Test the old sign bits + tst r12, #1 << 30 + rsbne r0, r0, #0 + rsbne r1, r0, #0 + tst r12, #1 << 31 + rsbne r0, r0, #0 + + @ Erase the sign bits from the return address, and return + bic r12, #3 << 30 + bx r12 diff --git a/src/platform/gba/udiv32.s b/src/platform/gba/udiv32.s new file mode 100644 index 0000000..a2f60ce --- /dev/null +++ b/src/platform/gba/udiv32.s @@ -0,0 +1,79 @@ +@-------------------------------------------------------------------------------- +@ udiv.s +@-------------------------------------------------------------------------------- +@ Provides an implementation of unsigned division +@-------------------------------------------------------------------------------- + +@ Source code taken from https://www.chiark.greenend.org.uk/~theom/riscos/docs/ultimate/a252div.txt +@ r0: the numerator / r1: the denominator +@ after it, r0 has the quotient and r1 has the modulo + .section .iwram, "ax", %progbits + .align 2 + .arm + .global __aeabi_uidivmod + .type __aeabi_uidivmod STT_FUNC +__aeabi_uidivmod: + + .section .iwram, "ax", %progbits + .align 2 + .arm + .global __aeabi_uidiv + .type __aeabi_uidiv STT_FUNC +__aeabi_uidiv: + + @ Check for division by zero + cmp r1, #0 + bxeq lr + + .global udiv32pastzero +udiv32pastzero: + @ If n < d, just bail out as well + cmp r0, r1 @ n, d + movlo r1, r0 @ mod = n + movlo r0, #0 @ quot = 0 + bxlo lr + + @ Move the denominator to r2 and start to build a counter that + @ counts the difference on the number of bits on each numerator + @ and denominator + @ From now on: r0 = quot/num, r1 = mod, r2 = denom, r3 = counter + mov r2, r1 + mov r3, #28 @ first guess on difference + mov r1, r0, lsr #4 @ r1 = num >> 4 + + @ Iterate three times to get the counter up to 4-bit precision + cmp r2, r1, lsr #12 + suble r3, r3, #16 + movle r1, r1, lsr #16 + + cmp r2, r1, lsr #4 + suble r3, r3, #8 + movle r1, r1, lsr #8 + + cmp r2, r1 + suble r3, r3, #4 + movle r1, r1, lsr #4 + + @ shift the numerator by the counter and flip the sign of the denom + mov r0, r0, lsl r3 + adds r0, r0, r0 + rsb r2, r2, #0 + + @ dynamically jump to the exact copy of the iteration + add r3, r3, r3, lsl #1 @ counter *= 3 + add pc, pc, r3, lsl #2 @ jump + mov r0, r0 @ pipelining issues + + @ here, r0 = num << (r3 + 1), r1 = num >> (32-r3), r2 = -denom + @ now, the real iteration part + .global divIteration +divIteration: + .rept 32 + adcs r1, r2, r1, lsl #1 + sublo r1, r1, r2 + adcs r0, r0, r0 + .endr + + @ and then finally quit + @ r0 = quotient, r1 = remainder + bx lr From c3141f851b94e196a97576e4209e314285077a4e Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Thu, 13 Aug 2020 22:23:09 +0300 Subject: [PATCH 03/58] GBA refactoring, optimizations --- src/platform/gba/OpenLara.vcxproj | 4 +- src/platform/gba/camera.h | 78 ++++ src/platform/gba/common.h | 42 +- src/platform/gba/level.h | 317 ++++++++++++++ src/platform/gba/main.cpp | 410 +----------------- .../{common.iwram.cpp => render.iwram.cpp} | 263 ++++++----- 6 files changed, 562 insertions(+), 552 deletions(-) create mode 100644 src/platform/gba/camera.h create mode 100644 src/platform/gba/level.h rename src/platform/gba/{common.iwram.cpp => render.iwram.cpp} (82%) diff --git a/src/platform/gba/OpenLara.vcxproj b/src/platform/gba/OpenLara.vcxproj index fca9492..24ee864 100644 --- a/src/platform/gba/OpenLara.vcxproj +++ b/src/platform/gba/OpenLara.vcxproj @@ -19,11 +19,13 @@ - + + + 15.0 diff --git a/src/platform/gba/camera.h b/src/platform/gba/camera.h new file mode 100644 index 0000000..bd47f12 --- /dev/null +++ b/src/platform/gba/camera.h @@ -0,0 +1,78 @@ +#ifndef H_CAMERA +#define H_CAMERA + +#include "common.h" + +uint16 camRotY = 16 << 8; + +int32 camSinY; +int32 camCosY; + +int32 camX = 75162; +int32 camY = 3072 - 1024; +int32 camZ = 5000; + +Rect clip; + +#ifdef _WIN32 + #define CAM_SPEED (1 << 2) + #define CAM_ROT_SPEED (1 << 2) +#else + #define CAM_SPEED (1 << 6) + #define CAM_ROT_SPEED (1 << 8) +#endif + +void updateCamera() { + if (keys[IK_LEFT]) camRotY -= CAM_ROT_SPEED; + if (keys[IK_RIGHT]) camRotY += CAM_ROT_SPEED; + + { + ALIGN4 ObjAffineSource src; + ALIGN4 ObjAffineDest dst; + + src.sX = 0x0100; + src.sY = 0x0100; + src.theta = camRotY; + + ObjAffineSet(&src, &dst, 1, 2); + + camCosY = dst.pd << 8; + camSinY = dst.pc << 8; + } + + int32 dx = camSinY; + int32 dz = camCosY; + + dx *= CAM_SPEED; + dz *= CAM_SPEED; + + dx >>= 16; + dz >>= 16; + + if (keys[IK_UP]) { + camX += int32(dx); + camZ += int32(dz); + } + + if (keys[IK_DOWN]) { + camX -= int32(dx); + camZ -= int32(dz); + } + + if (keys[IK_L]) { + camX -= int32(dz); + camZ += int32(dx); + } + + if (keys[IK_R]) { + camX += int32(dz); + camZ -= int32(dx); + } + + if (keys[IK_A]) camY -= CAM_SPEED; + if (keys[IK_B]) camY += CAM_SPEED; + + clip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; +} + +#endif \ No newline at end of file diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index da6c4ed..de6e0ee 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -38,7 +38,16 @@ #define PIXEL_SIZE 2 #endif -#define WND_SCALE 4 +#ifdef _WIN32 + #define INLINE inline + + #define MyDiv(Number, Divisor) ((Number) / (Divisor)) +#else + #define INLINE __attribute__((always_inline)) inline + + #define MyDiv(Number, Divisor) ((Number) / (Divisor)) + //#define MyDiv(Number, Divisor) Div(Number, Divisor) +#endif typedef signed char int8; typedef signed short int16; @@ -56,16 +65,6 @@ typedef int16 Index; #define RAD2DEG (180.0f / PI) #ifdef _WIN32 - extern uint8* LEVEL1_PHD; - - extern uint32 VRAM[WIDTH * HEIGHT]; - - #ifdef USE_MODE_5 - extern uint16 fb[WIDTH * HEIGHT]; - #else - extern uint8 fb[WIDTH * HEIGHT]; - #endif - #define IWRAM_CODE #define EWRAM_DATA @@ -99,8 +98,6 @@ typedef int16 Index; #else #define ALIGN4 __attribute__ ((aligned (4))) - - extern uint32 fb; #endif enum InputKey { @@ -225,7 +222,7 @@ struct Sprite { int16 l, t, r, b; }; -struct SpriteSequence { +struct SpriteSeq { uint16 type; uint16 unused; int16 sCount; @@ -240,9 +237,9 @@ struct Rect { }; struct Vertex { - int16 x, y; - int16 z; - uint8 u, v, g, clip; + int16 x, y, z; + uint8 g, clip; + uint8 u, v; }; struct Face { @@ -263,7 +260,16 @@ struct Face { #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) -void drawGlyph(int32 index, int32 x, int32 y); +void drawGlyph(const Sprite *sprite, int32 x, int32 y); +void drawNumber(int32 number, int32 x, int32 y); + void clear(); +void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z); +void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex); +void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex); +void flush(); +void initRender(); + +void readLevel(const uint8 *data); #endif \ No newline at end of file diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h new file mode 100644 index 0000000..f1e3154 --- /dev/null +++ b/src/platform/gba/level.h @@ -0,0 +1,317 @@ +#ifndef H_LEVEL +#define H_LEVEL + +#include "common.h" +#include "camera.h" + +// level file data ------------------- +uint32 tilesCount; +const uint8* tiles[15]; + +#if defined(USE_MODE_5) || defined(_WIN32) + ALIGN4 uint16 palette[256]; +#endif + +ALIGN4 uint8 lightmap[256 * 32]; + +uint16 roomsCount; +const Room* rooms; + +uint32 texturesCount; +const Texture* textures; + +const Sprite* sprites; + +uint32 spritesSeqCount; +const SpriteSeq* spritesSeq; + +const uint8* meshData; +const uint32* meshOffsets; + +const int32* nodes; +const Model* models; +// ----------------------------------- + +struct RoomDesc { + int32 x, z; + uint16 vCount; + uint16 qCount; + uint16 tCount; + uint16 pCount; + const Room::Vertex* vertices; + const Quad* quads; + const Triangle* triangles; + const Room::Portal* portals; +}; + +EWRAM_DATA RoomDesc roomDescs[64]; + +#define SEQ_GLYPH_ID 190 +int32 seqGlyphs; + +extern uint32 gVerticesCount; + +void readLevel(const uint8 *data) { // TODO non-hardcode level loader + tilesCount = *((uint32*)(data + 4)); + for (uint32 i = 0; i < tilesCount; i++) { + tiles[i] = data + 8 + 256 * 256 * i; + } + + roomsCount = *((uint16*)(data + 720908)); + rooms = (Room*)(data + 720908 + 2); + + texturesCount = *((uint32*)(data + 1271686)); + textures = (Texture*)(data + 1271686 + 4); + + sprites = (Sprite*)(data + 1289634); + + spritesSeqCount = *((uint32*)(data + 1292130)); + spritesSeq = (SpriteSeq*)(data + 1292130 + 4); + + meshData = data + 908172 + 4; + meshOffsets = (uint32*)(data + 975724 + 4); + + nodes = (int32*)(data + 990318); + + models = (Model*)(data + 1270670); + +// prepare lightmap + const uint8* f_lightmap = data + 1320576; + memcpy(lightmap, f_lightmap, sizeof(lightmap)); + +// prepare palette +#if !(defined(USE_MODE_5) || defined(_WIN32)) + uint16 palette[256]; +#endif + const uint8* f_palette = data + 1328768; + + const uint8* p = f_palette; + + for (int i = 0; i < 256; i++) { + palette[i] = (p[0] >> 1) | ((p[1] >> 1) << 5) | ((p[2] >> 1) << 10); + p += 3; + } + +#ifndef _WIN32 + #ifndef USE_MODE_5 + SetPalette(palette); + #endif +#endif + +// prepare glyphs + for (uint32 i = 0; i < spritesSeqCount; i++) { + if (spritesSeq[i].type == SEQ_GLYPH_ID) { + seqGlyphs = i; + break; + } + } + +// prepare rooms + uint8 *ptr = (uint8*)rooms; + + for (uint16 roomIndex = 0; roomIndex < roomsCount; roomIndex++) { + const Room *room = (Room*)ptr; + ptr += sizeof(Room); + + uint32 dataSize; + memcpy(&dataSize, &room->dataSize, sizeof(dataSize)); + uint8* skipPtr = ptr + dataSize * 2; + + RoomDesc &desc = roomDescs[roomIndex]; + + // offset + memcpy(&desc.x, &room->info.x, sizeof(room->info.x)); + memcpy(&desc.z, &room->info.z, sizeof(room->info.z)); + + // vertices + desc.vCount = *((uint16*)ptr); + ptr += 2; + desc.vertices = (Room::Vertex*)ptr; + ptr += sizeof(Room::Vertex) * desc.vCount; + + // quads + desc.qCount = *((uint16*)ptr); + ptr += 2; + desc.quads = (Quad*)ptr; + ptr += sizeof(Quad) * desc.qCount; + + // triangles + desc.tCount = *((uint16*)ptr); + ptr += 2; + desc.triangles = (Triangle*)ptr; + ptr += sizeof(Triangle) * desc.tCount; + + ptr = skipPtr; + + // portals + desc.pCount = *((uint16*)ptr); + ptr += 2; + desc.portals = (Room::Portal*)ptr; + ptr += sizeof(Room::Portal) * desc.pCount; + + uint16 zSectors = *((uint16*)ptr); + ptr += 2; + uint16 xSectors = *((uint16*)ptr); + ptr += 2; + //sectors = (Room::Sector*)sectors; + ptr += sizeof(Room::Sector) * zSectors * xSectors; + + //ambient = *((uint16*)ptr); + ptr += 2; + + uint16 lightsCount = *((uint16*)ptr); + ptr += 2; + //lights = (Room::Light*)ptr; + ptr += sizeof(Room::Light) * lightsCount; + + uint16 meshesCount = *((uint16*)ptr); + ptr += 2; + //meshes = (Room::Mesh*)ptr; + ptr += sizeof(Room::Mesh) * meshesCount; + + ptr += 2 + 2; // skip alternateRoom and flags + } +} + +void drawRoom(int16 roomIndex) { + RoomDesc &room = roomDescs[roomIndex]; + + int32 dx = -camX + room.x; + int32 dy = -camY; + int32 dz = -camZ + room.z; + + int32 startVertex = gVerticesCount; + + const Room::Vertex* vertices = room.vertices; + for (uint16 i = 0; i < room.vCount; i++) { + const Room::Vertex &v = vertices[i]; + transform(v.x, v.y, v.z, v.lighting, dx, dy, dz); + } + + const Quad* quads = room.quads; + for (uint16 i = 0; i < room.qCount; i++) { + faceAddQuad(quads[i].flags, quads[i].indices, startVertex); + } + + const Triangle* triangles = room.triangles; + for (uint16 i = 0; i < room.tCount; i++) { + faceAddTriangle(triangles[i].flags, triangles[i].indices, startVertex); + } +} + +void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { + uint32 offset = meshOffsets[meshIndex]; + const uint8* ptr = meshData + offset; + + ptr += 2 * 5; // skip [cx, cy, cz, radius, flags] + + int16 vCount = *(int16*)ptr; ptr += 2; + const int16* vertices = (int16*)ptr; + ptr += vCount * 3 * sizeof(int16); + + int16 nCount = *(int16*)ptr; ptr += 2; + //const int16* normals = (int16*)ptr; + if (nCount > 0) { // normals + ptr += nCount * 3 * sizeof(int16); + } else { // intensity + ptr += vCount * sizeof(int16); + } + + int16 rCount = *(int16*)ptr; ptr += 2; + Quad* rFaces = (Quad*)ptr; ptr += rCount * sizeof(Quad); + + int16 tCount = *(int16*)ptr; ptr += 2; + Triangle* tFaces = (Triangle*)ptr; ptr += tCount * sizeof(Triangle); + + int16 crCount = *(int16*)ptr; ptr += 2; + Quad* crFaces = (Quad*)ptr; ptr += crCount * sizeof(Quad); + + int16 ctCount = *(int16*)ptr; ptr += 2; + Triangle* ctFaces = (Triangle*)ptr; ptr += ctCount * sizeof(Triangle); + + int32 startVertex = gVerticesCount; + + int32 dx = x - camX; + int32 dy = y - camY; + int32 dz = z - camZ; + + const int16* v = vertices; + for (uint16 i = 0; i < vCount; i++) { + transform(v[0], v[1], v[2], 4096, dx, dy, dz); + v += 3; + } + + for (int i = 0; i < rCount; i++) { + faceAddQuad(rFaces[i].flags, rFaces[i].indices, startVertex); + } + + for (int i = 0; i < crCount; i++) { + faceAddQuad(crFaces[i].flags | FACE_COLORED, crFaces[i].indices, startVertex); + } + + for (int i = 0; i < tCount; i++) { + faceAddTriangle(tFaces[i].flags, tFaces[i].indices, startVertex); + } + + for (int i = 0; i < ctCount; i++) { + faceAddTriangle(ctFaces[i].flags | FACE_COLORED, ctFaces[i].indices, startVertex); + } +} + +void drawModel(int32 modelIndex, int32 x, int32 y, int32 z) { + const Model* model = models + modelIndex; + + // non-aligned access + uint32 node, frame; + memcpy(&node, &model->node, sizeof(node)); + memcpy(&frame, &model->frame, sizeof(frame)); + + Node bones[32]; + memcpy(bones, nodes + node, (model->mCount - 1) * sizeof(Node)); + + const Node* n = bones; + + struct StackItem { + int32 x, y, z; + } stack[4]; + StackItem *s = stack; + + drawMesh(model->mStart, x, y, z); + + for (int i = 1; i < model->mCount; i++) { + if (n->flags & 1) { + s--; + x = s->x; + y = s->y; + z = s->z; + } + + if (n->flags & 2) { + s->x = x; + s->y = y; + s->z = z; + s++; + } + + x += n->x; + y += n->y; + z += n->z; + n++; + + drawMesh(model->mStart + i, x, y, z); + } +} + +void drawNumber(int32 number, int32 x, int32 y) { + const int32 widths[] = { 12, 8, 10, 10, 10, 10, 10, 10, 10, 10 }; + + const Sprite *glyphSprites = sprites + spritesSeq[seqGlyphs].sStart; + + while (number > 0) { + x -= widths[number % 10]; + drawGlyph(glyphSprites + 52 + (number % 10), x, y); + number /= 10; + } +} + +#endif diff --git a/src/platform/gba/main.cpp b/src/platform/gba/main.cpp index 305a8fc..1ced7cf 100644 --- a/src/platform/gba/main.cpp +++ b/src/platform/gba/main.cpp @@ -12,397 +12,28 @@ #include "LEVEL1_PHD.h" #endif -#include "common.h" - //#define PROFILE -#if defined(USE_MODE_5) || defined(_WIN32) -extern uint16 palette[256]; -#endif - -extern uint8 lightmap[256 * 32]; - -extern Vertex gVertices[MAX_VERTICES]; -extern uint32 gVerticesCount; - -extern Face gFaces[MAX_FACES]; -extern int32 gFacesCount; - -extern Rect clip; - -extern const uint8* tiles[15]; - -extern const uint8* curTile; -uint32 tilesCount; - -extern int32 fps; - -uint16 camRotY = 16 << 8; - -extern int32 camSinY; -extern int32 camCosY; - -extern int32 camX; -extern int32 camY; -extern int32 camZ; - -extern uint16 roomsCount; -extern const Room* rooms; - -extern uint32 texturesCount; -extern const Texture* textures; - -extern const Sprite* sprites; - -extern uint32 spriteSequencesCount; -extern const SpriteSequence* spriteSequences; - -extern int32 seqGlyphs; - -extern const uint8* meshData; -extern const uint32* meshOffsets; - -extern const int32* nodes; -extern const Model* models; - -extern void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z); -extern void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex); -extern void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex); -extern void flush(); -extern void initRender(); - -void drawRoom(int16 roomIndex) { - const Room *room = rooms; - - //Room::Portal *portals; - uint16 portalsCount; - - //Room::Sector* sectors; - uint16 zSectors, xSectors; - - //uint16 ambient; - - //Room::Light* lights; - uint16 lightsCount; - - //Room::Mesh* meshes; - uint16 meshesCount; - - uint8 *ptr = (uint8*)room; - - while (roomIndex--) { - uint32 dataSize; - memcpy(&dataSize, &room->dataSize, sizeof(dataSize)); - ptr += sizeof(Room) + dataSize * 2; - - portalsCount = *((uint16*)ptr); - ptr += 2; - //portals = (Room::Portal*)ptr; - ptr += sizeof(Room::Portal) * portalsCount; - - zSectors = *((uint16*)ptr); - ptr += 2; - xSectors = *((uint16*)ptr); - ptr += 2; - //sectors = (Room::Sector*)sectors; - ptr += sizeof(Room::Sector) * zSectors * xSectors; - - //ambient = *((uint16*)ptr); - ptr += 2; - - lightsCount = *((uint16*)ptr); - ptr += 2; - //lights = (Room::Light*)ptr; - ptr += sizeof(Room::Light) * lightsCount; - - meshesCount = *((uint16*)ptr); - ptr += 2; - //meshes = (Room::Mesh*)ptr; - ptr += sizeof(Room::Mesh) * meshesCount; - - ptr += 2 + 2; // skip alternateRoom and flags - - room = (Room*)ptr; - } - - ptr += sizeof(Room); - - uint16 vCount = *((uint16*)ptr); - ptr += 2; - Room::Vertex* vertices = (Room::Vertex*)ptr; - ptr += sizeof(Room::Vertex) * vCount; - - // non-aligned data - int32 roomX; - int32 roomZ; - memcpy(&roomX, &room->info.x, sizeof(roomX)); - memcpy(&roomZ, &room->info.z, sizeof(roomZ)); - - int32 dx = -camX + roomX; - int32 dy = -camY; - int32 dz = -camZ + roomZ; - - int32 startVertex = gVerticesCount; - - for (uint16 i = 0; i < vCount; i++) { - const Room::Vertex &v = vertices[i]; - transform(v.x, v.y, v.z, v.lighting, dx, dy, dz); - } - - uint16 qCount = *((uint16*)ptr); - ptr += 2; - Quad* quads = (Quad*)ptr; - ptr += sizeof(Quad) * qCount; - - for (uint16 i = 0; i < qCount; i++) { - faceAddQuad(quads[i].flags, quads[i].indices, startVertex); - } - - uint16 tCount = *((uint16*)ptr); - ptr += 2; - Triangle* triangles = (Triangle*)ptr; - ptr += sizeof(Triangle) * tCount; - - for (uint16 i = 0; i < tCount; i++) { - faceAddTriangle(triangles[i].flags, triangles[i].indices, startVertex); - } -} - -void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { - uint32 offset = meshOffsets[meshIndex]; - const uint8* ptr = meshData + offset; - - //int16 cx = *(int16*)ptr; ptr += 2; - //int16 cy = *(int16*)ptr; ptr += 2; - //int16 cz = *(int16*)ptr; ptr += 2; - //int16 r = *(int16*)ptr; ptr += 2; - //ptr += 2; // skip flags - ptr += 2 * 5; - - int16 vCount = *(int16*)ptr; ptr += 2; - const int16* vertices = (int16*)ptr; - ptr += vCount * 3 * sizeof(int16); - - int16 nCount = *(int16*)ptr; ptr += 2; - //const int16* normals = (int16*)ptr; - if (nCount > 0) { // normals - ptr += nCount * 3 * sizeof(int16); - } else { // intensity - ptr += vCount * sizeof(int16); - } - - int16 rCount = *(int16*)ptr; ptr += 2; - Quad* rFaces = (Quad*)ptr; ptr += rCount * sizeof(Quad); - - int16 tCount = *(int16*)ptr; ptr += 2; - Triangle* tFaces = (Triangle*)ptr; ptr += tCount * sizeof(Triangle); - - int16 crCount = *(int16*)ptr; ptr += 2; - Quad* crFaces = (Quad*)ptr; ptr += crCount * sizeof(Quad); - - int16 ctCount = *(int16*)ptr; ptr += 2; - Triangle* ctFaces = (Triangle*)ptr; ptr += ctCount * sizeof(Triangle); - - int32 startVertex = gVerticesCount; - - int32 dx = x - camX; - int32 dy = y - camY; - int32 dz = z - camZ; - - const int16* v = vertices; - for (uint16 i = 0; i < vCount; i++) { - transform(v[0], v[1], v[2], 4096, dx, dy, dz); - v += 3; - } - - for (int i = 0; i < rCount; i++) { - faceAddQuad(rFaces[i].flags, rFaces[i].indices, startVertex); - } - - for (int i = 0; i < crCount; i++) { - faceAddQuad(crFaces[i].flags | FACE_COLORED, crFaces[i].indices, startVertex); - } - - for (int i = 0; i < tCount; i++) { - faceAddTriangle(tFaces[i].flags, tFaces[i].indices, startVertex); - } - - for (int i = 0; i < ctCount; i++) { - faceAddTriangle(ctFaces[i].flags | FACE_COLORED, ctFaces[i].indices, startVertex); - } -} - -void drawModel(int32 modelIndex, int32 x, int32 y, int32 z) { - const Model* model = models + modelIndex; - - // non-aligned access - uint32 node, frame; - memcpy(&node, &model->node, sizeof(node)); - memcpy(&frame, &model->frame, sizeof(frame)); - - Node bones[32]; - memcpy(bones, nodes + node, (model->mCount - 1) * sizeof(Node)); - - const Node* n = bones; - - struct StackItem { - int32 x, y, z; - } stack[4]; - StackItem *s = stack; - - drawMesh(model->mStart, x, y, z); - - for (int i = 1; i < model->mCount; i++) { - if (n->flags & 1) { - s--; - x = s->x; - y = s->y; - z = s->z; - } - - if (n->flags & 2) { - s->x = x; - s->y = y; - s->z = z; - s++; - } - - x += n->x; - y += n->y; - z += n->z; - n++; - - drawMesh(model->mStart + i, x, y, z); - } -} - -void readLevel(const uint8 *data) { - tilesCount = *((uint32*)(data + 4)); - for (uint32 i = 0; i < tilesCount; i++) { - tiles[i] = data + 8 + 256 * 256 * i; - } - - roomsCount = *((uint16*)(data + 720908)); - rooms = (Room*)(data + 720908 + 2); - - texturesCount = *((uint32*)(data + 1271686)); - textures = (Texture*)(data + 1271686 + 4); - - sprites = (Sprite*)(data + 1289634); - - spriteSequencesCount = *((uint32*)(data + 1292130)); - spriteSequences = (SpriteSequence*)(data + 1292130 + 4); - - for (uint32 i = 0; i < spriteSequencesCount; i++) { - if (spriteSequences[i].type == 190) { - seqGlyphs = i; - break; - } - } - - meshData = data + 908172 + 4; - meshOffsets = (uint32*)(data + 975724 + 4); - - nodes = (int32*)(data + 990318); - - models = (Model*)(data + 1270670); - - const uint8* f_lightmap = data + 1320576; - memcpy(lightmap, f_lightmap, sizeof(lightmap)); - -#if !(defined(USE_MODE_5) || defined(_WIN32)) - uint16 palette[256]; -#endif - - const uint8* f_palette = data + 1328768; - - const uint8* p = f_palette; - - for (int i = 0; i < 256; i++) { - palette[i] = (p[0] >> 1) | ((p[1] >> 1) << 5) | ((p[2] >> 1) << 10); - p += 3; - } - -#ifndef _WIN32 - palette[1] = RGB8(0, 255, 0); - - #ifndef USE_MODE_5 - SetPalette(palette); - #endif -#endif -} +#include "common.h" +#include "level.h" #ifdef _WIN32 - #define CAM_SPEED (1 << 3) - #define CAM_ROT_SPEED (1 << 3) + uint8* LEVEL1_PHD; + + uint32 SCREEN[WIDTH * HEIGHT]; + + extern uint8 fb[WIDTH * HEIGHT * 2]; + + #define WND_SCALE 4 #else - #define CAM_SPEED (1 << 6) - #define CAM_ROT_SPEED (1 << 8) + extern uint32 fb; #endif +bool keys[IK_MAX] = {}; -void updateCamera() { - if (keys[IK_LEFT]) camRotY -= CAM_ROT_SPEED; - if (keys[IK_RIGHT]) camRotY += CAM_ROT_SPEED; - - { - ALIGN4 ObjAffineSource src; - ALIGN4 ObjAffineDest dst; - - src.sX = 0x0100; - src.sY = 0x0100; - src.theta = camRotY; - - ObjAffineSet(&src, &dst, 1, 2); - - camCosY = dst.pd << 8; - camSinY = dst.pc << 8; - } - - int32 dx = camSinY; - int32 dz = camCosY; - - dx *= CAM_SPEED; - dz *= CAM_SPEED; - - dx >>= 16; - dz >>= 16; - - if (keys[IK_UP]) { - camX += int32(dx); - camZ += int32(dz); - } - - if (keys[IK_DOWN]) { - camX -= int32(dx); - camZ -= int32(dz); - } - - if (keys[IK_L]) { - camX -= int32(dz); - camZ += int32(dx); - } - - if (keys[IK_R]) { - camX += int32(dz); - camZ -= int32(dx); - } - - if (keys[IK_A]) camY -= CAM_SPEED; - if (keys[IK_B]) camY += CAM_SPEED; - - clip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; -} - -void drawNumber(int32 number, int32 x, int32 y) { - const int32 widths[] = { 12, 8, 10, 10, 10, 10, 10, 10, 10, 10 }; - - while (number > 0) { - x -= widths[number % 10]; - drawGlyph(52 + (number % 10), x, y); - number /= 10; - } -} +int32 fps; +int32 frameIndex = 0; +int32 fpsCounter = 0; void update(int32 frames) { for (int32 i = 0; i < frames; i++) { @@ -429,18 +60,18 @@ HDC hDC; void VBlankIntrWait() { #ifdef USE_MODE_5 for (int i = 0; i < WIDTH * HEIGHT; i++) { - uint16 c = fb[i]; - VRAM[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; + uint16 c = ((uint16*)fb)[i]; + SCREEN[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; } #else for (int i = 0; i < WIDTH * HEIGHT; i++) { - uint16 c = palette[fb[i]]; - VRAM[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; + uint16 c = palette[((uint8*)fb)[i]]; + SCREEN[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; } #endif const BITMAPINFO bmi = { sizeof(BITMAPINFOHEADER), WIDTH, -HEIGHT, 1, 32, BI_RGB, 0, 0, 0, 0, 0 }; - StretchDIBits(hDC, 0, 0, 240 * WND_SCALE, 160 * WND_SCALE, 0, 0, WIDTH, HEIGHT, VRAM, &bmi, DIB_RGB_COLORS, SRCCOPY); + StretchDIBits(hDC, 0, 0, 240 * WND_SCALE, 160 * WND_SCALE, 0, 0, WIDTH, HEIGHT, SCREEN, &bmi, DIB_RGB_COLORS, SRCCOPY); } LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -473,9 +104,6 @@ LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { } #endif -int32 frameIndex = 0; -int32 fpsCounter = 0; - void vblank() { frameIndex++; } diff --git a/src/platform/gba/common.iwram.cpp b/src/platform/gba/render.iwram.cpp similarity index 82% rename from src/platform/gba/common.iwram.cpp rename to src/platform/gba/render.iwram.cpp index 8b33a6e..b632d0e 100644 --- a/src/platform/gba/common.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -5,87 +5,36 @@ uint16 divTable[DIV_TABLE_SIZE]; #ifdef _WIN32 - uint8* LEVEL1_PHD; - - uint32 VRAM[WIDTH * HEIGHT]; - - #ifdef USE_MODE_5 - uint16 fb[WIDTH * HEIGHT]; - #else - uint8 fb[WIDTH * HEIGHT]; - #endif - - #define MyDiv(Number, Divisor) ((Number) / (Divisor)) + uint8 fb[WIDTH * HEIGHT * 2]; #else uint32 fb = VRAM; - - #define MyDiv(Number, Divisor) ((Number) / (Divisor)) - //#define MyDiv(Number, Divisor) Div(Number, Divisor) #endif #define FixedInvS(x) ((x < 0) ? -divTable[abs(x)] : divTable[x]) #define FixedInvU(x) divTable[x] -bool keys[IK_MAX] = {}; - #if defined(USE_MODE_5) || defined(_WIN32) -uint16 palette[256]; + extern uint16 palette[256]; #endif -uint8 lightmap[256 * 32]; +extern uint8 lightmap[256 * 32]; +extern const uint8* tiles[15]; +extern const Texture* textures; + +extern Rect clip; +extern int32 camSinY; +extern int32 camCosY; -Vertex gVertices[MAX_VERTICES]; uint32 gVerticesCount = 0; +EWRAM_DATA Vertex gVertices[MAX_VERTICES]; -EWRAM_DATA Face gFaces[MAX_FACES]; int32 gFacesCount = 0; - -Rect clip; - -const uint8* tiles[15]; +Face gFaces[MAX_FACES]; +Face* gFacesSorted[MAX_FACES]; const uint8* curTile; - uint16 mipMask; -int32 fps; - -int32 camSinY; -int32 camCosY; - -int32 camX = 75162; -int32 camY = 3072 - 1024; -int32 camZ = 5000; - -Vertex* Ledges[4]; -Vertex* Redges[4]; -int32 Lindex, Rindex; - -uint16 roomsCount; -const Room* rooms; - -uint32 texturesCount; -const Texture* textures; - -const Sprite* sprites; - -uint32 spriteSequencesCount; -const SpriteSequence* spriteSequences; - -int32 seqGlyphs; - -const uint8* meshData; -const uint32* meshOffsets; - -const int32* nodes; -const Model* models; - -#ifdef WIN32 - #define INLINE inline -#else - #define INLINE __attribute__((always_inline)) inline -#endif - int32 clamp(int32 x, int32 a, int32 b) { return x < a ? a : (x > b ? b : x); } @@ -261,6 +210,24 @@ struct Edge { return true; } + + void build(int32 start, int32 count, int32 t, int32 b, int32 incr) { + vert[index = 0] = gVertices + start + b; + + for (int i = 1; i < count; i++) { + b = (b + incr) % count; + + Vertex *v = gVertices + start + b; + + if (vert[index]->x != v->x || vert[index]->y != v->y) { + vert[++index] = v; + } + + if (b == t) { + break; + } + } + } }; INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, int32 dgdx) { @@ -317,6 +284,8 @@ INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 *(uint16*)pixel = p; pixel += 1; } + + if (p == 0xFFFFFFFF) return; } if (x2 & 1) @@ -388,6 +357,8 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i *(uint16*)pixel = p; pixel += 1; } + + if (p == 0xFFFFFFFF) return; } if (x2 & 1) @@ -565,7 +536,6 @@ void drawTriangle(uint16 flags, int32 start, const int8* indices) void drawQuad(uint16 flags, int32 start, const int8* indices) { Vertex *v1, *v2, *v3, *v4; - bool clipped = indices[0] == indices[1]; if (clipped) { @@ -587,14 +557,14 @@ void drawQuad(uint16 flags, int32 start, const int8* indices) { palIndex = 0xFFFF; curTile = tiles[tex.tile]; if (!clipped) { - v1->u = int32(tex.x0); - v1->v = int32(tex.y0); - v2->u = int32(tex.x1); - v2->v = int32(tex.y1); - v3->u = int32(tex.x2); - v3->v = int32(tex.y2); - v4->u = int32(tex.x3); - v4->v = int32(tex.y3); + v1->u = tex.x0; + v1->v = tex.y0; + v2->u = tex.x1; + v2->v = tex.y1; + v3->u = tex.x2; + v3->v = tex.y2; + v4->u = tex.x3; + v4->v = tex.y3; } } @@ -687,28 +657,9 @@ void drawPoly(uint16 flags, int32 start, int32 count) { } Edge L, R; - L.vert[L.index = 0] = gVertices + start + b; - R.vert[R.index = 0] = gVertices + start + b; - for (int i = 0; i < count; i++) { - int32 idx = (b + count + i) % count; - - L.vert[++L.index] = gVertices + start + idx; - - if (idx == t) { - break; - } - } - - for (int i = 0; i < count; i++) { - int32 idx = (b + count - i) % count; - - R.vert[++R.index] = gVertices + start + idx; - - if (idx == t) { - break; - } - } + L.build(start, count, t, b, count + 1); + R.build(start, count, t, b, count - 1); Vertex *v1 = gVertices + start + t; @@ -719,9 +670,7 @@ void drawPoly(uint16 flags, int32 start, int32 count) { } } -void drawGlyph(int32 index, int32 x, int32 y) { - const Sprite* sprite = sprites + spriteSequences[seqGlyphs].sStart + index; - +void drawGlyph(const Sprite *sprite, int32 x, int32 y) { int32 w = sprite->r - sprite->l; int32 h = sprite->b - sprite->t; @@ -730,12 +679,25 @@ void drawGlyph(int32 index, int32 x, int32 y) { int32 ix = x + sprite->l; int32 iy = y + sprite->t; - uint16* ptr = (uint16*)fb + iy * (WIDTH / PIXEL_SIZE) + (ix >> 1); + uint16* ptr = (uint16*)fb + iy * (WIDTH / PIXEL_SIZE); + +#ifdef USE_MODE_5 + ptr += ix; +#else + ptr += ix >> 1; +#endif const uint8* glyphData = tiles[sprite->tile] + 256 * sprite->v + sprite->u; while (h--) { + #ifdef USE_MODE_5 + for (int i = 0; i < w; i++) { + if (glyphData[i] == 0) continue; + + ptr[i] = palette[glyphData[i]]; + } + #else const uint8* p = glyphData; for (int i = 0; i < (w / 2); i++) { @@ -751,14 +713,14 @@ void drawGlyph(int32 index, int32 x, int32 y) { p += 2; } + #endif ptr += WIDTH / PIXEL_SIZE; glyphData += 256; } } -void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) -{ +void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) { #define LERP(a,b,t) (b + ((a - b) * t >> 16)) #define CLIP_AXIS(x, y, edge, output) {\ @@ -798,15 +760,15 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) if (!(flags & FACE_COLORED)) { const Texture &tex = textures[flags & FACE_TEXTURE]; curTile = tiles[tex.tile]; - poly[0]->u = int32(tex.x0); - poly[0]->v = int32(tex.y0); - poly[1]->u = int32(tex.x1); - poly[1]->v = int32(tex.y1); - poly[2]->u = int32(tex.x2); - poly[2]->v = int32(tex.y2); + poly[0]->u = tex.x0; + poly[0]->v = tex.y0; + poly[1]->u = tex.x1; + poly[1]->v = tex.y1; + poly[2]->u = tex.x2; + poly[2]->v = tex.y2; if (pCount == 4) { - poly[3]->u = int32(tex.x3); - poly[3]->v = int32(tex.y3); + poly[3]->u = tex.x3; + poly[3]->v = tex.y3; } } @@ -828,23 +790,24 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) int32 y1 = clip.y1; CLIP_VERTEX(y, x, y0, y1, &tmp, output); - Face &f = gFaces[gFacesCount++]; - f.flags = flags; - f.start = gVerticesCount; - f.indices[0] = count; - f.indices[1] = count; - /* + Face *f = gFaces + gFacesCount; + gFacesSorted[gFacesCount++] = f; + f->flags = flags; + f->start = gVerticesCount; + f->indices[0] = count; + f->indices[1] = count; + if (count == 3) { - f.flags |= FACE_TRIANGLE; - f.depth = (output[0].z + output[1].z + output[2].z) / 3; + f->flags |= FACE_TRIANGLE; + f->depth = (output[0].z + output[1].z + output[2].z) / 3; } else if (count == 4) { - f.depth = (output[0].z + output[1].z + output[2].z + output[3].z) >> 2; - } else*/ { + f->depth = (output[0].z + output[1].z + output[2].z + output[3].z) >> 2; + } else { int32 depth = output[0].z; for (int32 i = 1; i < count; i++) { depth = (depth + output[i].z) >> 1; } - f.depth = depth; + f->depth = depth; } gVerticesCount += count; @@ -874,14 +837,15 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { Vertex* poly[4] = { v1, v2, v3, v4 }; faceAddPolyClip(flags, poly, 4); } else { - Face &f = gFaces[gFacesCount++]; - f.flags = flags; - f.depth = (v1->z + v2->z + v3->z + v4->z) >> 2; - f.start = startVertex + indices[0]; - f.indices[0] = 0; - f.indices[1] = indices[1] - indices[0]; - f.indices[2] = indices[2] - indices[0]; - f.indices[3] = indices[3] - indices[0]; + Face *f = gFaces + gFacesCount; + gFacesSorted[gFacesCount++] = f; + f->flags = flags; + f->depth = (v1->z + v2->z + v3->z + v4->z) >> 2; + f->start = startVertex + indices[0]; + f->indices[0] = 0; + f->indices[1] = indices[1] - indices[0]; + f->indices[2] = indices[2] - indices[0]; + f->indices[3] = indices[3] - indices[0]; } } @@ -908,41 +872,56 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { Vertex* poly[3] = { v1, v2, v3 }; faceAddPolyClip(flags, poly, 3); } else { - Face &f = gFaces[gFacesCount++]; - f.flags = flags | FACE_TRIANGLE; - f.depth = (v1->z + v2->z + v3->z) / 3; - f.start = startVertex + indices[0]; - f.indices[0] = 0; - f.indices[1] = indices[1] - indices[0]; - f.indices[2] = indices[2] - indices[0]; + Face *f = gFaces + gFacesCount; + gFacesSorted[gFacesCount++] = f; + f->flags = flags | FACE_TRIANGLE; + f->depth = (v1->z + v2->z + v3->z) / 3; + f->start = startVertex + indices[0]; + f->indices[0] = 0; + f->indices[1] = indices[1] - indices[0]; + f->indices[2] = indices[2] - indices[0]; } } -int faceCmp(const void *a, const void *b) { - return ((Face*)b)->depth - ((Face*)a)->depth; +void faceSort(Face** faces, int32 L, int32 R) { + int32 i = L; + int32 j = R; + int16 depth = faces[(i + j) >> 1]->depth; + + while (i <= j) { + while (faces[i]->depth > depth) i++; + while (faces[j]->depth < depth) j--; + + if (i <= j) { + swap(faces[i++], faces[j--]); + } + }; + + if (L < j) faceSort(faces, L, j); + if (R > i) faceSort(faces, i, R); } //int32 gFacesCountMax, gVerticesCountMax; void flush() { if (gFacesCount) { - qsort(gFaces, gFacesCount, sizeof(Face), faceCmp); + faceSort(gFacesSorted, 0, gFacesCount - 1); //const uint16 mips[] = { 0xFFFF, 0xFEFE, 0xFCFC, 0xF8F8 }; for (int32 i = 0; i < gFacesCount; i++) { - const Face &f = gFaces[i]; + const Face *f = gFacesSorted[i]; // TODO //mipMask = mips[MIN(3, f.depth / 2048)]; - if (f.flags & FACE_TRIANGLE) { - drawTriangle(f.flags, f.start, f.indices); + if (f->flags & FACE_TRIANGLE) { + drawTriangle(f->flags, f->start, f->indices); } else { - if (f.indices[0] == f.indices[1] /* && f.indices[0] > 4 */) { - drawPoly(f.flags, f.start, f.indices[0]); + if (f->indices[0] == f->indices[1] /* && f.indices[0] > 4 */) { + drawPoly(f->flags, f->start, f->indices[0]); } else { - drawQuad(f.flags, f.start, f.indices); + drawQuad(f->flags, f->start, f->indices); } } } From c430b393e3fb8c6dd8738c70c3163a09eaa6b70b Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 14 Aug 2020 04:24:29 +0300 Subject: [PATCH 04/58] GBA refactoring --- src/platform/gba/render.iwram.cpp | 49 ++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index b632d0e..732889d 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -462,25 +462,25 @@ void rasterizeGT(uint16* buffer, Edge &L, Edge &R) } } -void drawTriangle(uint16 flags, int32 start, const int8* indices) +void drawTriangle(const Face* face) { Vertex *v1, *v2, *v3; - bool clipped = indices[0] == indices[1]; + bool clipped = face->indices[0] == face->indices[1]; if (clipped) { - v1 = gVertices + start; + v1 = gVertices + face->start; v2 = v1 + 1; v3 = v1 + 2; } else { - v1 = gVertices + start; - v2 = v1 + indices[1]; - v3 = v1 + indices[2]; + v1 = gVertices + face->start; + v2 = v1 + face->indices[1]; + v3 = v1 + face->indices[2]; } - uint16 palIndex = flags & FACE_TEXTURE; + uint16 palIndex = face->flags & FACE_TEXTURE; - if (!(flags & FACE_COLORED)) { + if (!(face->flags & FACE_COLORED)) { const Texture &tex = textures[palIndex]; palIndex = 0xFFFF; curTile = tiles[tex.tile]; @@ -534,25 +534,25 @@ void drawTriangle(uint16 flags, int32 start, const int8* indices) } } -void drawQuad(uint16 flags, int32 start, const int8* indices) { +void drawQuad(const Face* face) { Vertex *v1, *v2, *v3, *v4; - bool clipped = indices[0] == indices[1]; + bool clipped = face->indices[0] == face->indices[1]; if (clipped) { - v1 = gVertices + start; + v1 = gVertices + face->start; v2 = v1 + 1; v3 = v1 + 2; v4 = v1 + 3; } else { - v1 = gVertices + start; - v2 = v1 + indices[1]; - v3 = v1 + indices[2]; - v4 = v1 + indices[3]; + v1 = gVertices + face->start; + v2 = v1 + face->indices[1]; + v3 = v1 + face->indices[2]; + v4 = v1 + face->indices[3]; } - uint16 palIndex = flags & FACE_TEXTURE; + uint16 palIndex = face->flags & FACE_TEXTURE; - if (!(flags & FACE_COLORED)) { + if (!(face->flags & FACE_COLORED)) { const Texture &tex = textures[palIndex]; palIndex = 0xFFFF; curTile = tiles[tex.tile]; @@ -629,15 +629,18 @@ void drawQuad(uint16 flags, int32 start, const int8* indices) { } } -void drawPoly(uint16 flags, int32 start, int32 count) { - uint16 palIndex = flags & FACE_TEXTURE; +void drawPoly(const Face* face) { + uint16 palIndex = face->flags & FACE_TEXTURE; - if (!(flags & FACE_COLORED)) { + if (!(face->flags & FACE_COLORED)) { const Texture &tex = textures[palIndex]; palIndex = 0xFFFF; curTile = tiles[tex.tile]; } + int32 start = face->start; + int32 count = face->indices[0]; + int32 minY = 0x7FFF; int32 maxY = -0x7FFF; int32 t = start, b = start; @@ -916,12 +919,12 @@ void flush() { //mipMask = mips[MIN(3, f.depth / 2048)]; if (f->flags & FACE_TRIANGLE) { - drawTriangle(f->flags, f->start, f->indices); + drawTriangle(f); } else { if (f->indices[0] == f->indices[1] /* && f.indices[0] > 4 */) { - drawPoly(f->flags, f->start, f->indices[0]); + drawPoly(f); } else { - drawQuad(f->flags, f->start, f->indices); + drawQuad(f); } } } From 9e1234fc62f774946dc1e660e130a6084e9c15b3 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Mon, 17 Aug 2020 07:42:21 +0300 Subject: [PATCH 05/58] GBA: free camera, portals visibility system --- src/platform/gba/camera.h | 110 ++++----- src/platform/gba/common.h | 99 ++++---- src/platform/gba/level.h | 377 ++++++++++++++++++++++++------ src/platform/gba/main.cpp | 22 +- src/platform/gba/render.iwram.cpp | 296 +++++++++++++++++++---- 5 files changed, 687 insertions(+), 217 deletions(-) diff --git a/src/platform/gba/camera.h b/src/platform/gba/camera.h index bd47f12..04da9bf 100644 --- a/src/platform/gba/camera.h +++ b/src/platform/gba/camera.h @@ -3,76 +3,64 @@ #include "common.h" -uint16 camRotY = 16 << 8; +#define CAM_SPEED (1 << 2) +#define CAM_ROT_SPEED (1 << 8) +#define CAM_ROT_X_MAX int16(85 * 0x8000 / 180) -int32 camSinY; -int32 camCosY; +struct Camera { + vec3i pos; + int16 rotX, rotY; + int32 room; -int32 camX = 75162; -int32 camY = 3072 - 1024; -int32 camZ = 5000; + void init() { + pos.x = 75162; + pos.y = 2048; + pos.z = 5000; -Rect clip; - -#ifdef _WIN32 - #define CAM_SPEED (1 << 2) - #define CAM_ROT_SPEED (1 << 2) -#else - #define CAM_SPEED (1 << 6) - #define CAM_ROT_SPEED (1 << 8) -#endif - -void updateCamera() { - if (keys[IK_LEFT]) camRotY -= CAM_ROT_SPEED; - if (keys[IK_RIGHT]) camRotY += CAM_ROT_SPEED; - - { - ALIGN4 ObjAffineSource src; - ALIGN4 ObjAffineDest dst; - - src.sX = 0x0100; - src.sY = 0x0100; - src.theta = camRotY; - - ObjAffineSet(&src, &dst, 1, 2); - - camCosY = dst.pd << 8; - camSinY = dst.pc << 8; + rotX = 0; + rotY = 16 << 8; } - int32 dx = camSinY; - int32 dz = camCosY; + void update() { + if (keys[IK_UP]) rotX -= CAM_ROT_SPEED; + if (keys[IK_DOWN]) rotX += CAM_ROT_SPEED; + if (keys[IK_LEFT]) rotY -= CAM_ROT_SPEED; + if (keys[IK_RIGHT]) rotY += CAM_ROT_SPEED; - dx *= CAM_SPEED; - dz *= CAM_SPEED; + rotX = clamp(rotX, -CAM_ROT_X_MAX, CAM_ROT_X_MAX); - dx >>= 16; - dz >>= 16; + matrixSetView(pos, rotX, rotY); - if (keys[IK_UP]) { - camX += int32(dx); - camZ += int32(dz); + Matrix &m = matrixGet(); + + if (keys[IK_R]) { + pos.x += m[0].x * CAM_SPEED >> 10; + pos.y += m[0].y * CAM_SPEED >> 10; + pos.z += m[0].z * CAM_SPEED >> 10; + } + + if (keys[IK_L]) { + pos.x -= m[0].x * CAM_SPEED >> 10; + pos.y -= m[0].y * CAM_SPEED >> 10; + pos.z -= m[0].z * CAM_SPEED >> 10; + } + + if (keys[IK_A]) { + pos.x += m[2].x * CAM_SPEED >> 10; + pos.y += m[2].y * CAM_SPEED >> 10; + pos.z += m[2].z * CAM_SPEED >> 10; + } + + if (keys[IK_B]) { + pos.x -= m[2].x * CAM_SPEED >> 10; + pos.y -= m[2].y * CAM_SPEED >> 10; + pos.z -= m[2].z * CAM_SPEED >> 10; + } + + room = getRoomIndex(room, pos); } +}; - if (keys[IK_DOWN]) { - camX -= int32(dx); - camZ -= int32(dz); - } - - if (keys[IK_L]) { - camX -= int32(dz); - camZ += int32(dx); - } - - if (keys[IK_R]) { - camX += int32(dz); - camZ -= int32(dx); - } - - if (keys[IK_A]) camY -= CAM_SPEED; - if (keys[IK_B]) camY += CAM_SPEED; - - clip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; -} +Camera camera; #endif \ No newline at end of file diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index de6e0ee..9be08c2 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -70,32 +70,6 @@ typedef int16 Index; #define dmaCopy(src,dst,size) memcpy(dst,src,size) #define ALIGN4 - - struct ObjAffineSource { - int16 sX; - int16 sY; - uint16 theta; - }; - - struct ObjAffineDest { - int16 pa; - int16 pb; - int16 pc; - int16 pd; - }; - - static void ObjAffineSet(ObjAffineSource *source, ObjAffineDest *dest, int32 num, int32 offset) { - float ang = (source->theta >> 8) * PI / 128.0f; - - int32 c = int32(cosf(ang) * 16384.0f); - int32 s = int32(sinf(ang) * 16384.0f); - - dest->pa = ( source->sX * c) >> 14; - dest->pb = (-source->sX * s) >> 14; - dest->pc = ( source->sY * s) >> 14; - dest->pd = ( source->sY * c) >> 14; - } - #else #define ALIGN4 __attribute__ ((aligned (4))) #endif @@ -114,6 +88,23 @@ enum InputKey { extern bool keys[IK_MAX]; +struct vec3i { + int32 x, y, z; + + vec3i() = default; + INLINE vec3i(int32 x, int32 y, int32 z) : x(x), y(y), z(z) {} +}; + +struct vec3s { + int16 x, y, z; +}; + +struct vec4i { + int32 x, y, z, w; +}; + +typedef vec4i Matrix[3]; + struct Quad { Index indices[4]; uint16 flags; @@ -131,7 +122,7 @@ struct Room { }; struct Vertex { - int16 x, y, z; + vec3s pos; uint16 lighting; }; @@ -141,13 +132,9 @@ struct Room { }; struct Portal { - struct Vertex { - int16 x, y, z; - }; - uint16 roomIndex; - Vertex n; - Vertex v[4]; + vec3s n; + vec3s v[4]; }; struct Sector { @@ -193,17 +180,27 @@ struct Room { struct Node { uint32 flags; - int32 x, y, z; + vec3i pos; }; struct Model { - uint16 type; - uint16 index; + uint32 type; uint16 mCount; uint16 mStart; uint32 node; uint32 frame; uint16 animation; + uint16 paddding; +}; + +#define FILE_MODEL_SIZE (sizeof(Model) - 2) // -padding + +struct Entity { + uint16 type; + uint16 room; + vec3i pos; + int16 rotation; + uint16 flags; }; struct Texture { @@ -249,9 +246,16 @@ struct Face { int8 indices[4]; }; +#define FIXED_SHIFT 14 +#define FOV_SHIFT 7 + +#define MAX_MATRICES 8 +#define MAX_MODELS 64 +#define MAX_ENTITY 190 #define MAX_VERTICES 1024 #define MAX_FACES 384 -#define MAX_DIST (16 * 1024) +#define MIN_DIST ((32) << FIXED_SHIFT) +#define MAX_DIST ((16 * 1024) << FIXED_SHIFT) #define FACE_TRIANGLE 0x8000 #define FACE_COLORED 0x4000 @@ -259,17 +263,34 @@ struct Face { #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define SQR(x) ((x) * (x)) + +#define DP43(a,b) ((a).x * (b).x + (a).y * (b).y + (a).z * (b).z + (a).w) +#define DP33(a,b) ((a).x * (b).x + (a).y * (b).y + (a).z * (b).z) + +int32 clamp(int32 x, int32 a, int32 b); +int32 phd_sin(int32 x); +int32 phd_cos(int32 x); + +Matrix& matrixGet(); +void matrixPush(); +void matrixPop(); +void matrixTranslate(const vec3i &offset); +void matrixTranslateAbs(const vec3i &offset); +void matrixRotate(int16 rotX, int16 rotY, int16 rotZ); +void matrixSetView(const vec3i &pos, int16 rotX, int16 rotY); void drawGlyph(const Sprite *sprite, int32 x, int32 y); -void drawNumber(int32 number, int32 x, int32 y); void clear(); -void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z); +void transform(const vec3s &v, int32 vg); void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex); void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex); void flush(); void initRender(); void readLevel(const uint8 *data); +const Room::Sector* getSector(int32 roomIndex, int32 x, int32 z); +int32 getRoomIndex(int32 roomIndex, const vec3i &pos); #endif \ No newline at end of file diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h index f1e3154..a73dced 100644 --- a/src/platform/gba/level.h +++ b/src/platform/gba/level.h @@ -15,7 +15,8 @@ const uint8* tiles[15]; ALIGN4 uint8 lightmap[256 * 32]; uint16 roomsCount; -const Room* rooms; + +const uint16* floors; uint32 texturesCount; const Texture* textures; @@ -29,27 +30,60 @@ const uint8* meshData; const uint32* meshOffsets; const int32* nodes; -const Model* models; + +uint32 modelsCount; +EWRAM_DATA Model models[MAX_MODELS]; +EWRAM_DATA int16 modelsMap[MAX_ENTITY]; + +uint32 entitiesCount; +const Entity* entities; // ----------------------------------- struct RoomDesc { + Rect clip; + bool visible; int32 x, z; uint16 vCount; uint16 qCount; uint16 tCount; uint16 pCount; + uint16 zSectors; + uint16 xSectors; const Room::Vertex* vertices; const Quad* quads; const Triangle* triangles; const Room::Portal* portals; + const Room::Sector* sectors; + + INLINE void reset() { + visible = false; + clip = { FRAME_WIDTH, FRAME_HEIGHT, 0, 0 }; + } }; -EWRAM_DATA RoomDesc roomDescs[64]; +EWRAM_DATA RoomDesc rooms[64]; + +int32 visRoomsCount; +int32 visRooms[16]; + +#define ROOM_VISIBLE (1 << 15) + +#define ENTITY_LARA 0 + +#define SEQ_GLYPH 190 + +enum FloorType { + FLOOR_TYPE_NONE, + FLOOR_TYPE_PORTAL, + FLOOR_TYPE_FLOOR, + FLOOR_TYPE_CEILING, +}; -#define SEQ_GLYPH_ID 190 int32 seqGlyphs; +int32 entityLara; extern uint32 gVerticesCount; +extern Rect clip; void readLevel(const uint8 *data) { // TODO non-hardcode level loader tilesCount = *((uint32*)(data + 4)); @@ -58,7 +92,9 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader } roomsCount = *((uint16*)(data + 720908)); - rooms = (Room*)(data + 720908 + 2); + const Room* roomsPtr = (Room*)(data + 720908 + 2); + + floors = (uint16*)(data + 899492 + 4); texturesCount = *((uint32*)(data + 1271686)); textures = (Texture*)(data + 1271686 + 4); @@ -73,7 +109,11 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader nodes = (int32*)(data + 990318); - models = (Model*)(data + 1270670); + modelsCount = *((uint32*)(data + 1270666)); + const uint8* modelsPtr = (uint8*)(data + 1270666 + 4); + + entitiesCount = *((uint32*)(data + 1319252)); + entities = (Entity*)(data + 1319252 + 4); // prepare lightmap const uint8* f_lightmap = data + 1320576; @@ -97,17 +137,31 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader SetPalette(palette); #endif #endif +// prepare models + for (uint32 i = 0; i < modelsCount; i++) { + dmaCopy(modelsPtr, models + i, sizeof(Model)); // sizeof(Model) is faster than FILE_MODEL_SIZE + modelsPtr += FILE_MODEL_SIZE; + modelsMap[models[i].type] = i; + } + +// prepare entities + for (uint32 i = 0; i < entitiesCount; i++) { + if (entities[i].type == ENTITY_LARA) { + entityLara = i; + break; + } + } // prepare glyphs for (uint32 i = 0; i < spritesSeqCount; i++) { - if (spritesSeq[i].type == SEQ_GLYPH_ID) { + if (spritesSeq[i].type == SEQ_GLYPH) { seqGlyphs = i; break; } } // prepare rooms - uint8 *ptr = (uint8*)rooms; + uint8 *ptr = (uint8*)roomsPtr; for (uint16 roomIndex = 0; roomIndex < roomsCount; roomIndex++) { const Room *room = (Room*)ptr; @@ -117,7 +171,8 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader memcpy(&dataSize, &room->dataSize, sizeof(dataSize)); uint8* skipPtr = ptr + dataSize * 2; - RoomDesc &desc = roomDescs[roomIndex]; + RoomDesc &desc = rooms[roomIndex]; + desc.reset(); // offset memcpy(&desc.x, &room->info.x, sizeof(room->info.x)); @@ -149,12 +204,12 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader desc.portals = (Room::Portal*)ptr; ptr += sizeof(Room::Portal) * desc.pCount; - uint16 zSectors = *((uint16*)ptr); + desc.zSectors = *((uint16*)ptr); ptr += 2; - uint16 xSectors = *((uint16*)ptr); + desc.xSectors = *((uint16*)ptr); ptr += 2; - //sectors = (Room::Sector*)sectors; - ptr += sizeof(Room::Sector) * zSectors * xSectors; + desc.sectors = (Room::Sector*)ptr; + ptr += sizeof(Room::Sector) * desc.zSectors * desc.xSectors; //ambient = *((uint16*)ptr); ptr += 2; @@ -171,42 +226,19 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader ptr += 2 + 2; // skip alternateRoom and flags } + + camera.init(); + camera.room = entities[entityLara].room; } -void drawRoom(int16 roomIndex) { - RoomDesc &room = roomDescs[roomIndex]; - - int32 dx = -camX + room.x; - int32 dy = -camY; - int32 dz = -camZ + room.z; - - int32 startVertex = gVerticesCount; - - const Room::Vertex* vertices = room.vertices; - for (uint16 i = 0; i < room.vCount; i++) { - const Room::Vertex &v = vertices[i]; - transform(v.x, v.y, v.z, v.lighting, dx, dy, dz); - } - - const Quad* quads = room.quads; - for (uint16 i = 0; i < room.qCount; i++) { - faceAddQuad(quads[i].flags, quads[i].indices, startVertex); - } - - const Triangle* triangles = room.triangles; - for (uint16 i = 0; i < room.tCount; i++) { - faceAddTriangle(triangles[i].flags, triangles[i].indices, startVertex); - } -} - -void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { +void drawMesh(int16 meshIndex) { uint32 offset = meshOffsets[meshIndex]; const uint8* ptr = meshData + offset; ptr += 2 * 5; // skip [cx, cy, cz, radius, flags] int16 vCount = *(int16*)ptr; ptr += 2; - const int16* vertices = (int16*)ptr; + const vec3s* vertices = (vec3s*)ptr; ptr += vCount * 3 * sizeof(int16); int16 nCount = *(int16*)ptr; ptr += 2; @@ -231,14 +263,8 @@ void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { int32 startVertex = gVerticesCount; - int32 dx = x - camX; - int32 dy = y - camY; - int32 dz = z - camZ; - - const int16* v = vertices; for (uint16 i = 0; i < vCount; i++) { - transform(v[0], v[1], v[2], 4096, dx, dy, dz); - v += 3; + transform(*vertices++, 4096); } for (int i = 0; i < rCount; i++) { @@ -258,7 +284,7 @@ void drawMesh(int16 meshIndex, int32 x, int32 y, int32 z) { } } -void drawModel(int32 modelIndex, int32 x, int32 y, int32 z) { +void drawModel(int32 modelIndex) { const Model* model = models + modelIndex; // non-aligned access @@ -271,37 +297,35 @@ void drawModel(int32 modelIndex, int32 x, int32 y, int32 z) { const Node* n = bones; - struct StackItem { - int32 x, y, z; - } stack[4]; - StackItem *s = stack; - - drawMesh(model->mStart, x, y, z); + drawMesh(model->mStart); for (int i = 1; i < model->mCount; i++) { if (n->flags & 1) { - s--; - x = s->x; - y = s->y; - z = s->z; + matrixPop(); } if (n->flags & 2) { - s->x = x; - s->y = y; - s->z = z; - s++; + matrixPush(); } - x += n->x; - y += n->y; - z += n->z; + matrixTranslate(n->pos); n++; - drawMesh(model->mStart + i, x, y, z); + drawMesh(model->mStart + i); } } +void drawEntity(int32 entityIndex) { + const Entity &e = entities[entityIndex]; + + matrixPush(); + matrixTranslateAbs(vec3i(e.pos.x, e.pos.y - 512, e.pos.z)); // TODO animation + + drawModel(modelsMap[e.type]); + + matrixPop(); +} + void drawNumber(int32 number, int32 x, int32 y) { const int32 widths[] = { 12, 8, 10, 10, 10, 10, 10, 10, 10, 10 }; @@ -314,4 +338,223 @@ void drawNumber(int32 number, int32 x, int32 y) { } } +void drawRoom(int16 roomIndex) { + RoomDesc &room = rooms[roomIndex]; + + clip = room.clip; + + int32 startVertex = gVerticesCount; + + matrixPush(); + matrixTranslateAbs(vec3i(room.x, 0, room.z)); + + const Room::Vertex* vertex = room.vertices; + for (uint16 i = 0; i < room.vCount; i++) { + transform(vertex->pos, vertex->lighting); + vertex++; + } + + matrixPop(); + + const Quad* quads = room.quads; + for (uint16 i = 0; i < room.qCount; i++) { + faceAddQuad(quads[i].flags, quads[i].indices, startVertex); + } + + const Triangle* triangles = room.triangles; + for (uint16 i = 0; i < room.tCount; i++) { + faceAddTriangle(triangles[i].flags, triangles[i].indices, startVertex); + } + + if (roomIndex == entityLara) { // TODO draw all entities in the room + drawEntity(entityLara); + } + + room.reset(); + + flush(); +} + +const Room::Sector* getSector(int32 roomIndex, int32 x, int32 z) { + RoomDesc &room = rooms[roomIndex]; + + int32 sx = clamp((x - room.x) >> 10, 0, room.xSectors); + int32 sz = clamp((z - room.z) >> 10, 0, room.zSectors); + + return room.sectors + sx * room.zSectors + sz; +} + +int32 getRoomIndex(int32 roomIndex, const vec3i &pos) { + const Room::Sector *sector = getSector(roomIndex, pos.x, pos.z); + + if (sector->floorIndex) { + const uint16 *data = floors + sector->floorIndex; + int16 type = *data++; + + if (type == FLOOR_TYPE_FLOOR) { + data++; + type = *data++; + } + + if (type == FLOOR_TYPE_CEILING) { + data++; + type = *data++; + } + + if ((type & 0xFF) == FLOOR_TYPE_PORTAL) { + roomIndex = *data; + } + } + + while (sector->roomAbove != 0xFF && pos.y < (sector->ceiling << 8)) { + roomIndex = sector->roomAbove; + sector = getSector(roomIndex, pos.x, pos.z); + } + + while (sector->roomBelow != 0xFF && pos.y >= (sector->floor << 8)) { + roomIndex = sector->roomBelow; + sector = getSector(roomIndex, pos.x, pos.z); + } + + return roomIndex; +} + +bool checkPortal(int32 roomIndex, const Room::Portal &portal) { + RoomDesc &room = rooms[roomIndex]; + + vec3i d; + d.x = portal.v[0].x - camera.pos.x + room.x; + d.y = portal.v[0].y - camera.pos.y; + d.z = portal.v[0].z - camera.pos.z + room.z; + + if (DP33(portal.n, d) >= 0) { + return false; + } + + int32 x0 = room.clip.x1; + int32 y0 = room.clip.y1; + int32 x1 = room.clip.x0; + int32 y1 = room.clip.y0; + + int32 znear = 0, zfar = 0; + + Matrix &m = matrixGet(); + + vec3i pv[4]; + + for (int32 i = 0; i < 4; i++) { + const vec3s &v = portal.v[i]; + + int32 x = DP43(m[0], v); + int32 y = DP43(m[1], v); + int32 z = DP43(m[2], v); + + pv[i].x = x; + pv[i].y = y; + pv[i].z = z; + + if (z <= MIN_DIST) { + znear++; + continue; + } + + if (z >= MAX_DIST) { + zfar++; + } + + if (z != 0) { + z >>= FOV_SHIFT; + x = MyDiv(x, z) + (FRAME_WIDTH / 2); + y = MyDiv(y, z) + (FRAME_HEIGHT / 2); + } else { + x = (x > 0) ? clip.x1 : clip.x0; + y = (y > 0) ? clip.y1 : clip.y0; + } + + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + if (znear == 4 || zfar == 4) return false; + + if (znear) { + vec3i *a = pv; + vec3i *b = pv + 3; + for (int32 i = 0; i < 4; i++) { + if ((a->z < 0) ^ (b->z < 0)) { + if (a->x < 0 && b->x < 0) { + x0 = 0; + } else if (a->x > 0 && b->x > 0) { + x1 = FRAME_WIDTH; + } else { + x0 = 0; + x1 = FRAME_WIDTH; + } + + if (a->y < 0 && b->y < 0) { + y0 = 0; + } else if (a->y > 0 && b->y > 0) { + y1 = FRAME_HEIGHT; + } else { + y0 = 0; + y1 = FRAME_HEIGHT; + } + } + b = a; + a++; + } + } + + if (x0 < room.clip.x0) x0 = room.clip.x0; + if (x1 > room.clip.x1) x1 = room.clip.x1; + if (y0 < room.clip.y0) y0 = room.clip.y0; + if (y1 > room.clip.y1) y1 = room.clip.y1; + + if (x0 >= x1 || y0 >= y1) return false; + + RoomDesc &nextRoom = rooms[portal.roomIndex]; + + if (x0 < nextRoom.clip.x0) nextRoom.clip.x0 = x0; + if (x1 > nextRoom.clip.x1) nextRoom.clip.x1 = x1; + if (y0 < nextRoom.clip.y0) nextRoom.clip.y0 = y0; + if (y1 > nextRoom.clip.y1) nextRoom.clip.y1 = y1; + + if (!nextRoom.visible) { + nextRoom.visible = true; + visRooms[visRoomsCount++] = portal.roomIndex; + } + + return true; +} + +void getVisibleRooms(int32 roomIndex) { + RoomDesc &room = rooms[roomIndex]; + + matrixPush(); + matrixTranslateAbs(vec3i(room.x, 0, room.z)); + + for (int32 i = 0; i < room.pCount; i++) { + const Room::Portal &portal = room.portals[i]; + if (checkPortal(roomIndex, portal)) { + getVisibleRooms(portal.roomIndex); + } + } + + matrixPop(); +} + +void drawRooms() { + rooms[camera.room].clip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; + visRoomsCount = 0; + visRooms[visRoomsCount++] = camera.room; + + getVisibleRooms(camera.room); + + while (visRoomsCount--) { + drawRoom(visRooms[visRoomsCount]); + } +} + #endif diff --git a/src/platform/gba/main.cpp b/src/platform/gba/main.cpp index 1ced7cf..7165e6e 100644 --- a/src/platform/gba/main.cpp +++ b/src/platform/gba/main.cpp @@ -16,6 +16,7 @@ #include "common.h" #include "level.h" +#include "camera.h" #ifdef _WIN32 uint8* LEVEL1_PHD; @@ -37,19 +38,14 @@ int32 fpsCounter = 0; void update(int32 frames) { for (int32 i = 0; i < frames; i++) { - updateCamera(); + camera.update(); } } void render() { clear(); - drawRoom(6); - flush(); - - drawRoom(0); - drawModel(0, 75162, 3072 - 512, 5000 + 1024); - flush(); + drawRooms(); drawNumber(fps, WIDTH, 16); } @@ -57,7 +53,7 @@ void render() { #ifdef _WIN32 HDC hDC; -void VBlankIntrWait() { +void blit() { #ifdef USE_MODE_5 for (int i = 0; i < WIDTH * HEIGHT; i++) { uint16 c = ((uint16*)fb)[i]; @@ -146,16 +142,22 @@ int main(void) { MSG msg; + int startTime = GetTickCount(); + int lastTime = -15; + do { if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { - update(1); + int time = GetTickCount() - startTime; + update((time - lastTime) / 16); + lastTime = time; + render(); - VBlankIntrWait(); + blit(); } } while (msg.message != WM_QUIT); diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 732889d..b2f74d8 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -21,10 +21,6 @@ extern uint8 lightmap[256 * 32]; extern const uint8* tiles[15]; extern const Texture* textures; -extern Rect clip; -extern int32 camSinY; -extern int32 camCosY; - uint32 gVerticesCount = 0; EWRAM_DATA Vertex gVertices[MAX_VERTICES]; @@ -35,6 +31,238 @@ Face* gFacesSorted[MAX_FACES]; const uint8* curTile; uint16 mipMask; +Rect clip; + + +const int16 sin_table[] = { // 1025 + 0x0000, 0x0019, 0x0032, 0x004B, 0x0065, 0x007E, 0x0097, 0x00B0, + 0x00C9, 0x00E2, 0x00FB, 0x0114, 0x012E, 0x0147, 0x0160, 0x0179, + 0x0192, 0x01AB, 0x01C4, 0x01DD, 0x01F7, 0x0210, 0x0229, 0x0242, + 0x025B, 0x0274, 0x028D, 0x02A6, 0x02C0, 0x02D9, 0x02F2, 0x030B, + 0x0324, 0x033D, 0x0356, 0x036F, 0x0388, 0x03A1, 0x03BB, 0x03D4, + 0x03ED, 0x0406, 0x041F, 0x0438, 0x0451, 0x046A, 0x0483, 0x049C, + 0x04B5, 0x04CE, 0x04E7, 0x0500, 0x051A, 0x0533, 0x054C, 0x0565, + 0x057E, 0x0597, 0x05B0, 0x05C9, 0x05E2, 0x05FB, 0x0614, 0x062D, + 0x0646, 0x065F, 0x0678, 0x0691, 0x06AA, 0x06C3, 0x06DC, 0x06F5, + 0x070E, 0x0727, 0x0740, 0x0759, 0x0772, 0x078B, 0x07A4, 0x07BD, + 0x07D6, 0x07EF, 0x0807, 0x0820, 0x0839, 0x0852, 0x086B, 0x0884, + 0x089D, 0x08B6, 0x08CF, 0x08E8, 0x0901, 0x0919, 0x0932, 0x094B, + 0x0964, 0x097D, 0x0996, 0x09AF, 0x09C7, 0x09E0, 0x09F9, 0x0A12, + 0x0A2B, 0x0A44, 0x0A5C, 0x0A75, 0x0A8E, 0x0AA7, 0x0AC0, 0x0AD8, + 0x0AF1, 0x0B0A, 0x0B23, 0x0B3B, 0x0B54, 0x0B6D, 0x0B85, 0x0B9E, + 0x0BB7, 0x0BD0, 0x0BE8, 0x0C01, 0x0C1A, 0x0C32, 0x0C4B, 0x0C64, + 0x0C7C, 0x0C95, 0x0CAE, 0x0CC6, 0x0CDF, 0x0CF8, 0x0D10, 0x0D29, + 0x0D41, 0x0D5A, 0x0D72, 0x0D8B, 0x0DA4, 0x0DBC, 0x0DD5, 0x0DED, + 0x0E06, 0x0E1E, 0x0E37, 0x0E4F, 0x0E68, 0x0E80, 0x0E99, 0x0EB1, + 0x0ECA, 0x0EE2, 0x0EFB, 0x0F13, 0x0F2B, 0x0F44, 0x0F5C, 0x0F75, + 0x0F8D, 0x0FA5, 0x0FBE, 0x0FD6, 0x0FEE, 0x1007, 0x101F, 0x1037, + 0x1050, 0x1068, 0x1080, 0x1099, 0x10B1, 0x10C9, 0x10E1, 0x10FA, + 0x1112, 0x112A, 0x1142, 0x115A, 0x1173, 0x118B, 0x11A3, 0x11BB, + 0x11D3, 0x11EB, 0x1204, 0x121C, 0x1234, 0x124C, 0x1264, 0x127C, + 0x1294, 0x12AC, 0x12C4, 0x12DC, 0x12F4, 0x130C, 0x1324, 0x133C, + 0x1354, 0x136C, 0x1384, 0x139C, 0x13B4, 0x13CC, 0x13E4, 0x13FB, + 0x1413, 0x142B, 0x1443, 0x145B, 0x1473, 0x148B, 0x14A2, 0x14BA, + 0x14D2, 0x14EA, 0x1501, 0x1519, 0x1531, 0x1549, 0x1560, 0x1578, + 0x1590, 0x15A7, 0x15BF, 0x15D7, 0x15EE, 0x1606, 0x161D, 0x1635, + 0x164C, 0x1664, 0x167C, 0x1693, 0x16AB, 0x16C2, 0x16DA, 0x16F1, + 0x1709, 0x1720, 0x1737, 0x174F, 0x1766, 0x177E, 0x1795, 0x17AC, + 0x17C4, 0x17DB, 0x17F2, 0x180A, 0x1821, 0x1838, 0x184F, 0x1867, + 0x187E, 0x1895, 0x18AC, 0x18C3, 0x18DB, 0x18F2, 0x1909, 0x1920, + 0x1937, 0x194E, 0x1965, 0x197C, 0x1993, 0x19AA, 0x19C1, 0x19D8, + 0x19EF, 0x1A06, 0x1A1D, 0x1A34, 0x1A4B, 0x1A62, 0x1A79, 0x1A90, + 0x1AA7, 0x1ABE, 0x1AD4, 0x1AEB, 0x1B02, 0x1B19, 0x1B30, 0x1B46, + 0x1B5D, 0x1B74, 0x1B8A, 0x1BA1, 0x1BB8, 0x1BCE, 0x1BE5, 0x1BFC, + 0x1C12, 0x1C29, 0x1C3F, 0x1C56, 0x1C6C, 0x1C83, 0x1C99, 0x1CB0, + 0x1CC6, 0x1CDD, 0x1CF3, 0x1D0A, 0x1D20, 0x1D36, 0x1D4D, 0x1D63, + 0x1D79, 0x1D90, 0x1DA6, 0x1DBC, 0x1DD3, 0x1DE9, 0x1DFF, 0x1E15, + 0x1E2B, 0x1E42, 0x1E58, 0x1E6E, 0x1E84, 0x1E9A, 0x1EB0, 0x1EC6, + 0x1EDC, 0x1EF2, 0x1F08, 0x1F1E, 0x1F34, 0x1F4A, 0x1F60, 0x1F76, + 0x1F8C, 0x1FA2, 0x1FB7, 0x1FCD, 0x1FE3, 0x1FF9, 0x200F, 0x2024, + 0x203A, 0x2050, 0x2065, 0x207B, 0x2091, 0x20A6, 0x20BC, 0x20D1, + 0x20E7, 0x20FD, 0x2112, 0x2128, 0x213D, 0x2153, 0x2168, 0x217D, + 0x2193, 0x21A8, 0x21BE, 0x21D3, 0x21E8, 0x21FE, 0x2213, 0x2228, + 0x223D, 0x2253, 0x2268, 0x227D, 0x2292, 0x22A7, 0x22BC, 0x22D2, + 0x22E7, 0x22FC, 0x2311, 0x2326, 0x233B, 0x2350, 0x2365, 0x237A, + 0x238E, 0x23A3, 0x23B8, 0x23CD, 0x23E2, 0x23F7, 0x240B, 0x2420, + 0x2435, 0x244A, 0x245E, 0x2473, 0x2488, 0x249C, 0x24B1, 0x24C5, + 0x24DA, 0x24EF, 0x2503, 0x2518, 0x252C, 0x2541, 0x2555, 0x2569, + 0x257E, 0x2592, 0x25A6, 0x25BB, 0x25CF, 0x25E3, 0x25F8, 0x260C, + 0x2620, 0x2634, 0x2648, 0x265C, 0x2671, 0x2685, 0x2699, 0x26AD, + 0x26C1, 0x26D5, 0x26E9, 0x26FD, 0x2711, 0x2724, 0x2738, 0x274C, + 0x2760, 0x2774, 0x2788, 0x279B, 0x27AF, 0x27C3, 0x27D6, 0x27EA, + 0x27FE, 0x2811, 0x2825, 0x2838, 0x284C, 0x2860, 0x2873, 0x2886, + 0x289A, 0x28AD, 0x28C1, 0x28D4, 0x28E7, 0x28FB, 0x290E, 0x2921, + 0x2935, 0x2948, 0x295B, 0x296E, 0x2981, 0x2994, 0x29A7, 0x29BB, + 0x29CE, 0x29E1, 0x29F4, 0x2A07, 0x2A1A, 0x2A2C, 0x2A3F, 0x2A52, + 0x2A65, 0x2A78, 0x2A8B, 0x2A9D, 0x2AB0, 0x2AC3, 0x2AD6, 0x2AE8, + 0x2AFB, 0x2B0D, 0x2B20, 0x2B33, 0x2B45, 0x2B58, 0x2B6A, 0x2B7D, + 0x2B8F, 0x2BA1, 0x2BB4, 0x2BC6, 0x2BD8, 0x2BEB, 0x2BFD, 0x2C0F, + 0x2C21, 0x2C34, 0x2C46, 0x2C58, 0x2C6A, 0x2C7C, 0x2C8E, 0x2CA0, + 0x2CB2, 0x2CC4, 0x2CD6, 0x2CE8, 0x2CFA, 0x2D0C, 0x2D1E, 0x2D2F, + 0x2D41, 0x2D53, 0x2D65, 0x2D76, 0x2D88, 0x2D9A, 0x2DAB, 0x2DBD, + 0x2DCF, 0x2DE0, 0x2DF2, 0x2E03, 0x2E15, 0x2E26, 0x2E37, 0x2E49, + 0x2E5A, 0x2E6B, 0x2E7D, 0x2E8E, 0x2E9F, 0x2EB0, 0x2EC2, 0x2ED3, + 0x2EE4, 0x2EF5, 0x2F06, 0x2F17, 0x2F28, 0x2F39, 0x2F4A, 0x2F5B, + 0x2F6C, 0x2F7D, 0x2F8D, 0x2F9E, 0x2FAF, 0x2FC0, 0x2FD0, 0x2FE1, + 0x2FF2, 0x3002, 0x3013, 0x3024, 0x3034, 0x3045, 0x3055, 0x3066, + 0x3076, 0x3087, 0x3097, 0x30A7, 0x30B8, 0x30C8, 0x30D8, 0x30E8, + 0x30F9, 0x3109, 0x3119, 0x3129, 0x3139, 0x3149, 0x3159, 0x3169, + 0x3179, 0x3189, 0x3199, 0x31A9, 0x31B9, 0x31C8, 0x31D8, 0x31E8, + 0x31F8, 0x3207, 0x3217, 0x3227, 0x3236, 0x3246, 0x3255, 0x3265, + 0x3274, 0x3284, 0x3293, 0x32A3, 0x32B2, 0x32C1, 0x32D0, 0x32E0, + 0x32EF, 0x32FE, 0x330D, 0x331D, 0x332C, 0x333B, 0x334A, 0x3359, + 0x3368, 0x3377, 0x3386, 0x3395, 0x33A3, 0x33B2, 0x33C1, 0x33D0, + 0x33DF, 0x33ED, 0x33FC, 0x340B, 0x3419, 0x3428, 0x3436, 0x3445, + 0x3453, 0x3462, 0x3470, 0x347F, 0x348D, 0x349B, 0x34AA, 0x34B8, + 0x34C6, 0x34D4, 0x34E2, 0x34F1, 0x34FF, 0x350D, 0x351B, 0x3529, + 0x3537, 0x3545, 0x3553, 0x3561, 0x356E, 0x357C, 0x358A, 0x3598, + 0x35A5, 0x35B3, 0x35C1, 0x35CE, 0x35DC, 0x35EA, 0x35F7, 0x3605, + 0x3612, 0x3620, 0x362D, 0x363A, 0x3648, 0x3655, 0x3662, 0x366F, + 0x367D, 0x368A, 0x3697, 0x36A4, 0x36B1, 0x36BE, 0x36CB, 0x36D8, + 0x36E5, 0x36F2, 0x36FF, 0x370C, 0x3718, 0x3725, 0x3732, 0x373F, + 0x374B, 0x3758, 0x3765, 0x3771, 0x377E, 0x378A, 0x3797, 0x37A3, + 0x37B0, 0x37BC, 0x37C8, 0x37D5, 0x37E1, 0x37ED, 0x37F9, 0x3805, + 0x3812, 0x381E, 0x382A, 0x3836, 0x3842, 0x384E, 0x385A, 0x3866, + 0x3871, 0x387D, 0x3889, 0x3895, 0x38A1, 0x38AC, 0x38B8, 0x38C3, + 0x38CF, 0x38DB, 0x38E6, 0x38F2, 0x38FD, 0x3909, 0x3914, 0x391F, + 0x392B, 0x3936, 0x3941, 0x394C, 0x3958, 0x3963, 0x396E, 0x3979, + 0x3984, 0x398F, 0x399A, 0x39A5, 0x39B0, 0x39BB, 0x39C5, 0x39D0, + 0x39DB, 0x39E6, 0x39F0, 0x39FB, 0x3A06, 0x3A10, 0x3A1B, 0x3A25, + 0x3A30, 0x3A3A, 0x3A45, 0x3A4F, 0x3A59, 0x3A64, 0x3A6E, 0x3A78, + 0x3A82, 0x3A8D, 0x3A97, 0x3AA1, 0x3AAB, 0x3AB5, 0x3ABF, 0x3AC9, + 0x3AD3, 0x3ADD, 0x3AE6, 0x3AF0, 0x3AFA, 0x3B04, 0x3B0E, 0x3B17, + 0x3B21, 0x3B2A, 0x3B34, 0x3B3E, 0x3B47, 0x3B50, 0x3B5A, 0x3B63, + 0x3B6D, 0x3B76, 0x3B7F, 0x3B88, 0x3B92, 0x3B9B, 0x3BA4, 0x3BAD, + 0x3BB6, 0x3BBF, 0x3BC8, 0x3BD1, 0x3BDA, 0x3BE3, 0x3BEC, 0x3BF5, + 0x3BFD, 0x3C06, 0x3C0F, 0x3C17, 0x3C20, 0x3C29, 0x3C31, 0x3C3A, + 0x3C42, 0x3C4B, 0x3C53, 0x3C5B, 0x3C64, 0x3C6C, 0x3C74, 0x3C7D, + 0x3C85, 0x3C8D, 0x3C95, 0x3C9D, 0x3CA5, 0x3CAD, 0x3CB5, 0x3CBD, + 0x3CC5, 0x3CCD, 0x3CD5, 0x3CDD, 0x3CE4, 0x3CEC, 0x3CF4, 0x3CFB, + 0x3D03, 0x3D0B, 0x3D12, 0x3D1A, 0x3D21, 0x3D28, 0x3D30, 0x3D37, + 0x3D3F, 0x3D46, 0x3D4D, 0x3D54, 0x3D5B, 0x3D63, 0x3D6A, 0x3D71, + 0x3D78, 0x3D7F, 0x3D86, 0x3D8D, 0x3D93, 0x3D9A, 0x3DA1, 0x3DA8, + 0x3DAF, 0x3DB5, 0x3DBC, 0x3DC2, 0x3DC9, 0x3DD0, 0x3DD6, 0x3DDD, + 0x3DE3, 0x3DE9, 0x3DF0, 0x3DF6, 0x3DFC, 0x3E03, 0x3E09, 0x3E0F, + 0x3E15, 0x3E1B, 0x3E21, 0x3E27, 0x3E2D, 0x3E33, 0x3E39, 0x3E3F, + 0x3E45, 0x3E4A, 0x3E50, 0x3E56, 0x3E5C, 0x3E61, 0x3E67, 0x3E6C, + 0x3E72, 0x3E77, 0x3E7D, 0x3E82, 0x3E88, 0x3E8D, 0x3E92, 0x3E98, + 0x3E9D, 0x3EA2, 0x3EA7, 0x3EAC, 0x3EB1, 0x3EB6, 0x3EBB, 0x3EC0, + 0x3EC5, 0x3ECA, 0x3ECF, 0x3ED4, 0x3ED8, 0x3EDD, 0x3EE2, 0x3EE7, + 0x3EEB, 0x3EF0, 0x3EF4, 0x3EF9, 0x3EFD, 0x3F02, 0x3F06, 0x3F0A, + 0x3F0F, 0x3F13, 0x3F17, 0x3F1C, 0x3F20, 0x3F24, 0x3F28, 0x3F2C, + 0x3F30, 0x3F34, 0x3F38, 0x3F3C, 0x3F40, 0x3F43, 0x3F47, 0x3F4B, + 0x3F4F, 0x3F52, 0x3F56, 0x3F5A, 0x3F5D, 0x3F61, 0x3F64, 0x3F68, + 0x3F6B, 0x3F6E, 0x3F72, 0x3F75, 0x3F78, 0x3F7B, 0x3F7F, 0x3F82, + 0x3F85, 0x3F88, 0x3F8B, 0x3F8E, 0x3F91, 0x3F94, 0x3F97, 0x3F99, + 0x3F9C, 0x3F9F, 0x3FA2, 0x3FA4, 0x3FA7, 0x3FAA, 0x3FAC, 0x3FAF, + 0x3FB1, 0x3FB4, 0x3FB6, 0x3FB8, 0x3FBB, 0x3FBD, 0x3FBF, 0x3FC1, + 0x3FC4, 0x3FC6, 0x3FC8, 0x3FCA, 0x3FCC, 0x3FCE, 0x3FD0, 0x3FD2, + 0x3FD4, 0x3FD5, 0x3FD7, 0x3FD9, 0x3FDB, 0x3FDC, 0x3FDE, 0x3FE0, + 0x3FE1, 0x3FE3, 0x3FE4, 0x3FE6, 0x3FE7, 0x3FE8, 0x3FEA, 0x3FEB, + 0x3FEC, 0x3FED, 0x3FEF, 0x3FF0, 0x3FF1, 0x3FF2, 0x3FF3, 0x3FF4, + 0x3FF5, 0x3FF6, 0x3FF7, 0x3FF7, 0x3FF8, 0x3FF9, 0x3FFA, 0x3FFA, + 0x3FFB, 0x3FFC, 0x3FFC, 0x3FFD, 0x3FFD, 0x3FFE, 0x3FFE, 0x3FFE, + 0x3FFF, 0x3FFF, 0x3FFF, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000, 0x4000 +}; + +int32 phd_sin(int32 x) +{ + x &= 0xFFFF; + bool neg = (x > 0x8000); + x &= 0x7FFF; + + if (x >= 0x4000) { + x = 0x8000 - x; + } + + x = sin_table[x >> 4]; + + return neg ? -x : x; +} + +int32 phd_cos(int32 x) +{ + return phd_sin(x + 0x4000); +} + +Matrix matrixStack[MAX_MATRICES]; +int32 matrixStackIndex = 0; +vec3i viewPos; + +Matrix& matrixGet() { + return matrixStack[matrixStackIndex]; +} + +void matrixPush() { +#ifdef _WIN32 + if (matrixStackIndex >= MAX_MATRICES - 1) { + DebugBreak(); + return; + } +#endif + Matrix &a = matrixStack[matrixStackIndex++]; + Matrix &b = matrixStack[matrixStackIndex]; + memcpy(b, a, sizeof(Matrix)); +} + +void matrixPop() { +#ifdef _WIN32 + if (matrixStackIndex <= 0) { + DebugBreak(); + return; + } +#endif + matrixStackIndex--; +} + +void matrixTranslate(const vec3i &offset) { + Matrix &m = matrixGet(); + + m[0].w += DP33(m[0], offset); + m[1].w += DP33(m[1], offset); + m[2].w += DP33(m[2], offset); +} + +void matrixTranslateAbs(const vec3i &offset) { + vec3i d; + d.x = offset.x - viewPos.x; + d.y = offset.y - viewPos.y; + d.z = offset.z - viewPos.z; + + Matrix &m = matrixGet(); + m[0].w = DP33(m[0], d); + m[1].w = DP33(m[1], d); + m[2].w = DP33(m[2], d); +} + +void matrixRotate(int16 rotX, int16 rotY, int16 rotZ) {} + +void matrixSetView(const vec3i &pos, int16 rotX, int16 rotY) { + int32 sx = phd_sin(rotX); + int32 cx = phd_cos(rotX); + int32 sy = phd_sin(rotY); + int32 cy = phd_cos(rotY); + + Matrix &m = matrixGet(); + + m[0].x = cy; + m[0].y = 0; + m[0].z = -sy; + m[0].w = pos.x; + + m[1].x = (sx * sy) >> FIXED_SHIFT; + m[1].y = cx; + m[1].z = (sx * cy) >> FIXED_SHIFT; + m[1].w = pos.y; + + m[2].x = (cx * sy) >> FIXED_SHIFT; + m[2].y = -sx; + m[2].z = (cx * cy) >> FIXED_SHIFT; + m[2].w = pos.z; + + viewPos = pos; +} + int32 clamp(int32 x, int32 a, int32 b) { return x < a ? a : (x > b ? b : x); } @@ -65,67 +293,49 @@ INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&o, Vertex *&b) { if (m->y > o->y) swap(m, o); } -int32 classify(const Vertex* v) { +INLINE int32 classify(const Vertex* v) { return (v->x < clip.x0 ? 1 : 0) | (v->x > clip.x1 ? 2 : 0) | (v->y < clip.y0 ? 4 : 0) | (v->y > clip.y1 ? 8 : 0); } -void transform(int32 vx, int32 vy, int32 vz, int32 vg, int32 x, int32 y, int32 z) { +void transform(const vec3s &v, int32 vg) { #ifdef _WIN32 if (gVerticesCount >= MAX_VERTICES) { DebugBreak(); return; } #endif + const Matrix &m = matrixStack[matrixStackIndex]; Vertex &res = gVertices[gVerticesCount++]; - int32 px = vx + x; - int32 pz = vz + z; - - int32 cz = px * camSinY + pz * camCosY; - cz >>= 16; - + int32 cz = DP43(m[2], v); // znear / zfar clip - if (cz < 32 || cz > MAX_DIST) { + if (cz < MIN_DIST || cz >= MAX_DIST) { res.z = -1; return; } - int32 py = vy + y; + int32 cx = DP43(m[0], v); + int32 cy = DP43(m[1], v); -#if 0 - int32 cx = (px * camCosY - pz * camSinY) >> 16; - int32 cy = py; - - uint32 czInv = MyDiv(1 << 16, uint32(cz)); - - cx = cx * czInv; - cy = cy * czInv; -#else - int32 cx = px * camCosY - pz * camSinY; - int32 cy = py << 16; - - cx = MyDiv(cx, cz); - cy = MyDiv(cy, cz); -#endif - cy = cy * FRAME_WIDTH / FRAME_HEIGHT; - - cx = clamp(cx, -2 << 16, 2 << 16); - cy = clamp(cy, -2 << 16, 2 << 16); - - res.x = ( ( (1 << 16) + cx ) * (FRAME_WIDTH / 2) ) >> 16; - res.y = ( ( (1 << 16) + cy ) * (FRAME_HEIGHT / 2) ) >> 16; - res.z = cz; - res.clip = classify(&res); - - int32 fog = vg - ((cz * cz) >> 15); + int32 fog = (8191 - vg) - (SQR(cz >> FIXED_SHIFT) >> 15); if (fog < 0) { fog = 0; } + cz >>= FOV_SHIFT; + cx = MyDiv(cx, cz) + (FRAME_WIDTH / 2); + cy = MyDiv(cy, cz) + (FRAME_HEIGHT / 2); + cz >>= (FIXED_SHIFT - FOV_SHIFT); + + res.x = cx; + res.y = cy; + res.z = cz; + res.clip = classify(&res); + res.g = uint32(255 - (fog >> 5)) >> 3; } @@ -830,6 +1040,9 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { if (v1->z < 0 || v2->z < 0 || v3->z < 0 || v4->z < 0) return; + if (!(v1->g | v2->g | v3->g | v4->g)) + return; + if (checkBackface(v1, v2, v3)) return; @@ -865,6 +1078,9 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { if (v1->z < 0 || v2->z < 0 || v3->z < 0) return; + if (!(v1->g | v2->g | v3->g)) + return; + if (checkBackface(v1, v2, v3)) return; From 801b0fd39909cb37169e16f39dc6156d1c476938 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Tue, 18 Aug 2020 02:01:58 +0300 Subject: [PATCH 06/58] GBA clear VRAM via DMA --- src/platform/gba/common.h | 5 -- src/platform/gba/level.h | 4 +- src/platform/gba/render.iwram.cpp | 85 +++++++++++++------------------ 3 files changed, 36 insertions(+), 58 deletions(-) diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 9be08c2..c23c1c1 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -40,13 +40,8 @@ #ifdef _WIN32 #define INLINE inline - - #define MyDiv(Number, Divisor) ((Number) / (Divisor)) #else #define INLINE __attribute__((always_inline)) inline - - #define MyDiv(Number, Divisor) ((Number) / (Divisor)) - //#define MyDiv(Number, Divisor) Div(Number, Divisor) #endif typedef signed char int8; diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h index a73dced..d72ac17 100644 --- a/src/platform/gba/level.h +++ b/src/platform/gba/level.h @@ -464,8 +464,8 @@ bool checkPortal(int32 roomIndex, const Room::Portal &portal) { if (z != 0) { z >>= FOV_SHIFT; - x = MyDiv(x, z) + (FRAME_WIDTH / 2); - y = MyDiv(y, z) + (FRAME_HEIGHT / 2); + x = (x / z) + (FRAME_WIDTH / 2); + y = (y / z) + (FRAME_HEIGHT / 2); } else { x = (x > 0) ? clip.x1 : clip.x0; y = (y > 0) ? clip.y1 : clip.y0; diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index b2f74d8..3a06af4 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -22,11 +22,11 @@ extern const uint8* tiles[15]; extern const Texture* textures; uint32 gVerticesCount = 0; -EWRAM_DATA Vertex gVertices[MAX_VERTICES]; +Vertex gVertices[MAX_VERTICES]; int32 gFacesCount = 0; -Face gFaces[MAX_FACES]; -Face* gFacesSorted[MAX_FACES]; +EWRAM_DATA Face gFaces[MAX_FACES]; +EWRAM_DATA Face* gFacesSorted[MAX_FACES]; const uint8* curTile; uint16 mipMask; @@ -311,29 +311,28 @@ void transform(const vec3s &v, int32 vg) { Vertex &res = gVertices[gVerticesCount++]; - int32 cz = DP43(m[2], v); + int32 z = DP43(m[2], v); // znear / zfar clip - if (cz < MIN_DIST || cz >= MAX_DIST) { + if (z < MIN_DIST || z >= MAX_DIST) { res.z = -1; return; } - int32 cx = DP43(m[0], v); - int32 cy = DP43(m[1], v); + int32 x = DP43(m[0], v); + int32 y = DP43(m[1], v); - int32 fog = (8191 - vg) - (SQR(cz >> FIXED_SHIFT) >> 15); + int32 fog = (8191 - vg) - (SQR(z >> FIXED_SHIFT) >> 15); if (fog < 0) { fog = 0; } - cz >>= FOV_SHIFT; - cx = MyDiv(cx, cz) + (FRAME_WIDTH / 2); - cy = MyDiv(cy, cz) + (FRAME_HEIGHT / 2); - cz >>= (FIXED_SHIFT - FOV_SHIFT); + z >>= FOV_SHIFT; + x = (x / z) + (FRAME_WIDTH / 2); + y = (y / z) + (FRAME_HEIGHT / 2); - res.x = cx; - res.y = cy; - res.z = cz; + res.x = x; + res.y = y; + res.z = z >> (FIXED_SHIFT - FOV_SHIFT);; res.clip = classify(&res); res.g = uint32(255 - (fog >> 5)) >> 3; @@ -494,8 +493,6 @@ INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 *(uint16*)pixel = p; pixel += 1; } - - if (p == 0xFFFFFFFF) return; } if (x2 & 1) @@ -567,8 +564,6 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i *(uint16*)pixel = p; pixel += 1; } - - if (p == 0xFFFFFFFF) return; } if (x2 & 1) @@ -578,8 +573,7 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i #endif } -void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) -{ +void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) { while (1) { while (L.h <= 0) @@ -672,8 +666,7 @@ void rasterizeGT(uint16* buffer, Edge &L, Edge &R) } } -void drawTriangle(const Face* face) -{ +void drawTriangle(const Face* face) { Vertex *v1, *v2, *v3; bool clipped = face->indices[0] == face->indices[1]; @@ -937,7 +930,7 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) { #define LERP(a,b,t) (b + ((a - b) * t >> 16)) #define CLIP_AXIS(x, y, edge, output) {\ - uint32 t = MyDiv((edge - b->x) << 16, a->x - b->x);\ + uint32 t = ((edge - b->x) << 16) / (a->x - b->x);\ Vertex* v = output + count++;\ v->x = edge;\ v->y = LERP(a->y, b->y, t);\ @@ -1157,35 +1150,25 @@ void flush() { void initRender() { divTable[0] = 0; for (uint32 i = 1; i < DIV_TABLE_SIZE; i++) { - divTable[i] = MyDiv(1 << 16, i); + divTable[i] = (1 << 16) / i; } } +void dmaClear(uint32 *dst, uint32 count) { +#ifdef WIN32 + memset(dst, 0, count * 4); +#else + vu32 value = 0; + REG_DMA3SAD = (vu32)&value; + REG_DMA3DAD = (vu32)dst; + REG_DMA3CNT = count | (DMA_ENABLE | DMA32 | DMA_SRC_FIXED | DMA_DST_INC); +#endif +} + void clear() { - uint32* dst = (uint32*)fb; - - #ifdef USE_MODE_5 - uint32* end = dst + (WIDTH * HEIGHT >> 1); - #else - uint32* end = dst + (WIDTH * HEIGHT >> 2); - #endif - - while (dst < end) { - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - } +#ifdef USE_MODE_5 + dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> 1); +#else + dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> 2); +#endif } \ No newline at end of file From d96ca0c75bb66ff35c3f81383926c00273e8e730 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Tue, 18 Aug 2020 03:43:41 +0300 Subject: [PATCH 07/58] GBA optimize fog calc --- src/platform/gba/common.h | 6 ++++-- src/platform/gba/level.h | 4 ++-- src/platform/gba/render.iwram.cpp | 25 ++++++++++++------------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index c23c1c1..8607d25 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -249,8 +249,10 @@ struct Face { #define MAX_ENTITY 190 #define MAX_VERTICES 1024 #define MAX_FACES 384 -#define MIN_DIST ((32) << FIXED_SHIFT) -#define MAX_DIST ((16 * 1024) << FIXED_SHIFT) +#define FOG_MAX (16 * 1024) +#define FOG_MIN (FOG_MAX - 8192) +#define VIEW_MIN_F ((32) << FIXED_SHIFT) +#define VIEW_MAX_F (FOG_MAX << FIXED_SHIFT) #define FACE_TRIANGLE 0x8000 #define FACE_COLORED 0x4000 diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h index d72ac17..0d2d222 100644 --- a/src/platform/gba/level.h +++ b/src/platform/gba/level.h @@ -453,12 +453,12 @@ bool checkPortal(int32 roomIndex, const Room::Portal &portal) { pv[i].y = y; pv[i].z = z; - if (z <= MIN_DIST) { + if (z <= VIEW_MIN_F) { znear++; continue; } - if (z >= MAX_DIST) { + if (z >= VIEW_MAX_F) { zfar++; } diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 3a06af4..9495013 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -313,7 +313,7 @@ void transform(const vec3s &v, int32 vg) { int32 z = DP43(m[2], v); // znear / zfar clip - if (z < MIN_DIST || z >= MAX_DIST) { + if (z < VIEW_MIN_F || z >= VIEW_MAX_F) { res.z = -1; return; } @@ -321,21 +321,26 @@ void transform(const vec3s &v, int32 vg) { int32 x = DP43(m[0], v); int32 y = DP43(m[1], v); - int32 fog = (8191 - vg) - (SQR(z >> FIXED_SHIFT) >> 15); - if (fog < 0) { - fog = 0; + int32 fogZ = z >> FIXED_SHIFT; + if (fogZ > FOG_MAX) { + vg = 8191; + } else if (fogZ > FOG_MIN) { + vg += fogZ - FOG_MIN; + if (vg > 8191) { + vg = 8191; + } } + res.g = vg >> 8; z >>= FOV_SHIFT; x = (x / z) + (FRAME_WIDTH / 2); y = (y / z) + (FRAME_HEIGHT / 2); + z >>= (FIXED_SHIFT - FOV_SHIFT - 1); res.x = x; res.y = y; - res.z = z >> (FIXED_SHIFT - FOV_SHIFT);; + res.z = z; res.clip = classify(&res); - - res.g = uint32(255 - (fog >> 5)) >> 3; } #define FETCH_T() curTile[(t & 0xFF00) | (t >> 24)] @@ -1033,9 +1038,6 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { if (v1->z < 0 || v2->z < 0 || v3->z < 0 || v4->z < 0) return; - if (!(v1->g | v2->g | v3->g | v4->g)) - return; - if (checkBackface(v1, v2, v3)) return; @@ -1071,9 +1073,6 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { if (v1->z < 0 || v2->z < 0 || v3->z < 0) return; - if (!(v1->g | v2->g | v3->g)) - return; - if (checkBackface(v1, v2, v3)) return; From 645b58669c229b25404a38ccc7e3c8da5d8985b0 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 19 Aug 2020 04:01:28 +0300 Subject: [PATCH 08/58] GBA fix quads rasterization --- src/platform/gba/render.iwram.cpp | 169 +++++++++++++----------------- 1 file changed, 75 insertions(+), 94 deletions(-) diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 9495013..10ea8bc 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -312,8 +312,8 @@ void transform(const vec3s &v, int32 vg) { Vertex &res = gVertices[gVerticesCount++]; int32 z = DP43(m[2], v); - // znear / zfar clip - if (z < VIEW_MIN_F || z >= VIEW_MAX_F) { + + if (z < VIEW_MIN_F || z >= VIEW_MAX_F) { // TODO znear clip res.z = -1; return; } @@ -337,6 +337,9 @@ void transform(const vec3s &v, int32 vg) { y = (y / z) + (FRAME_HEIGHT / 2); z >>= (FIXED_SHIFT - FOV_SHIFT - 1); + //x = clamp(x, -0x7FFF, 0x7FFF); + //y = clamp(y, -0x7FFF, 0x7FFF); + res.x = x; res.y = y; res.z = z; @@ -431,7 +434,7 @@ struct Edge { for (int i = 1; i < count; i++) { b = (b + incr) % count; - Vertex *v = gVertices + start + b; + Vertex* v = gVertices + start + b; if (vert[index]->x != v->x || vert[index]->y != v->y) { vert[++index] = v; @@ -605,9 +608,10 @@ void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) { int32 x1 = L.x >> 16; int32 x2 = R.x >> 16; - if (x2 > x1) + int32 width = x2 - x1; + if (width > 0) { - int32 d = FixedInvU(x2 - x1); + int32 d = FixedInvU(width); int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; @@ -650,9 +654,10 @@ void rasterizeGT(uint16* buffer, Edge &L, Edge &R) int32 x1 = L.x >> 16; int32 x2 = R.x >> 16; - if (x2 > x1) + int32 width = x2 - x1; + if (width > 0) { - uint32 d = FixedInvU(x2 - x1); + uint32 d = FixedInvU(width); int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; @@ -661,7 +666,7 @@ void rasterizeGT(uint16* buffer, Edge &L, Edge &R) uint32 dtdx = (u & 0xFFFF0000) | (v >> 16); scanlineGT(buffer, x1, x2, L.g >> 8, L.t, dgdx, dtdx); - } + }; buffer += WIDTH / PIXEL_SIZE; @@ -776,59 +781,42 @@ void drawQuad(const Face* face) { } } - sortVertices(v1, v2, v3, v4); + int32 minY = 0x7FFF; + int32 maxY = -0x7FFF; + int32 t = 0, b = 0; - int32 temp = (v2->y - v1->y) * FixedInvU(v4->y - v1->y); + Vertex* poly[8] = { v1, v2, v3, v4, v1, v2, v3, v4 }; - int32 longest = ((temp * (v4->x - v1->x)) >> 16) + (v1->x - v2->x); - if (longest == 0) - { - return; + for (int i = 0; i < 4; i++) { + Vertex *v = poly[i]; + + if (v->y < minY) { + minY = v->y; + t = i; + } + + if (v->y > maxY) { + maxY = v->y; + b = i; + } } Edge L, R; - if (checkBackface(v1, v4, v2) == checkBackface(v1, v4, v3)) - { - if (longest < 0) - { - L.vert[0] = v4; - L.vert[1] = v1; - L.index = 1; - R.vert[0] = v4; - R.vert[1] = v3; - R.vert[2] = v2; - R.vert[3] = v1; - R.index = 3; - } - else - { - R.vert[0] = v4; - R.vert[1] = v1; - R.index = 1; - L.vert[0] = v4; - L.vert[1] = v3; - L.vert[2] = v2; - L.vert[3] = v1; - L.index = 3; - } - } - else - { - R.vert[0] = v4; - R.vert[1] = v3; - R.vert[2] = v1; - R.index = 2; - L.vert[0] = v4; - L.vert[1] = v2; - L.vert[2] = v1; - L.index = 2; + v1 = poly[t]; - if (longest < 0) - { - swap(L.vert[1], R.vert[1]); - } - } + L.vert[L.index = 0] = poly[b]; + R.vert[R.index = 0] = poly[b]; + + int32 ib = b; + do { + L.vert[++L.index] = poly[++b]; + } while (poly[b] != v1); + + b = ib + 4; + do { + R.vert[++R.index] = poly[--b]; + } while (poly[b] != v1); if (palIndex != 0xFFFF) { rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); @@ -931,36 +919,36 @@ void drawGlyph(const Sprite *sprite, int32 x, int32 y) { } } -void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) { +void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount, int32 depth) { #define LERP(a,b,t) (b + ((a - b) * t >> 16)) - #define CLIP_AXIS(x, y, edge, output) {\ - uint32 t = ((edge - b->x) << 16) / (a->x - b->x);\ + #define CLIP_AXIS(X, Y, edge, output) {\ + uint32 t = ((edge - b->X) << 16) / (a->X - b->X);\ Vertex* v = output + count++;\ - v->x = edge;\ - v->y = LERP(a->y, b->y, t);\ + v->X = edge;\ + v->Y = LERP(a->Y, b->Y, t);\ v->z = LERP(a->z, b->z, t);\ v->u = LERP(a->u, b->u, t);\ v->v = LERP(a->v, b->v, t);\ v->g = LERP(a->g, b->g, t);\ } - #define CLIP_VERTEX(x, y, x0, x1, input, output) {\ + #define CLIP_VERTEX(X, Y, X0, X1, input, output) {\ const Vertex *a, *b = input[pCount - 1];\ for (int32 i = 0; i < pCount; i++) {\ a = b;\ b = input[i];\ - if (a->x < x0) {\ - if (b->x < x0) continue;\ - CLIP_AXIS(x, y, x0, output);\ - } else if (a->x > x1) {\ - if (b->x > x1) continue;\ - CLIP_AXIS(x, y, x1, output);\ + if (a->X < X0) {\ + if (b->X < X0) continue;\ + CLIP_AXIS(X, Y, X0, output);\ + } else if (a->X > X1) {\ + if (b->X > X1) continue;\ + CLIP_AXIS(X, Y, X1, output);\ }\ - if (b->x < x0) {\ - CLIP_AXIS(x, y, x0, output);\ - } else if (b->x > x1) {\ - CLIP_AXIS(x, y, x1, output);\ + if (b->X < X0) {\ + CLIP_AXIS(X, Y, X0, output);\ + } else if (b->X > X1) {\ + CLIP_AXIS(X, Y, X1, output);\ } else {\ output[count++] = *b;\ }\ @@ -987,9 +975,7 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) { int32 count = 0; // clip x - int32 x0 = clip.x0; - int32 x1 = clip.x1; - CLIP_VERTEX(x, y, x0, x1, poly, tmp); + CLIP_VERTEX(x, y, clip.x0, clip.x1, poly, tmp); pCount = count; count = 0; @@ -997,30 +983,21 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount) { Vertex* output = gVertices + gVerticesCount; // clip y - int32 y0 = clip.y0; - int32 y1 = clip.y1; - CLIP_VERTEX(y, x, y0, y1, &tmp, output); + CLIP_VERTEX(y, x, clip.y0, clip.y1, &tmp, output); Face *f = gFaces + gFacesCount; gFacesSorted[gFacesCount++] = f; + + if (count == 3) { + flags |= FACE_TRIANGLE; + } + f->flags = flags; + f->depth = depth; f->start = gVerticesCount; f->indices[0] = count; f->indices[1] = count; - if (count == 3) { - f->flags |= FACE_TRIANGLE; - f->depth = (output[0].z + output[1].z + output[2].z) / 3; - } else if (count == 4) { - f->depth = (output[0].z + output[1].z + output[2].z + output[3].z) >> 2; - } else { - int32 depth = output[0].z; - for (int32 i = 1; i < count; i++) { - depth = (depth + output[i].z) >> 1; - } - f->depth = depth; - } - gVerticesCount += count; } @@ -1044,14 +1021,16 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { if (v1->clip & v2->clip & v3->clip & v4->clip) return; + int32 depth = (v1->z + v2->z + v3->z + v4->z) >> 2; + if (v1->clip | v2->clip | v3->clip | v4->clip) { Vertex* poly[4] = { v1, v2, v3, v4 }; - faceAddPolyClip(flags, poly, 4); + faceAddPolyClip(flags, poly, 4, depth); } else { Face *f = gFaces + gFacesCount; gFacesSorted[gFacesCount++] = f; f->flags = flags; - f->depth = (v1->z + v2->z + v3->z + v4->z) >> 2; + f->depth = depth; f->start = startVertex + indices[0]; f->indices[0] = 0; f->indices[1] = indices[1] - indices[0]; @@ -1079,14 +1058,16 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { if (v1->clip & v2->clip & v3->clip) return; + int32 depth = (v1->z + v2->z + v3->z) / 3; + if (v1->clip | v2->clip | v3->clip) { Vertex* poly[3] = { v1, v2, v3 }; - faceAddPolyClip(flags, poly, 3); + faceAddPolyClip(flags, poly, 3, depth); } else { Face *f = gFaces + gFacesCount; gFacesSorted[gFacesCount++] = f; f->flags = flags | FACE_TRIANGLE; - f->depth = (v1->z + v2->z + v3->z) / 3; + f->depth = depth; f->start = startVertex + indices[0]; f->indices[0] = 0; f->indices[1] = indices[1] - indices[0]; @@ -1129,7 +1110,7 @@ void flush() { if (f->flags & FACE_TRIANGLE) { drawTriangle(f); } else { - if (f->indices[0] == f->indices[1] /* && f.indices[0] > 4 */) { + if (f->indices[0] == f->indices[1] && f->indices[0] > 4) { drawPoly(f); } else { drawQuad(f); From 7c728c4632d9f2899449a7fa6b95d9c661dbcbfc Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 21 Aug 2020 01:04:51 +0300 Subject: [PATCH 09/58] GBA scaling (optional) --- src/platform/gba/common.h | 35 ++++++++++++++++++++++----- src/platform/gba/main.cpp | 10 +++++++- src/platform/gba/render.iwram.cpp | 40 +++++++++++++++++++------------ 3 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 8607d25..464fcb5 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -23,6 +23,9 @@ #include //#define USE_MODE_5 +//#define DEBUG_OVERDRAW + +#define SCALE 1 #ifdef USE_MODE_5 #define WIDTH 160 @@ -33,8 +36,8 @@ #else // MODE_4 #define WIDTH 240 #define HEIGHT 160 - #define FRAME_WIDTH 240 - #define FRAME_HEIGHT 160 + #define FRAME_WIDTH (240/SCALE) + #define FRAME_HEIGHT (160/SCALE) #define PIXEL_SIZE 2 #endif @@ -198,6 +201,25 @@ struct Entity { uint16 flags; }; +struct EntityDesc { // 32 bytes + uint16 type; + uint16 flags; + + vec3i pos; + + vec3s rot; + uint8 state; + uint8 targetState; + + uint8 vSpeed; + uint8 hSpeed; + uint8 room; + uint8 modelIndex; + + uint16 animIndex; + uint16 frameIndex; +}; + struct Texture { uint16 attribute; uint16 tile:14, :2; @@ -242,16 +264,17 @@ struct Face { }; #define FIXED_SHIFT 14 -#define FOV_SHIFT 7 +#define FOV_SHIFT (7 - (SCALE - 1)) #define MAX_MATRICES 8 #define MAX_MODELS 64 #define MAX_ENTITY 190 #define MAX_VERTICES 1024 #define MAX_FACES 384 -#define FOG_MAX (16 * 1024) -#define FOG_MIN (FOG_MAX - 8192) -#define VIEW_MIN_F ((32) << FIXED_SHIFT) +#define FOG_SHIFT 2 +#define FOG_MAX (10 * 1024) +#define FOG_MIN (FOG_MAX - (8192 >> FOG_SHIFT)) +#define VIEW_MIN_F (32 << FIXED_SHIFT) #define VIEW_MAX_F (FOG_MAX << FIXED_SHIFT) #define FACE_TRIANGLE 0x8000 diff --git a/src/platform/gba/main.cpp b/src/platform/gba/main.cpp index 7165e6e..d1d4ef2 100644 --- a/src/platform/gba/main.cpp +++ b/src/platform/gba/main.cpp @@ -47,7 +47,7 @@ void render() { drawRooms(); - drawNumber(fps, WIDTH, 16); + drawNumber(fps, FRAME_WIDTH, 16); } #ifdef _WIN32 @@ -61,8 +61,13 @@ void blit() { } #else for (int i = 0; i < WIDTH * HEIGHT; i++) { + #ifdef DEBUG_OVERDRAW + uint8 c = ((uint8*)fb)[i]; + SCREEN[i] = c | (c << 8) | (c << 16) | 0xFF000000; + #else uint16 c = palette[((uint8*)fb)[i]]; SCREEN[i] = (((c << 3) & 0xFF) << 16) | ((((c >> 5) << 3) & 0xFF) << 8) | ((c >> 10 << 3) & 0xFF) | 0xFF000000; + #endif } #endif @@ -175,6 +180,9 @@ int main(void) { REG_BG2PD = 256 - 48 - 2; #else mode |= MODE_4; + + REG_BG2PA = 256 / SCALE; + REG_BG2PD = 256 / SCALE; #endif int32 lastFrameIndex = -1; diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 10ea8bc..c3d42fd 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -268,13 +268,13 @@ int32 clamp(int32 x, int32 a, int32 b) { } template -inline void swap(T &a, T &b) { +INLINE void swap(T &a, T &b) { T tmp = a; a = b; b = tmp; } -bool checkBackface(const Vertex *a, const Vertex *b, const Vertex *c) { +INLINE bool checkBackface(const Vertex *a, const Vertex *b, const Vertex *c) { return (b->x - a->x) * (c->y - a->y) - (c->x - a->x) * (b->y - a->y) <= 0; } @@ -314,6 +314,7 @@ void transform(const vec3s &v, int32 vg) { int32 z = DP43(m[2], v); if (z < VIEW_MIN_F || z >= VIEW_MAX_F) { // TODO znear clip + res.clip = 16; res.z = -1; return; } @@ -325,7 +326,7 @@ void transform(const vec3s &v, int32 vg) { if (fogZ > FOG_MAX) { vg = 8191; } else if (fogZ > FOG_MIN) { - vg += fogZ - FOG_MIN; + vg += (fogZ - FOG_MIN) << FOG_SHIFT; if (vg > 8191) { vg = 8191; } @@ -335,21 +336,25 @@ void transform(const vec3s &v, int32 vg) { z >>= FOV_SHIFT; x = (x / z) + (FRAME_WIDTH / 2); y = (y / z) + (FRAME_HEIGHT / 2); - z >>= (FIXED_SHIFT - FOV_SHIFT - 1); //x = clamp(x, -0x7FFF, 0x7FFF); //y = clamp(y, -0x7FFF, 0x7FFF); res.x = x; res.y = y; - res.z = z; + res.z = fogZ; res.clip = classify(&res); } +#ifdef DEBUG_OVERDRAW +#define FETCH_GT() 32 +#define FETCH_G(palIndex) 32 +#else #define FETCH_T() curTile[(t & 0xFF00) | (t >> 24)] #define FETCH_T_MIP() curTile[(t & 0xFF00) | (t >> 24) & mipMask] #define FETCH_GT() lightmap[(g & 0x1F00) | FETCH_T()] #define FETCH_G(palIndex) lightmap[(g & 0x1F00) | palIndex] +#endif #define FETCH_GT_PAL() palette[FETCH_GT()] #define FETCH_G_PAL(palIndex) palette[FETCH_G(palIndex)] @@ -581,7 +586,10 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i #endif } -void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) { +void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) +{ + uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); + while (1) { while (L.h <= 0) @@ -626,8 +634,10 @@ void rasterizeG(uint16* buffer, int32 palIndex, Edge &L, Edge &R) { } } -void rasterizeGT(uint16* buffer, Edge &L, Edge &R) +void rasterizeGT(int16 y, Edge &L, Edge &R) { + uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); + while (1) { while (L.h <= 0) @@ -741,9 +751,9 @@ void drawTriangle(const Face* face) { } if (palIndex != 0xFFFF) { - rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + rasterizeG(v1->y, palIndex, L, R); } else { - rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + rasterizeGT(v1->y, L, R); } } @@ -819,9 +829,9 @@ void drawQuad(const Face* face) { } while (poly[b] != v1); if (palIndex != 0xFFFF) { - rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + rasterizeG(v1->y, palIndex, L, R); } else { - rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + rasterizeGT(v1->y, L, R); } } @@ -863,9 +873,9 @@ void drawPoly(const Face* face) { Vertex *v1 = gVertices + start + t; if (palIndex != 0xFFFF) { - rasterizeG((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), palIndex, L, R); + rasterizeG(v1->y, palIndex, L, R); } else { - rasterizeGT((uint16*)fb + v1->y * (WIDTH / PIXEL_SIZE), L, R); + rasterizeGT(v1->y, L, R); } } @@ -1012,7 +1022,7 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { Vertex* v3 = gVertices + startVertex + indices[2]; Vertex* v4 = gVertices + startVertex + indices[3]; - if (v1->z < 0 || v2->z < 0 || v3->z < 0 || v4->z < 0) + if ((v1->clip | v2->clip | v3->clip | v4->clip) & 16) return; if (checkBackface(v1, v2, v3)) @@ -1049,7 +1059,7 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { Vertex* v2 = gVertices + startVertex + indices[1]; Vertex* v3 = gVertices + startVertex + indices[2]; - if (v1->z < 0 || v2->z < 0 || v3->z < 0) + if ((v1->clip | v2->clip | v3->clip) & 16) return; if (checkBackface(v1, v2, v3)) From 20678ce60c8430403982160d26f2dd66e3ba6b31 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 21 Aug 2020 03:18:20 +0300 Subject: [PATCH 10/58] fix GLTF export --- src/extension.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/extension.h b/src/extension.h index 98ef48e..d44dea3 100644 --- a/src/extension.h +++ b/src/extension.h @@ -32,10 +32,13 @@ namespace Extension { vec3 coord; vec3 normal; vec2 texCoord; + ubyte4 color; ubyte4 joints; ubyte4 weights; }; + typedef uint32 ModelIndex; + char name[256]; sprintf(name, "models/dump/%d.glb", int(model.type)); @@ -86,7 +89,7 @@ namespace Extension { int rotationOffset = translationOffset + animFrames * sizeof(vec3); int verticesOffset = rotationOffset + model.mCount * animFrames * sizeof(quat); int indicesOffset = verticesOffset + vCount * sizeof(ModelVertex); - int bufferSize = indicesOffset + iCount * sizeof(Index); + int bufferSize = indicesOffset + iCount * sizeof(ModelIndex); char *bufferData = new char[bufferSize]; @@ -114,7 +117,8 @@ namespace Extension { dst.normal = flip * dst.normal; dst.texCoord *= (1.0f / 32767.0f); - dst.joints = ubyte4(uint8(src.coord.w), 0, 0, 0); + dst.color = src.color; + dst.joints = ubyte4(uint8(src.coord.w / 2), 0, 0, 0); dst.weights = ubyte4(255, 0, 0, 0); vMin.x = min(vMin.x, dst.coord.x); @@ -125,7 +129,11 @@ namespace Extension { vMax.y = max(vMax.y, dst.coord.y); vMax.z = max(vMax.z, dst.coord.z); } - memcpy(bufferData + indicesOffset, indices, sizeof(Index) * iCount); + + for (int i = 0; i < iCount; i++) { + ModelIndex &dst = ((ModelIndex*)(bufferData + indicesOffset))[i]; + dst = indices[i]; + } GLTF *gltf = new GLTF(); @@ -137,14 +145,15 @@ namespace Extension { delete[] vertices; delete[] indices; - gltf->addAccessor(0, 0, iCount, GLTF::SCALAR, GL_UNSIGNED_SHORT); // 0 + gltf->addAccessor(0, 0, iCount, GLTF::SCALAR, GL_UNSIGNED_INT); // 0 gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, coord), vCount, GLTF::VEC3, GL_FLOAT, false, vMin, vMax); // 1 gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, normal), vCount, GLTF::VEC3, GL_FLOAT); // 2 gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, texCoord), vCount, GLTF::VEC2, GL_FLOAT); // 3 + //gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, color), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE); // TODO gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, joints), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE); // 4 gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, weights), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE, true); // 5 - gltf->addBufferView(0, 0, indicesOffset, sizeof(Index) * iCount); // 0 + gltf->addBufferView(0, 0, indicesOffset, sizeof(ModelIndex) * iCount); // 0 gltf->addBufferView(0, sizeof(ModelVertex), verticesOffset, sizeof(ModelVertex) * vCount); // 1 sprintf(name, "%d_mesh", int(model.type)); From 1b1cef14908d48596ee12b6c3acb97e200a083a8 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sun, 23 Aug 2020 07:11:11 +0300 Subject: [PATCH 11/58] GBA precise UVs, reduce buffers size --- src/platform/gba/common.h | 15 ++--- src/platform/gba/data/LEVEL1.PHD | Bin 0 -> 2533638 bytes src/platform/gba/level.h | 43 +++++++------- src/platform/gba/main.cpp | 79 ++++++++++++++++++++++++- src/platform/gba/render.iwram.cpp | 95 ++++++++++++++++-------------- 5 files changed, 159 insertions(+), 73 deletions(-) create mode 100644 src/platform/gba/data/LEVEL1.PHD diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 464fcb5..2e0bd81 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -24,6 +24,7 @@ //#define USE_MODE_5 //#define DEBUG_OVERDRAW +//#define DEBUG_FACES #define SCALE 1 @@ -223,10 +224,10 @@ struct EntityDesc { // 32 bytes struct Texture { uint16 attribute; uint16 tile:14, :2; - uint8 xh0, x0, yh0, y0; - uint8 xh1, x1, yh1, y1; - uint8 xh2, x2, yh2, y2; - uint8 xh3, x3, yh3, y3; + uint32 uv0; + uint32 uv1; + uint32 uv2; + uint32 uv3; }; struct Sprite { @@ -253,7 +254,7 @@ struct Rect { struct Vertex { int16 x, y, z; uint8 g, clip; - uint8 u, v; + uint32 uv; }; struct Face { @@ -269,8 +270,8 @@ struct Face { #define MAX_MATRICES 8 #define MAX_MODELS 64 #define MAX_ENTITY 190 -#define MAX_VERTICES 1024 -#define MAX_FACES 384 +#define MAX_VERTICES 850 +#define MAX_FACES 220 #define FOG_SHIFT 2 #define FOG_MAX (10 * 1024) #define FOG_MIN (FOG_MAX - (8192 >> FOG_SHIFT)) diff --git a/src/platform/gba/data/LEVEL1.PHD b/src/platform/gba/data/LEVEL1.PHD new file mode 100644 index 0000000000000000000000000000000000000000..b9ae56326809dd029df9c5cda96f8cff4f11b451 GIT binary patch literal 2533638 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

h0u%E8a=Ckd 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%0DTe*|Bc?@ z5`pn2{8=}1YCG3|@BUH%nRF2UKY^d*dML_QbNK1FAFv5vo#umT>i<|#wlaE}_dvHd zZr!;3r1xZX_4Xb?Zf_&37u&Xfv&skl*tUZOI~Wd0T)+F`~b+2~bzYsPAd({?Ozn(FD-&>AEK;X2v)zBD#59;SBlj{O;!Z z7wf(CJL|u@gE%+V*ME=Al+>|%CGU>o`~p9C7Wg*DB4>=n^IqRk;5)ypzpnq&{rH`l zZ_iv5&i^Y_fB(%~S^*k8aDyMia$x>rw8d@*a0>Wm##V3b?XBF{TY2(iW&6&py(fFy zsNTCPH!Nwd*v|~>9O9e-6y-fz59DlcEP{<1lGT~`DELZc8lGLBNukB z?5^twB;h#i(77RMUXDw&tymmR0?5|SY5@Ds{MPlua(X(R|9Jg3We0UP|Jay)5HK^z z_f2T`*%@F!r^pM{X#l68eLMnL>)qa5+uXRdd*k-@o!;#mto`e2yZ0?=rP$5*jm@0+)~%HtOS)g|W_Ib{M|tA9t4IryEcecm{1@=BM|YolX49h4~NRr!1oajLfh5yp{l5`(tD4 z>oz^@5_3=vN}Rrkp+2f#XDyOIEMD|pHVfoMND);Bhu zY;1s^EZb=t4WUtDzapLwt)KC8J2IK0g}Kx35!@cSqB&#_mICM`j6wVRwg=s1k9)<%^N@6 zz?uI1nB!edx2fL+;Z30FA635KX9M8=?-|*D!O!~uT0V8ZFcFV_9g?eO3-}@#_dN_f zF1A;>V9d4^s~5eEl{--X3QS)?$1yghelMy!%^%44fAkpQ)(pu0t1bZaZ^~D#cL~@^ z5^#R3pngzO4ukmtg$@9o0M_q*GVAGQsr&NfC-&(+)^BCES8*%5y{aVK=*F#WWU=%W zq_0#-cK=IIIa=X|13;2$!Vhx$XEErW4PTociQGqGA_KjH|CtW`XVAYiX74jcJ4<{I zFvgDmwNp~Rs{hfWm|yZ5D+KHRAv`wWa}zu%;d7Dnz{DPs*rwveBV}ykxuKq*kBw0# zWeEGfYR{wmgvFWDC2~ZMq;*z3ki_EM;)%5L0{*IA>)Ng%uW?!H5auV${-JHNf11Bq z0h$E){jpgtj2;<75Ke77v{5X`&nM?&V`uBI9PJ<9L`j^s$dWCt6j6IG!S{50Yx%C; z))rdU`x$$UZ7(d|!z-Kgz_Q3#M#-LDp9JZ&%sVD;1mgC0b;+h`# zcD2yGiDB9J@eF7Tf;9o~WH|U2A%a+Yy3QNVq2o1eJdNWuAW3^k!S}cj4&GVN77)w^ z5G}zy9^V6uJ)`=68Y^gC3$CL6GZbAi{L-9@s*U`QnOMuaNeUm=-n+>7T$FMNCqMAcenOk~1%wh2Pz$F&PFFf;HAaWoFZ z+XmfnqW=fqe+>&YeP#hJ1Jl3NR1_>}B}u|d8`md0{;DfU`=)*gq2z~b)wU#PKM}Vr zTG}vWZ=fPbCtSq$0Api^*zuvwLjrJvWWR>mz~B#HAV{9v zjT2Fq1PjlLX)Fmnvsqob1|y5K{vv?Cxc|XRDV)PkgTV-)O2k5SvU{ud6hKk6WI!3- z&y&s;XV5v#F?RB+2LNcy0)e}Kbo^-!>;)b>ddN`@(^)sJ#6lNZ68+%{T^r5cPe%1G z_`|j&MO*`tB&q~zMP|*FH@8L&63*9n4;fXAq!G!$7d&SUlE%ANw&0 z@PK&yapovqFzWYqaQhzt&YJbCIDc_!*cA$06)lb%8^RCoD$%mP;I)-!likajs>+13 zzE|+4H=1FPMe&+Z6c-}Mbu+#PU_tE`hzf@RaG2FGnSc5C@hT5CWSrUA-NH!Tp?MR* zFn)7VCO)*?ybM%MbROUK+jdqhuev_uj#MRct09Tlj*x`-lL6ozqrL~wne5>=y@36v zD~w@hcEQ6`iD^psM5m=fS$)xU3TFJ?UOZKNhWLN(^biqKqo&lGq`01`s*rqoEF z1*96lu?BqmZfDiqzj;5RGhC~0$52R?(?ptee0^a^BQqv%h7w+lGhrAL<2xnUOW6xQIln_SHdz|;*ieI-6L?RgJgsSa` z3E0xPTbpzOaxw8eK$H{fAMjBCD?tZ+k?mm7Zhn9Md$3bgx${GrQ}$qDcKk(rdV`7c z#$QBacGi<)n3RnQ((njIZJb12&a=uNO%L}KQBuw_ICkWS^_b3-;pnmPe*BT2AEuQ7 zkApd0g+U`%{L2Z8b3+5grl#_HNuL?fS7^T&utl-V&L&a`z!*9NK>nH@TNJ=x>bzI@ z_^oyX$;}sC{I~)5)vqGIjeEoMFAw4ue$6kjRQz}tZJO`9eJ8S{`h|J+ppsT-w->gC+B3lX_5{P}l9H1H_)sYzZ z9K*n1(l~(rfg|`}=Xwyo=Vw361;7>g`Mr*j(&{~)ss#-O$#;;|6ewT$;|KL{@NZg3HDWoKlCc|e@ zBSD|HTiLm6@`nNB9A-JHMb!x{N5UV<&j$d%`c>qY`*Q(65XNsxCvkFx)Ol2YMgi)K zMr<3YA|!s6t|+eNG>{A|mhi+M$}cKF$`JT=!j=Jr_VM&EhXMMJ{O0~m0JH=%@525i z3$yu(pPCkBVlE;Hf7XhdC_p`EKH!!B3jbeLoOU&EA&F|{x zC_zSL|0aL}J4KuPNnM#=Q(Ppuxc!&>tO14pEAeFu`B=t+r=aiS|5X3m{O$(4erNyZ z`geXa59jwfkf>86_a zep$U&e}J3%-T%n~5_XCV;4i2<`F$9tPd}dZ-?Dfl1UuJKc4hpq1PG;%1ASM+|`cJ1w{PkJq$%+v8 z7RR!!|9|=wfBzuzi{IQoT0d!5UeL5H*pffgU-0Am_-07PaU|-0VXK)s$7+5GK>R4b z9hmUxH7GQQA{kB+Kk+946#TXMoBdPCQhY&AkuaUg zN67p^lKoafL8j9Gs{ybAo{6Ijp3BgBCqIr-72wf*^JW0E7X1CvEQVXe&BD zc_V8Wu}b|k2-7{5sr}C$K=Z+hzg+mhJ{Lp6x8F_~#*dS`yjrU^KSuy0`=|cR{N?^| z|J%)PP9Up)nmP{7n&0-sQjF#Rye4wC9s2L&x8JMoYy+isB4;WTYaTGv`@^=Q~?k~y){NOM0xA}R#bWDmI zkpTMe|0=TS`CoPd^|YVv`HQ}QE7}(@yM$z?JHP{hs*z#90n6K{+v17bA*d`bwL^Qd=5b3TAw4i-`|azwkjU z&x?hPWW>7U_BinuF$4VwLC?y~;NwK_N{o8BjU#Z7h+WEW_dm%CSpDxPAHSAif$^0f zK9-r9)(5V5hsEA9f`1DdpM=_YT2A4nd5paR_>ecO5O_&^fr4?T_~dkMGK!to!biI> z0zPsDk6AspI{953efcNj_XL~eLveLufZ{qX)=0$fqi`E<^3tgxAC4y01a>f68a}px z%vmP%u@Nn(4(<9Y{KWK#+cat#TSl0KRY|ET~LXLwJ;iG@{&2nq0=uTd!r&>;}$+XMg&T1}A{Y;dClKztsi z*`A^DMSQCify0tGG-r8vdOn^j^2^;KM#JEAC*%)P<`gN6Nv@>3_@6({UvyvvFhStgO2p5F@f=C~Y>+6*4s<0&{w6=h%XO4*{@mg@`1B?G zUp%+ODCneR8i7sbC;O-QM`eNuu-5P&_0J2mk-p$NBhPmZV6J5%Okr2eWN!T^e~ak536Vk5|t&w{`Gr( z=GEaIabkRTfirdlRGgCk$m|IS02Lnp3;;OHa#B`-jWpRTLmj*#5Nj8=4|$@gJAxA3tGhc)-Jh_&KV` zsEvFSeip1OvokgC?`ncm-mwgoSXnZPw&-? z`ElZvn6agmK> z_X>a(fF7X5pPN5*gN__&^GjU8e}r4)k2U4rE+6e4-JgYpxp~ZcG6B8OskH;UveG}g z)uw*TbkC7q%8ju$i}Ta!UEp-yn;_@>H07Ivv1_T)+5-GXW?A!Jgy(k;*wlZ)Z_&hG zoCwjr{3w@hwd(RQHM+7|F91j#Vm5f@@S$AJoDqQ;2+sdePo^f%Vm_poxJZXIr-(0b5Y^pk30N|E}xX5K0VWpQ1!TD0>_P0_dKvy2{NUyx(W z;By(82U@CjSk45{h=h4HlKXBpFBIENwhBBpnwhZuKQcf1t%2W|qCJ3H>y`xisoxa< z<7DM++ox&u-$MU!H(#xjJp^z(+l=iDRx|6sGAU@Vf_3J}FeYp(#<9?kwM+5sDJ zfqwiYD&nEWGP#n#V17R48La<*Z~mwPC18#xv&l&jb1C%mes(1I*(wdN|9=<$P`-Xx z)+{2h%5|b=q})-&hwz*F|Nq9X7n(k%!wsN7vSI{0(0+`Xe=r1Xd& zjTRsQbdwHG9l~#q;G-K+oNh$>$BlvImFG-`AyP?Ha%j3wS=<$${9Jc?AB>`_tfeKi9kgjO0rHiQjDbK>Rd-bbLf8 z6xIOz#QK53{eZ#zxH<3c{-ydKpiv}WNAghqmi;$Qls5~!x z3;l(W`oI18%k$=XU0z}QM45+i?v)Y?{g2LXht^k+`l0`0&+FVI$51aVj~~@l$}*J4 zvR!9*TK$*j?dCu6RQzQb8}Uy2r~jw@%Rz!1HR5@ILohA=W99j5zKprK!S{dCzdy|` ziR-xYWsGk<;1`Y^ zEBR;AX!c{r^fCxG{6qEAlc#a)IF?3^QIZAq_&`_Zq+leJNpE^YKH~r(Z zBA5R^_WTL_NehM5p0sWYMl!4VTmA2>0MRe&w@v_xxarFcA3MRHI76`O))`w{nf-WY zO@zv-c>;2N#A^N%sNhV5{-JqPcIVe@{4NBu02B`9uh%iuf0qOB-|n7{wel5<3dHeQ zHi#VVNHu_$tg>}&@E8xB1wm0O0Yql5aV_@#o<9oxBMy_78wCIHW2}c10Ir#e0iocw z!$bi82mVRfe?R{G+l_oqRELViUA~tI0x(ZI0)A=#Fo2TI;xwdk;+`@GnT`LLJn#(p zsDFIw!w4%S%jsIs-Z)G@(VjSw_fO zj~yF{KKnl^?082(r2ob20zzJX9aR8+q+^`4Z8Sy@|Iwo`3Fu-Z{*LRCp8@b#46*-w z5wm9sAiMZtZ#x=1Xo{c(fgMmOpMgH9y5#*H!PJ zazod0bp87!;Ft522gQO1MU7~+PW&!`ywf;X0gfNn9KM4tgMHzZgCB!uF~St*>&KrT z6Atx%`O@$*xB$zP(+0(Yr(65>^lTxG<%!>G!%>c}YvK9$fNQuOz4s@99zELb*TkK8 zUYB_q?*Em(*Mpc98X1DKxeg&W(_tXyyN_^A-JHDhJhOg!yU6GSj1t`$^(Nhp9+Y6{AIlS;fL%n(PsrkEW06+N2 z1KIffN@4mE!w~IT$xtfql$q$p6Ies@`o5_!fsnup5WsPMFX15rH)4G{eNDZ`b~ssd zm?EiK*Yx7Als{Dasd%_COJ_cj_)Ap8{qwFWRiX;+Sf|rABEi#0F8jHu6pRGSprgbtR^?z&&FJa+TDNpTCA!`ak`q^2raTwPxdiI77eks6-|L+#6Wa z%)5gME~9q0#vuMu00-w!?Y}?#Vf%lqHYZeoTd`M z)9^>}{00z>?(+xYr&yxhi*=lH)OB#$y4~3Kq^^Mmm76QT6MV?^}fQ1$)1d<1q!dGQT=rQ%4}x)ctZM37_2XZKITZ!f-$ zskjVJJU-6K%a4_OM_>Npz$!ZG_w)Ak+x&bSJcyt8g>X8@4d6Ug{nUA#kz@%MazI|8N6Hv<{$O@`RE@7|M&p?OZ~b2gMdfjy%9>6?cW$0OJz)HUGM#K z4n5NNOZi9rejWp^@Y5_ydETe~{Q9xKj1Of6Kc%2oM_B8@stxRjIPRXPKjGu8V+6hZ zgsSzvHOs~_r}qq$3-Z`ft7Jk->$8Y~WcawX_`bjW{XF6M4RAUQ`3uOD?%u!LRq^|{ z0W#t{!gyLu7f4{I}Lz8b((jO zvuoS{@rA(*MM&otzi;{ec)-r%BHt4GZwR(s>z`@*u$xU}s9)bVv(aP#ztrFSzQ6tb zJn$FjE8@DW=KKZAyd5#BKl5wcR>!yjh^Luu7 z5lrj$TGr^Hf3|C*d_T{8oGK!&Yy6orrR!B$mJ3UciVls{;|5axJ`v&D(-aEAS`eP3 zq8}e$H1&J`r%V6#yG6hkGnH-;z$2iir{^DBMO+akGr`t)LSh@axOyd+L4Ak4Da>X; z{_N@UxPg40j+hRj-ycI7>^l3pc&96NX4{a-_Lul z)cVA_{gP;}V$^EwosGm1(F$Xn5-0d(`z0?2XfI3JNQrt%@4&nKl9+fnmn11>V; zDSRJ~*E3=(h0BE8YhFFFTksj->KKcBU_TN`u*`zRRu@ue@!9PU& zix;`9CD4JcB)~dqC4j)k@940_DBdRn0JJbq>d+)Yku*barM0r!H&~3ObdP-X>F1xe z|GxUve?ioLNp*SoS^c(re*+M{34lUKQqaUW<}!+9{GJ4HyZAAWFxb&(cz*!}7k?CA zQ0&CDLX*#AmHFcgk?*U||Ibg`e_ws>KOq_~^3Fax!~mTCB7*p}fGHe=Ka@|AfS)Gd z_lv+}XE&)&5oZq)+l;MZjU5{C+?k;tznguU8)+E-Wq@DiLLrNQ{4(Ul#SeVFh*>o8 zdorm8%+Bg!b%oG-#kmFVFQMq-531mg?N~RpYv}|JPtnZr)#smo+Wv$7ElB^24zvHu z7D52Y2nzndZ}Nlw<(FT^vaAVEy=p)rVCAn1531mfbt^$TjGr=SAA^~tB7wEw>Psz6t? zgTHDJFJHc-P?`a2LBWq2U?NENKZqY4%ETW4p=L34y1xdU9T10e-L#pn`UL79Z2*;{ zFs%Mxx^(g41sekjKVU}C;Qye_4*^j35efrfhq}pM;6tZTqw95_waw1DEU@)rd+ zBGbI$wm?6(S;R z|3UWuboeqfQ~<4W3!vL+JVry|-GP-g*O1yC;8+c3$PNCGgRQ}9I@j{kPeCvKzfpMZ z1DC>crTsf~#ee0>6&XGFL684(h!wx7kIVu6-_ODSi7TGUSJFWKr1pGMK>ddW zm=nB!+CQNGU*7kq?q_T0V5eivF5htibET@xta9;TZlkH_+*&= z3s=zOrv+SQH-Hu3B5wlO|7i#B|7Ulnm?U7a+1-`hUH;$uVngAh4{zRl$neGOC%10h z+MD467=`wLhSVNy$r@y7=M^IAR|0Vkme)_*;38sHD0ZCx& z0`bxR>kd${K2>dqz|vs&~4?4K%@f;;9*PRe3p6Lg(ZZ zo0%*|V}1%+*81Q6m(Q#Ue1;0})mQ(;a(DW_!Td6Tix)1i^M_#cFTVKWAO9HtUrfRP z|7oxvZtz>0@!zBfKKjtY#zu;Mc<0XAM&N@V&Z7z^!9V5yW?rgxY2zgLCu9F_KZC}l zckqV~gg`p$ziIoK^e6<92m?s^mlHrGZ~+*w(PLTgA32TQ@8Qx7Ko+M_2M!}0`d?ew zzVpS}#@a@&ceB?D#*bGePs>jUKv1ge()?%8JX=FF2WS!o^E)*p(ZMeZxa@bp!T;iq zF?nl)ADEouxD3)i{lMzV?d{Dww{P6uxOL<9litS0>h0Cl+k0QE-o7DOh#!@^!~Sdi zC$mox)Bhys$xr`J{?A|tb}QK5|0n$`^30(@{Fh7nPijvQ=otDZeHy%Deq(7;ZcF#6~4zv=(Dt+egU%_mP*_EvB0J=udPpe?*{ zV{gTikN|$Ec6#b$+1x3P9m)U2k292+U@~dH`+usRfd-(YX8pgnbz^IF^~UONR##WI zwt8Evguhwcx`EW*D*oF1ms9}~a94yEIel7t(7IN=liuF_y(hc7y<59ap6qTz7TdeM zJqUwIOi=wt9RNR<5jxC$TIY`pS{HQ>s|0uq3&e#?TD{a?Ue|INMCt<~RbA-aXo z!}>SB`A=Z)_3quP`B?)7^Yf+I6sF{O;lxpV={nb%=Vx={*6xklD{H;mH#XO9tgo%@ z-cLzPz|j_F5`PCfllX#1A@47o25>0>gwN6Z;ava|@V~`>ueS=%yZW1Z_qJBWE)i^9 zU%dxA=ymX$1N2h1R(z#~A7$bwCGyWT)IYuho8Q~L4;k#X%4td-RCe_K>LRgU!y#OMZ4@uB&9y{(%qehNSia3KFte6Moi zdDDMY`^U#u{`vmO${yQ2wuA`SjHI2N-JPQT59JSO06bNOZ~;>G=bwD8b^r^QfRd<~ zs{U_n-RNBhZ0|Q)H+~}@uzF7dSw)TLZ8hpYdx3HQ{rOe@IYzCM|8W)m`+rTFI~FVa zf8h05o1U?A8Y*Xy<`X}`Gd|*OU_+`^T&FhWf{0@b^~tR`23Mt2lYDcjd~xJ=_xRuI#MdLv<+h--ml}a`1mbd@TNe zu#5k;_0=aVSgHT(*RQiE;qVa^KMeu+&GwJduo^IsAO6qmzs--DwZFgjFAQtMrvTP? zL%g!Pvk&oy`=6Q`V*cstqFNro|J%*aK7+;|Fi-{%01`g?tl9q?^?v*8+17)J@+n0; zyg2LrpF=sO=>OXKU)|e-1oroOmoG!#u!qZ+d+-P_fF1b8$+LJrI={HYXCw%CQjW*v z`XM81@x=i~n=xV3-z}`AGvhba`Tn=K-&WSiyfVnAb@{u8j@4gFs=z<=gE)eVb_Dxx@;Ch-?VpMl zKU^-(jUyRU|I_^x*-!%p1!Xb)KM(VV{i7Jo{-5~Qu3To<@A~z-7cbtuex04b%U9O0 zYkvm^QN1bwEC9d2Ddl6ZCYfmVtP+S|lXAd9KA_+47B<_dX8*6^R}ILE@_B>c21>wk zpj@zjjpggh&xUVpZGClhpUvR@>MCx7*bJ^B%E!vWmjWBVNhD%WOB#gN2tKMEir4)h zn@{Lp0cWUwcT8Y3%(DFlztV@@Z%d8?_(hLQ;^#&B^#5W0Yp=hKKL6I2UtYSmasB$n zy-QzyxrGFzLLxCPor=cK?8>AK$Ck2t>fX^ERs7R-OKkPQMUb^=F&0exzR3PR-EXqW zG!MhwW)YgTpxA|S^Zu6=0J4~zdlm0M@IMVWI2$oW^k<707x35S$8#4vg2J*90)Y-g zVaWZq$+-Y+N0lY)AA?!d|0n&c@iB$OU=l#T#sYt(5h6g(M&klvTt4;BU!2qux;BqM zx1h$4X27biYeM;bf430WUHoZYl<@bMt)NToe>*dSKLqEuRmjX`fJ79*0!x(qKgwv3 zlmNKFNn=o8+yj0^5B)uK?l3L@{BXbk<{yKfmhJ!nsgw*Hqa zH*}Am8&2PA20zy=qX+!Szcv1hY6ZfQNm?@Q+q~zY{hR+6Kd=oynSO9%O_@j%F)je( zt1l=#y=oCT#~ z|A!3#?VsP#EH=knHMYec;{qTujmwv2seMy1s{*+#m?XRy<*NO=g=pEQoBF4FEBM6+ z{tkQ^zww)l5@{=<{lQNstNUMkM*@EILr};iEGJ?)pX2x)Sy%=eeU1wNzgvFEB{2ve zW^nhm=_pY0#02j?%(=AvNrghEHSmA#_`~?CjvD&wDd3B!@o{`qlM)({tbZCnvE@;SGMjoK*RzfDXcIDU zcz8JSqXQ`WCqMK*uUix>=h(f+60%B5tN#uDz#q&H<b3aw{@0#=8Yb=liU9Q|2`G*&lGg%g@bjU@bmoT%6plo`VGbseo>yTQz5L(o zY%Kw7okU;oAMJs?TFDSawKhzdTIR z+KHh+uA)(FWwH$ccky$#D_R9#9rw{JH<%Y5!7ucmNfM?LXilf%wfo)&GK?LXZT|ypv+O-~7MWmwk%? zBSHEfz(09bs)sCemx{h{!LL*HSxg&$v;iIbl4IfjM2`jZ0Oea*ouB&mcXM6*l0cNB ztM5-U(EiZfAbwn#d8vPdCGuk(+K0gWBm?{(Q9%5&pQ#RT(dPHFl>RRy;7(7QsR;;E zhO)!*%Qc<=S~wWLZnkltOGhgc03TFP3etaCKoXvZK7LRTKUzE&K@xzKlGr#`(f;>& zS}{5E5?^uW``do}(f$wQFKR%-P@1-qRWM@6)(BDxYz-Om`*d%?tZgiomM;Fk|9iIi zh=v8k{SWvX{Xg76@`jtY-Fnr{Dfhn8zzms<=YexbGTU2k&?k*z>k{k zR)Mt)-%br~zXm!(Ew|5+@YR1KH2vGnJZnMCpQ}~)Q(ZwCbv7~GKSmYEOayzn>{qr;lKSbot+QkoRXl^M@Jo1Cl^I{|EsD{xnc= z5nJ+VAqBg#?Zob!C1>@c?D&EF30{#P=)<3tZe>tAa4`Niz`slxPyiKwT@q~R8m4cW zx5X+sFfkG=YUNU1?PBTy_(R>nAKQ|P8hliFzlL{y@I;{5?W=T8J1{iUKLx-*KRAq^ z$c9cz#<@<{w+(D-kL_eGOVOJ9Iv)M0=>$|u<__MUpQfK|A2kAXqV4~h^*{MPJ@7Gn zH3Sk#S0R`Nyanoy$ii}dTTu>-EogQs&!iz^i1QF%4dZXgfV%F(FZi?&Jhs~WrSE4v z^V=hzH{SUBH~!vR!f5~6QZN7`ClP}~X-n}S^#;~zuwJc;Mcls1#5)&v z74~-?J=)ou-rL^ZMr3Dq`+s}vd#^|9Jdh>)tmvzw3l35)aDHH{#3YCSbAr@y#=5h%W(vU#Qezi+Gu73wU8ov>v)(1N3K%NA? z5JK$lx5k54;Ny||(mVzuEaJtm;30&=N2q_I`VDK4Tiusq#O+(Zil6E~fPs&3UHkjH zJLKQndz{DjiU0Mme|U>4;{WI)I*#4l#1G&1;K99z@PEKh^oI_y@}D?#f~yycY4DQ- z`fc>_3gv&zB_bWMCSZ~fZ7jm{QQR{C+>(ie=-!LCy_AE z(yPmhXVt0rU=jRhrGNUrl3xZdX2!^m01;q0n0{*N?(TJ{{}D#@?xXI5zcIe=?yuqh z5zzkqy7%Y1uj2y(@_%$!_Mi3t@z)Rjz_I!@J-E#nAOVX6cdV7)HkwgvA3DSr4Tk^0 z2XOxt{}JfF*|UiAV*Lz10%m6r-~Fe6@pb_=XV)8DA?LT_-h}tJU+~C@k*KhXL zZth>-UERFC@A^;t5CHhm@-_9pvvdE!{rmS(=%jlui;3WcL#h`=`4lB|N-N?_XF&B| z4F07){MG~GviiNrZvHvEWzs`8^eATLCfW8O;G>4!z1w@ctEL2xA z4Pe1PG09houK)Bsusy^O3Lky+nJzgLG$}49V z&L;a`Hh#4KY6DIGrv7R1!x`u_iT|0nJxmgSPvnzK^1}w^$iKb6y0`OaYkzC&F&aJ$ z=3l>leg7s#a|56CKlsuAzkBziyI1b^h))3&?f;+t^y^>$Y1jQBpCW7O17ZT?gR)F$|YT=os%`c~2F+kgCM>(S%K z7{%XP!)Fb9UtHhE7agnnTTOm+0IoRy+FiH-JfBqn{dbrJ#r(gQokri3z(M(6eH9;5 zSp`_;;6mfqbR=s3W%U@T=W^)FAFV)heBPt&d+_{s_aT7CYdepxtlhi>?V~#Y1@G_o zdg9-d{hR(#0l+TIFF8UCFTqE2 z9D)n)kM}c~9}|+${%OQgK7MZ;0?@=Ch5eV`c=4x@F<3*^kHf02QM_;AIz9~KI|k2` za;v{l92xxI?SHFjfJ72Mc-n!*q&9z}qL@&$#ONc8E$28R;+Oh&e)E6vm?rT<1kXGR zVHErjVdCcl--4o=|G9%7GWOio-^zz3{)gY<4w(J_(0x_)D@kp|NQXV@9sU^O7yvjuh_ZKpT7YQ5&EzjJ|rZ5wtuQ${$K3G$4}08@Vfwn z4|4MBX+QX#g{waN{vNg9kE23*@h#51n-A}O^WDRHM$o?x*yL|1Jc~ebqy1apN3#oy z(m#cs_)n_#s~RMJOo4;$|Fft7u1hLk;jGhB{X_X-2I7RZn7Pe&MI~U-X)B#Oxnc-}!AENy48wYszm}zuUjt zipk8D1wW16jw=KZ{2#OS??3puMc-f}RB8W4$z_s3PC^XeX|x$<-p%!&-5_)QbbeE` z|5X3k^@sYQe@#!C@m2E$0h=#_ak#Zm4law}$C^jD+_C_Ie`n|G2jBi-_d!*7Z6vPb z5WD%Ax!oH`6P>dHBN#u~8N^Qq!2b;JfAoB?eVV`V;|Gt;_PJzLcK%8L&f%&Ls%-z1 zL*}=-!?eix@gH|S{(ASpAKLuwl>Yqfyyx%)8()v{ITuFfFTnrT!7IPxi(djT{%4=T z_@EL$zs-aSS^fxrG5^P3Ki+=4y{q%#)cVVppuu3*_`dCk1BY_^BpkJzs_k z3>P_BUk>NbFE780Pk{LqELJb$$9iP@(mmBr{nPec|KNwsWbM=UBd9RBa7+q4$^g6? zFpc}d{Z~ggQ5^T+!PmQA-@pF{6IT$Xb`3ar=qD|H%2?+m6$^WwJA2tBzXYIfEt?D~JZ6jNN(Yxsv zH6S?D`E%dLG?gAz&M91IA%NU(c<}WfcK-+iFjf<8Apnm$e}@2UdO}XtO-`9UXR5w* z-XtJ+{E!9ttpd>eou7p0{LuVO{{=tyAtV71AeSo(UOdTK|Ix<}b{>8F2>d#vkOH?0epdAewGb?o^ObwJbh+f`4>^SX zH4TFFAD&;J#;>lA3n1~k4LHBbST2HN2tPRt&@CX2yZ`aWcm(*z|0mArx$>rtqW**3 z)&nE}dH`Sc2^;w{F5UbpQ!J?XKK!Z#)I=1jTssG9zHWO0OZ7jhzqH5;=|H7s```H( zFU~)v|8vQdXOF9bUsNH3njTxRBdw8=JU|zJG!D%*`$}Emtq2;Z{RT&=V5~|G8p4e+ zypfF*Vg6>u4FPZy;o*b(eEk9c=lHdhkwfyByi`E8=m+yB{nG&=yiEHyZg~erQ>2TX zX~qRU8>jx1{DLt95dHKtUVeT1H6DN?(Hn;@{ZCCAGu7KcU&tm5fclpKz$Ne?`u`Tc zwGQYgScHOjZ5h9m)A1*M4pJpQbnp64W`G?EZ@pzE(5-*dCP^KCdjDH!|BnwI7=GA$ zl0j5D=kI1`YH-Jz3FJ5Yf&8I=c7>FmBop{g1?tBP9Z!KZg!}hymtL%NM`YpBjL~dO&Hl>Hkap^T>8E{AZ=I{JcFv^9%FE@mr1Q6P{bV|+ks}(Kz|L})>4uDCT z>ry__^7%{xBmL;Gq1!Ji0e z;&uHezkTB=3T!6-_wd2i7Mj1%e+RxvrsRL~P1C>8W7(nq+;UqC?T7n*tgzwcj+K0W z;19Nc3Evd}V!1xme%k*q{xU=6fAB5FKi=Jk{{v?SeYnLAe#d`lRQ{?7&HQyt&Z1*M zovHuF8z3|P5})=T0#HuK!-G`_ZG;UYN7(<(Z@&2klMZinq8EuJKQI5mrAt5j;Y(o0 z6YU>fy40%w9r~~MA#FbP>kQn{96v88F0%Sn`PBnNc>*4Y${O_4y8Is_DO2WOzq!7) ze)HxxNAOk}-^cOg>?ti3KYc2!v*efk8~;n){6GCE@2B}0Zj9&b03FCbzc4?)!2dpe zUQnvp(mz^$s2_hF{1QM1f1;;|LjS8gE^cvpG*5u%aK)U&1fv*2U+%ga)pOSlLl`B>K zM}v2P{CT`T=MOrG+4)bv%U1jv@!YHk+-{DaH-26_^AkVuhx&8;btNzU2W&dhnyZFy8)#K-bpIYGcQ$YP^kYa+^^<8Yb z{>^@op6dVCyE}i}z5mCrschK1bguT#TET)pEL(k1GV_G{X0L#dsF|Kn|xIJ zZ;qd5_Y560_0h0U1A^hu91)K$T00$uO!%w-*esGVfB3=RKLVRC_)lB=ullbuTE(mQ zf7sCfGz{Q8#(Stqq5hr!VD?{pKd^}L^UIT|`=t3-`Gpkcp`2Ji7XeO$Uyn@UiJzs< zO=ehi8bbfc0D?Q#bao`C&kugK2o=9sn(jKKfA0Zz@vHvJ{L^^<1KEFb{5%HGXfS0g z&Ye4lC_XIX$D|Sfg%FYX`B1-g8nXYR|6m|@@w$8*p1R_9S!8~zW~^!IbC5r7fSde3 zE%Xm37~eZ|+J8U)*Bn2;JV$cQXUEmjxpPbB7BQ-D9z*L978dN+-7(-49Y%)458I~$ zM5#SwexHI!kAl_wQ~wPwko0eUhP@4WALHi(5J;i+f78?8pPOU*59=4d+P_Zwr{#9} zzvlS)3hiS^uPm2xR}_w>JTFR#x-5OkS|Ce+s~!xA2zR^?wNJ@6x~XQ~l)c+yCj?{^jxW zuxX5-U7j;eEYE@wwV(Dd7lTYGg(7`%v9y0mAn9M)fAdXHALmq^dTov${zf?qemX<> z!iwMMB?R)@(@)w!)Be!{s{b$Z7k}UWPe1!_j-Nj}hxu9;m+&hz45;wuFsO23Zs9B^ zbws*_NS|LYD+es$5nBBGv2)B*DmirU`(04tch#!}aQ$DtED8LO5BsbBKO8{8ukr3` z{|{pS&GGX~u>Z3_#h(Jyj|PC#d^4??zOWSI+ecp0=&K34v6=tU!>i@loQMo;l=VC- z($QPzcl`L~(>gzNf8PJ?^8fwqUuuRU$JYZIKo0$jUHmkA;4g8SOC&R`N?-c-K0J{rT%96xy2!RXInwxT43ge{v*Y;UFi8tWfxih zmcGaaePYhWyR-h=c=x{c-?#n?k|Lm22kYF~#k2S$uO%)nzIx6Yzg9XVGnilaoXe*l ze@G;(z2t|i&P4ib@XyXtEN5l`&iM|SX1fiW!#TXALgZf8-2Oy6QQSb26+n*}HPIber8PK)2t zB>)uH)2&o#*(_dTM_}>-`d{RaeYW;Oa!=+rjRD6Df^eCkwR<5uh~J)PG!7lU*_WSB0vyV&hgn3) z-zUAuN|<88*(!>vZh_~H(pmlY9Yr!ym?iBf@Oh2r$j|>U0HZ%KME`NYVojvt3b>-B zpbyvJADB+VQ2WTIf1~hcObWutGH8lb{3^EZ!Zjor*}!v0PMtb*=u{EZHNy5Un&Fqf zeEXeuu8zHXb*wY&eX*hN(T6v0a*QaZkND`LI|_(=i2vK#Zan9oq!b}A|2r~U6s3wL z{a3`J@i$~){1S)w7pA7{QeZ!IiUR252mU+njlJ`3C;k|5$*VONAAb1Z=H}*y5DHeC z*xuH5@as+&{rn&|5e(*M?^xP{0zGchsO(T+g~kz0R)GlhU-+0)rxvD8E&v$RdRfG1 z2S3#R?z>>`%MV_LjSZoLb)(nA9Fm*8HS%w6Zf~!1yMurB@R|4P7=U-ZU|N(HrBw4$wVUD z-nez+_LJU|)z#a3#J`OxHz9#1;4hx@OaE*+@kc3)#4lRiQAGW(4BYUASd(+h%ttX! zta#+eDg2-$)DP9;MtJHFbWi>>B|qTbe*2wwuM&SuvG*8res>7YyRor)o5)|>`Q6R+ zFV=hOch-M*2XSt!um67i4*3ya{`Q<7_D}Mm{Dd}UTCj->Fs{i;+qTh^iDZF8`R8%t zKXr&z9vvIp-oh2)XBZiN0iDwZuoC_|z&C!>1ID;{^}VaC6AZnLT_}9-$&=nLOyJh) zDkhg%xv{tM*TC|Lzl5|K{eC?cEOkBZr@JeiR#3u``tXL{|N8@pF#_R&<=M4BC

8c3YrWf>YnvOl zc5mF?zSFyXgSCHsZ5Q8-!TQbo0nPdkc>K{CubE&xf;}Hw2 zpZ9jtYy;^1UwR45G=@$ zZr!@IveV{gRhZ?1&wgj|XsQbFJ~dI5;5nXlW2ju;z=uELce`+YX`j{)(}y`g02p$0 z6@0Mzx8J@><+J8n0JGZ!V~EQcp#I;!vAK2wKajn9Us_*ZzuDWovC8IP5A*G!?ZZS; z*eLku3I2>aI5znAYo?~U_&HY?_-XmmssS&(bn5C= z@YB%Q(E)=0JN2Uv(Db?b53wis!|9n*;Aa&F8$7-KT>suASmPiGpq8Kw zfV!z-{zSY2f!8-So@{J@e;xeWwk>|Mb#(Zt|3U!9PkboZ1aO{%!ytsgTF-k2^PB!t z{|^^G^`jsC=z|~OS`a)uKlm{|Df83tqoX4UM4QO9f*i!y*pnW-AH)5Xm4C+n+Z(qT zxZK;`kpI(m@Js!D_=S&d39A70PYGng!7&bT8W5(be`_1m92@~Y1i*>))DVLI<(E#8 zA5IU!wVqdjoz|!XZ@+W(J`CvVXqj=;ntj z7GvV)SD}Nc^WH)JkB$-iW^jfN{+E9ABer^U`{)d7Dg8qNMZFIRB<>u61zf$lif|88 zCSvAzOtiPVYj=YiJ+8M`xloGxKe98({&NK|`={Xph}B?bnzqk*A~NCN7#RnJ#LozV z^e<>FObUpif9IY($ZegmBgXdN-K+odFaN^nlo766S=(LNjr%~}5^k^J{&#y-Nmb*9 z4HY6hpz-rJIxz(h7Vu?YSHSE*9`Md)0@Fj`O+*>+9zk!?_?U`M={+;odUEA!Pv)uV zCwT^}uraBhzvdi#3X3*EFxR9Q`xWb^jQ9O_1mFNMwd%@VF}02!F*oy99vYXq!l`~< zdg%&_Gi|>bq7o*4pY5Cj_xK~@TH?iVfYOBvmb^h}ENROmfkfmKzkTp*{L1A=BFhl| z*6-B{AHO5;<=Q<7AmkL!*9Y=rNM_>atO7+S_+bJ3)iw?nKrrQN*guMnR7wUhqZgxi zo!*5KE9cjR62IP=p`hpu&K;CLen(*ccW4ALyKHdBdNBWV;%DtH^V&2q7cSs^)t)c&k3BAd~ zg0%@ozjp7-@2_9~{>yu7m{z~eK0dBY1(<}+LU;)Mm)?!pFZw(=GI&6WoXcbY8{bII<};_^tkjRHmmmBLD;V-SW-wV+k<`A7(%yBueKuT3|C!`}mU;;Mx^G zegxH&L2&RJ`RM%Y`dz<%_u|F7*RQh^*wTM3u41k-W4+=57k0t0gayCVei%GWoiFdL z0dO;bJ;?q=N#!F5*;d9~{?3m0DMVN~uZTWyvc)Oq&q`M-P^c+edFGxFTdPs@izsAOQyh5B>uRdug&@|UTn&f z*FJ{vsQCS4EG-;Arnt5_T$2GMl_#U zx8_f>=;FualllQ|z>S zZX6DDRez31S3t?aarFRwN@nEA>O za*DL(^;7vIa-IiTVWL?<>wG8#*pH|B?*$Wj$ieVc?67~o%oN8v#>*oNXX2Ca=h9^D@5s(>=} z;kRVxZ`x1jzk^@QVfm^RgZS}H41acEeli!3u|Lp4OYW@)(HdX)mNsbC(JE4CS3k`La7zLv86$?O_{wJsK zMJRrJB=gHYV}DeEFb;}=_Q7+efNSg2E&e35$wk5=P?%=_^uOkV>59E*i9hhe4WPYK zZy$BuNXL&E|1mE`@M9BETY64z73dOe@S*b0yZy6h!gc$Xd{SbV2dtvSk1KZb+tEjk z;JeHJCE=I+5 zx&4!$W9RMPgj+!7Hy7iV@8GxdO9a6WC&~+Bk94m_*jfS|pR68FWuqU=jM%A$P9NYo z{|WG`%S(?3tC!9LpBkqbSm1`AAFIS)=of_wQ)T&V5106S;AMrsN&1KVqx^ETc4eMk z=TF@xTm{D#=bxNkHvJnvWXL{;f=9f3C>&$>5%~r`NvyRqe&FXoeg&`nCJRgQrJp~o zh>8E5q2R}U6O0e2&<6d#&~2eBSgCXSj{}3B$4oBf_EYUg;K$kvmifaaxc(y_*0G10 zgrpKupNO3@o-f$CHDTuRg$qAL(5n_ba^TjWknZI@63?k)eW?-7H^Svch~1hITyvvG zimm(e4--HK|7%VDW$<4(Pkwvea`|%2{*!tWTmLrvc+thc!ZZTgff=Y?a&QX}Sr`B| zQk_DkWDHElMyY?`*Au1!hI%`%>1S;U(i*tU-<)+fp40O@45oh3DB1*SsNW|4c6>^p zfq%Z@haku&GIu(XOR*^V887&WU-46yEOUX6@)Q#INsIsdV1CSKe<{!JP66=r7A)4m zj~$Yi7A<}X0Gh-?l;V?S^E2Fx?*_t5rv8Fo_$5E+Uw+x%vhvbaGG0GPpv8awd~?cS z9tnWN;QS_1OYSoB?AAs1D61@b@1nd5esW!IVe>sl2#v-s`iHI z9)NoyB>GT)@CSa@Kk>znSr-waT)ggir~XNUpL^1YJi@}qu~@_YkpO%g%3a(dh6I3R znOBDalKE07_?i78Em^hR5e-^uPTh_+z2v1uw0lwR(46400VMHX@mV;7o$7}9SNbP^ z;ZGDT*cGMyUn2fbenKWW1L8->l4kZxm!jnf0YqJ)_IW({P2HrN;>#Z;QPYYtl0&k8 zWyV5<4EWbxyWsq$eCMavVm_9L+z}f5#2mfPD@1Go!8}d>jlk zp`>*o0P-hb$spH%9)$l5{tH)(pZGBT#D7t<^|MgH&h=l3UlIrbP^TU!my5FgGR62Q z7NsU`ix4+=d?0{KOabIAvU3Y+P1?VJ4KinXvwsxB6;koj`jrM1govHZcfl zfr(`Z^t85&NlHQG&{B66KuIk8WDae9(u-gCrhW0VIDPof7yM?HI!Uoe2YN)X!4Fq} zWTN2`;xEw^ckX-|C198BxZL1Rm4WFDQnE#>jl}QTH+t}w$~XJR#q#Adu+*P7i4TMV zUD14`#fU2RPyc896hMnR5}L>Rb`py*W}_EZ@cKHG-joH?&HSy{7a)sD`Ca^pn6>}B z?vCUWL_ZS0<7fUs0_ek^l8qntdkyBU&59q^K;vNTCq3EO`vE^)Knl<*RgtboHHQx* zav7%u57qxguliJOn30;vceiH!pfY6zNEG!g9I)v^uIbolRsLoqW|hW z_27RCGe`C1Hz=VF=SQ}j>CMjK>-KMS4tZ4y)h3q|C%uz4X3u+l$v^IXbR@_R|5V6hHjZN~=Iu|L*Enk69pCy}77 zir`s%v&k<3uu)F-U-6^VDl>@`3j4<{L)X&ywN%E~1#*d!+Zq4oZ|Wuhh0X=F5(YB1 zBC2)Z#5!r(`N*H}K^gf%LcWd7bfh9oDCjT8jjB|}0&~7))#wiXLak2DBP^o}Ai-Ds zZ@vkcdk-o~>T9RQ)@b~oAY+Z6Jfq=ae}Dc8|8nGHxm9H64;h5cX$U`0nY5RS7JnE& z&&Hh!II+oGTB`-{6#SGxrTxU4v^{{o)c)nmkt&jyEyq{CM zA`(6`S;X>(0Jv`P>#Ed0?v+amcxwJqI$_0`)h}^Ce&QLF@dMBG3dew5X5EhMS=>&r zMahH=f?t`C=u#JdC4i^oueCprKMRGHP@8}HDPPk+luH4i|Kl7LKbV+}m{dD|gvA0k zfX`t5v$trz-l@Ow#Ym5fnfK!c7; z{=`HwlM(Z{*-P7wS@2T~efZ-hI_hVlJ}AHA8zwdsY4KaGN_KViryJ3sVk2#>fAKq^ z3!pzgGi$H$r(=0wNL@Nbfvn(MX8o525cy+WF}V8kIWPgSLRPhJO90ie1NqzfPY^<* zTA4@YPq8?zBt*MN!Kw*2kp;pH4jBNXp3DBU{P_$ymJNVuZX*?b!~NI#M>*Naqj?k4 z0uYEBj*y8=FnM?$rqzL`vP9wkL*j4sf(rh^0E+yI)(~N}ncQNT-`TNh963n;Qd&QL zxj6AAd{r8OcJa$my85&J4Xn6dDfzPihVeJa`|&sE)eSAq-PAwSIEWv6spe3>^K+$i z9c`lchktMbfW)}}9~yya3d;V*&nSiGpMO5x_hkKD(D;O6n<~A4$L9?CP-uRBe({rM z4=VvrOZbFk^8NSUuReS{iGVaM-k+JBMHK&LW)Yp8L8vk}5B8nR$57>s4W>^|##U?H zz=w1gAR7~C@FxLOybuAmfo%a1Ah!7ZrHY;~y?^rB`|rJ)oh-I(kHCvX&hIhePtUiKBcYR@wnTpPH(dXH_%Dz@nKFf7{Q5Ko>Yrcy@h8&1 z-X%dWm=uS&(6bl7wgCn_AdCOn45Iksz9^^Qi)~9c@W@kddFoT}%Rwgn*EQM{ot7s= zkJ`$>RB1n%|NP<$MwoO7RGG#G^P{$xbwJhM_*nsd2Kb+jy_RjD z!Jmy^A~5}D{P{&p$zUeoOVn%ytRw&^KjFjqjg8H+8jzok!t{>}R6at%&$Eyo6Z9wC z<>jS?N!dV3Vy5ZowAqR@8-XtV*9P+Qj^AE0Vg>uR@8Veb5itLB9Z2UvRUqi4eri`4 z$cg|7u)q$liW2}l2k564mLi2~{5HeFLL~s?!VHuB{eQC+G=4m6_4bdNFDpP>|Ng|o z^Y+(W48khWIW1OT~Rl}3XKRH1E zZ?UZ_YJl^rKZWkZ&yF9@w$E6bpWsT>Qd-Xo%}#*z5CF4VOCvoJ*> zT0WG`0`)C;Y9GvAy7yeQnZ{v%}?{E{?BtP zY9WDs{E=RuGTNd4BmuT?&_A3%O+WL)1-ew27S=ENnOTPdem{7mv%b3lV1=o*`{$+g zLk6aHGz1n=PL9)VxeUi0?!HZ19t-vw}h>A%bvz#OI;R zAocf0!X5|!nJn+vHIA7okJ{bbQvpNxko116rYc z<6;UW1pP};k{Sho-CRx&(rFk#2w;Hwuk7Evz+1G3^uFQva;5$*eyaT-{B(7K!eZ8| ze$;)V$CCAe=!Opyk@}sV_ycSjhtuOF1IX<^I!fsZiY!O{_bOoaFAIPS-~s-o#_#5j z%8zxSdq%tT@3oztUsVB-x=^-dEd%)R$NNF3otiiG55Y&zz%oh-*8W8&u@C{0j6bCC zR;vHH0fGZ8>ptB;f!Z0xhaCe0>$;GnSl;EDOY4#V8^6X#&-c;Ay9nVvCa;Gg53@bb5Lk<11${g!cbs@7;Rq zI^Be9bfWy?zOCemZ4NJ>h(2QW~;RCagu%S>hg{R!r?r0r@$Fb`!~lw_rCxe91t ztUSEQWOq#?J=K{BD4%#PBn=RvC7nZOHtMAcJzdovK@zQ(dgyA*@4q5q@7R}fc&LlB zyOAOB?AWnmN5p@v6)RT6j*FcRc=oLA88I_6J;V7Vr*wGCdx@KwVFRM96M|q@E*2H3gCah?<6}Fc(ovKHo_ly zc_3mrcM$*Kw{yDkr;81axs8=LOfkmKNixE(+TvZbartQ+{LjFDk@Z89lX`;F6(SgZ zFps>-ev^nspo^_9g#Ta{0Yrrhp8qDz^b!)tGu`1^4M@zdP)@F;@}F0Rs`$`AV!>g| z9448Of8mc(gb)#aPDBKMfbZ8|fuGRS1^irxUy-v%MgoUltY?Ln{RIA-UQ;U>@S}%< zH!wQB()*a{Q~tv_fSi&xqZ6d81|R^^g2QYFRf69nz)@i|i+>`;AC}>BN7Fl zGqk`h`8W1EeHhC>`p;E+C2JMo%!E))vdh1@z<8O6sf8jr^V-8IJ=_ki9_R@am zt+#$^TW2sjW+#*oH|V;A999mwJT{`ZCdn32HMfKYCK1;2LGO`V!ON)@oFo}oocQ6l*Lnmg7CmcSyo>M$MDM-l&Ii;XnH-Zl^G6&VCg9pw&zw$E^DTh5 ze|ARJaY#_tF8ECVw076{5B|^$CWUpLKO6klwxw`F0PH>o-ciBuyQoh7v*?iufu64D zSBv@8uL@4Zv*_~Ry5Q%0Kw(7jv-#%Kw6+%1hH~0#4U15id1_A4gg-bX8sn!51pccA znDh8e2qXcaaQ@0ZyV_4Xf&WwZ4}SYG6DVOn7LS@gdlhzi{Iq1@fQRe&!j;;-579k@<)H1M|gytbk(}Kylgev(c`>Pe?Fy z;W#SLDuG>6iH5g^KbwN!IZ@4342zb6$5)Eq#9cz~?LNnSC;jmMJkSL@{0e`XC<|=- z4(9CXZO-A32$10C+#K0KQR%hO>^rLe-kA^xx}oQyYlJ^Ff1*Uv!Z=^_C{KY>{NWrx z+eB7B(=ea;fwQ(YLqB-KmM_4{(tt*-g|K4#*GIz_HH2h zUi!`FwZCdZ_8yV2F!f&eFO`!y&)0|Z$T=5nlKw30#Q722pTL+wJ48cg47~OBTb0TS z{~AfKGY9znvmXWb$Ib~q`-(2$Krj5B0KdBm{>S^;XW5-I#D$xH-@_mMu^TNF34Tl& z{&Zkq;Jx>Rzw_Y1&)KwFZ5__h!1*0g7v@3?xg*VC@q73Ye(-9KePjAt;D;L8aU92X z((iis9{nHx@s*$b4E8U00pKtVPXORwef;?G{uf_-@!^MJzB`8JXAyoA0q`3M^!pR= z>l}K+FYq_!ZWzE6y_jzJjUq+^cOL|!h+lo0_n1=_oG?rwK^p z-~5xuz;BhAQm81%KL<+)zM=o=PYu8JTW7cZf6braPvLv~zq)+o>i)HV1V5)LQ3HM_ z_FsMc=+V9%x^ww27s5F_s4heR;L-qSGRrjJ=lhAe+`|6=0w4gNIgmyLu^x}(G{57Yru>Mkjs_jbBPU z=s)-%{+q&&_#d$AT8{t!ncx4*{j1+Tc=YJ%)!pCy?*8w%g8uRTe(tEH|KRZZ20;AJ z;8*>B^%da<{KE%dKM?;l>?i1s5*~m4-UV|6rmO0){L8e@nSst2(yt%SIu3NP0sLrt zwRe5u|2yOV!$<$P@a@(42Mgf-NGgEqW7GfcsHJZ?cFCQ?6XRDy?)V<~|C67*!l275 z|KeY~_u%2fuMz*Y@zq2i;kRSBgdzxsBKf<3-;Vi=&ht$XXMM6}wP6v^&58Z=cLRK@ z|GoI{@jv8j1>xTZ|3||A=&{;AZ=jJ%KPhfgcs(QuMNYD3s}XXd$DjZS_r0iDSxqT?uq{b9>w z@YlZgz1j=>A04NFI1J}xY~Zvz2Rn1`@IQL^=-{Z9`d0tx`hR|PQr=Z;#M=h!88 z4o?xkqr0yL3IG2U_74_NN1Y9@Px8a4gW;bX8y!mUo83SXdHe}*?@91G_yPY&7|K)% zDv5!Ap&Nb?AWIL!zwoPv55Jhd`o6>ek=g*@s|GxBM=kv)j$Lx+@QD4^@IzbKuN2P+ zK+|u&!2f?m+xPIngSm+bzP7-B@H6f%DHuWu68;DHtnExGAi+rSOT+%@pL+a(`z8VU ziSaA3TJ3xKZ~Pxe2C{gw_;p^^hpPVzzd`^WA^-dPh&|_P1^kcpb=1=C)hjx7$W8cXP$4Ffe?#wtmZE#)jtG6> zhXM{iBshNDr}lps^W*w|0DewT5&n7E{*N60!Tmd_KiuPeIzsm!JeY?xI)Uf^`?q=g z#(cBF#>eO z?_%(K%a41ziQrU1-q z#WN+~ECI9s;Q#)Oi*ubD`=2S2w-(hLkC3>zX`Bo~kAtfQMbq<#Y)FWl6)$$oM==+| z0)E%8`_Ye7|7$PQ9REkg-6lQC**V{Sh=R`9i2RI3CR2M%6qvT*NT?$lji2ycKE>~R zDSlOgAOBeWAIblN2Yc1M&mKR7Qb~I$I(Ybe2XN^ce#@INQAWk>m(gJ(j*1lxFyWm( z5I@*O0@eR<{*8>DeDS2Ymrt@gCip|^?FbT}3nPcsF|P>c;ZxRgu6&%%9th}QbC<`j zE^vhZ2A%&KpWX22B?R_L!0*vZ2td;r9ZN@ZaR$CHsdxI%@ju}ApGr83UHlJ{s}hZj zn6Og}F+$(t@dDfwpp8kRmP8!mzgXebh7%)hV5Lz2{5E+E_8b2{o1g#eUp@HjGvy&R zc>K`YeH#;WrHkXj!B`%5NZ&pX>G?tY_x->B%{#07zWzJ>>1as?zbn+Jc;Jd+CE&Os z2@KYGC{*n?|wn$x|zlTr8_EG9AD$zb&fZsUb zUQB--{`cOa>4gA4`3dm zbit2sn$y>e41Ov97{9A_qP^UR(_`*Nzh*=Sq2p@E+*}LuM)>U|2`kP%>*%#V`I8^< z|3`mfbYR?@S!?cJ$U=?j%=D;KyIjCu@y-xaE-7DY|D&=%`cqbOD2WT68VT*+Km5Z# z)a(54YnPB-xVD;gd0XMWQfV~sH;G=aG}2)BE|IrNZosIABSSBqIC)}-!#jCs6-4d7 zkwd4MTeMIjZ7?hR$i0pGr}#w?h>+k1f$&RX;6k}PnGC@R1B!8-_0ly&! zx2pw#|JxM^fOBGw6o5aG^{vL%W~0@rZ*O%%?#ypU1VCL1;{yCYaq{Ge7mfeM6qUmZ zs-jGvl3_{7C>ElR`_YeN_GaySIM-bB|Rgm?`<`p?O~EJ7$0e)Qbx;n+Am z0TnT=|9;#*#qSArFn(2k<-!X-Gu_L3$_^$Kd^3y`7^c4mz2_A`%KysNW~&Yf>doe6 zeI5x2SX*FkZP5m#LE+K=R9E;9&+Er3sU;zCijki*o)sC6z5aS0zk^?GG+Wre&9AQ{rKw;7 zODalgzZ)cois%B;-|#2{KSzl)Bkv0@88ySrv11bxN>@Ubr2oW1aqQ%Y9R7;O-=z6( z%_Y_^MUrKNX*@Sq6aZI{P{g=oNf8TCEVcw9&?Jw)OL87Q__JwS^n4lz-D_%pE)ML4 z^^Gcut})lRh&J%9*|^wfHJk6(TZQ@`O46ms;jyk!l*H>u5c2U?dune6pG{+QlR1Kl zNsf6n&Mw4bCSJX-Xm=-65 z6s~C$d?E)WJ$m%$`1n9B(KKRw$f3i@cfizTvru|G6aF}oi%!(6`W!qN0yI#=h^RsAWp*jiJz1j&)~~1Mf^v)8&da3Iw0p-t;?zM$M$Jp6gTQyTWSKc&f||L zkS~|N&z8vJXJUR4e;hMS%$5N;*y*I+X!#B;43YUwUQgeZj|G0?JWEPH`0|Sx{NA){ z)PY;a-oKi}g#EaMW{Xy!5Bw#ZQT|D>@E|kBe+440xe8!0{VTdScW!d>+_|Z#bKJ%F z%}*GV6ms;5y`KEo%S3`WrzgkBEWiSPTJLPUXKTLF_}~LtezZNRaKW_)8VuqcnFNi? zMGJtOUHOt6b$>o_dYC>kpS>}0RJ;`Wf&hf*magM40Kh*r#UG(%_6LRdELhoz3EWj3H5Q~bvx z0=S``mKwbJE}g$7lHS_dbQX})1g%Q5xg8G+Itrxt6POwN6f=1Mu%uA^;1?khjQBu5 z&GE2j&Ir6Y{}lXs#-gAk{fvhh{@@=++Msvf90Sh-!SBZUT8-Hc8kPD21dtHS`lkZj zxd;23t!4;IUM%3}o4*mj^Pgg7isEm8Z!FnTR%Xd2{5N`eh#~}pH10d>CSE23 zqzV4BqCr_+dS~L8}Knr#IFeEGT1Zekks#BXAL_N~!k;UP$`hQ)|K#{2_{YmDfWuz_|Gn8d zAA8jQ%{bvNh`;eFWWrVWUvm^N0t6;SQJmM|X9fO5U-(H`?+Ijq{|Dm_)qh<45BQZ{ z1|T<`y?d2Tr!}WxQ2QL@Bj~eV^Gj4>fdF1sm6*Bn!fzDNMeuPYDiCcX1qcCXlyd@* zk^dlGF@8(Zeq043=brp$br%`Q{F%T4^19~O8?QV3^lmirZB4-5y^bKZ8uvVMciE)z zZ@NM8On6#XJ$wwG5(1Rq#~SU5UtqFM01c$x@}@-|zkePI5?@)~X0K1E`3r4L(*LJX zw@-dDZT319@He(yMQ}Mk%4YEyy!Pz0T)s^a7g?{0sTn3h`&lT=!#r+;Gd+v$@=MnU*^vxW;ZYZ zhAwE;-v@i6wdwI!AOO;VVU%wZQ2*Kf7CActh(F+W6cE^)b3q~>_+^R4_|>XJ@hz6I z-{)p|{D2%RFPT8@h0I%N0>=OG@nhoysQ;w?$NUGqRrn?y0K{Ok^#B9-x2XRptWZ_uBLV+Fg#sAm@6k_KTSw2-0oTK(JMCzQXfXB~}sE=o9 z=YP)7_frj+oCH3@O-_ch{eLJxu<&;p4d$!APxTLuk6(-c&?9U%^A#YJ$O`9v90918 zuf2vIl=I<9u^^HK5x_`*>jFc7fsh|p4UIaEhm>uDB5JYdz>5$-BsM}QVQ1d5&4pQm z3Q3*X*$LQB9w@+W_$!wl8GbYXUptzQe!H3QnlEC)Uxx}&8SzqWaZ3yGD-Z`wt@8>GYJAVuzcXE6Rxk57)PnHdQ18UKpM ze*kl-vbhcaHTM5y^C8+l9qepu3V9e0NNGS>%J2sz0Cy7nLhRTs{^?F^l-J`Q$P5Aq zOU?;A&b>&F&*>H^S0XAgT^(XeK19UypE!MNoLj1Yihm&P|5r9QLBHLY-_%$BFE^)yssHWRHSuNR?^tR_`O*yy$26kjR*ImM|iilJM;504Kt4P zBm6-We3|?uE{Q=lrt`2j{*(X-B`Cc7;3F835Uv-|pX= zf6!v_8SKwt-EMU{xysMGIi=X7WId0bULz)qu?07k>BT* zhUFRO9Ox4XHGyKzlohm0luU#3D)4z$2M~gx3S0Z-zi1m&zb;9 z<~=+{1NRfe&~E^Vwm_R{8z}6;m?#sbQm9p31~>mP3d~4z7JWXogdx={>v$T zzHe`CZyNtw>JK9bvC|jPW~aG5n^g-Qzb;RV--_rIK*j`$v+v)pHXbTa4Mc;0{}`Xx zXaqCbZ*XYnWQw1`KBRmP_A>XSQ5@!1(GN97um$wWJ1Ek@RDQ zb4AocxI-UcAWiz|d{99xWkLeVD7~50euFXoR%L6uxyLL|zJE08oA5an^~RT9zTfFI zGg^TXQgDRdfs-b{5hRyFH(y@Ow#u2;CCTFg5RR%`7itvSR;iG!9JU(xrhWB_kqG;m<#hkC`x>3C82@I2*^wPYA{Gk0V|YCN)SvMo0M>bt{__t2>_k()jLo<% z@N>bhLdrph(?^atzyAgQU=pyk#Rz|+_2v7O%5R&M-)g>B@{HjRq+`3oI7v(tJqOU~ zH*qJwe}0AuD?kc%cCKbmxa14Y7B z;Kcto-+U=iexVl@C~$0$$0y%-OyEi}o zbnW_ee%5x@*6#9+vNYP$1%e#Z+o(CxX~_D`JHG%fAFO+W|Ds0UJOKh743~Z!{9gEZ zr7QgF*FV1g@%qi>_T3r;s6HbCh&urd%-1JSW_{{QAj@FFgXCJW04{l!4AcNZ)}|u_ zzcGHQ$O%-W1tpKngW!m8UEr^*e0=@-+S=-;_dd9LcX?@T^)8*1H0$0zZH6gV7AyJw zD~%@t)P*1MZ_x@`YY@FfkD#ysE_!Uhb3b5n&iF44k*Ek_I?@mU?O+wBT>7tn{_)2S zf4ft?ySlOp{<;3}JLKtaR9y2W-+$8w^XPcQ{|dugo9W^|J!eRyumCQ7FCD7O(jZV^ zLJfqeh=AM?z}+!!4fjjg|MADWwd(TPm1=wKgH9C!+`W6ZJy-3601kI3V)o93X1{-_ z!N&mBEJs8@@CgWxzMvMsF-RUSfD2FU8pbHI1W4}!DXf0Ld@liZ=`Q`dyVYuSt$L+e zyMDdhh5#!ockk}a%@t;$Wy<2t9LWV~yXs6m$l~YI_Fjca&~Dn75g|>Wg>ih)0=Pf` zcTIuEK8T=OyI2J{5Pq#%t*uq}sv`loehohozydf3lnd{2nK;#2}cie_~&i$ADzJB;y+6zEPyK{*&`sLLV*Mhx>bm- zDYSQg*527&SzljSTB)t>tlh2M-ML%a>#WQ&Ppyl~R`Oz`^ttc)`6#C1=;yHbZ$7{H zk0{9kxMGTZhLqQZbUJP^nVt6ThikjL>({T>c51ury;^Or+G+1qtIM<1ZunDp#q?ZA zh@sCBQJhxmN(+=>+_XTiK8vS^4g3#-g>+Ri@PunZIJBzzJdpmcqduFTc zy}jz(N>}^=T(4w(oWa*mX7JnC9#gy#1m-#9`+#8qT%InyGCKHKkExivyi?uXS#GbZ z;p?odV*u^V&aTc@t9vW6v$fL1yTYg5r_Y>k@Z^c8@9PyFt6XUXSo;6L`=W3lhcYr^;w^N<1t<3J#$}){G<{ujYeEaXB<@)~a1)Jzl zZ_F{*`(m5~%YwA{_x(8Rx%*f4t}nN%i{P)eJA3Urd)3+5_G+gW{?alTza0S_1yWIn z;?uIR>LFSD_d)hck3F>&Qqe1i^2XxS--}B-*W1;-c4u~$7QZ^X*WqXO`f6AFrLe*= zH8Fl{!E6cW`$^o>#ecKu;=d4+LDBke!_DEZo12@pL%y{F{Oa<~#p=EFd#l$U0v@-t zI@?~E?UbdJN9D6~;%@e@_vZ0u7yp4XUi{}%`JibF;0_5PioO~7%e?B3XIiAn&JOr@ z_U6{_;T9KHzY+yHt9!G{)PrIYUEl}9zqb*wpskQb!jfM_%GzsXt@P&;r?(} zz#qha`s3Lasj>q8omzYG-p%Dz44`}M&fF3$Kn?thCGCGV{33u#>j>b=tq?u{+nuwV^k6pa_UcZ1j~4Gb+}~N>SzcLPY*%NOug}&n0<%%MJ2d_%1snae<(~KE zwa7bK{Flbc&HYFpIA8JGaEKxHYxf`H06y z0M53b6o1GzOD*fxHYy*m29zBDw9YG8{1;x32>0rC+TJK#_`A9JG3-B}?_9*cv((1+ zUA%sMXLV<3Q5_%LY`YEqxdQ$yptRJH&+9=K^26wX^EO!gSHH&`w~KUtG!C9~S^$>| z%G_cdVLNAnbc5JSy=>ZaV%>CcMf~lRm3F(cxU;;71sGh7#;-;@m`|l2{P8S$1?)!z(!`3sBK}oIJC_*t#q8PJ1A3>k zx7S`?u7dxG_@BwM3x2-wmM#9%t6Bh;Ng{s(hd&nn3=K^DY5WeV{-*!4?f=s1&dMSq zps=6rPp#IOg$T>Fs&xeNnfD?8nO9Q$NTn0ZEp>pJb9?}8mGDsu;4&!`ZjgV?B#KAQ zsrvApxrJgs@?TUBNh*WvoS1C^Y5!Ii7duEmZDpw={ChQz|5@^X8@(mTRN1~X-f6qX zq+G$H1#rP%dgYa+&DO`+xdU1?zlr2)1xYc@I34xJv;42Et}L!DFEiw`x4aB=TK!H9 z{;NXJ9jqt#kw@fG%$+D$gj$^*_xl<+WJrhW*YEs zpP;WR>zTG*fIS7cqE2!8prmD%DFL=NA=VZyEmPKauXFF-E+l9}hn2lMoz5KNAox4A zc5Sh}gg7k5FE|23u;PaWe@6b{EdZQH`!${fKS&G_I=}=#^w3^nCj7_*bl@A4;oszYlf~`IeVO~;Q-f1r`EiR)4JM;m|@%JYH z#{a?B0|Cq~eKg->-aD(FN~V98ma#0*ar{9YA_V-Q1o&NIK?X}wQfH7dHh%gn?+ft57I022ZEk}f z>u=XJgZY;Zz6T|8EoH|zy1u8veb0Eb04k6ft}LxG^s%zT z2axv8igA3o^Kf;qwgU69gcp|==OY3bCUx=)sTKniX%O)GGw0X8>9Se>a#O3|pU5pa zWlsw#JDQFZm~pC6sCo;-99C7JGqst|f^QPOJU7vMHCn&gGAeMlwuJe&cy}3kEb}d} z-QMeb)j<%Jm+7)5&XD(o-(n6bEBmn&;0q(1v$pkHlH`+k=;=_~g`Wv!t^$Cc-a`}f z66J#4TauKNw0sFWDoaaCJF7RBF7K{%sQ(?l`Y$g6eOaGB;XKV?ZBDNJL;}!7Mt-}$ z*_dy#%#Z3234l8%#51NRMaz*T*5pQWUlSw|gU4&~<3=GMnG&8Nt_l>O-a z_4TEtPggIm>@3yptlVtx-dkRx38*0o=)v~f+#dRWk%F7S!EU7z=6 zepz`+dS_Q_OI4}O6yl!T88_z z#g)$D%F+_5pE|HCs1mI8sED9q=T^1k0kglzc-cQ*t_~2ZJ4y&uR#nn4=i;Hl7h1!3I zu26fagB?t#a4+UQDLLRGKrafEJj4LDMNcyQw9vmkpOnk?NgU`GzYJO_Hw_ku0x%t^ zM;$@{1^~hTF?An1xy0~E*k7qFuYG>=CL*v70c7(r0Ctn%fTcxMe|iG#r5fGB;xIr& zfUXoMfsf&4>)$j2Ec^}H!QhPb11|@~9D+-)z?7qDNB%_tEt&V)5HipMK>dBZRoP~- zNg;v3H{%nzqz`!ygnxiv_HW3S-gWN)Y?mQ`)Z3C7ZLw+0uW0;Db64x`P@;= zTP$-G{(9?PYyb_OK=gByW%6(Pds#C;N8OTZ=FJkPwR;%WUG1*R2b{6AX%Hh5g$ zWum1bnKv^xjDVV>foDD)YCz(@y)8eimqt`WKqsL@__ZE=(7nEc;p38aFP~b?-10j5j}L&WtF<{AfAFLJRuO(lz}})103)LL zcO~FGs(#rcx4Q!bz&MH4zxk902M2Hm;b-+IJv&%zO+Or`#iPj=$0ZHa39%oi>VJ@v z_Fqm+6CpI8;Dg?Jl5Cnu^QWpMy^4KZF8xtCD>rYh@E=E4M>fwQb}w!R zn;4si@lZ|(gc8h*h(~~;6v~j6g{7}({g+$+X4GK)Tk>r1#lFNJ0g!qJDDbJ~_^I=d z0fqN5jUJvR_94l3C%~Z705_@Ka&!Sq&0+4>= zQz^*aWg_|;TmN>s(tMu*8MV`?`6tDcsHU=4>Cs}-N>kfZ=Wqk*ZFIB56%eNT;!4Oyi{xW1>LP)Jc<2O57TUuG3TdbCrNP!M> z`r9?4J%IgK{S5myw?UI#|JM6Wo?=TL4ufwl zN!(N`xCHnW%pIw^B}RFwZ8|;ZJ|;k*1Eut9OoZ!53>X!p9q3uOfWBuWd+7L0`(U6blh8z_<~1H?wd0WST)q>F*o2ltm3 zHS-S&=+b5u#3D6b1TdA*X)`vuIM+@7dltF)(4p1(x4PE99mc8O{BaYQTig1feCnba5fkY z{*HzL4^z|w;+-Jj+s8EOU^h;C_}1Htnm_2GN`RQq`Dc&?*y;tDLw>T3 zmBt-!Bk+zMrZ>{=7D6>I?SDFETU`seD(JpFswgg5-yBp z^Z`@+hy9qk>I=#-_K9PAC3XKQ4!lT0eapMrS_iK0F!+n2=cA`a0asR#|6M9PvtX-x ztNIAQRDer&pQQjW?!n-PedX%w1CVO;76Td9-xCRh(+pixei{K3J*^GI$3rXu=&+>@ zlC+{6m7susoz{-=52m~D^}EJrFquOuyL5kL^HrG*Ik$I-ptels-W8XQXC zilMEV1x^A-m4Q>lwk1fYLmc)rU}X#lKF)5Th!HKR`q{K=On1lh zTi@ZES8W&MZN7T)(HF-jAoL+kp9X=dbBqK(u>u&f1HlsfP7TAeO)2!go$%Y34n2FB z&u-*{0dE@uQiDefYxf`mqOUrj$`7$50A)FSy1Y}{*)dyZ53#2e!2Gjm5Y{c&+q=uB zFcbj%mvz*4QF9UDy<8G%uo?b4@H2PvhCGNnR7LJT1t@qTxj7;WC|lO&z51Fa;{`*nmbLsY8thk+$?5f&u|}XxNLnF~$pIsXRu# zvHm)pr6nf(0=p({DAS)S(*kHGs03xDeUdPBC7fYaEE4z&rv)W>VEjQj88vFssRHm@ z)-Y8;|3w{H1LjZ%3XuTdOOnWVR`0IXcGlZ_)bpFGU|w02u?v32L8Sd4faqY--?c0*nCkoj_-m-e9tixP;z>fFElOfe!N#w$fx+@V@iur4^?9-NXdAxr(N5 zOATQD)h?p;<}?=w%b%Vg9pUP1#Qy-=@E?`{6h<|_g!NX;<9&Pp(C81Xp~=5YJ(*H; zjm)5sA~fY9^^dG|!LH!DD?2-TH*c=oCk>V*vPk@zkJq zXBG*NEhGvg{0D#JjO7vruL}Y(q9_$++`az#8^?SQ;1S=h_y_y@06=221WvlC`AK%P z4zAy;8A82;pEqhE0R26z-X*#~b0|UMJ}rRS1kHlt-yZhAoX;W;kb7$b!0%{bH6tmH zc~EI5PI~-dXQOn>*Ie8K2S7vobaX3)&ogy{T$G~0A6|9W_S#OH{{Lco0l0Jo=nKL9 z8dE^#81>L1Kve+NLdp~HXOrMgsQtwVP>7&_!I#3AL*Plb!u9t7fF!##>Xv<|3wG1> z=aaS;y{OOUM*yVxYJv~V{|!{AbXHK~7s7CY>IfeEPJIXXkd4`4}#4u6n?Bsk;g3;*EYz(D2T4*;2j zpWtTbq{ol!!+KNxRCy{rjoT(e-H00v-rj=-18!ndF} zet-B6`~VOq`NaOD{#OKlxpuGil^p&2_Pr&21z^lej;YX~=gUXOT7tRK3=R0%6n^B3 zn1Lukjr`L4fhw?lehKMk@;3{CX3P8kj_<~M-})zV z5Zi&Y|4IAz++dL~J3ky99UU7R>$&^(P_h|s?bEe(ZEgMY&qV>8>I1k1pLrj)3z7H(q{O1Q2?Sf65M8XCA=n?Ugku0FJ@1JG6XoeHL+$x0L@NR*et%?dCbdA5#rS zzV$aoUa(pc0K+bvar<+}^H60T&q! zZ12rg%k*C)@Z!36dE9;LzW!7sAWYz4{MaeyGYJTRr>Fxn=clKpsN@I$gu#v2J4O7J zd+#rx;cqesdh_$;&-LkR1?^9jpR*3o9HW1CAq$^?Yk6F{r@{x==`|NIxBpM>X?i=5 z+m#`G68VlEh3VqDF2kp0knyQgQ{$(mXDok2e`W^BKR+`K{39bH3WZ9ihNn)=O!JJS zV*V@Ty}PTc3uyRz3zyW|o3o+cufFQcb>=y#k6tqWqf*E_Z9kSPKS?WqKNm5(|4;5= zbUTpD$&UgvUK+Eb0bB+~x0``@pQK_W zYw(;J9~JtuGq4o&()zCSSX)?J-C@VK z<=Z!n0PEMTU86q$`p)j&w~Mz|+8BVd`R3n^dbv`PZdwhB1@ALt@L>2-;rxmDYSM6{ zs6ga_JaVO;MISeiYzMraOL||qo`IuD$qkd zFFi1IWcU;fpIQXhUXG3${-pi0yg&c^<0VFTKCJ$i+k029T&Z6B`@1ZDyY}f_CIrmg zUAcSl&fdkvLMbKiX`lm7Met$an#On{QGAME7i{J>gUy)xA$&;yuu!!*RIJ1xW)v4&feV8-rmLbY$2Hv z{AvyiKhFyBpFCiE3P7jMj-H)Ck3`Gg`Mi{+j}>!U#T(H0R{N-bFIp!Uq-%4P2YsoE+K#09luk|YJa*rYn}>^M`l#f zF>_I8r_M^7tHL`=J`;KPEKR`74En(7gd&A9(ftiWe0M)urF~zb-*@E-_;HomwR?9L zub~l8g1h$=l5^z}?n2cXy6CAK_=f3hE}7_-7^UQ)TAw=gN9WF;Kd%OFW@cK3ZGrhD zG==iVjfw&zBV#2LigNQ_ffWHh`n*$JTB@babc#^$Njht2cr)F@b2c0u7 zIsCJC@2-8s7I=L1^6;4nU<9aD@3i?aE|+<)%T3_75g?}EEipl5lfrqr-| z0`!dedwMAJxK!vf_9p&ujwBWMH?e&^tR z{~4;MgNb-bzdbAB@4u+er3C5)YFtS6ViyzXx#atYME^j6KTzNg6!-%L{y>30P~Z;~ z_zoz*A@R-5#b)zC=R3&kzrQS+oocgjU+YNnWz+G>|I@oh^`f1V(Rl#>s~NceBjA4) zozuqs`;|_W{};3Pw=O>y3OtJC^Wq6h^C_BIRd@p84VfM<(;<|(Mhs~0bB?C)=EbT;IwT(sn)@u*U{-?G{uwb-a!Y&0)c z3+=-b=FH&i6TVq|?P+z%#f$q7n)}s<&|v>RZ*1&$T3feo-`;9;DwiGHDvd&?a{vCb z0xt;95`RLHC!xf~MOgnpyhq*bOAcCF8~d#m1n|~?$v~3FGx9t;ot1)qqEXrn0s32h zH~wFd;NeDNtFytHN8xwKtE~Uqq8(%%7@86HbR=-<%9Z+AsDXr%B>be6YC}}O^yP#` z7SmN5_y1NT@H3R84KA~(Fs(vM&Er!Nz~i?z>&Z)OJTSP=1izA#4D4@cG2wkIp~gnV z;csC9J-U4PLA?%e z>W^9*^$l_U>A;gV-|P(f)8hv*>4o|ae7jZo`*PL$4=-w7>c#4PR^zz!2%-D;b673@ zqXV_`RlUAS>HlQx36-rP3T3ie=8@59h&&6 zitpHuhZ<0Q_;9wdaldnUYpe61f@M(Yirwp*@~@S&oX8FB+h@7a{1020>3uQ zuY33j4IsmPiFf06>-OyyzamUy|NbKgun%#%gSWCv1P-8pA@}Tu4l_@UKhDqQ0#K4T ztP4?r->!qd)7j_${(fiw+kMEe-{7_bZt%CSu89nU-0wW>Z2b-RQ`zW}tg*I78!T>H z>HM$maoth_$^ls7$FTq0xjyB8zFyxDeESprIs||cB7wMmMKt*Gb^|N0fnoHZdbu(S z0eI5Ato8&Mkc-O|y^&z`xG1k&6eH(70DtDOn+lRkp!^o}l{$0sv3BfFgaAH2`}>V= z|MUL--?hH|w)J1A0?=S%7R&H*r}8)I73XWYiA z(W*es177e+NXO03Z%70-Hq-)GUEs$Nq0?!#_N&#~8ymN`x3GE8d>b?ibODP+D1UC8Fs~0Fez|$4J-NN2+ zO@fT!epbN?y15K@R2D+hBF$8oe@KCQLG1NRDMhLV_~#w|Lbhq1v2Pw!pymhsCJOZm z{D;~473ju&@Hc4npB=|G6U1b#ke3=D5 zgFnKOOV4f(GOs*2l>xaZs{<0OE7^^U^lCOPUbGr+0wG!7*sstZo|CU7329u^-bf9- zplwkOa4G*y+&zO`c|;m}eMazqi1>%Z62gRl+%@KP@+gMr#3{|-pacaJ0gz220*C@4 z09rx#sRj0YgW=#7En;iF5twfT(B4QEq4*>Gt|mJCzDTa38*g}L<{a=<{r&rd$6$)7 zW`w=uvE*O1DIstv!J-!(eouf6iGg*2^|M!PXtP2hUqtX34crXO*ZcKd^yL0Nt>k_w z4Gg|%Vuy))K|>Dk_!}B4!MA>p(p1gpjlUb5@Rq|b9UDR{-GhHN?pMKnQEYbvVAaYU zw^t(rehh^EoHWFI*Z7I?g8$&*{v#CSqbv!Ka+q(r*a-oJ3DAUH53PV!ToEZ0u(aF} zl%kq+AwC7EQB0W=S@7lG3E@4iYWHyL)YEuq_$wC~1!y|=@cz$tn{^sQZq;fQ z31AdR;j2s()STctG56By?<~J=KMud8nv0UdZ_=NOa*)!@N9Ug93XFx^{~LHOCD4eX zuu)*AVeGFrHxK~`zz|u{QP@-fV48t<^}r)`>{p%0@wAwjLKLy69|%oMN+sA=QY9Iv z4%h#dO6{DK8(rS}1kxdV3=Qtzum1eLjy-8K8_iw#UvI$w4Tek_)?60S^aMa;U9pXO zcwK-3B_JwqL8}urA76wy|^2N6SCO}qL%@o@%Wv+Z$uD&y#j_T+l)qWkb5@{v8+fxq|Cj^ zlZBW36y8nZY&?L)^!xV!E#@2Y&ZGVPheD65S5W~@Ea($zZ%Ej$?ND30d=S`ZG_afM z{N(!1bfqMQ8ju)5q*NAY7xgs0;Mu3uBR4$KSLTX-qTqwV|^74v2 znI{DaF_{T*Jbr6pN{V4YAx`1B)7~4t%gcpM4_`mD$?s-!e!ugu+H6*<^~aAf3D^mg zonYA*v!%Tz84hhRR0sj~OSn%)hF`G387SdkJA65=r$vKSu7ym4GCs&bk`aZRKcc4y z7Cm=m$pnN1z3$$qWA&@|kIl2+nHTnXZFAarSa}G3bbg)RCfo;q6YZxHG8+328?XTvy zu3Y(#4`Ds00l|E!06DXM@G>kSfRO5c3bz4pDFVPifUj;}xx!{8>{d?z;tyy6S8bpP z)KoBB7t!y795ZR0$eRZK9(<2MkE>T;eY4qq-0nQ?T-ZA9u|JWEEEyzI;W&-t> zaxqqnzxedvkbpg04}Rmo7#=bG zKPkYW#b0=nx4ow(2Ke*VO7Ego z>}0UAI9(`E7WG+%X?5@uq?g)&hs0mP`;dK)M^*(); z`VKC8X$C2(zGz}+KS{yB{0>A%Wl9xm#R?=lQRZXoZ(!ib9S1;E#gzUKiI5lz{U}jGvn> ziS!c;X0~~Q^KOT%1GYy3f7bp@n)7l!kb)Kb^T0O+cyPhGVsiLB0bDv=;~t!i_Pf`X z$5sVK`x1amqM!*Cpp*cq{-f!4GXNk-PnBWm9|*|_fG^8|u`^}P-Uz>;_dnUE2i<`$ z;4U@m!b9puGF{12%-5Up91ccg1n@7H#Af@%@|5$T;2#@%_0?C$jyN(LtO4T`QvQ~j zbt(J^zf>k^JYW3mEgP4!hhGGE^#?zA^~e#c2Hf?CoPA{ILlrOMe?%U>*#1!J9|aKb zXA{fZm2fokJUcE>7Q64=n^1kD5C8%2+q+8_cBesZ03hKopbDy8@B<0JkNQ(AFaO~| z4wv1Q0m{YmdeDWIH2~AO7rNb|^pN}?{D2*iRRcgTH`b*d(EpG3y#>DEpod$;FRY2K zbNB=HZiVsT{os$2$m1vHe(QgwLJJrPfI|-<;`9^$kvHJK+xOpvB?O>-%kkfM4SrWa zz^@1dCW&?T^npL~au)xzbjx9e0!08c04fj(@a!+=zqS6c36$VJ3w}g9Xaf~bSoyOc zFaBwL$do^S^BvLxAzpn`0QKwIy1^!|KU}yXob3;z3Ip;zJ zz!b(QxXWn3k(b%{JU0Ry2oS2eQrG+hPZ#-&{UO)vHB)8$qo>9{jmu_Z2Rr!_jC?oG z3%ZnjVgoq*G>PQ`0Q_9C+@?U&X92riXE1*A+A)cm4vr>4p+}QdYw6>HuMn{WzgVqN z9vG{U4(d1ZKuQYce`o^e4~8Re6f1ESx7hnrQ4Bv!M$m&xNMiVj0sinTe|0TrHq;3~ z0ai9ra@U8rNU9B}0fGod2$0)@s0k!qf}c2%Q+B9+b4k{C99A_1X=q@-s|49qk5M#x zL2=VJozLU%lK^@A@4S;wk48R%AH)DTaAX-979Fe!otm{bh}b!>QSiV9$-Ay^COgoSND zLj)obUHHArW{_dMs|_K7?&Oc6#BySfV&eGs0{{CHfGq#tDPg~Axo0XYMFW^~fgtAu z6zaVlalx5TqLoFbB6zQEO#poPdRz>D`aF-8C;6bR0+6xs(nJ=AmmAiUG9PaG#*-firITvDu=Xa-B8T$#|~O&US< z{;i+(#;^AiJi@1Qu*|`9Dgd`M0gB=DpnK+H6f;jk^uqY~X{eS29mWT zi9r1Dr*b{TKjfbPHv*^{jH?$I;YZ)|KkL%B3*knh(TQUN6KtR!;`MR$s?dZ#9#_z- z5dpeVAckKN{GaxbsjmW{HvQ({6PSDna18I--f;$~lMjB4ObjCNE_>&Xy?FY}Wa)uX zU5b^q71?nGiyjl8oB|1ajGlMi?jOI|ei8yGfXut5UG{)fzOMw`)g72=70oE{B2p22 z>5j3qov0S<*9(`4-$|YSBMDUKX>Kd^sM&FcS!| zpQk>wcoEyZh)4kVBM$gQ0BcOKuO&>yH?tuLcmD${rn(03oT8 zYmm#5N0OXGPE!1YM%@b0fJkMpCt)f6QvGM~Kv`P#yM({fj{%Srpob?joRN!%d`NLP z=mVU!T!w@%VAD`GY@k&Gz5LwK)KfraVvv?BT{^8 z=`I9B1n?(l8a-4|PFux*00@c(*eo-3{0@<8K!4yX?>wU#&^06B9~}k%upcuq2>?IA zV>(DVkpmqf>2yM<7J9>uke2@MJ}BBX?|vSj1Nw>f=s0|aMH*&aoX~5GaDic|PKO*7gG*t=vupOYAfCqnIJaR9a z(D*LSOID_)GKrPkID6noc0@pn)mWCey?uLYYq8lVdF>emIlfo}&<#JF9N`dQ9jD4! zs{B7Sm7q^*JbHowL>fh_FD5fOdGyrCfjva}!}hVE0Eo4j3(#O|>t3>csSxL>0}jSt z5g$i5Bhf4RX&oP}Ai6!~OxtpGG0@K&k?nTe6bSbi5U+f#02 zqLkYx$onY#_uO|{U%bURZD*Vw8|6Gvz)y=tgjgWbVCma|@A+~#niRgXu^C0P@j(Np zy?Cx}Zf||nY(x~uD}42Xa*bd=1Tby~mJ7RFzKC`Y{^{u{)V^>@0Cb@efZy&3;gDem z-X7YIqmOU@nWLv8?=#8!dvQPJKdWznivVanG6Z1FzLxE$1jyolN24JT_cK}axG`;? zsC)y@PdVXEjesABat^=H+r3)EDQdi{^6t6kyuB|5CM1h0^vA+_3Y;U$cpaMXH zxQ8$ zoRZX|?L`};-9+D5Z}5?kP$H`WfdKjXkk)@y{srJS=UI=uKpki_KWJR$l2n1W(>{;T z=VjmJr_na>gv<-qY@gpIZFGfS;S_mr0{X}isX&2G&wiphY- zFSUnD^?p7(_=!N{@(*;M6AhcOSQ^p2Y?iOXZz!k6kO|Ox@W_Jz2lOIGS*B_UtyIQ- z`JjkJgtEyCv$O0$!1fedTeq)L86*IPADzg0W$b;!?8boK?hfBg)=(y86o~QDIqPT2 z9s>aq00(nyW?G=VF7UNp%IMXmyM2|t2-t{F^50n5-G&+! zfWQ5=eE@iiYv#r5jhmTb^HPeOr4S*ugRd!_y`367X+1kJUC7;kg(gx@aIZvQc)+i# z)rVaCjq1ki>}+M$4r$p!2qgaOMnjW$r6mGbb7y+5Cwd!mRwmXG6bPUPK4-XZyOkb@ zU+|^)Jm0M$F!W~Z^k%&BvTCm)$tAiV!cT)=WvfQ;&(3-gXs}I@s(<|w(ocu5)pUaY z)3*+6^8s#6n*Bt%m>1zl@Vm`=ll#1G2(NnV#&;?Kx2g(q5C)=zc-^iJbPBw{eeFYn z+t@Gy=m*i?Xw)mSO?lX*L;JQn{AF!^E@NZ76d)NJ)}RWVK1ep@g#FsAS8*%`-dswR zN@(k?OE*1j9RW#$(Cb;@g<^n%@7OLPAOg8a4t`1i#sI)9a}e;AIUn2MKS1`08*m#L zJbsr1C?SCffH2!`wT?sV9Hu<&WroPe9_54;qgmw3ux)(`g{QF5WjZ#G}O zj{IwD8r{hhi0yyh>K`cn8MU5v&6Ou_ew zUCDU#K1D%?9R4o3*ltw9EC={Hd-JkC%@)HTP@vgtSj@NIvX(#Bhe8t9W zTOVvl{rSZ81-xwLTave63Z!?wcJtWb7isLzUQpX__sQ!;4}5ol4*ww-uh&fSGl>>h z@1KHSyRbFpTg?wzwriaX|3(uvczNNR|8nF1vRx^?UN z`X`@!vcCRFm-=A@Na52eaC6S;ynN>Vdt$#ZRsjqF%(+o8hQV6R68z`C5%lZVuYdB% z-4f~$2w5O{|DNvn9*RyL-GXp zb>)-wkAQFd?}FdSd!Rx(|%Muj?d-qRYVddY_AH8y)BSmws8k_KC;7cG&kHM}}uf zhdRx_nLrK5U|Z2PwMQ!iXlLN9udS`$Jiq=|=htt2f)ZHIJWOr`lpFiu3f}`;hJxfRDRiGfb&hBQzu;RJ zh~rwa%&%1bVr}jGt#5w$ix2;Pef`t(>p%NwtykLPXPi6LD^hsIP<)R68T6(A4Zj}; za1@xKOQ=x-F2g@OJIyqiklx|1jP{@d_y*E4E2u1izxd|AUHg;@@QYu6vQ7m!e}1(r zRtOsn_`B<;W5U+fDN=48lu3f>0WOrF z|Letz*6zy+4yNyX@$J7m|JT>nZvE`)7wgv{!}_0}FGh(%#=uVnIMZXE`mxs|{7LN} z8JU=vn4BDxo1m71$OgUOzdQ)N0tD2l1N7g>ut|YQf<}rFi)8R1DpEJ^#fO0a7(a@n zvq*}OKfLE4&bLEpcwQc$W|X*oj5um)j2SL1RW?44<9~403-sBR?W=&{msXT+gz3h1gFmGi@}~z>fliAKlf7tg zvGM59#fy)?|41h_aEvAR*^C=|FhhZBfAx$1`ucAp{rbZ^;@thI5ja?> zoR%UuRg{5aFTXU95J0bbB>+gVSIC{1>qhWhOCJJF%xyV@dm{Xj8&TmDd_O$_@X1O2 zAOjPsO^T2!qi&ncOCLPq+_4R?FVFzYYxrwJ@bAO~_|0Em`^E1*{Kd5|{{GhbM}PgZ zKR@3a|7rA|RNwfqGiOe`dFEKbPBZ)`T?Mep@9~?mcarb%iyle2o$A;0Pr!OQ0ZeZ> zVG#`swNsyylM~>7VQ^w%+z2GP@t34mx!Aniy8HoipY*YdlgaN~zH)hs0~(uDf;)H8 zX>h;!&4>Ty@fW}N*)P9YU;Fd5kJdi#f&b{_g~iIz*cHtDJC`892Uoz&_g`I_!oSOmxYkuC0HFWmH^2GKwf}l$ z_1fB3kH5f=OB0EG7mgo4KExj`4Hf|gA|-I_rIUj^9X$C`QUkp8tA$_o*%uN(gfxjm z_{QP=IISo&I5sKnyEZ~yNoJHXji6EqHR>WJ4|5(Ci~ynlpF3#|8)yQZOR{C-|6mpT z@M~UvN=qcUKhB>>5Jh+i0z_2+_PrHW|aH(~90Rk*A72t3V?(_d8YHY ziX)ppu&D6hzyOnftNQ4@iAm$X8cI)s6u|=vtONCvI!GA;n%J4ntP!7gV zQu7P)Pa|@ z^{c+G97i)ifwTc|p}l`65d90L`f~MOuR#E>0S3$wlz4h4`{Yll3FCt_e}kt_heSrk zm|7KX?8^KPQ0osd(D;vkTGc0!Ow5CBCXxOjQ2_Wy1Chf^RDj9uy`d26FxNwlqq?L~ zepv_ZdVO95P=klw<0Ei#7)vSsq_dJusB-iI>^B8qwL3RdIf)q%H9Wa@pXBz5@Sn}+ zRDblSF^_`)))+AE$NUd;Kv!q;=S!Zd>606R`8fNDqP=;t-vN>6rC#1c52uk>;hj46 zzt}DU%+@!p);GW(ET57Bbj6S1^OEVll9x~bG=X`Vltz4>f%%WFD7r_N)d)5p@##lZ z0XcyAG5;B|8?Ok#l?#)T7fz`1m!o{~#F>fmCrJv=-&4e2X)IjP$d~)@C0ke& zu#>BNagM$G#v5;(47Qqe)k;+WMn4Sz_{(9?08EzPXH>k~T<&; zh%9{JWX_L1d!YS20WP%&#GfQ0{Hd`HezqwrSx>EwkF4Lc=aZx$&&fB->c6pnIuo(a zn*>Q7RQLCD><6ZXd|)?&{^$Vf@ii6}F55SNlmOr#8hRJq|LtHFzrOQa#u?ieWbU%K`>eKQAc`@*hQ&eaGmBQ9!4% znaQuVfKOk10B+8+EX1PIPo=m1QrModApcnW>hizvz3&YTMCr%gf#ddwk&!sm=I6!% z{rNLrkPCIXM;cjD0pI$6kbt@_{%^VQk1LuEMU!x;dC3wRe3|-R8A>D|x1Rv;C+YDH z4Slam%_ote3%*!60z8rIr=m}ySxi2cE|;^(tQ19Pv^Ie(Uu)A7fZ-3waD_PlS`^e= zxb&4C=kZr){*LH@b3;RPd{BHtsQwU^yIu(JE0qfp5#-)tJXzgOG@qrE!IaB4dpncG zzd;`_M34vUR~Q7u0B+7-TDa8G1n^x&7<~D7hX3Iuf2Cr3{9XAU4F(t~o?V-7b4qdr zD!tX`cU(+6L?9ED3ULJra58(Vb&0BRskLd(!H;xf0El%(XI(xtAlGjEkMTpSB8<JR=5>-p`XZ&d4=b?Ci-tO(*VR#Oe^%$62>BI>*%tn zeD`;-U+o{wK(5c96lH*s0a?Y2$0cC}4-(o>y~wnFh`&v$DkS!u1`L=83^BM`&fOC) zzc|W3Jm|ZR0I7cV*BnGT?5xM1%6S>?(AwmmdGj+L{3Q2$a@5%JCgk>`^ETJ3iLEBQKJPs>AQDsCMm2%S=lRbzN1;(w%Gj4H|#7h;xQUwMTSeEK0k zWnydyDS!a#=?q>o09Fs31qv7ynS<7tfu#mZb=34J+z!7>rbZw$Xx z|G@te0Z33w-6d5)p&tH0{MYFnN&c@TzH*NQVB!K_-Nr7A9UmLIz-4IYXn9;0>NszO za0EC!{zU(k@!u8$k(GxZ&>C6XPp{HdD!_m3mEKV@Pml8Lkfw3N|0V1f%T2@seyeB^`h(>EHKaeyx_@6!rYFgW**ISa zUHYh%9^X3k%f9cpq_8Uja+!TE3b5$UpPkjHJ@k=a?M{%Czesy7E z{N4KgL@P@`xuk+0e3o}gqvDH(|A`b}F|E=NSAt$e&}+W`Zn7QtZ|bj*=8S)wec*F3 zfe+ZZ9-R5Bs{aB1Yp?zA)zlWq=1_9?P9{vFhH{xeZYTo<$%jVweBg0K_G;c=QuQCj zRrg5Gb3{n0nE)#>esw(%|GOFdm;#5upIb3qHqYNmF8Do^9#Hh(U`0p+O#)*7NIC)s zwkWPMcRg5T=O_^1cPBpZo$>#!83C_=KM{sF{W3orWo3dL_tSmXR1S-vo^SUenCKfz zGm2fXL1FqZCQU%!1HVHbsG)17oXHJx{~G*$_gxHNk%0$h2=-Y6*ft?3+6S>+cyIhk z&f@=bcB<~qg{!|!3K13Hm3IaChp(x!%K<;tfe`0l{BOH0BYNXca-EUSSt_7@u%H5TUSZPCxwjY{=$vn7cA712aQO7=CASIFdxPHkw5F z7)}U4<%bB-gTA~vE&-P}0@C)cTPhJpx<%<7UOew7itq6{@cc&jWr;b#b0aR|5Y*Hy!~XJ#&J8vzr(g+ zu^C)q|E90_66OOAd2dxLSI>ayQvtI13_RX|-`$5;iejJz9u-Ix@bCA13A?7E8e#(U z{r(e2EX+@FwLYX5bgKXpmJlX94_9M5Kks@=h{iA-2K>Q6BGl#$O?yKq9Fx}HAd%`9u*V!e5y@GCi!{5OhCX^-8PnfzYNxjqy zdHvS~p-;Q~>ATkXp}$M&hx+;vO1uXA_4V_=zIE%@=g*)2M*r8sv!}h%154a1nCCyp zwN82cmqae}l#7N0-(u6<=|k5Q68^8}KVhS&PmTHKKlt)#7&=d_fh#(=f7FI1=|t*TfhG1?|*&%*82MY&)&NLc3su~|L48W z7@uvQjSnzjgCPSqm^u^-4U?1#^G0TA-nw|}o0Vl=(yXl1uZoG=5Y!|uxJB2vU@;YGpD6yb|Zryb&mFpvs+qjr;Yi^<$G&VFgYa+l0VNFeaTU)4F z0k7B8))q%^!X}HYB&NT#*ArPIy;GQBiGjIN9yXzXhN-?=2Pe9AHwmUas5rZEE>Hfp z25t*zY-w&<*znF;o(b*kv$;sBy}qSAOr6&YI9@-fIMBDC*z)!j*)UL`zds&hgLG!8 z9q7H2kv&Yhw}X>xoZ#RjM{lqGNLuF9ENpISsA+F+Yiw><(b(9&ux3S5%lxHtTWT7b zn(FJ@YZfeNnH?lmz-0iuUc;CBa4!J7zA`?SxrL|z(2CSrB`Z-s)+sW=v*^j-`_FLs zKv`LNB9Yksue9zkvAH+4H8(WXG_~0I-Vb|Q=-ng*2W?54c05mnPXliP|vAKo^L3?ve zQ`0?-cdeYcEvA1#L1}TQe{rcU$B6WIN?IH2WtD+4zW%;(0%!scOYM?>_w*kzBB@Jg zxQS>O7f|iqAW&1&wxYhNnMeP!w&q36a~hfcwXSNer}~?ko9f%1o%#06ZOxJXC8d%2 z#w3bMOH1PVtB%Lh<>~m5{?xqd4EoO0-fbxd=KKs`cFu6WiY{H`n)#t+BNAL)qs!-Z zbtr79Va`M4^SEnoYHvdQ=H}L}8fF5F{disX?6dP``DICzmN3=?wJ)LAl5jj=sArL5 z)xV6+?#H@p^mvwi_G8CFUmOs>{YTFL7Qqn{gzAgxYMm+pplg_D0*r!V_}(QH+G8x~gwAig-dtZlYu4h$+t#$TU2(-)Ki5Q2pZfP9)C0hM=m|`J0-Z0@_?OuQ ztcJdt8VdD+wOKlQ;P#pW`s=PFd)pkpGBI@6hy8aX}G!Qy&1x&|!sW%x|x9$r_x4p|B#cop(JRV(qhr2R-xt zW*+-I|LYeoSw^L|F79}vv-Q>1j_%fVt-#R7C3C%t(WhiDI~qj#+XL!Z`dg)~y3vWs zK>av2eP$2{?Q?)(u!6fg^c%bk3=RbgLl7#WTns&jtAbiuR<3GnTD*46eVvQv(eamc zv@UM#=$N2wRL`2{ZaJ(xtRE>wQK$tHhG!^pUn8awx>X;Y+K(!F9?Bf z{UI}624}AotD+B#NYDq|?O_%K+CoM^7^}T*N}AJhU+b!-n#TIpuKAr^ixiZV2>0Z;ZX6w40W*iR?H~1MU zUcKFZ;(_{ftEoGU{XrmLov_b1nL_&*00FMkVp(Lb<p0#SptTju!TRZG~rSSxI;AX6=jC)IS@ji)rWxH)pcPa}A9|Na* ze`;UpIRN+>mSnQL%pdf6T~4Me(rn$gsQK5lw6(44>RdW&=^A0M7yxFiYhAW%$?FaE zv)0a9GV_Y;g6@c~+^e!r6Ld!N?>hmju|L*_%7;y$?>N1s4uPRVM~u-cZoU1DvGv~a zP|HI#H8|&B>S?>9b=BfED_dK;T3gqxo%e&Tl}lQ$Tet4bRnI)LPM_s{C9@q_M)TiJ zn7+la`j1tobh|R~cJI_&fO>@Wckg~!t6$R9FP zqhR)pls39Q0!G9>2%MVs+cuJ{ukG9-*pKq`Gl32EzF>Be?=$ztX4Tb=5YuAzDDM`x&JkO2+iGg7C@c0CAeD zakvi%^egY(2^6+#r)f;r5E7eg;Jwp4tp555QX#O@(0vEU(`Pu#yWKP{_nm4VQt8-B z9EuzQzJDm~6+T-a1Z)S`+3UR75%q4UH6<~F&?UFJrFKN`KzmNof1T7W`kgNT=t^Sl zqt1$wKfoDgvc#~`bc6;?)RyMa0Xg}UKC9T6<(jRH=eEVGl4V?W996i~C z2%7l??*9==|Bu=~Lxl7nK5A4&GQuEM>5;I1^{-#TvA>4Xzp|sh8{k8o|HnIo#=o%t zYpOKVM&Urtjch{hD}JjgH%zcks;}N3U;9vfJLTyeY!6D@`0raPw0XdQ z7b0K}G(;+AxOQF!C6hOb`UgQaq=E=UXiRLx=82{fzc+ zn|QBI?qD1M(arYZP5Ms%(rBOXy`(?&KX~l8u@fhb8_Te_ou*Ga$eaNT*Tm3H5aS?7 z|6#*NR*s?tj7f$qpkNTHC*Gs_+xj0nF3>-t#fOZ2IL2ztR&*kfpYMaxwnk9?uv zYacBFG&@AgiZO*16{%#o)7WBQ0kB%@e;g9^c;kYl_IirkE@wLacpcf{>v9o^ek*y>NAO9#4Q>K@mi^GlM&NAZ0negDER ziyi4dh8JVqTOw{9$Vr7%O2c38`j2a$p}$OvaRh`xGRb-o0PuhtHoS7QZ5807@h{%~ z`AMzJ+EMwzqcqZA*EmMg1s))AzK{6w=i{2qj_ZGn4y^>LTRO6|q%@hdKROd1_FT^o z*M{NvXX_jQ{IvtkU2w2glq-*AC%+7%|LlIbpr(KDJjX+zj9D%dQ5pQ{WEJntNyKK(puH+KGt3^RQg*0AWnZK zPHO*=I=$=9f3xu`o|P7XwZaIMYjHN z^~0>?P{a3C4mDTx+mEQcX#uRQbUbQeDkC-w6|I72)}Pvc(0n6BT+}Sy#pj~uU`Flx zN5OWezcCs5(@eLke^lu)9Wpz9fP`%e_6Lj{JpA@&=@@=LrX5!tfWnEvAZ_pM z<=$GqI{kZm2@$r3%(at?A6<0q?){C|e`%0(tlV+u0N)7a+QFbf>Ei76pE=)+$My9W z36u}0K%n}q54B%1Xd;j4jD>?uh?4XCE(xkz`r2!IgDxU{^a%p^`h|sX@gu;p^iMLG zU_uc*O~Ysz4$WSJ#{fMk8E^j?0e8SyO?`EJ2-N)T^?G!H)R5IEx}dr5 z90EB6atP!Q$RUtJAcsIU0y^k0Z)HP6!@UjHKfQ3lLcI*Ic5Op;u=h644RgC!z?Ch$ z{yw*+dm+CS{gdmjZ@9Vf-iD@z`UZ}J?_Pqt8S7o{`t7FvT>8LkzP#k5uX7>TN8-AyI=sJH$>p?NtcL0hD9 z{k;ojOY=p%5WZ+`41jU*1SxEs-2?96_-F5=v_ZP_GZMRABDH(o`nC{I-!+X3Yi8d# zciYk>-PboPywNp@H~{gI?Rsv;?6p@sg)FypbUWc$9(FreUfJ?2epgE*?Hg;BqkUUD zFTJ)jHZN~j-q7B%t#wKF;)Qzozoum_pT5U{UCoWcayC4x$T8Mx?;ivR#J0)1-Ekok zh_^#`vHjckduQt%*M;`o|G5pzc?F19f48-+Tr%(GMO=SCkDvp@dO(yj>SuI^$Y%$x ztk+&MLb}?|XaK5neFB;hz8Ayrze^?Jtv6kCQq$D7ys5Fdy}7ZyVR<_ve#=tc0GL<5 zu;pF`fJR-7v8Y#G?lrAG#P34n>e+qUWKi4cFKQh-PMkoyq(5&xFK=#Y;yvHy#>Qse z|Eq6rsBdm=teLZR<}6sKx0KB%SjH}Qx-oRE|lnAJ@x0(+m|;s*Dq~a#?3Fw+Zwq2V0rWMrp5DaYT`b$ zMGe<4;2B__f!P`Fw*FlIm7P{E9z~tX(ka#yd=z?xM?mYhzpeoceR=niHP|VC{WGj{ zYU-Qno98yyG%s7ame*kG7cXsnm1ePs`%k(X?BuXz?!u1D6m*;WE)BL}bgDme_w8^k z-D2SMm(!tO`952L)1TYa`}YuFa>Mlw3%lm?$gf{c7hm46ta;h8_U2g~H8qPnmNm>? zbko9?IZf9uUwC5+lfuSK{V9iS|J%ROyKmKy_A%ULgblSmd(1UrsYOnip(ga%go+o zpCRuD)8}xP70<^YroHX_J^=E~iU8|(fPOUq?mA-DSJTcIx4eBR&%EYk4b9wpRo}_m zuX^Vh{TD9eLclq5w#}+vzObb){q<`e{q1eB;#QiSwSPu`_xMw-`xpeR!i|Ey{_zed z^{IdN5gfi}Kw~8^4EYOZH#gMOFviulZsqNN5LnvXw7jXav#WdEtDW<%;LX3)&)hAm z(AJJs?b+()fXBRiWH$SfCTBOzAl}Kpx%BH?iS3T*z zr>6GhZ*HxxZ(F_!9eMS8-Qw2nSsg2V{hj)A<_L=HL?ZpI&mPlX1?Cf}8z2xCKnOU- zb#;C^0TgKdnfhB~G#I)D8b-&_wuBK~m;N+0H8j5b#?AH5v|h(+zg>$vUR~KWv$bCO zu4e6DqxCPt;N14@>+i$c2g>mrcj6AZN6^_r^`jQwX9~6fSRGN58j07xYZ>yiy&-HT zB-FBmtDP|REN^7(^ZNW*i#u9>(6M-3#~Qu9XIQeSf(MnCR_T(oG;+_vls0Q}CT z7c8xvrFZjo+?SFcXa(DkaaLdUg`9Y1ZvC+ZL~RbsYoWx+RO3 z%v>^S$+}snKd1ek*)=HKw4}R!DYd_lp1>tw?W%rkpnA?I7yZ7IuYV|F7_j=&D12E| z2rfhGtGR~(WC7`;JB0rIc4Yk4^mb#lx3`-suIu1hm-`s+XRWQDf8Dy7E8j%@IrXd7 zG^ht$KWpi#xh*#?YFxO8`#@LJpnmk;GnGvLcU2uA?)L@P03-}ND248(-fm&`s7JFc-5*UO-t7SBqmL5|(%)f5~Pw2e|9sSZDb!sdG^ViMmSi9uuH>AA1-Jrd`Vaei^E7vS(Sh}{Y zaZ$_cdzUxfq@X+z{s%9F-*W);OMfbp7A>`?@W0+=wO@h$EBLgxZ+&*_(zOd4YUa*< zrm@lL9enM%VwxR24&FsJnUj%skmLqh?BCxLk25)f$tim|`gYx+W%>KO$sQ^3;=ZDsKCn~U$- znUz_A#{WH_zn`BnD~uAS0&MwR+4Zd#m#K0p)HM*jr-m{CVop6p^EGnuL;VB)P-B~4 zRR4j0l%cW=8Y5B~gNm9_tUmN-O|onCALy@FsN(r$WG?+tynrSeyqY0@04VbLp!@;# z3%`B+ZGHh*YVWihePRG)6hU}N{~&*b>#e_CefMwus|0BOL56y-Fh1aAWKK}a(_(}C ztpfnE^bb2c;dvmGru-X`16;!T$DjOy+${hUAQ(+lxF|0%{nMY(&klfntw5AY)+eq% zii9tb5iC^HkK*&8*f|QeU;p;S8}||pNd)=_)TSTL&pq*YYbSyv%u7YszW#At1N}{Q z8_4Dpwy9<59|yo?UdWj20PqVFmMM!5Ucid$$9s<9i#^VtOvCX5yyN+~T*ByL!@R`M zlzO*+&%-CCzcWd&GG}d`p>ZsX5;G=YpR0uvqxR2xW*VM-b;(@s*+tzge6P%Z{VwGF zG0K%ZDnI@SmzDdrK2%~V7(dlUrF>LU@UDFo;TWvKzx6|@s)=JRjtYw0Q}i4$zIQa2q>k;<9lLQTGZiVE5s>a zdE13udHwh9B(?#vc?;b{67-d}@v{NYdwzcLv-49^m^cyjqd3YUK+^%B0TQX&LF^M) z+MGFBZD2d~pP|2f4>|0fj^kzyeU!F!*e|EQ@6?pejtJR&7{xD`i|;dzSdnI(V*U6| zX8m1^Nc|v)iyTBr5I;-*Ab@-J_1W-)Aph^u;zE1V+5eEu<-Lz`o-}_3u zixQ>_GxgWlZl5P{>el~pc@WIaPIx}~!K3wgFh6(~W&1x7)xDB!=Lox2FgX{`1#@pdX4)@Z(B50IF@GfTA%CVdx!Z1j^u<1JAUV0 z0h1H9gP!$F$$}DSO?pAnmhLcWMo7o>>i_=whR3d}0$-C*A?G0zgi9cccUCe#kv{U{ zTAqIBkIkcxxK5O;9i&I1@6U2EBP6_{`jgQNuRfXV{?A2B)-q9Or@2H4@W@a&Ql9`I z73ZTkE<-iQs8LG)h*Jo$aY)3*^%o!c%QKiNDmLpzx{KckT`b*&u3|oXOK7dSqYReN!`3o{ka*xP_39;(MfH)!gxj3>HAI^rQ z3ZHZk-6Ydo#1XSVGG81|f}uZrfhn30LPT;&`@h!Rdu4y0urwVenBD&=KoM)7!jb?} zt3QCmRL0~N<|h@4V#S3GyNdh@(Urw;7$FI|j1D2sy?-nR!`x8c-h&h?zgl}(8zw2! zAt@+reW)n>!_|o9>jg3ODGW=i6n|-Va~AV#^`5Xmz52hBEYWRbE`6(bflNF>hqo5W z(qR0tWr){b22$uRY+}FvC;j8RZLbt4%Fc$5^e10_KP@Z{#S2W+wt&)KYoIVb7pg?H zugWN4YD^k2{h4Kl5qkB1qR;?h6~bBrYfZ2|p|%mQ*oXlT`?*797y@On(NZO@zx{o{ zNFUo?eW+ddZ2kH1G%jNb^y{rZKed-Ajec*kw1nmv70#87BBb583wjKlk^a5=KRJ+J zNl+%4s;~fsORge2Fw&%BdBkeOUk6iXuEZ9%Xf(0yQyB#MSg#;3c{)Dk@7ilP-uoef z(s6B;ZBHTQY8_x27EblAz^v^zIs|@Jg|AIxkvb@wJ8y0WIr)5;R}kwyJRQSn0N?nP(PiJlTfh(U!M<*0X9yyzf!jzp|4HC z7x{^WVSGLe;`l%srSt!+t8f^<2{$n8%m1(8kS^v4P+VO69@g6~_o52Yt(U>2Z#<2I zkKdo29@YeFopxa!k3bYF3l!F`K)t8yzbIq>oY@zvzi5u3jduHq>t7Tt5wuX(C-Qdt z@gbge0uZhL16cY`GnOa)kJjIi=*#Rg+&>T4;DM->7oP|a(gl<7dCSg%{G$mo>RU;W z|GTdLg7{)BNOjLqSC`@bx!ZV%^tGC0E6{3Eubnm|Z$A0WQmhPT% zGX1i}4faP}O%`&bBFdqc`ds!GcuRkMg3!V*&YNEKul5{YZ`%cW5FMHs9gZJ+kJ7i1 zV=45>$IMhNFZZoXvWK%^qlpPu*k!fn87ia_g{wIwpao^r{=tn;6kh4Yd6U)u3$oYS zgOXaXM}QP$uHRWtD}%5&w!N|F3?d|JiK`X3l;e|3+oC6R8Mi)(2?R|}(4^FU?E1Vm zoeue+{$qJ$sh{^$d!}{Un}4_2UQ0t9{4RxBWxrv_SuY3E&$8fc3d;!BLAq!|eTYdQ70dP73Ir+$cX` z7_Em50I;7Qs!Mqa2p{s<{ol6lsBwzTNSd6cP+5r5b;e zF4+PbG7+{X**@@%H##j=gYN8B%W;7(v5hnMiiM{@8KDW1$!FDnws%HSHvL}dWvtd+ zeDVm&q6}kho4fn+Q;QQn_uiStQ^>iQ<-|eIfXuupF6y^C%_)(=Lke|X>VMOxG+x+J zwpg&T#YLHJ9f{==3LR_t!f`|REw@O2H~8=!26j`@*yPhaQbT{uSmVJ%kA6C0IrTFJ z)gRh76=i4od*jD*9m%+=0Dw5}@k4g{4a6Yp0w%lcFU8i&MW7oS;R;g|CT4hNuE&FP zVpL0jVEPvm`_6)B@2a;al0KoOJh8x;`umk@i4Ek9=SM#IR1I+eWbot0p+7(87$oQF zKiK?5%4SkgA`u+t9V%F0_b%Dx z_Y3RhrJ=VkjT38b26M2xcsrs@?uYrkv0>LtmtE-cxrDKSMp#mtbNDfcVjS zA#wny`qcx%#N}X0AL-8qGdma)d=ovh3B02HLtB{{r!)PO?7UoVO(v4zdQhpCWGURo zVGmA}Qwm`aBJHPZ)zx?xwSc((L#XxGXQ=U1!>WD$)C0szeSO3CRsY(P33Jo*rnGcI zFkN?3%h-gCfPJY?v-XEf^iO8!4*;>`ql_XKpxRv`+ZiLVbD^yr?>RAxpeQX?crYda zNk;WkvBm=rsjqLVKYW({bbyTdXGR}ZKegcce^CGAqxEyFTKZH!roZrub^ksZK(>lB zGXK*Hs7PO0fPD%?cxX%&B(H2AOq0Dw#=QIJ0L*CSHL zb`?nLlY(pjqS&#FLuai1Ls`rbZ|{f&K-eEVdUNzq{~tV<-?DKZr+-HOcW`CtAFF=q z-*xyve`lcxmM4@W8auGoCvN@DzwvY~8%X6VoA zGb4q}1#c#&fPJr4!&I0)6f$AXOfz}`CL^nW2_OG~AcOXpPqts9EdX*lf7(IPWcKY%SWKf&~k=AZ)Mby#ztX-J`Mo zVH3#acQ4ggEN^_aN-@t~&g{_HJR@2-w)Kj<8-n=ySkbfj-AFPkidQ{8v&u5L%+TKW zaT##IXQRh7K3kNT#;$M~>tiBj@qS~lM9JoO%9Tx`xzB+1< zzH9uR1Az7MzIFz=ucnLWS6#Kg`&d4EeZ8x^RmwvHArPooRc&)}yvOB{fsfGFT7Fzu z<>ISl&~bqj7#86kY5{h=ECBek^JUh{`&&Hr7q9iTY({(_Lmkg|25&hDWByc>c)w0j zP&Frb`8X)N3C`EUR^^8i`sl9diZ7yg_JM`eVJ3e*NcRi?c14Wxg23v}3OS~~*4I{B zL4iU(k2`}G0u~_Oe^|gr`bTwNT{WJj5U6iej`Rl}loLvRRDt0>l30B9p!&h=*meP{ zKeOcw{jFZUI?`X7TSR<3cI@Am{^OngfsPsVFBPS~i>Gf|poPOBqDXvbq_H4T;9YmQ z)j_QOGxgW{+G^{_P@k8`>L2;rP%(eUTMa00SX$fo$E!cEjI~nr@X%WdXX-Bi;@&pJ z>OG~t76-QPhy5QuR{vUGgSXV>oBl1{{f~J0t5)LvJ}-TOu}dX4=wFS*jR)>q`tz~g z3X!EhMGXD?FnjX(PXn-xf5^VBO~L!)zvZ*n*SpH2KErjq{;R6Iv9|uD6^|1J^TE}z z3hkvoV`hL&pntX?%YT>HjP)@wvv^fa@KL&fTeM$%mi~%YHI}Gu0Mzr8;VsslwOrkk z`l*mR{KVJC3Yg9BF!D}4Jx06n@%auJ&;*o^)e-mRA&^5Lhd>U290EB6atP!Q$RUtJ zAcsH>fgA!k1ab)E5Xd2rLm-Dh4uKp3IRtVDmRA&^5L zhd>U290EB6atP!Q$RUtJAcsH>fgA!k1ab)E5Xd2rLm-Dh4uKp3IRtVDmRA&^5Lhd>U290EB6atP!Q$RUtJAcsH>fgA!k1ab)E5Xd2rLm-Dh z4uKp3IRtVDmRA&^5Lhd>U290EB6atP!Q$RUtJAcsH> zfgA!k1ab)E5Xd2rLm-Dh4uKp3IRtVD$RiqA83kGu3I-8a~VtNV@%KWVYT4K$PQ z7y?b0$zwzZnkiQgwfvNEq65v;lgcbVwMcZJnU)@A`DuT3{Pd-cpMI6-Ky%cGhFkxm zeEnuDcl-?aB>oP!gr!OH6`wT4Ar)>(v&|3J<5SP#nKV5(>tc}f)XpQ{8|cHXsR9({_mJ7UtWb==~VmqRNH*sG1bIZdet_)VpBV~48FwF zjuPEqs*h8=PE$K*F#Hx%`ze*X)YO)%ep06PaFwsb)D0bie2}TzPxZLj)U8nbZKm!^ z@-H=$Hp@S4CJj}*t!B~}hQarkNe7A!G?PA{_TiaHzgN5P%;ZNDpZ2jy@w?6B)Npv@ zwdK&XnLJGOU1}zSr}Cd-aUEo)9If!%eBM~9a!!3p>6MzP&&z+SnQFuLSej4$Pdi2B zC^6GMr*yZPX}-T`KJ_yFAM#I`>Hm~}xAhmD?uQdqxT8L=a;D5tr>os{Lsj2Bmdby| zgD#yJ3zd#BGZv{_o|&;<8L?dZO!@6Hg~YYbh^l=`?&xOgpQ603-Qwf>r;3LVs@rd$ zDU<&4U>h&JzbGS$Emz8v(GQhg**T(~-#$~cKPNALdJyu2DW9eGm@<`?htiHxYJapV z(aOIUTmLHGzsmQovhosBeWB8W?juTjv+-z0167`lruw^*Z#A`5;%P^lMY~NM?Vr+{ zN&k^P#!M<7X8Fl?4u$5K$z#i*)cgJl=h^yBsh(d_IAiNq`A$2=@v2Xic>2?hSG|cp z>cruE8(UA}XIv!zJTs$XD7m|ON&EGplB!-rg?pO*;rPuyPYU3lMjzFO!U^{@`UrRN z!aGg7(0CwTIBS%5e4Z))qVjb(r+u77g|pVN9FQ*IazEizL-Ej&Gozi?B3Q@N(jm%pnI<)ivgKB^D#st@t15AjF&yy`>g z&lq23%KZ8$^Xo%3FZ@MSA7y5}&u{d3>SO8<T2llrc`JKE$gZl!3qFT|baq z{XqGY9XlL4z?63@p6dr?;H`03RO7DXYX9Oj-U^3m#_KXs##_lX&Pra(b5ZhIo&(Ca z`g@XZvGt{PP|NdH`PJTCiacfNXg^B7j&cjnx<80dnz}X8i+Vyo;WNqdg=W&zL#=!= zi7}xP>T!o2o35}bXt+(L#_V+-#^a} zKftd~#>>Snoa$40xOy!%M}15Q z=uc&|7gv8gXXzi})t{7J`QxR~LQ_6c@fk5h(ges;W5(Cx z-vmN;nk9KQ1PJxbmR`Y&w&m?>CbPcd$7K z|M%g0Ag+Og@c0{u?*RTyhJL_IA>1JVbr7NDmqhk{=oIJ&&7t^y$V^3g2yqWZa+o!;mN8KSF~nCY*+zB76#oI}Q0%xWfrmVx|-0W9A4#eiYY7aFr64 zX%w`CQ2B%?F-MxC@IA&HjsM4R9f3=ONFje3#7fkV2z9KPf$t~Garl3n(ho9&ksV2D zM3o`84?sHbaqpk{HJ!Ra0aLfDXl{nADHO?|AY% zflw!zlZkt(IfamlJJbwE_9-ww5m~tzfoueHI6evUS@St_n)wVmoo+sl|Ec(%g6p%$ zJmP%@-;>ek40EPA%bZQh|7E^_|LOQvm{G{iB<0T|t285#jf9TECxQG7(*7)Q&nDCt z%{j#VviTAr|BG;=%xGk1;raryy@=)Uw-?e;xX!`vE9P8ce9e3n|1TpOZN?z`BI$hz zSruVD{;H6U#&s@!=b5h)<3e+RIiGkQK4X!61=P+*Hjc1NJfUOpDJJZB<|6YAVq9V_ z#{WWMj5T{BI}eR6KvqpykH2c9W2u>M;P*{)DKWlnzJ>oK)brk^2H8dEdoi-{g!T9v zk92Qb-!dY0$_N9k>A9>n*hyLawja}n?xba& zicbNO(`bKZP|_dseYUv^-@9phrxV75JDXN^53--oy8a6v5AGb=(Y?qP(0;y*j|X=y zEoC7kSVRl?8a^J}*J%s)A^Rz9;6i*n_)E>tkPS79X&sl~Q)-q_x0joxgj+`KU11&| z+|Q}o@8XjOcLlY5KP~5e=y&kRC+y|a>@SGXM2%iayaKqZsL$odnyJUD@$ukhQi~5F z`z5t^Ej}LHb<|x8xU8U-W|@a*O)W@fn}-SaE9&P4^9Z%Dg6|s$QG|Rp_4Fvdk5NB! z2xH)Gq;`Id>^IcHP52nNA5s&KBfHi7&ivLqK}mlD{T(5Sk4^9r@H)clLGybA6Qn12)QWol&!J}I~dsHfGGU^VpT_!JX% zDYdhP7;CAOWyJH~enIWDA$yHlX~M^YTTbn?Bl{(?|CrZFr5#C&c>~!BYU)k%7U6!0 z&zo=~khf4fZ{zz8wepBrhwClAA0c!R@`tIX4rJ@8pI;Hiz&*-xcq6V&)Xih~7`P2g zDZ6lOVJf+e>3$*n2I}*1#{Va%!7a!J^8FiPZN|3?|8A!JJl}cHZzWCwzLW63C&rV+ z*^1XdLUdD?d7d!|!g*f4mmtI+k#!UIDMA`ALAU{4p7$qe*_ZLqbq$&0O zM!gU6%FSSJ2;oy6&vj@iA@fbz8|0OF!zk%+?;o^>p(s{{td$l~ZieAE!YlX6OojJP zTE=jEM5gGuo^4UZLhaYWv@2FK-Mn#&~-n9gVAs z?|;z-JnH>bSkhop#~T4&Ef}cw}#zT5p2)22b04y?1CG`*=mT_CZ#Q?|yv0ZCgp5x1Kh# zFTQo&zDW1;^2|iOJ8XN|Ox>@?r-&9%hjgNsq8;oH-N+Mp8`6p1{>12_)(^l{L4|L_ z{{Zrs#CH$vz%%dj4g~KsuA$V*f!_Nl{rmY&gS`i?Lvg8^iY?W=vJgn2zDeFqRp>*LbRrW1RaXJ!Wr4o*ywD zRr55sl@X_!5$1MF@5J?Ip2m03HvhyEHU*Z2od%DL=pg+C_+O_nGN9h;)(Bg_{ zYx~l+R?-4TGe(T?RuL}W^U!s)8AvP6^TyI5Dk$}6^%TZveR{CQF;L9lyPNMa{~L)W z-16_aqUVbDI;EqSp28k)fTM{*^y?YeGoZxLg2AH6p5!n`-_dLm|95B=mX4yA;=g4K zBS%lFXWQPu(NogXGl7|WkJsbv2Nv+&0n{@7%;7OV75DUffYGO?sHf*pYFzYiN4<{< zx1t`3dZW zku<^a{B5S6kEfJ_?ii`QZ)LK~mGXyuW<2^pEAe^WN{o5Er|0}aJ%8v5SVGg~mZlOT zpq(bU*3s0HvdC^V=~c44cA9j9v-FlV$s*io%0A&N!{t~;#Fu~AS*k00MqA!da<;rN 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

9ERr|;YjEYcpo2&i$tp<-IyUjZLo%-c) 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 QeR$1LI)NO}Lhk-@{-f-@20Q)u1-` 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�TT-XAgX*q2PxSqu^RRg?Pdb0fPl$d&oO4SiAJp*+J!g zMDz-V!s9|uz$uA80@xbT)C>Gtg;b1h$3N!A_;&EpC4?ED_#^l+z8!1Ac6XEg46J8~TEN@6-N& z{Qp@su-V7E%h9U;S?`Q7{4_#(T@6?ODmc9$MV>H^&{3&ZbkBM?$+ofF0N2KUqCm*hP# zAFI}~^)$G)jqBNZVP;mXYU_zLbDR-r2b{USttZx-PJGq}tKWKJH8a;!V;>)buoKq3^~9=YuB`3^93e~5(;$T<>t%F?w!!brdmCNl zD(ZaE$KXn6?%dJa;M!;I_R+`SYGkfYZv58{4t zH^P05N#Y^#pm;#sXgn$&6Az0=#7)NI;u)O#IvJ&(jQez)-QCl85+~3<2i>ZtF$MQ$ z#S;ik70-*O#h(y*0+{E;RD_;F{AuDzg#HBDGvaZCUcx!UFNnX0n~lGUnPP@`S@egW znz~@1xCOQacM!Y9pjE*;JwUuuGv%FrZQiM6^3MH%)tw$`wUU!-FX?9vLfzd6&AcZ< zH)4HvKZKvceE`;p_d{p^R)qIP_$l0PMt$~1=x)@-IB^eB+=KgQF#@4i#GB$R@hYgV z;{LXH4WZX?e@DEI(CfI*5^o^%2JUYn_EWgO1NvJCS;Pb}Ui=ZcOhkzH@d*79e)U

`8oEx;+u%MN2 z=%rs2hUK{Ct!+1wbV92>p*B}PqAjkC)#G(StKOonn|4Hd4^ zJoF5m&`Y0L_kea>E2W z8h1POL5MzA^86nzt6A=3YO(*MPxCrle^4LkWwR4n>;m}t=g z-J$QQudVUYKeZED?0-eQ9#6NkScm;_GtR*$DmN7#vDX1`t%9tUS6jYd6N4zY5yevNq2#h4#1^3kXdHTzTE90AeS?xe5IE(* z2| zU=D=DFo!C^90+~wRf0JX2G>_%O|OECc|l`77c}O1LE}>{;1yX0g>R0HW=SRVwG%=r z!_zy^Zy<)eN1Lz}7*_v24gNG3_&{Rk27iEmZ{y#UEk!GyHR&V%DD@`R<#^O2<(nZU zU__yIWf2o0$v9R7iU;JFO-c43Mqo-cFYypYQ7?o-5MrBh-Q^!4)3}3%x0nPRdtMXq zFmx}@@_UL$F!IpnW)+W0dw?DAF~~l0M!5KstF&W>y@XN<2@dR{w zHNQUv96@f05l>#xgE?j&mZvgCICwT=1oRaHm}`yMPr1ggsjj?A5u4XuR8bThm%ZV+ zUqgn*bYDw|{rP^F?Fxim1a&3>pKR{LZz5E&0xa9OCrl<4{iD>KFfY~}ZWxNQHTWx` zLHHWMy_~9XULU8LA)F_UZ==lXdiXNTE3eU)T_zUq(ApjLrK8b#oy7iO=Jh(4dR^t} zlr(u7jz``TfS(Bb189c_(IyYU<39=QgWuZ^1OEu(KPtrfKLPhR?vsUh{s|#IhO77a zC(*u7q1~q9{xq!2XORBSxIc?{_%)w~-wP-^ep6q>yUsv)@SF59^8Bk1WAWRJ-|(5h z-eR-F2pkY`oDp^-$Xudq3mztoo1ozaAQ3`8};@c_7}nLt!CzP};OIneAVE3R?}M^wzg;1{K7ViGjJBJ}%j zt(utWsflLjU%WU^BVbFbtC_r60CoKKdZ@dAEa1gmH@SBy=hUd#ZuT|lk_;=m59AMC z8Z^!{%|SBeV_tn>^SbH5Vq!3#&x`p7!X6%uyBB_VFl5!Jrj6+%q~{z+C%u1&D!&8s zPbb%CViXw@a!SpkHWvlhblw1l?|1JQyJI|TS`9Wm_v+Rlc51bd9 z13K%`yuKGZQESUkyIjcudJ5?je(Ea4h~_8CKxVk)Xi(N+2gEkV0c9JCmC zcL8htY&(;#(kE)^T2s*y>64NECK1=cq^tBTwYJXmcro}wW_C8~SJhEFt*h2dbVGxr zOZw(6EI%)tp*KN*atrcK#NRxFVz8Lgjda#!ifI4xCC315m=-36Yr0H7R7~w|(wPVP zt~OfI4Or~lt7KG<#`QBso8hdVY~(vsobAW*lONUfvi6}CEBoqfxACh2($!mjqpg&51NlRP6H_6(>9;fK ztF*P+D6!ot;H!dOCngSI{(OIRtADp|4CFVWubl z{N~uJ?blj}11Mix{5?^O8mZ_wUDDxr3j4QfCuIJl>!4@fNjmvQT_?4(TD%J*F{T*F7a2Qc=Xes2Ha`sid=g(NWRA3t`W*ez*s&5E!tYXsL7?6$TwbD4{tRJo$+#(8=ke+Ii#c3nbqWTZ%+eN{*EMF+-G^eFw_`OLx%$>ABKwk0@Np^rWk6pk=T# z{f$5z5(TT6-rYZjSjJg;h#?q%ZUp|2h+E74i$Px2DI}idX-iK)9Ufv`oPZL^_9dP2 z4c)~u)6!eKViE8q8{#)nP{jO6SJx|+cbv~3fONH@>qe#zFv((;I`bby$OO|@e&BBiKBY%Rb8V5w7$}))eb4A{ESj2k^dH+%cw)Fq4DQAN2l6e+O^@TEQ8n zclXa*tan+-KUQ%kumM{C3#6;IXC`-B@3kuV4#5r$bnnH+^s&})PWru)KC!wn{g2iM zoOB3&YOuBBpCE+Q^`P}l>uusel7gfT z1?bHU$N#0)zggAzPkMqj2R%W_KP8{Ou@)k4$}7^7wW%JYN6Tjuth8>hju0DAewHsy z8|6hhWlJ{6;uq^y>m6bn=nvqpH0^8?KA&`TZL@B3(kB6trgimZdL>&JW4raZb(A;` z{(cnwDoqpq~oN57oYtky{^aR2ZM{=8ujZ z9X$q!fq2I!fbXLfNV>axojk7dVEJ*7~z4UhZ8n;tr5xirw{*qEMl z%4`A30w;YY>Sds|Il)ZdT72<&o#RW7WzOfnihPG_b8rGM{W|9LqsKarabg$h?^U4g z(x#>|e>Z)-hnMF#vEIW1x&iv;Os049cN5P5&)dYCsJ}N+zWcSnY^HBvW-kIg^E}4` zdVmfd(x$dydg@y0YVSG5Q`OIG;KxJFBAw%zy6*Lyiu@l${(@D{rp!v-<8j2dRF zS1s9ABkpi(bX%kiAlG@PAGhs^aK|@ zsL2`^-9s$YHsb?rb)t}p@>7%hyq^&Fp+kOz{#B^;pT+XKuRnOdbL$Tmy{G$( z6BXd!k5F&BwSw)WC#xiY&-=`G(RFc3n^;PEnv4FKPnNG)Kb&vde5CRFXZ!x(`>goE zm-!o_O52RdFkRYT+2Xy2?2cu=WxmgeGD%0h=y7#SpYF=P+_$%%JAXqj@Z{*}E?*zN z7hH7M`1)RdT1V6kyks6P`px%yUcBh1$@llt_ckRx)`^7#Al$-Mg92bdz&+V zm6jQ-^E>MIf;fr}{W0kN`kW}H&y;x+9Pxy_J1KhL2eOxTqfyiY+(Kq{b&3C6;J~m$?HA;pZ#Zw_dx#?^k_XUk97C@ZSeOGct!XJ2>3w^5vR||Cp`mcm3#~cXddvI z2$ysrQuV!ENe`3sPK)Xt;Q>hjuZv_!*Fi75j&!$tP7cTnQ0+GlX|i;2Jv~kC=Vt{x z7x0F7PNv6~6?%3*rgyR|QcMe25Ww+^<e>~sKj0m)KfnMTHi%w$8%KY4`U3%WXZp{PzL$P> z2%qmRzatVdf;&84=0QB3J#13d|$K;)Ib;FM!o-t#`M_0bSM1_NuN2A z`McA%3>*mhz(7MRko36Gq_=hE4u57~NRS%87vjBd)F=Mgw7$$J7BNQ#7Xl8}#dD46 z+yS8>ed_eabU(CpL;Bel8q=GLIP@Iq+baLU8I9@up66pwP5S0n8q@vImp+l>rAj|> zc4K-L)`c`oU-)TbdVlCe4e6s6HKsp^wJ#0n6Tfaur?v4}gYt=QuB5Z&%<|9t_Huf> zV9S~G&8x{jZvKEyfR?)pyrJH&4(5DA{=XYG`BD)J(N};x2J6eVvwc$6 zHN$gXv^zR!y|izkcbfEUY&2>#&|iDQzxcfv>Y~S0o8`ycK_7oHK)c=fek%W$uwJC0 zeKS-WD$`q?&-c2-{FQyjwZp@-NzVLN$@1;RmuCFV#=IWZ-gD74ls^HQ5cO+*|HC-% zYYSX-*m$}HpQ3Vwm1%!|scl60f>3_uKSH1A$ERzcTcDrf^m=W#tY4Ep1d>A852^%v zG*7({<09#>5%p&y8q>Y>RDC7nwxZvucZzRJPt$MFSBYDk^wIiQoc(B^Pn*{OeS)s) zcNI!?pS}#A#IXj=Yoh+7uK1hfAE(c5%hJ2)jQ10M9`gOh>D7`>{=>Tc74+L!#X2b; z)&ntyL;pEwSiBV&o}AI z`jW2rkJw>YJy(PtO1g&pvBU~=REM*FO^46w7p$?xZ#?7ABR~Qlw>iD`E*T zL7xLUd!TuJ4d1`Yf3u`-zRS$tSJ-Tr^MTLf7b&3>-FJ*h50vvCC($<=rq3Bmy1V>U zFbLH9an@*pzJ3zvTpfO!_~1w#`p+#|F?s=J-9Ud(Z~iAmH_JBw{BNems&4(@#IHrQ4y*31tMYA;^qp_;`EL8wNAIMUio22J7NnZ2 z_n+OE-dX<^bO?3Ob@8M=_6s+E9>`-!g3&^pe2h!c`-(QS^^z9E^34U|+s1>BU+wV@S0^N&mWt{sBbQ;5!szksejvn9fs(NXHsTNuRyD@$;LZ{~dzA z5N8%6|3&)nBWC(%WGaHgGE@fmjXudmmq-bY0K&GB^p_;P;rqvkqo8VN1*RWT>n{Mn$pr9bfBl)3LP#}(2pXMEqbS`&^;xcy=;p<=n6W% zij>bkF6rAcE`L6DYH2|C&AOb9^>q#CFJ)g&$6DwH^p>qJr_(FX_gByFeHA*K4=(zs ztI%P*yXa3`g&xp={`M7goGaUa{#d)q%ZF2_8qnvrznmV86$b9-Ki27TI>x{T^qE(o z(|R!9pS3^_J%36Qr#7Vag5bEsRT|WfImYvQR_=~T=!X>Wzu?E&8-Ax8h!IwU_U8#0 zEaULpJ&relfX(EX!qaiFQzGW$IcJmv7%s;;eznS3mQ=tfc(dRcfzJv4fBBSHgftN+ z%g_S(aqR`49xw3;5}zpXN%FbL5;8{(IkMzwayC9);(4mL29E{t+~FTy4vFD<1Pz)2 zsjX$Wjf|fo!@1H%XbVd~gSVG4^CY#se8&!`8_uXRE$6iA3>`wloEG8jsCC#r(AYHS)7+DExQsJGK6fPk)-e0Tw4)^EPP~No>w~7K`^%o5>Axx0q}^9FKgHulfX^TRlz%4 zQ9#V2GR|W%=Re6hd|YBCOUx6pW~NBYlM?fk#7vcX;nUz6O*{jiq9*Mv|OuDk}BQh;TH`sW)weG_+z zutiY%7Ef36``_VZe3y@&HT=q2p1y}vWPjt=*TEtuK*Oe5`hcgcyskpL|9r^n{3CDz zfvxAY_c6cn3IE?uIobwZpBwpq{e%DdPyXyCj<%T}f5tJl@H^W$8tD`y*;6n59DGP% z+xR`(InEaxhvagSu8G_11d1Xa$tHk%k3w%=mrMKE z%NWNsh#Azt-%K&#A|eE7e|ib=2|s0v@%$^6k^JVNJ{+z--l<3@r z$OpuS3tH7@eDZ+WeN;cAXnXo`8WFl?{8sQ_M3=v+GpTRcpd<^?Y*dT1?_kRZ4(C^sh{5D~$a1jg0UBXe}I<{4F zR7mjurTj8>DL=>Cv+!#IzlSvmK@{o#-LUOYY+jXEjToluS%p|BVn)N&%fyNBWxOVa zM5-^!sXi#D`q(6H5wY(q+aPWdZ)7&@2Aq?Rn9eDd?TFaN@e8C9th_8igw6$sSpN;y zNX|tJdkb4By(rQDd?0-&(f?G+Rr2|)3Xvq2%QM;K@_hLgnf{k@`d`ZFe{Yc=lxHF0 zgYvm-tNfz;GV(CbFJ>?E+|AC?(Dh4LLS7?>Wh#Fg^2-sa@U@(fslE0ir|SdA&t)NT zw;YwPgQq=;^M%Z=-6nq_KhLHZ^E78^=)MWauV9Nc7R{yn91#iGjJQ!l^+q}M zW6G%?U#7WS^EP4OZeoAeQcgZj%IW%tnoayU%Bfv9A}9JcAr^q>rThj~rKOzOW4q=Hew}i< zPB~rQuj$lW&pHty(5WFG8Rg^)qr4fO1q*!p)K99k7A>{2T{{E5{!2BpwU2A5eJH2) zp`6Au@6rkutzl+$>ooW}Fx z+9$O?XK&!_NiDViliD}XtVoP20+>E6~YVJmfS>Auq4!M@@--9J%3MSnM&0#EZ4{XJ|% z7UjQ$=Xh1#t9j(R`ZR9?&nM*1$p0-{fOG-Rz4>==-`*YhkHLrc+x+M9U*zX6=C6g% z?*05-h69Ebti?e2vrOgrGwgt2q_NCM?NVl(!t*J{={%oqyu!GGyiM-w^u{5pHe5>o^O-o+b+#;jggpe~YgCg#CrPd51ip-_0A zT_e!>2kZ@`CgDwZBq(3U?%?O-m7?>%!;)QvSm4!c3@nD%2p==ANcnrPEmHn2Ecukv zbClEn(7f~oEP#}MiZA7#aX$iC`!X|D#&$^7C5K2WjyGaPqVsj9(TPRC?3)o|~$hT9x8m`CZ# zB|M$a)1UM7ex5$e)8#yUfu|X1fIM0n)E}kf7s*(!HQW-X0qu09AF=?vhoD2lHAE5b zO`L;c()K9D`_l%moW-x4g)161iyto%=-HnlvRZ?fkSg5yd-zT8jz-*r8`zyNX=vCM ze%Aq>9_07JxsU6kczPC3;ZEjHu#^wK+%9U6KEZ!k3bTcltq^m$dK7NtYN>?j6E}pEFW?_p z!(3VC;p&B1^xHi=U4c}~wq+4&2Tw<5)3KhXyZ99qsRr>qWk?_AX^^MecxujZ;QF08 zMBQ|F{Q<0~x z|A%7)G+=b$y&u>)uMjyM(OpU&x-pWut1`TuP|ek;C1_xIuW2K-L= z$oPFX4(9YM{f8C5eTy$0|DRaCs{dQQ|6ljd|J#25=kOQeLn(YICw@ab2*L{1HX^}? zvM&6#1Udaa0pD(%=OZV6`UQ@M&IcdiYwE@i{!Y)7<4YDd`pn5>?0Gylc*xe{07BRB zXEu(K_?__RdE(h*hojHCgU>y4((|8Yei}}Po+tV!X7fyZ7Y*J|F*eWOOZdn*K9%j{ z&viHp#Yqo*kl}=AJ3|(r@(9;rpAD>5- zIH$7GGw0!Z5uM=U!1YbYX+EIy5%^MF4%I*1PxUiv@cs{QO!s#V-hUi9dAezyBAO`P zjM{J{zVw0Q2K^KfXZ$QvAFVj<$8&W5g~(67pUO%1(;P}4I;Z=oUWgX@AL>6B4AMjM z-7$P=EgoH>x(ec)=p%gEmHSP6sgKd~$ndU@%$!R1Q@N>*D{xGoT{xzk>X1Hf44$8f zW5S~k^=CVB!Yjp>o;M?>5A{p>5S{e7ER(@ro}tfQl*x$@!ZQwDr<~6H0OLjbKJ&Zx zyUclH@OL+!qu&Dsng4%j5bpsZX7EFG^#s0jN|-ltz|8;RGQU1}>tMWarc8A2$-n={ zb9!c|o~Zv0)h9hepTWQ3?K6OLdY(Si*0clh5Q#V(rh)2`%1(InJheB~=R_RS{d7+E zwB!3<`JG~H>3PTC^VA-r@O>ZGkntFD%C`)je>0ee26L)AqIWC4^nb|k2CX0R52A}` zKKV1$--oWzIhFrhd=CMGXrkvnLq2qlQ~ue3Yt%olI74JlsW-8{9jH2D)QOeYaB znYt$C#M_oJgkoSfK_-7(PQ|mJx7hXL>y_4uHraT7oQL;SGjF9M7NFtF;`aoFCxMqv zKBc~bJ&&-GCxdsn-zmnMfM=?}-!g2m1-u}d)@Re(>y%A(EwaJ-2*;b&WvIOVS3iNS zfOfpeB>q8N%*51Y_5JjBsOP#2p3UtXkizKlAymIvP|E`fu*{5kY#Lvk@^w?a^xB($ z;TUBsTy=M3IzLX#a*0o=IO=cpA!Y zlU6k--#*bGeEV7}XDMT2^)>$(zl7tZD}3Vb)P+o&>QfWxb>JCSa6FLi?2$}*&{nI} zN5uXjGd3_QszmghorN2ft`%iU&yM;WD&v{VSi5OT22V5v#3o47S*d)kE}i;5`pcD>`g^M0IgsOXf{WSY zNhYyNZOLQl73kX`G5L^R*{ar8_w1n%5-_W;)lbs9TW~d-N*ZO`u#SH4=?Laexk0! zMsHYc%;}TX5uOKFL93dmcl7GqxIc*UMntwQsH~UF7024jI7ZFAX1U{qH5t5z+JvXE zx5e?~r|QS)9wxDw98cIocs`7=a1H399CZ~zdw4~4eL(p@3Qs%MR>v{yuCV67?}~W) zs`c%{Gw3J1$sOvO=`JP@;dPZe)jm!m#%#zgCaG_jYpH$JWr)Wzu*&HAc8*tW_ei^L z*^%il{uW`SdM8UJzg7R9{*r0gMVvm+<6wu|6_&1{Hn3}$4`U@@1$|1|=4PKu;i}Hn zjU1zFCgR1iUg7N_g`0(Dw1<>Bu6C#Y3U8#F<0Z-h4msQ;s;O5{X8}i^-UvJ+@H~t( z??_Wa&Ec2YIo|2Xc1NA#4nBV6gHa)X{+yjkspqH&4hJqP!+i8#b`7Yn0kUE6O-cqu(yG-|)y-jwg22i7%-4V!UA;GRmFJ=5hLt&+$2= zgDn_iPl1Q}l#z_aUd)neZ{ofYMHqgbf6^kyT+OBMyh z0Qi9n`l{45C~v0zdansPWaiINg;nSyOvvwPqM>g~w;Lq=!WQN8nl`rmve$SSi{wDf z#FZKPk`-R@IrNuQazH(v4xxQ7=H-pwXvX|u$^(7qFMc7X$AJE5ME~|FS#w*IZAC5O zxJMu1^p&z;)nzk}^5aCES$qclxj*^2+LrzZ{drcVed_~GtUm$XZ18xqpxddS{4gs> zK1Wt%qq1>anOu0uBfN~~VBB0hX+OssxG5s|@qV*o$t3vI=NNC(F)d;j@o`=Sb1mAy z2%H%8BhVMa9AXm1a6RiPX%z+%b>bJO)zkEf1C1}BGci?)DUSoMJ4rSZ@~xkrrZ*_1 zYPlYeCKgAOn;~s>V|Coc zY76-3`DxmLQ*ZJpJ!BqaCfsIrrX`bqc!d$= zddzRfl4G*`fYPUPv%?K-Y@ko! zc;lH_(aB+92H_=DWvS|8F|@~TQ0{&eq@aB@jOgy$jd*lVe8?`ea5+2nbWGCP)Mf)by->F}sJTm z>|)|vH|vO+9SLYjgjcrk0a34aNrac)9aVmhc8H@ru2B!5|IOlf$qfy7mgb`nXbg!W zL-;MPOFzq6;9{N9bl^2G>d%F)4+VX$Uv>d6IgFQ59qQjW9`(QY`wa@_45ANTFFbxk zi5b`)Xa0N_`+l_>cukl`U_Xt7S(Y)N!H?)eQRO%49VoAsO;%rk{C6QAzXR(VF@A|Q zAI5}R0YAW#RDPF|dxeV~T;v6wL7?$#TZSChkNk2;Q5TyHvoQh zFX-yT_+5#W90IeZ=`C-`PNJ_BZ4dySN6Cse;%+y!5!312Y`-C<45;-SZ&akgLF1R~ z#7QZlJc9b`LVtc8?TpyMbU*M?k{8c<(T7do0jQrO(Hp?mCCIUQ*14ffp#Dt!v|u^- zpX}oN6oXZHOuYr;EvY`I(#mfK=l7`s;-_ZdkxUQ(UX<4z$}UI|@RudvFHmm?uW)ub z_?0QcpMm!<+C2*X_pW+9uRkg;m2u#ecH}`PbQ_jPGy>aKm6lwBm~3LZbpZwZfREqP zyhcH<4~jEzH||%KsR7=;Z$NLrPUyV6s^n3G*PGD>E=PQxUpSIbsqBzFVuBcNXS<>_ zf0T2)(%aFWazj!E&y4nX8S|w8JHZ`@;k%gQ5q(my742)X^<5qi_bsFTXS9_tpQt9H zZ0Bx+G=z87Vvj?g>ya~fVdsPD2jI{2){?o1+*8tVlvgWz6nPcJ`}&++mowqeYB#WB z_7Sl*p(oMEc1vOKzcNmrd49~M&vnb^^YVtAcc~wOp9<`6c$3OmXb-~E15bRt5f~o( z_jN&bs5t`cuwz75y>K*9&vur$QGaD3jl$|HLcn8#ctPhv^<9iNqHjLRJCoz-fR_`( z(lq9)Ia(1E_AaBoZM2^rFB7{HO>EmZHjHOo>~iS!KF(i=f4H&NnhLyk)E}Y0%;k6* z;1xgBh<`U(50tsYFK+Vi`a4ta5&IIY?6YwZ@aGJDj(d$5Z^mJ~S&*y5lz_L6{0MK| zxP;@$z&pc7?Gdo;Epm(7ZgK(7V>?T4#=IM4na&n{ zu}2Z=FRot1+gBnyZyE4n_Pu36;md~tgl(UYY!MQ`Yb*By&%o#N$u7S`FM9{^0?wuC z1AIPuL%k0C%ErfUD%z-M4ub_UZ&gx)+!Z5UW5k#VU~UeuuO%}dZ^REq^+drBB7@`C zs9Xp6vF!1)KY);S=CT|uFp25i2GHlW>t#&Ya*TZyZ9=(QMZzm9 z4KuwyCK5kLNiOGf;Kh?zSBiOQpE{Gzmug?5GIBv9`bfZWc%ol8zMk_xo6+bOMc{3T z){{IW5#AJY2zWux{|N7F$bTfi{1xME6XtW8e}#C1qMuD=WJ;`@2}k-2c+zYgRfxGs zim}ZJ8gKOy@#m?t!7ni0h(D(#w{s%O*^`ve9t&U#adA8m@`m13hdYAGk%}NYT<*h@ zrrOeCpO}JNw^nUt(l?wlzBj`r754sD*;rn9mED zmJ469pEaouq9cmz50Fm>Fn-B?rTw_Yd0giOp3$x`d!+sxH*}@L&>g};+!j>6+Fft! zk2dKJ6W#(hGgJn$O{hO6dxYPq_c47cp)OTlg}jl`xAd#(ojo}L>d)4!xna3S7tDd~ z3Vv@E+yT7N@iM#K7?aP$9Rme^=7;^DFPY8mRs9Tc z1{^Ow(dQJBjd;1xQrI9M6ZG)8&aOt=gsh-}ZErTPzK*7>W56rUHCl7W8?(?Q*}yn2 z*Qe8vhb~dyf*zEy*Y)8AR#Fo76)_I^z|Zn}+HkkmmOjuVX8EGZ)o~ z4+>X9t}1{%>_YW5_K|uG=LcDTXmvnGLVwBFuOei>65{ADF7dlX8T(bdvtCd9YRG;? z@>+rH7B9!Uzw%(O>qx)N)`33a&w78WLtpI2U%G7C@iAdnXFKWE)6!~-*uBiJY)dHB zy$9;DNggVBJH+cnT@M4a~X*rQ_Ydq>*(cerQlzgA+OLRT4cV{8 z0#66~)nl-a=fPny0s3V^oyYNd71w`ize;UWhV56Kz#Fn(l>ko<`_&)8m-E3-=fX}T zvH2XYXO4^8uV6EUeE&oHmAI;$4cV`vMBkwOY83FWQxxn?SSbVh)e^|jL-w`fmwV8* z|B3zTVFMeoUv&d-$bK~fcx1mK`}hdRYsK&)LPz2BX?B)7kMxzJ4Pv#L(wNv+KR%SqXy_lB_?7OVH%*PJC)?)APZUfIj)Y5Dh=LZ}Q6#O3cXE{aoh}Xg5ui*U| zGL&*$7r@;v>!2?lK9QFuB z{X68p*}S|W3oCtw7>!@>1S9xX2(*y>B?g%c`uR9t?LeYY>;>LgdjfJ!X$-M(ByU8Z zpZ^s4V7F>ibppwg6cZ}#X;XT00>Ja(OS+sNWhed3uaNy8AOIMzn`IrYDi zg>Q+3SBkq*+oI6l?uWeFub!?xi7Sqb{=1sbokM)agPJFw&z)C+}v^*WBH!3%)0k}Wi+Iq{bw z`Fm7hC+1@KdnC8=L_HIF4=CBx9?#Ejwa+TvnqLGwu{h*3sQcMDDH-y(EcB^MIbP1| zs-o>`L7$6Qk4_A*EQqb>`J*4esH9i#cpM0m2tc`oKPGy3!U z>UO4Ojp=TbSGTfJnQ*fQ&ET#+SQHe#YHb4E+NmkEQC4R#7{C&M)pA~3PbdWBKC7JQ`y^t}!}PR|yn_YvO4a(0eBfIb|n!8(_**QSUhZ;*U2eUDMr>rIjiPbab1?^^ZG=-Aj- z2T{)?pHltF@ixV@oOB|;ZBLO|+}`ZMlSbQk*(4_W6t=Ozi+h{7{cp-6LC7s0ZtqOx zn3WUy<&XZ2ei?y&84|vHDMZ-z@yVwDseaiEK2P$H0pmo^GX9T&iDrjpdkc8zBj|I? znV*@D;Qt7~UeeAE)v1=9H@0&5uk@hexbn)Mkg*!|)PniwR`@@(?00Gq{pH8p-kBH| za%vA7AfNU@2KTevcniww0-jkGdkpM5sX=_N^Af{RTrKq*?D=MMb|LVjgLUAeSf7dh zQVlzYj5qC&{WLMotY~_o=+9=*7Z7r~>WR02cNrzAr-6OjcZR0prDz`UgE21EsyBw^ z@xT*eW$<_30)JVj+LJa2*k+9Lm&7>OOIQ$iL8!GcCA+H}SP^_-zk+S-aQ8kP`QJ!> zDT&{2)uWxL|FO6Mc;sI=tnN+g1@bSD{VzRk$iEN*-|{+jaRad2Hb!=_t_F6X?F?;y zce$42ztfZZYIQ8c9E2xFl>1@#>xF*anf@I1tC`#%AdiPXKnmb)6Yx-l%t(A6yer7! zZOv?dOPURIw`;;g-@W8th#)={;gW&346+cb3*52KAkA+k zF(<6B`xB}i`o2W`uO9wEz0sth`KYh2MX6DbAUa+JzkiwO*lp>(!0V}_cJM>zSc5s- z#Euj|RDv(P7<{Y*^3W|e-fA7_Ym;d{nh$>-`2&cbc0wMS3OQ&3@aAKjXxYu_&A{uQ z5x{tB!+2X$5zjFTks|VkGE3Q>GNE8)o8!ecgOmE-KH&W{_g1oBN$25)qXhwRnffC5 zvkHH}JCI)%rvCvvwIbroUq|r=zG+8bAKE@Kh`GsUnb6ZBXg1f|SIzjX)E_O^(fIhI zMU=9PehrO}{+x*L3-IUD!T(lbp8F2-+cw}yCKK#+b>PV!%Qq!4@gIsC$EMnI^d?d5 zsCT?sa76C!Zq^cieqy#LXBmT7V*q}ti@>kCl4(HSYS^8QA%27NXQNvwSx)@fZQWnw z6SpoQ|3biuO)SJzx1wySFn~YT$z*T3tn>l+7mP9nB6#0!)HFV|nM6fIY9cd)h(^tC@0 z1Gdjvis!V&z*}Ynef8od+%ayU5B6%GI2(B1xBH#T@NNvUx3@x$J`Z?hz{|g@K`D5h z_ZN#;>Js-qX2O#$Ycc#V14S{`vIO=6;QbR<&+{08=N2ylUJvNITkQs(iuXV-;q+zj z>Xng^R^08g2;<#i`!WxX&DO$Pmvp26^>>ZgF@$GX0DB$g55gO0^*etK`ykP`4RY`4 zpl>YE=L4R}3k-K{s=_VqyvK)QkJYF*OWzq{Z0(%TFrF3V)xm#BcxsE^c`4?}H2Cu# z_iUg`eZwoEZCXh6ncNO#L~oh=4yEdHrdg@;hr` z&mp|M~>fxLS+YA|SsC|{0u(#v-EYO$z zh~GI$eH`s8!}jt=*iYy1_Q-p^UddY<0A9crD|d;X)VqP_wIe1$_(m6DTV@!C@us_i zkjG8DzZh=!J4@B&z+-rW_;2v`@;T|#h`vz0q7R0E=dm4))`=g@3j!~OJ&%3DK`FvE z%_94~B7TOeGhKe*nZ*l0-$;+&ISS<@yicL0hk-}$O3Mq^DO!%_wjF6H7ymxX2ma!% zRi&WtHSj)};{sl0d|Wsa{s7?30N!bH{m#=+UI^iM`*uCsiu$AZH#Y*jyL_C!Bd^qn z>t;lNXS84xL5GR3&>Z*&2mMF0W_p3=63-_*OTbwSyC30wq+W{hUd;XR*~cI8_Kg#rKT|8`09^+(2u+oDamL@OoO#<#dX=_PbPoQuOEqJkw3W% z{P}3qAkR>rV;anA>(v>+o1l{aL&98J^~_V*EIq42F7*k=@>b!vrXqzH5coXpTd&&8 z@uI*R&`Hc#by-c*nXM@N%d>vPjAZye!~N9>fbd?t1qt zVDwo=j}K}Vd~h|C_C8ChuNinQwr1Zw9FP2OR}Rug`qr`Tc6I^cdY((=Lq15r{&JYN zhXmiPdg#{uAtt}5X5NBY*WM4Mtzp{u8I zfwvm|(8q`IdOOLUZK}*Fb!n25y*PGNq!Lk0D#yDa76^8Vmb@ zK_vgtk3M#CJQ#ame`v>i`8xD->{G5@%Q|2`;Pk-`pxxO@G*yd6pU_(of-VxWvt%1= ztnKXGgb(tcfyZOcDUL#(^opdvfd=O|%tQT29pX3UvEA?=W$=7T-tsok1o^KdARL7Y z47566Qx%Q_?;kgk{AUo!UgwIJK_2poFn~ZG4>->xzcepz9pt|uJhx(490g5YM+fwe z&N(CxxvV3T%|bWgH@24eI9?c6s}~?X2Y4i3>47&6_NG3RcZGTl+pNwQq|dEn^LP-S z<7?m@tdEhrR&_e?dV%-(NqAFF!ozBH#9L5#@s2Fm6Tg9fD^p&?3vfK?k@$_ooW$f*$6r%WX5%x)#8A1+CvK_XG7`m8OOxs-c zuU~7g?LfRY$EyrEJ-!hX48`Q_P0};4lUxk{Q4PkM2KH>S->Xspc#2jP^sre)oLV^s z`->O;+K7aBbo;?4nr&Y{R+mqBoiaE^7gAY zsGWFj`5>MLc!*z5&%-b`3UUvPJtNBN1zy0hzpP$+_?5OiqHi2x((c?j-2j6R@X9qS zfp;eOivj!;J0T3?i9Ia_toZ;2d?8&;xZ8vFp!)MT*FW}VPHaPSF3be1%nQJq63^uo*Ep0Okf4lhN z{NwHI*%+p5+Cfv+NS7~%7H>#lgYXpWrw5ZotUFEn&Mn~dpm zGT%DEk8J6Rn4maUX+JfAgyEso!CK@(l9R09)62 z3+iuTt(5Drv6X(36{^#c$=2QCb^f)?r=$3se&D^}pDyWh1M+FWV{@a*EZ`KRE`~n6 z9rO7OgLo0}^!sy3#*mE>+r}^YcwMHXnDyxTh~qB}W)18w65$1A3Wz`TNkxEDZ3bpm zzhR?Nb?W<&1LNvX2JvESN7)&`>#%4F-S#i?Ect3`hZR0oYivW%@e2G?G{15Brd$g9 zl@~j$0k5VE{^_4$ec3nam+76TKR5S(q)SX#|7OMz^1}wf;J-8tu75MxzkQ;f zuYV(cFtq*+hp-EqCBJ$j=g*1s8u$Y;>%nMz{QLE9E(Z&@*@xD@5#G@HH{w^~c$ZB6 z{kjz9QSj3N)t8Q;KWleJ9pARMgFeW+#YU-D7aHW%9%p}n&(^VCfp;tXm;+dqco2BGYgNbYSIRNO%~Rz{wJ^A`to z-*>cwH>`q)7jYi1k2$_uOlUC#O6wAX{u7gsFFEdI-lNxwz=>QZ_(75$Ia4-!Ak z`h)5?ZV2KZUDoWmE-~_cbADzn_BrBzYM z9`06if><}R82-j_Yz)>f4B_clw%U)jw?PDRIW>h|%eQAgLb^i@Vmqr-h^2gN{hPX; z9Su3eUs{(7xh0E@dBp!%u3Nba{Q2wTST>f|Uxq&I>vfLrn-$<0of@Op68fYMcsqb+ ztVz!ZO8c%#X7{!?WfR_?MtqS=^ce}y$efL^6K_e5XBFTx{e$s;nsrgf_YD+-;J0gx zLCZ_`&BEAQW&yvdQEN=n&)$7BtFNPh^V5T4KFu~%hO&wO39`r0i1~6i`16(OI^bp2 zgUOqloY7h3B$8M)xu)9ZZ&`u$jYYL-DFXUj;=Sj+mL2a@^u({8IleF_cakTI_@8jF z$#E~%E$CCF>>k+h`yt;``^tM1<>*8M?v7Q1zSB(eHe^llC zZ_4zSvWY(z08d2R)*WaELrP{ZVpV;=nwj6Eu6E_9j^c~`6&j=4`j_9#125EBF}`XC z?lH0pUb!x3pu0^&^zAo|)Mpj?vC|*${LP5>?gl??2R}Uqym~$#N%002>$o37$Y|CW zW7hZHSp&R9zzfv&KFgF}ZEDvK^fhySy3W5J{vMZx_^Gg1QRV`tAk_lAcJRMJe#%0u z>-{(3FPjJY{I-97s{=oM1^mxsJ+{W|e148gJCJDN{PfkiBSiA|i~=5;-3I&6ckHy( zFTqbg1Kz@6e!73j^XMZhsxdLxw`nGUpKbu2AN(}r_;X_j{IrGh(-+OCfB5(R-|}bl zzyA_{KGpV458@eA*qh!`FJi}GFQ#~Y3Gu~aZf_v{$iA;ECVVcraO_1qdZUn+jI#GC zpwD1^1?e-RE3rO6?-$QU_4P>s=L6`+6A!j-c8G{gU=!cpSU6 zI{A7q$>>oEH?{&VWcg0Vq|R|3;Q1W+Sic}2Y-1Z+Dc-hB(+a%&+#v8`eEnOj!0Y%s z=<5OA8mvF6Vs`G|mkT|LaVOCiu*ML#b!1`y|L%5XAFdM;?N}Gpgcx7+=Z^?4-U7T( z2CvBEXhEE95A1b+RsV_g8V>G%lZ&wi=U@~vRlt5+Z52DpW8gJm=ZF~MH+D3$9rexd zpSMdJfoF^mo}c4=U*dB-uKpI~O{puf>r+1B4`}_C4F7(*yB>GPuuk5k?6Mhw=Tpj{ zPisGJWP2;hp%<1(aV!1MS84sAY{L3CwVB#fQ6-bJ ztPlI@d z7{?1ZWz3P`$zITh^(o1EA<r;eL$-P{8TuG^@HCoX+wJ`951teFw-7dtRK7w>wand;4;jc zL+b}Ap5dtELm!EtoJQ6qc_dY$_=pJh7ezeg;QB$LZ)pAC`6zGpN$UsShkb+A50ZW< zW4%GQ6u=#3T6cwcuMKTY@evUg2i{&OLgRz4#~FEZX8j=HNhr&IRsQ?0@|Uv_7gmz0 zhWz{`*1P;X!w;|#-|D6@;K>`T8e_ov>DFc7r%SCVoxe7=KJ2(}4)MP_F^=+n;F=2l z7ZgiCAG0(og{nyylX@KM8?hJXFrHbs(pCzLBD*%%RXgIapZI-MQWv)LG{I-r5{12~ zp5vw6`{7T{;E6XIoEmkMV1hmDN${CIb@3p5X2D*v0C*d$TD{4lE~R)2b45z$vGmUh zD&ZfKokQVxQ>P1{&o7Q9`qnnu^`v(se}wq^4^NVxO~Q|!T@E~K*($qh#Mv>lHM6C3 zCQDKZvS%)-hrOwc^ZP5OP9K(^lRC4_2>V)R@+x-Uf55x2X(jO1Saf*By<{iZ$nAid zY)N(-gk@JXbNdj<<2RgpLLMI|3t5ZQ&8$5+kKN7jhUO!aP(APU3?6J^a-|RB!|P1x zLN&<_MY#J01$Y_yZa(`2UjJmTbv)K}Z%JMWIg84B{owp&7RKt<0dI!|Hn1vm0 zQIa{4>g0hYVc~CExj&ESyKlsZ;qu070=1K2@BB1*Ir|02yKWe7OyB#!>$7C{v{!1( zKH#}nGKT@LMY#HJSg$ci->;8`xxJ3`k3MV(J_&Ip8DWQ@XC36JbWlLj2ADDSw^G&b|tT1cmANfCc#=y^|!;KPqtOb zmN4+#PT*B1qjkdVzdccZx8b!OL;BIcxNz;MZeK|~%I3kIvqoKy@-`3FpGkNw`WeQ= zifZkom=@bvLtQaXP4%_tl6~!t;I1^*U#bGNhw>}Ls|@OIi4vn@7WTCm2`;}u&4xXD z%8)(VS#!PxGM{dmTUmZI;eSqU|2IWPLSZUFIwg!l238+1c>136yJU9fk) znjV3*R_6onHgyvCJ@}4&<~K!%c`m9MYjm-=?kHrViH`n`mfU__peou>mNx+30O6fG z`$KNeCV8l*vnA(FtgqOdo&bORWx%^fJ&)sg?H7K%1MyPxYQ`H86J~e|c(WYw18Q#E z5UjlJV-N7^1d=DaUUTOXeS~+UtuF6Q#8dA`pN+L!mjmx^bqe7n>+Kirdj)ulfahYp z1s?)$9`Fo#eFd({+q--mkL3G(FZnng$$#Iqw&g7aeV?btvwx~?;N78~&FS;lFW9w) z(>Km&X1zI7UZO9WOL%kUhJdFCgx4oMFpSr=sVVO+$SohGOHhAvPO3k@edazYZw>0t z%=&cL;xb)>`fKCm&Gt2OJkpO&pFfr3k-U3!cWdtddV44W;SIG1;Zb`m#`^Px>3q;v z3i@suY+tYABJnWVx379^p&xNtm!iBK_JNM3T&#_-v{!_4s67bpqCkZEQwT4fD9h?j z$5{!Y7&fbV;9Wn6=W$+Ejp&*5j_R?cCSkyEJ^V*2?1|2X++?3>UpH%dHsMkIE%}3i z<57DI7#|;FS1dy;ZKjL`AuM!0Tb~N3=Vu)vb3-R*gkD_=VNscI2esGxjNR{qzqma6B zM7EmhuqLDJIgq-W9l8NkaihLy39ORoce zSqXb=LVY#e%jNNyA~Fy82djjeo1MAiJ(w?D=3{D^zOOIpc(3j3&QA^3 z1Fu=2_;IDQnd40a-k4mkvKamz4ff;tn8zbsl0MGyLQ3v-GAYMu`d2pyh`$#h`_}dp zxTW2R7H31qL<$J$@Q zq#cQJW$y+Bcx^%i^j%cx<@CW3!N$oZWh(Zep!LZi;C+R7+dfX8PZ_b6)&xZC9c}IK z$ut7bY}1wc5J%XmY}wHO87?a90$!CJ>p9UL)xeAEV$KV(j)e9{D?>*l)Njk&{ z)A%6yfjRISGNc%S3R@jA=-#}Um9`|j7jTQzm+zO#wHID5)NQU&f>;T7EQNZu56EBhi{$j(vE1>O}L@A1%m6}`{C z0Up&+b@e+xHakb11OB|In$y>(I7>D?u7Ee$2=5l);gu#?gm)3}j-;<otzq$C;vPN`)^>qJ>iZ1`Ru%| z^xdosT;QWL@vCz=-u9dK)LtsigGoL%b;84SQ(tbYhpaHGhSL`{NTttWZ<1)Uj_5l~ z<&C%V`rCW`BYDl~U$Y~rkUEm{=Zt*tm1U(p`@28Fq!+F%T30r$XeU&aLA<=zT~gs{ z@ZL^?p73^Whb1p&;Pp3U|DpW1(@(Mf)T`>1kjvw$ozu6wc#kt{*9C|<@K=x6**@CFG4RScUfbH=GJUMoM&)%aydh7k{)KHxZN+*?nvbr};3Z#UMPFCJ zBpRvCJKR!n?Lo6VgeTwof_P5bqe6eQotO8J2XCK=HFCVJ^;2`|p-+Df|Dc`I*TnI@ zI&2fq`Q{GTWBt`RvBt_951Ygxyv~Lf#5ubOub$&c7adUyv3id8PRob-8^KSHrpjS| zE&_e)Io_`A*GLsxE&vbpS7*hQs%yLaOig9lBU1l@_!E@3AMwgmf5o*&l+$7g$7_D} zR_%QCD>f>99{QhS81F#%F=^U^$8mSiLU^{ru3@|s@NTMjAMyNc8p4~PIij3Ci1%5m zU%n9WH20;az}`7~7%v9;CSGa}Ls4*g?2FYgcW-pqOzeQpr1^xx12 z{gUc$`^q%i-<`pWz27X?!mnV26gig1znq}&=?||We!%G)6%PCheXz4~{ zNVE#!8Z+0YDgJb_1^a^x#-D=2VEyzn+$?V0^I&Mgfhj@cu+@b8cza7XfcN#Fyyj7E zlRtz^Iyr{v%yE0$*vcWidHSZx6L@%s4c5=Rl`27e z#4Etd8OD3!55P-psQTnUi!{4!FZNT2S7q=*j)r^o57YPX#t%-yGwHrfGod0il0A)e zVR6+zDF1mBb59HE%v(YA_xIi9;H{>La$bK1#XB(weLvG4uP!%OPSEGmZb|0|U66-1 zATH#D{73t%Q2T~6>))19Y&xxfYk^GMqSP%>c{~#Jmks(b)^B-57c~cC+Fe+8)Rin} zFLQb5qCtC;M;UQ*8OeXnE(QL@CulDTuj91sQLJ07W9hR#fWJ0FAN$J8?GY{x=hsxL zE7*pll|2eOY8>|VA$d)@s||Pf6~XAO?Qe|X82c#pl-p?km%Gn=eHd@yl^=0=H-l%? zJg(lzo=iH}9jb-nW#oI05`V0jFqFbQEf(EkAC6u2?jjHH8iaGxzl1$DLtpDVOHRV` z%NaZc`yf;UZ_aRg9Dj_)8`kA)Z?tF^Mqn=q+mDtIUXw6>*FT5r@3Zg6orGrw-VJO; z(#aMM;$`#&k8+&T=W-H#!eT$!UmX8)`q=*#yr)oq*ZzP$pVHgZfbtrhqjuI?*v&3Z z-?0)ewXZOB+8oqhnYd|=hpqcr1@<@di5ISIVk-7H{ohkw2fO75^tqJd%c#G2oFfmG z)e0VJ51*r_$c^@B7AC#>H<9#(-76ZEPsVOXd$`1Ej~g+0W%6%$d(>cGlp5Z?ygjhC z`REc_-xGG`V2=xRj*S$-i|*-g{Xhe}#6>R*E@7d)&gF zPF6!-rS(j6GWsCm9lyVZbRw5R@dva4|vb-y^Z71dNr6Kgp05qqBVIj%G(UQYlg-z`?jJT@}y^Keyp`dB=aulix>E6 zv0hjB#jhXdt5M3}NTl(D%Pgx}k4<06fnie+jcKYc7GlP*j;6udk72 znmOJ;P7pS`a>4iOGid)I5gHV`_2sEtUp3*5WRc%~s_m0M$3CTMG7I~CJp}qzWa{OsM%W`-HlOV6?rGfz47#Lb6zZ~X8s=Be=k>@#{1iS{aW2*mJ`Q`yCu#@q zc4f*7+w0zWO(^dx6*-fP+P=vi(v>RuI?HrP#IwHm&rMlF{OUT*72N*fLV3HfSJ_1P z$sR^L(x>XTz}u3spJLn|dA|+%;L@oSAA7tYgyRiU2f7=zDa6}ex#AZ*ewX7`TZq@nU2PZ$ty`vvR~c)t$T)Ae9|cP8G}i2Vn4+WZUNzC>R?;$u&vc?gC#+HbCFIQ}%GNIi|fGgV=4D4PfH|yajw;vFmjJUG#*hgUic&pXR*cT_opBe}EH|s?F=@EtaLBO65 zJc^G!d4C_P>qPu1#mAa3eknfoCG~39C{M)4=G;v7mw@9S@H#H1c(X|LsAMztuS0xn zk#|`BtMIsaye-j3@w?@)7t?-Z0mMIl3H!@Xe5`@f=W;}V*M5@^c>d}!z>5QK>p0&q zUb)*lj3)u_RL9$10sC`t>I=LhU^V*RP&^kC`Zl}?`)SQoO<~9$uBY+QF%^5tT8}O> zDt|9)%KH9&C2z&HHd&03R*NqW_!QgN!S)0*0Xk89;>;vB8>IjiX5A_MY+>#ulZcH`wRO?YY^kvsl+VP#|5#zwnaSl%0A_#nXPuc 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

xK3JG?biAyz;C_ro}PYhwek@MDhpm@07YA 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 z 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

CeKwA16rz3 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 < clip.x0 ? 1 : 0) | + (v->x > clip.x1 ? 2 : 0) | + (v->y < clip.y0 ? 4 : 0) | + (v->y > clip.y1 ? 8 : 0); +} + +void drawTest() { + static Rect testClip = { 0, 0, FRAME_WIDTH, FRAME_HEIGHT }; + static int32 testTile = 707; // 712 + + int dx = 0; + int dy = 0; + + if (GetAsyncKeyState(VK_LEFT)) dx--; + if (GetAsyncKeyState(VK_RIGHT)) dx++; + if (GetAsyncKeyState(VK_UP)) dy--; + if (GetAsyncKeyState(VK_DOWN)) dy++; + + if (GetAsyncKeyState('T')) { + testClip.x0 += dx; + testClip.y0 += dy; + } + + if (GetAsyncKeyState('B')) { + testClip.x1 += dx; + testClip.y1 += dy; + } + + if (GetAsyncKeyState('U')) { + testTile += dx; + if (testTile < 0) testTile = 0; + if (testTile >= texturesCount) testTile = texturesCount - 1; + } + + clip = testClip; + + gVertices[0].x = 50 + 50; + gVertices[0].y = 50; + + gVertices[1].x = FRAME_WIDTH - 50 - 50; + gVertices[1].y = 50; + + gVertices[2].x = FRAME_WIDTH - 50; + gVertices[2].y = FRAME_HEIGHT - 50; + + gVertices[3].x = 50; + gVertices[3].y = FRAME_HEIGHT - 50; + + for (int i = 0; i < 4; i++) { + gVertices[i].z = 100; + gVertices[i].g = 128; + gVertices[i].clip = classify(gVertices + i); + } + gVerticesCount = 4; + + Index indices[] = { 0, 1, 2, 3, 0, 2, 3 }; + + faceAddQuad(testTile, indices, 0); + + for (int y = 0; y < FRAME_HEIGHT; y++) { + for (int x = 0; x < FRAME_WIDTH; x++) { + if (x == clip.x0 || x == clip.x1 - 1 || y == clip.y0 || y == clip.y1 - 1) + fb[y * FRAME_WIDTH + x] = 255; + } + } + + flush(); + + Sleep(16); +} +#endif + void render() { clear(); drawRooms(); + //drawTest(); drawNumber(fps, FRAME_WIDTH, 16); } @@ -112,7 +189,7 @@ void vblank() { int main(void) { #ifdef _WIN32 { - FILE *f = fopen("C:/Projects/TR/TR1_ANDROID/LEVEL1.PHD", "rb"); + FILE *f = fopen("data/LEVEL1.PHD", "rb"); fseek(f, 0, SEEK_END); int32 size = ftell(f); fseek(f, 0, SEEK_SET); diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index c3d42fd..5327663 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -17,9 +17,11 @@ uint16 divTable[DIV_TABLE_SIZE]; extern uint16 palette[256]; #endif -extern uint8 lightmap[256 * 32]; -extern const uint8* tiles[15]; -extern const Texture* textures; +uint8 lightmap[256 * 32]; + +const uint8* tiles[15]; + +const Texture* textures; uint32 gVerticesCount = 0; Vertex gVertices[MAX_VERTICES]; @@ -33,7 +35,6 @@ uint16 mipMask; Rect clip; - const int16 sin_table[] = { // 1025 0x0000, 0x0019, 0x0032, 0x004B, 0x0065, 0x007E, 0x0097, 0x00B0, 0x00C9, 0x00E2, 0x00FB, 0x0114, 0x012E, 0x0147, 0x0160, 0x0179, @@ -275,8 +276,7 @@ INLINE void swap(T &a, T &b) { } INLINE bool checkBackface(const Vertex *a, const Vertex *b, const Vertex *c) { - return (b->x - a->x) * (c->y - a->y) - - (c->x - a->x) * (b->y - a->y) <= 0; + return (b->x - a->x) * (c->y - a->y) <= (c->x - a->x) * (b->y - a->y); } INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&b) { @@ -334,14 +334,25 @@ void transform(const vec3s &v, int32 vg) { res.g = vg >> 8; z >>= FOV_SHIFT; - x = (x / z) + (FRAME_WIDTH / 2); - y = (y / z) + (FRAME_HEIGHT / 2); + +#if 0 + x >>= 12; + y >>= 12; + z >>= 12; + uint32 iz = FixedInvU(z); + + x = (x * iz) >> 16; + y = (y * iz) >> 16; +#else + x = (x / z); + y = (y / z); +#endif //x = clamp(x, -0x7FFF, 0x7FFF); //y = clamp(y, -0x7FFF, 0x7FFF); - res.x = x; - res.y = y; + res.x = x + (FRAME_WIDTH / 2); + res.y = y + (FRAME_HEIGHT / 2); res.z = fogZ; res.clip = classify(&res); } @@ -416,7 +427,7 @@ struct Edge { h = v2->y - v1->y; x = v1->x << 16; g = v1->g << 16; - t = (v1->u << 24) | (v1->v << 8); + t = (v1->uv >> 16) | (v1->uv << 16); // TODO preprocess if (h > 1) { uint32 d = FixedInvU(h); @@ -424,10 +435,10 @@ struct Edge { dx = d * (v2->x - v1->x); dg = d * (v2->g - v1->g); - int32 du = d * (v2->u - v1->u); - int32 dv = d * (v2->v - v1->v); + int32 du = d * ((v2->uv & 0xFFFF) - (v1->uv & 0xFFFF)); + int32 dv = d * ((v2->uv >> 16) - (v1->uv >> 16)); - dt = ((du << 8) & 0xFFFF0000) | int16(dv >> 8); + dt = (du & 0xFFFF0000) | int16(dv >> 16); } return true; @@ -708,12 +719,9 @@ void drawTriangle(const Face* face) { palIndex = 0xFFFF; curTile = tiles[tex.tile]; if (!clipped) { - v1->u = tex.x0; - v1->v = tex.y0; - v2->u = tex.x1; - v2->v = tex.y1; - v3->u = tex.x2; - v3->v = tex.y2; + v1->uv = tex.uv0; + v2->uv = tex.uv1; + v3->uv = tex.uv2; } } @@ -779,15 +787,12 @@ void drawQuad(const Face* face) { const Texture &tex = textures[palIndex]; palIndex = 0xFFFF; curTile = tiles[tex.tile]; + if (!clipped) { - v1->u = tex.x0; - v1->v = tex.y0; - v2->u = tex.x1; - v2->v = tex.y1; - v3->u = tex.x2; - v3->v = tex.y2; - v4->u = tex.x3; - v4->v = tex.y3; + v1->uv = tex.uv0; + v2->uv = tex.uv1; + v3->uv = tex.uv2; + v4->uv = tex.uv3; } } @@ -930,7 +935,7 @@ void drawGlyph(const Sprite *sprite, int32 x, int32 y) { } void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount, int32 depth) { - #define LERP(a,b,t) (b + ((a - b) * t >> 16)) + #define LERP(a,b,t) ((b) + (((a) - (b)) * t >> 16)) #define CLIP_AXIS(X, Y, edge, output) {\ uint32 t = ((edge - b->X) << 16) / (a->X - b->X);\ @@ -938,8 +943,7 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount, int32 depth) { v->X = edge;\ v->Y = LERP(a->Y, b->Y, t);\ v->z = LERP(a->z, b->z, t);\ - v->u = LERP(a->u, b->u, t);\ - v->v = LERP(a->v, b->v, t);\ + v->uv = (LERP(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP(a->uv >> 16, b->uv >> 16, t) << 16);\ v->g = LERP(a->g, b->g, t);\ } @@ -969,15 +973,11 @@ void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount, int32 depth) { if (!(flags & FACE_COLORED)) { const Texture &tex = textures[flags & FACE_TEXTURE]; curTile = tiles[tex.tile]; - poly[0]->u = tex.x0; - poly[0]->v = tex.y0; - poly[1]->u = tex.x1; - poly[1]->v = tex.y1; - poly[2]->u = tex.x2; - poly[2]->v = tex.y2; + poly[0]->uv = tex.uv0; + poly[1]->uv = tex.uv1; + poly[2]->uv = tex.uv2; if (pCount == 4) { - poly[3]->u = tex.x3; - poly[3]->v = tex.y3; + poly[3]->uv = tex.uv3; } } @@ -1103,7 +1103,9 @@ void faceSort(Face** faces, int32 L, int32 R) { if (R > i) faceSort(faces, i, R); } -//int32 gFacesCountMax, gVerticesCountMax; +#ifdef DEBUG_FACES + int32 gFacesCountMax, gVerticesCountMax; +#endif void flush() { if (gFacesCount) { @@ -1129,17 +1131,20 @@ void flush() { } } - //if (gFacesCount > gFacesCountMax) gFacesCountMax = gFacesCount; - //if (gVerticesCount > gVerticesCountMax) gVerticesCountMax = gVerticesCount; - //printf("%d %d\n", gFacesCountMax, gVerticesCountMax); +#ifdef DEBUG_FACES + if (gFacesCount > gFacesCountMax) gFacesCountMax = gFacesCount; + if (gVerticesCount > gVerticesCountMax) gVerticesCountMax = gVerticesCount; + printf("%d %d\n", gFacesCountMax, gVerticesCountMax); +#endif gVerticesCount = 0; gFacesCount = 0; } void initRender() { - divTable[0] = 0; - for (uint32 i = 1; i < DIV_TABLE_SIZE; i++) { + divTable[0] = 0xFFFF; + divTable[1] = 0xFFFF; + for (uint32 i = 2; i < DIV_TABLE_SIZE; i++) { divTable[i] = (1 << 16) / i; } } From 13b6163efcbea2000e2e4407e8c1dc7f36655707 Mon Sep 17 00:00:00 2001 From: Wyatt Phillips Date: Fri, 11 Sep 2020 16:01:05 -0400 Subject: [PATCH 12/58] Increase shotgun damage (#270) the main problem is the bullet trace code, it differs from the original, but your commit will compensate it --- src/lara.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lara.h b/src/lara.h index 4df8196..6b9204c 100644 --- a/src/lara.h +++ b/src/lara.h @@ -826,7 +826,7 @@ struct Lara : Character { float wpnGetDamage() { switch (wpnCurrent) { case TR::Entity::PISTOLS : return 1; - case TR::Entity::SHOTGUN : return 1; + case TR::Entity::SHOTGUN : return 3; case TR::Entity::MAGNUMS : return 2; case TR::Entity::UZIS : return 1; default : ; From c38b487150bfa74273c46c120510684e9be7594f Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sun, 13 Sep 2020 05:11:29 +0300 Subject: [PATCH 13/58] fix TR4 skybox --- src/format.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/format.h b/src/format.h index 0510f24..983179b 100644 --- a/src/format.h +++ b/src/format.h @@ -1313,7 +1313,7 @@ E( ANIMATING15_MIP ) \ E( ANIMATING16 ) \ E( ANIMATING16_MIP ) \ - E( HORIZON ) \ + E( ___SKY ) \ E( SKY_GRAPHICS ) \ E( BINOCULAR_GRAPHICS ) \ E( TARGET_GRAPHICS ) \ @@ -2399,6 +2399,7 @@ namespace TR { REMAP_4( AI_MODIFY ); REMAP_4( AI_FOLLOW ); REMAP_4( KILL_ALL_TRIGGERS ); + REMAP_4( SKY ); //REMAP_4( GLYPHS ); REMAP_4( MISC_SPRITES ); From 5d8348352587debcff09711317a5f3e3aa5c3295 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Tue, 15 Sep 2020 02:32:02 +0300 Subject: [PATCH 14/58] GBA mode5 by default, move mode5 palette to IWRAM, remove uv from transformed vertices buffer, increase limit of faces and vertices per room --- src/platform/gba/common.h | 17 +- src/platform/gba/level.h | 2 +- src/platform/gba/render.iwram.cpp | 449 ++++++++++++++---------------- 3 files changed, 220 insertions(+), 248 deletions(-) diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 2e0bd81..4821331 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -22,7 +22,7 @@ #include #include -//#define USE_MODE_5 +#define USE_MODE_5 //#define DEBUG_OVERDRAW //#define DEBUG_FACES @@ -37,8 +37,8 @@ #else // MODE_4 #define WIDTH 240 #define HEIGHT 160 - #define FRAME_WIDTH (240/SCALE) - #define FRAME_HEIGHT (160/SCALE) + #define FRAME_WIDTH (WIDTH/SCALE) + #define FRAME_HEIGHT (HEIGHT/SCALE) #define PIXEL_SIZE 2 #endif @@ -254,6 +254,10 @@ struct Rect { struct Vertex { int16 x, y, z; uint8 g, clip; +}; + +struct VertexUV { + Vertex v; uint32 uv; }; @@ -270,8 +274,8 @@ struct Face { #define MAX_MATRICES 8 #define MAX_MODELS 64 #define MAX_ENTITY 190 -#define MAX_VERTICES 850 -#define MAX_FACES 220 +#define MAX_VERTICES 1024 +#define MAX_FACES 512 #define FOG_SHIFT 2 #define FOG_MAX (10 * 1024) #define FOG_MIN (FOG_MAX - (8192 >> FOG_SHIFT)) @@ -280,7 +284,8 @@ struct Face { #define FACE_TRIANGLE 0x8000 #define FACE_COLORED 0x4000 -#define FACE_TEXTURE 0x3FFF +#define FACE_CLIPPED 0x2000 +#define FACE_TEXTURE 0x1FFF #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h index 6ef0a92..433833f 100644 --- a/src/platform/gba/level.h +++ b/src/platform/gba/level.h @@ -9,7 +9,7 @@ uint32 tilesCount; extern const uint8* tiles[15]; #if defined(USE_MODE_5) || defined(_WIN32) - ALIGN4 uint16 palette[256]; + extern uint16 palette[256]; #endif extern uint8 lightmap[256 * 32]; diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 5327663..e74eb5e 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -14,7 +14,7 @@ uint16 divTable[DIV_TABLE_SIZE]; #define FixedInvU(x) divTable[x] #if defined(USE_MODE_5) || defined(_WIN32) - extern uint16 palette[256]; + uint16 palette[256]; #endif uint8 lightmap[256 * 32]; @@ -279,18 +279,10 @@ INLINE bool checkBackface(const Vertex *a, const Vertex *b, const Vertex *c) { return (b->x - a->x) * (c->y - a->y) <= (c->x - a->x) * (b->y - a->y); } -INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&b) { - if (t->y > m->y) swap(t, m); - if (t->y > b->y) swap(t, b); - if (m->y > b->y) swap(m, b); -} - -INLINE void sortVertices(Vertex *&t, Vertex *&m, Vertex *&o, Vertex *&b) { - if (t->y > m->y) swap(t, m); - if (o->y > b->y) swap(o, b); - if (t->y > o->y) swap(t, o); - if (m->y > b->y) swap(m, b); - if (m->y > o->y) swap(m, o); +INLINE void sortVertices(VertexUV *&t, VertexUV *&m, VertexUV *&b) { + if (t->v.y > m->v.y) swap(t, m); + if (t->v.y > b->v.y) swap(t, b); + if (m->v.y > b->v.y) swap(m, b); } INLINE int32 classify(const Vertex* v) { @@ -357,6 +349,57 @@ void transform(const vec3s &v, int32 vg) { res.clip = classify(&res); } +int32 clipPoly(int32 pCount, VertexUV* poly) { + #define LERP(a,b,t) ((b) + (((a) - (b)) * t >> 16)) + + #define CLIP_AXIS(X, Y, edge, output) {\ + uint32 t = ((edge - b->v.X) << 16) / (a->v.X - b->v.X);\ + VertexUV* v = output + count++;\ + v->v.X = edge;\ + v->v.Y = LERP(a->v.Y, b->v.Y, t);\ + v->v.z = LERP(a->v.z, b->v.z, t);\ + v->v.g = LERP(a->v.g, b->v.g, t);\ + v->uv = (LERP(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP(a->uv >> 16, b->uv >> 16, t) << 16);\ + } + + #define CLIP_VERTEX(X, Y, X0, X1, input, output) {\ + const VertexUV *a, *b = input + pCount - 1;\ + for (int32 i = 0; i < pCount; i++) {\ + a = b;\ + b = input + i;\ + if (a->v.X < X0) {\ + if (b->v.X < X0) continue;\ + CLIP_AXIS(X, Y, X0, output);\ + } else if (a->v.X > X1) {\ + if (b->v.X > X1) continue;\ + CLIP_AXIS(X, Y, X1, output);\ + }\ + if (b->v.X < X0) {\ + CLIP_AXIS(X, Y, X0, output);\ + } else if (b->v.X > X1) {\ + CLIP_AXIS(X, Y, X1, output);\ + } else {\ + output[count++] = *b;\ + }\ + }\ + if (count < 3) return 0;\ + } + + VertexUV tmp[8]; + int32 count = 0; + +// clip x + CLIP_VERTEX(x, y, clip.x0, clip.x1, poly, tmp); + + pCount = count; + count = 0; + +// clip y + CLIP_VERTEX(y, x, clip.y0, clip.y1, tmp, poly); + + return count; +} + #ifdef DEBUG_OVERDRAW #define FETCH_GT() 32 #define FETCH_G(palIndex) 32 @@ -378,8 +421,8 @@ struct Edge { int32 dg; uint32 dt; - int32 index; - Vertex* vert[8]; + int32 index; + VertexUV* vert[8]; Edge() : h(0), dx(0), dg(0), dt(0) {} @@ -399,18 +442,18 @@ struct Edge { return false; } - Vertex* v1 = vert[index--]; - Vertex* v2 = vert[index]; + VertexUV* v1 = vert[index--]; + VertexUV* v2 = vert[index]; - h = v2->y - v1->y; - x = v1->x << 16; - g = v1->g << 16; + h = v2->v.y - v1->v.y; + x = v1->v.x << 16; + g = v1->v.g << 16; if (h > 1) { uint32 d = FixedInvU(h); - dx = d * (v2->x - v1->x); - dg = d * (v2->g - v1->g); + dx = d * (v2->v.x - v1->v.x); + dg = d * (v2->v.g - v1->v.g); } return true; @@ -421,19 +464,19 @@ struct Edge { return false; } - Vertex* v1 = vert[index--]; - Vertex* v2 = vert[index]; + VertexUV* v1 = vert[index--]; + VertexUV* v2 = vert[index]; - h = v2->y - v1->y; - x = v1->x << 16; - g = v1->g << 16; + h = v2->v.y - v1->v.y; + x = v1->v.x << 16; + g = v1->v.g << 16; t = (v1->uv >> 16) | (v1->uv << 16); // TODO preprocess if (h > 1) { uint32 d = FixedInvU(h); - dx = d * (v2->x - v1->x); - dg = d * (v2->g - v1->g); + dx = d * (v2->v.x - v1->v.x); + dg = d * (v2->v.g - v1->v.g); int32 du = d * ((v2->uv & 0xFFFF) - (v1->uv & 0xFFFF)); int32 dv = d * ((v2->uv >> 16) - (v1->uv >> 16)); @@ -444,15 +487,15 @@ struct Edge { return true; } - void build(int32 start, int32 count, int32 t, int32 b, int32 incr) { - vert[index = 0] = gVertices + start + b; + void build(VertexUV *vertices, int32 count, int32 t, int32 b, int32 incr) { + vert[index = 0] = vertices + b; for (int i = 1; i < count; i++) { b = (b + incr) % count; - Vertex* v = gVertices + start + b; + VertexUV* v = vertices + b; - if (vert[index]->x != v->x || vert[index]->y != v->y) { + if (vert[index]->v.x != v->v.x || vert[index]->v.y != v->v.y) { vert[++index] = v; } @@ -529,15 +572,40 @@ INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, int32 dgdx, uint32 dtdx) { #ifdef USE_MODE_5 uint16* pixel = buffer + x1; - int32 width = (x2 - x1); - while (width--) - { + if (x1 & 1) { *pixel++ = FETCH_GT_PAL(); t += dtdx; g += dgdx; + x1++; + + if (x1 >= x2) { + return; + } } + + int32 width = (x2 - x1); + int32 width2 = width >> 1; + + dgdx <<= 1; + + while (width2--) { + uint32 p = FETCH_GT_PAL(); + t += dtdx; + p |= FETCH_GT_PAL() << 16; + t += dtdx; + g += dgdx; + + *(uint32*)pixel = p; + pixel += 2; + } + + if (x2 & 1) { + *pixel++ = FETCH_GT_PAL(); + } + #else + if (x1 & 1) { uint16 &p = *(uint16*)((uint8*)buffer + x1 - 1); @@ -697,39 +765,16 @@ void rasterizeGT(int16 y, Edge &L, Edge &R) } } -void drawTriangle(const Face* face) { - Vertex *v1, *v2, *v3; - - bool clipped = face->indices[0] == face->indices[1]; - - if (clipped) { - v1 = gVertices + face->start; - v2 = v1 + 1; - v3 = v1 + 2; - } else { - v1 = gVertices + face->start; - v2 = v1 + face->indices[1]; - v3 = v1 + face->indices[2]; - } - - uint16 palIndex = face->flags & FACE_TEXTURE; - - if (!(face->flags & FACE_COLORED)) { - const Texture &tex = textures[palIndex]; - palIndex = 0xFFFF; - curTile = tiles[tex.tile]; - if (!clipped) { - v1->uv = tex.uv0; - v2->uv = tex.uv1; - v3->uv = tex.uv2; - } - } +void drawTriangle(const Face* face, VertexUV *v) { + VertexUV *v1 = v + 0, + *v2 = v + 1, + *v3 = v + 2; sortVertices(v1, v2, v3); - int32 temp = (v2->y - v1->y) * FixedInvU(v3->y - v1->y); + int32 temp = (v2->v.y - v1->v.y) * FixedInvU(v3->v.y - v1->v.y); - int32 longest = ((temp * (v3->x - v1->x)) >> 16) + (v1->x - v2->x); + int32 longest = ((temp * (v3->v.x - v1->v.x)) >> 16) + (v1->v.x - v2->v.x); if (longest == 0) { return; @@ -758,60 +803,35 @@ void drawTriangle(const Face* face) { R.index = 1; } - if (palIndex != 0xFFFF) { - rasterizeG(v1->y, palIndex, L, R); + if (face->flags & FACE_COLORED) { + rasterizeG(v1->v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v1->y, L, R); + rasterizeGT(v1->v.y, L, R); } } -void drawQuad(const Face* face) { - Vertex *v1, *v2, *v3, *v4; - bool clipped = face->indices[0] == face->indices[1]; - - if (clipped) { - v1 = gVertices + face->start; - v2 = v1 + 1; - v3 = v1 + 2; - v4 = v1 + 3; - } else { - v1 = gVertices + face->start; - v2 = v1 + face->indices[1]; - v3 = v1 + face->indices[2]; - v4 = v1 + face->indices[3]; - } - - uint16 palIndex = face->flags & FACE_TEXTURE; - - if (!(face->flags & FACE_COLORED)) { - const Texture &tex = textures[palIndex]; - palIndex = 0xFFFF; - curTile = tiles[tex.tile]; - - if (!clipped) { - v1->uv = tex.uv0; - v2->uv = tex.uv1; - v3->uv = tex.uv2; - v4->uv = tex.uv3; - } - } +void drawQuad(const Face* face, VertexUV *v) { + VertexUV *v1 = v + 0, + *v2 = v + 1, + *v3 = v + 2, + *v4 = v + 3; int32 minY = 0x7FFF; int32 maxY = -0x7FFF; int32 t = 0, b = 0; - Vertex* poly[8] = { v1, v2, v3, v4, v1, v2, v3, v4 }; + VertexUV* poly[8] = { v1, v2, v3, v4, v1, v2, v3, v4 }; for (int i = 0; i < 4; i++) { - Vertex *v = poly[i]; + VertexUV *v = poly[i]; - if (v->y < minY) { - minY = v->y; + if (v->v.y < minY) { + minY = v->v.y; t = i; } - if (v->y > maxY) { - maxY = v->y; + if (v->v.y > maxY) { + maxY = v->v.y; b = i; } } @@ -833,54 +853,59 @@ void drawQuad(const Face* face) { R.vert[++R.index] = poly[--b]; } while (poly[b] != v1); - if (palIndex != 0xFFFF) { - rasterizeG(v1->y, palIndex, L, R); + if (face->flags & FACE_COLORED) { + rasterizeG(v1->v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v1->y, L, R); + rasterizeGT(v1->v.y, L, R); } } -void drawPoly(const Face* face) { - uint16 palIndex = face->flags & FACE_TEXTURE; - - if (!(face->flags & FACE_COLORED)) { - const Texture &tex = textures[palIndex]; - palIndex = 0xFFFF; - curTile = tiles[tex.tile]; - } +void drawPoly(Face* face, VertexUV *v) { + int32 count = clipPoly((face->flags & FACE_TRIANGLE) ? 3 : 4, v); - int32 start = face->start; - int32 count = face->indices[0]; + if (count < 3) return; + + if (count <= 4) { + face->indices[0] = 0; + face->indices[1] = 1; + face->indices[2] = 2; + face->indices[3] = 3; + + if (count == 3) { + drawTriangle(face, v); + } else { + drawQuad(face, v); + } + return; + } int32 minY = 0x7FFF; int32 maxY = -0x7FFF; - int32 t = start, b = start; + int32 t = 0, b = 0; for (int i = 0; i < count; i++) { - Vertex *v = gVertices + start + i; + VertexUV *p = v + i; - if (v->y < minY) { - minY = v->y; + if (p->v.y < minY) { + minY = p->v.y; t = i; } - if (v->y > maxY) { - maxY = v->y; + if (p->v.y > maxY) { + maxY = p->v.y; b = i; } } Edge L, R; - L.build(start, count, t, b, count + 1); - R.build(start, count, t, b, count - 1); + L.build(v, count, t, b, count + 1); + R.build(v, count, t, b, count - 1); - Vertex *v1 = gVertices + start + t; - - if (palIndex != 0xFFFF) { - rasterizeG(v1->y, palIndex, L, R); + if (face->flags & FACE_COLORED) { + rasterizeG(v[t].v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v1->y, L, R); + rasterizeGT(v[t].v.y, L, R); } } @@ -934,83 +959,6 @@ void drawGlyph(const Sprite *sprite, int32 x, int32 y) { } } -void faceAddPolyClip(uint16 flags, Vertex** poly, int32 pCount, int32 depth) { - #define LERP(a,b,t) ((b) + (((a) - (b)) * t >> 16)) - - #define CLIP_AXIS(X, Y, edge, output) {\ - uint32 t = ((edge - b->X) << 16) / (a->X - b->X);\ - Vertex* v = output + count++;\ - v->X = edge;\ - v->Y = LERP(a->Y, b->Y, t);\ - v->z = LERP(a->z, b->z, t);\ - v->uv = (LERP(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP(a->uv >> 16, b->uv >> 16, t) << 16);\ - v->g = LERP(a->g, b->g, t);\ - } - - #define CLIP_VERTEX(X, Y, X0, X1, input, output) {\ - const Vertex *a, *b = input[pCount - 1];\ - for (int32 i = 0; i < pCount; i++) {\ - a = b;\ - b = input[i];\ - if (a->X < X0) {\ - if (b->X < X0) continue;\ - CLIP_AXIS(X, Y, X0, output);\ - } else if (a->X > X1) {\ - if (b->X > X1) continue;\ - CLIP_AXIS(X, Y, X1, output);\ - }\ - if (b->X < X0) {\ - CLIP_AXIS(X, Y, X0, output);\ - } else if (b->X > X1) {\ - CLIP_AXIS(X, Y, X1, output);\ - } else {\ - output[count++] = *b;\ - }\ - }\ - if (count < 3) return;\ - } - - if (!(flags & FACE_COLORED)) { - const Texture &tex = textures[flags & FACE_TEXTURE]; - curTile = tiles[tex.tile]; - poly[0]->uv = tex.uv0; - poly[1]->uv = tex.uv1; - poly[2]->uv = tex.uv2; - if (pCount == 4) { - poly[3]->uv = tex.uv3; - } - } - - Vertex tmp[8]; - int32 count = 0; - -// clip x - CLIP_VERTEX(x, y, clip.x0, clip.x1, poly, tmp); - - pCount = count; - count = 0; - - Vertex* output = gVertices + gVerticesCount; - -// clip y - CLIP_VERTEX(y, x, clip.y0, clip.y1, &tmp, output); - - Face *f = gFaces + gFacesCount; - gFacesSorted[gFacesCount++] = f; - - if (count == 3) { - flags |= FACE_TRIANGLE; - } - - f->flags = flags; - f->depth = depth; - f->start = gVerticesCount; - f->indices[0] = count; - f->indices[1] = count; - - gVerticesCount += count; -} - void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { #ifdef _WIN32 if (gFacesCount >= MAX_FACES) { @@ -1034,19 +982,18 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { int32 depth = (v1->z + v2->z + v3->z + v4->z) >> 2; if (v1->clip | v2->clip | v3->clip | v4->clip) { - Vertex* poly[4] = { v1, v2, v3, v4 }; - faceAddPolyClip(flags, poly, 4, depth); - } else { - Face *f = gFaces + gFacesCount; - gFacesSorted[gFacesCount++] = f; - f->flags = flags; - f->depth = depth; - f->start = startVertex + indices[0]; - f->indices[0] = 0; - f->indices[1] = indices[1] - indices[0]; - f->indices[2] = indices[2] - indices[0]; - f->indices[3] = indices[3] - indices[0]; + flags |= FACE_CLIPPED; } + + Face *f = gFaces + gFacesCount; + gFacesSorted[gFacesCount++] = f; + f->flags = flags; + f->depth = depth; + f->start = startVertex + indices[0]; + f->indices[0] = 0; + f->indices[1] = indices[1] - indices[0]; + f->indices[2] = indices[2] - indices[0]; + f->indices[3] = indices[3] - indices[0]; } void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { @@ -1071,18 +1018,17 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { int32 depth = (v1->z + v2->z + v3->z) / 3; if (v1->clip | v2->clip | v3->clip) { - Vertex* poly[3] = { v1, v2, v3 }; - faceAddPolyClip(flags, poly, 3, depth); - } else { - Face *f = gFaces + gFacesCount; - gFacesSorted[gFacesCount++] = f; - f->flags = flags | FACE_TRIANGLE; - f->depth = depth; - f->start = startVertex + indices[0]; - f->indices[0] = 0; - f->indices[1] = indices[1] - indices[0]; - f->indices[2] = indices[2] - indices[0]; + flags |= FACE_CLIPPED; } + + Face *f = gFaces + gFacesCount; + gFacesSorted[gFacesCount++] = f; + f->flags = flags | FACE_TRIANGLE; + f->depth = depth; + f->start = startVertex + indices[0]; + f->indices[0] = 0; + f->indices[1] = indices[1] - indices[0]; + f->indices[2] = indices[2] - indices[0]; } void faceSort(Face** faces, int32 L, int32 R) { @@ -1114,20 +1060,41 @@ void flush() { //const uint16 mips[] = { 0xFFFF, 0xFEFE, 0xFCFC, 0xF8F8 }; for (int32 i = 0; i < gFacesCount; i++) { - const Face *f = gFacesSorted[i]; + Face *face = gFacesSorted[i]; // TODO //mipMask = mips[MIN(3, f.depth / 2048)]; - if (f->flags & FACE_TRIANGLE) { - drawTriangle(f); - } else { - if (f->indices[0] == f->indices[1] && f->indices[0] > 4) { - drawPoly(f); - } else { - drawQuad(f); - } + VertexUV v[8]; + + uint32 flags = face->flags; + + if (!(flags & FACE_COLORED)) { + const Texture &tex = textures[face->flags & FACE_TEXTURE]; + curTile = tiles[tex.tile]; + v[0].uv = tex.uv0; + v[1].uv = tex.uv1; + v[2].uv = tex.uv2; + v[3].uv = tex.uv3; } + + Vertex *p = gVertices + face->start; + v[0].v = p[0]; + v[1].v = p[face->indices[1]]; + v[2].v = p[face->indices[2]]; + if (!(flags & FACE_TRIANGLE)) { + v[3].v = p[face->indices[3]]; + } + + if (flags & FACE_CLIPPED) { + drawPoly(face, v); + } else { + if (flags & FACE_TRIANGLE) { + drawTriangle(face, v); + } else { + drawQuad(face, v); + } + }; } } @@ -1162,8 +1129,8 @@ void dmaClear(uint32 *dst, uint32 count) { void clear() { #ifdef USE_MODE_5 - dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> 1); + dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> PIXEL_SIZE); #else - dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> 2); + dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> PIXEL_SIZE); #endif } \ No newline at end of file From d8bd4b519444eefdb5248b63cdb21dbc781aea57 Mon Sep 17 00:00:00 2001 From: SaracenOne Date: Mon, 21 Sep 2020 00:46:12 +0100 Subject: [PATCH 15/58] Fix human enemy centre to head length value (should be 0) (#271) --- src/enemy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enemy.h b/src/enemy.h index 09cc7f4..82b6303 100644 --- a/src/enemy.h +++ b/src/enemy.h @@ -2550,7 +2550,7 @@ struct Human : Enemy { int jointGun; int animDeath; - Human(IGame *game, int entity, float health) : Enemy(game, entity, health, 100, 375.0f, 1.0f), animDeath(-1) { + Human(IGame *game, int entity, float health) : Enemy(game, entity, health, 100, 0.0f, 1.0f), animDeath(-1) { jointGun = 0; jointChest = 7; jointHead = 8; From bda1f95a14860f8b322544ca58bcd419e90e04c0 Mon Sep 17 00:00:00 2001 From: SaracenOne Date: Mon, 21 Sep 2020 00:46:43 +0100 Subject: [PATCH 16/58] Implements full IsStalkBox method with quadrant calculations so enemies can utilise stalking behaviour. (#272) --- src/collision.h | 2 +- src/controller.h | 2 +- src/enemy.h | 9 ++++++++- src/lara.h | 6 +++--- src/utils.h | 4 ++-- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/collision.h b/src/collision.h index 336d345..0029c6e 100644 --- a/src/collision.h +++ b/src/collision.h @@ -22,7 +22,7 @@ struct Collision { angle = normalizeAngle(PI2 + vec2(velocity.z, velocity.x).angle()); pos += velocity; - int q = angleQuadrant(angle); + int q = angleQuadrant(angle, 0.25f); const vec2 v[] = { vec2( -radius, radius ), diff --git a/src/controller.h b/src/controller.h index 7b134de..4006a3f 100644 --- a/src/controller.h +++ b/src/controller.h @@ -790,7 +790,7 @@ struct Controller { } bool alignToWall(float offset = 0.0f, int quadrant = -1, int maxDist = 0, int maxWidth = 0) { - int q = angleQuadrant(angle.y); + int q = angleQuadrant(angle.y, 0.25f); int ix = int(pos.x); int iz = int(pos.z); int x = ix & ~1023; diff --git a/src/enemy.h b/src/enemy.h index 82b6303..edc9c02 100644 --- a/src/enemy.h +++ b/src/enemy.h @@ -472,7 +472,14 @@ struct Enemy : Character { int z = (b.minZ + b.maxZ) / 2 - int(target->pos.z); if (abs(z) > STALK_BOX) return false; - // TODO: check for some quadrant shit + int target_quadrant = angleQuadrant(target->angle.y, 0.0); + int box_quadrant = z > 0 ? (x > 0 ? 2 : 1) : (x > 0 ? 3 : 0); + + if (target_quadrant == box_quadrant) return false; + + int controller_quadrant = pos.z > target->pos.z ? (pos.x > target->pos.x ? 2 : 1) : (pos.x > target->pos.x ? 3 : 0); + + if (target_quadrant == controller_quadrant && abs(target_quadrant - box_quadrant) == 2) return false; return true; } diff --git a/src/lara.h b/src/lara.h index 6b9204c..d54f9a6 100644 --- a/src/lara.h +++ b/src/lara.h @@ -2510,7 +2510,7 @@ struct Lara : Character { Block *block = (Block*)e.controller; float oldAngle = block->angle.y; - block->angle.y = angleQuadrant(angle.y) * (PI * 0.5f); + block->angle.y = angleQuadrant(angle.y, 0.25f) * (PI * 0.5f); if (!checkInteraction(block, &TR::Limits::BLOCK, (input & ACTION) != 0)) { block->angle.y = oldAngle; @@ -3609,7 +3609,7 @@ struct Lara : Character { } if (level->version & TR::VER_TR1) // TODO: check hit animation indices for TR2 and TR3 - hitDir = angleQuadrant(dir.rotateY(angle.y + PI * 0.5f).angleY()); + hitDir = angleQuadrant(dir.rotateY(angle.y + PI * 0.5f).angleY(), 0.25f); return true; } }; @@ -3692,7 +3692,7 @@ struct Lara : Character { if (collision.side == Collision::FRONT) { float floor = collision.info[Collision::FRONT].floor; /* - switch (angleQuadrant(angleExt - angle.y)) { + switch (angleQuadrant(angleExt - angle.y), 0.25f) { case 0 : collision.side = Collision::FRONT; LOG("FRONT\n"); break; case 1 : collision.side = Collision::RIGHT; LOG("RIGHT\n"); break; case 2 : collision.side = Collision::BACK; LOG("BACK\n"); break; diff --git a/src/utils.h b/src/utils.h index ae934ca..18afd7c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -165,8 +165,8 @@ float normalizeAngle(float angle) { return angle; } -int angleQuadrant(float angle) { - return int(normalizeAngle(angle + PI * 0.25f) / (PI * 0.5f)); +int angleQuadrant(float angle, float offset) { + return int(normalizeAngle(angle + PI * offset) / (PI * 0.5f)); } float decrease(float delta, float &value, float &speed) { From 2b29cdc79a47525c5f264cbffb5c0ce01bce4eac Mon Sep 17 00:00:00 2001 From: SaracenOne Date: Mon, 21 Sep 2020 20:11:10 +0100 Subject: [PATCH 17/58] Make it so that the function to get the scissor portal rect expands to the size of the viewport if either the width or height exceed the viewport. (#273) --- src/level.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/level.h b/src/level.h index e536820..5ee5203 100644 --- a/src/level.h +++ b/src/level.h @@ -1928,6 +1928,13 @@ struct Level : IGame { s.z -= s.x; s.w -= s.y; + // Use the viewport rect if one of the dimensions is the same size + // as the viewport. This may fix clipping bugs while still allowing + // impossible geometry tricks. + if (s.z - s.x >= vp.z - vp.x || s.w - s.y >= vp.w - vp.y) { + return vp; + } + return s; } From cf93dbf58e6d4dae1882ed42a3e7592e5acf4249 Mon Sep 17 00:00:00 2001 From: SaracenOne Date: Tue, 22 Sep 2020 21:21:08 +0100 Subject: [PATCH 18/58] Fixes a block parsing issue which can occur in certain custom levels. (#274) --- src/format.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/format.h b/src/format.h index 983179b..2f1d8e2 100644 --- a/src/format.h +++ b/src/format.h @@ -6219,19 +6219,28 @@ namespace TR { } void readAnimTex(Stream &stream) { - uint32 size; - stream.read(size); - if (size) { - stream.read(animTexturesCount); + uint32 animTexBlockSize; + stream.read(animTexBlockSize); + + if (animTexBlockSize) { + uint16 *animTexBlock = new uint16[animTexBlockSize]; + for (int i = 0; i < animTexBlockSize; i++) { + animTexBlock[i] = stream.readLE16(); + } + + uint16 *ptr = animTexBlock; + + animTexturesCount = *(ptr++); animTextures = animTexturesCount ? new AnimTexture[animTexturesCount] : NULL; for (int i = 0; i < animTexturesCount; i++) { AnimTexture &animTex = animTextures[i]; - animTex.count = stream.readLE16() + 1; + animTex.count = *(ptr++) + 1; animTex.textures = new uint16[animTex.count]; for (int j = 0; j < animTex.count; j++) - animTex.textures[j] = stream.readLE16(); + animTex.textures[j] = *(ptr++); } + delete animTexBlock; } if (version & (VER_TR4 | VER_TR5)) { From f0e905f1942fd1c66e60d3b7e3cd42e4f293d044 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 25 Sep 2020 05:32:53 +0300 Subject: [PATCH 19/58] GBA minor optims --- src/platform/gba/render.iwram.cpp | 197 +++++++++++++++++++++++------- 1 file changed, 152 insertions(+), 45 deletions(-) diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index e74eb5e..b470b94 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -1,6 +1,6 @@ #include "common.h" -#define DIV_TABLE_SIZE 512 +#define DIV_TABLE_SIZE 641 uint16 divTable[DIV_TABLE_SIZE]; @@ -27,8 +27,8 @@ uint32 gVerticesCount = 0; Vertex gVertices[MAX_VERTICES]; int32 gFacesCount = 0; +Face* gFacesSorted[MAX_FACES]; EWRAM_DATA Face gFaces[MAX_FACES]; -EWRAM_DATA Face* gFacesSorted[MAX_FACES]; const uint8* curTile; uint16 mipMask; @@ -327,12 +327,18 @@ void transform(const vec3s &v, int32 vg) { z >>= FOV_SHIFT; -#if 0 - x >>= 12; - y >>= 12; - z >>= 12; - uint32 iz = FixedInvU(z); +#if 1 + x >>= 11; + y >>= 11; + z >>= 11; + #ifdef WIN32 + if (abs(z) >= DIV_TABLE_SIZE) { + DebugBreak(); + } + #endif + + uint32 iz = FixedInvS(z); x = (x * iz) >> 16; y = (y * iz) >> 16; #else @@ -349,7 +355,30 @@ void transform(const vec3s &v, int32 vg) { res.clip = classify(&res); } -int32 clipPoly(int32 pCount, VertexUV* poly) { +#if 0 // TODO +void clipZ(int32 znear, VertexUV *output, int32 &count, const VertexUV *a, const VertexUV *b) { + #define LERP2(a,b,t) int32((b) + (((a) - (b)) * t)) + + float t = (znear - b->v.sz) / float(a->v.sz - b->v.sz); + VertexUV* v = output + count++; +/* + int32 ax = (a->v.x - (FRAME_WIDTH / 2)) * a->v.z; + int32 ay = (a->v.y - (FRAME_HEIGHT / 2)) * a->v.z; + int32 bx = (b->v.x - (FRAME_WIDTH / 2)) * b->v.z; + int32 by = (b->v.y - (FRAME_HEIGHT / 2)) * b->v.z; + int32 x = LERP2(ax, bx, t); + int32 y = LERP2(ay, by, t); +*/ + int32 x = LERP2(a->v.sx, b->v.sx, t); + int32 y = LERP2(a->v.sy, b->v.sy, t); + int32 z = LERP2(a->v.sz, b->v.sz, t); + v->v.x = (x / znear) + (FRAME_WIDTH / 2); + v->v.y = (y / znear) + (FRAME_HEIGHT / 2); + v->v.g = LERP2(a->v.g, b->v.g, t); + v->uv = (LERP2(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP2(a->uv >> 16, b->uv >> 16, t) << 16); +} +#endif +VertexUV* clipPoly(VertexUV* poly, VertexUV* tmp, int32 &pCount) { #define LERP(a,b,t) ((b) + (((a) - (b)) * t >> 16)) #define CLIP_AXIS(X, Y, edge, output) {\ @@ -362,7 +391,26 @@ int32 clipPoly(int32 pCount, VertexUV* poly) { v->uv = (LERP(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP(a->uv >> 16, b->uv >> 16, t) << 16);\ } - #define CLIP_VERTEX(X, Y, X0, X1, input, output) {\ +/* TODO + #define CLIP_NEAR(znear, output) {\ + //clipZ(znear, output, count, a, b);\ + uint32 t = ((znear - b->v.z) << 16) / (a->v.z - b->v.z);\ + VertexUV* v = output + count++;\ + int32 ax = (a->v.x - (FRAME_WIDTH / 2)) * a->v.z;\ + int32 ay = (a->v.y - (FRAME_HEIGHT / 2)) * a->v.z;\ + int32 bx = (b->v.x - (FRAME_WIDTH / 2)) * b->v.z;\ + int32 by = (b->v.y - (FRAME_HEIGHT / 2)) * b->v.z;\ + int32 x = LERP(ax, bx, t);\ + int32 y = LERP(ay, by, t);\ + v->v.x = (x / znear) + (FRAME_WIDTH / 2);\ + v->v.y = (y / znear) + (FRAME_HEIGHT / 2);\ + v->v.z = LERP(a->v.z, b->v.z, t);\ + v->v.g = LERP(a->v.g, b->v.g, t);\ + v->uv = (LERP(a->uv & 0xFFFF, b->uv & 0xFFFF, t)) | (LERP(a->uv >> 16, b->uv >> 16, t) << 16);\ + } +*/ + + #define CLIP_XY(X, Y, X0, X1, input, output) {\ const VertexUV *a, *b = input + pCount - 1;\ for (int32 i = 0; i < pCount; i++) {\ a = b;\ @@ -382,22 +430,59 @@ int32 clipPoly(int32 pCount, VertexUV* poly) { output[count++] = *b;\ }\ }\ - if (count < 3) return 0;\ + if (count < 3) return NULL;\ + } + + #define ZNEAR (VIEW_MIN_F << FIXED_SHIFT >> FOV_SHIFT) + + #define CLIP_Z(input, output) {\ + const VertexUV *a, *b = input + pCount - 1;\ + for (int32 i = 0; i < pCount; i++) {\ + a = b;\ + b = input + i;\ + if (a->v.z < ZNEAR) {\ + if (b->v.z < ZNEAR) continue;\ + CLIP_NEAR(ZNEAR, output);\ + }\ + if (b->v.z < ZNEAR) {\ + CLIP_NEAR(ZNEAR, output);\ + } else {\ + output[count++] = *b;\ + }\ + }\ + if (count < 3) return NULL;\ } - VertexUV tmp[8]; int32 count = 0; -// clip x - CLIP_VERTEX(x, y, clip.x0, clip.x1, poly, tmp); + VertexUV *in = poly; + VertexUV *out = tmp; +/* + uint32 clipFlags = poly[0].v.clip | poly[1].v.clip | poly[2].v.clip; + if (pCount > 3) { + clipFlags |= poly[3].v.clip; + } - pCount = count; - count = 0; + if (clipFlags & 16) { + CLIP_Z(in, out); + swap(in, out); + pCount = count; + count = 0; + } +*/ + {//if (clipFlags & (1 | 2 | 4 | 8)) { + // clip x + CLIP_XY(x, y, clip.x0, clip.x1, in, out); -// clip y - CLIP_VERTEX(y, x, clip.y0, clip.y1, tmp, poly); + pCount = count; + count = 0; - return count; + // clip y + CLIP_XY(y, x, clip.y0, clip.y1, out, in); + pCount = count; + } + + return in; } #ifdef DEBUG_OVERDRAW @@ -506,15 +591,34 @@ struct Edge { } }; -INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, int32 dgdx) { +INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, uint32 dgdx) { #ifdef USE_MODE_5 uint16* pixel = buffer + x1; - int32 width = (x2 - x1); - while (width--) - { + if (x1 & 1) { *pixel++ = FETCH_G_PAL(palIndex); g += dgdx; + x1++; + + if (x1 >= x2) { + return; + } + } + + int32 width2 = (x2 - x1) >> 1; + + dgdx <<= 1; + + while (width2--) { + uint32 p = FETCH_G_PAL(palIndex); + g += dgdx; + + *(uint32*)pixel = p | (p << 16); + pixel += 2; + } + + if (x2 & 1) { + *pixel++ = FETCH_G_PAL(palIndex); } #else if (x1 & 1) @@ -569,7 +673,7 @@ INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 #endif } -INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, int32 dgdx, uint32 dtdx) { +INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, uint32 dgdx, uint32 dtdx) { #ifdef USE_MODE_5 uint16* pixel = buffer + x1; @@ -584,8 +688,7 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i } } - int32 width = (x2 - x1); - int32 width2 = width >> 1; + int32 width2 = (x2 - x1) >> 1; dgdx <<= 1; @@ -665,8 +768,7 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, i #endif } -void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) -{ +void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) { uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); while (1) @@ -698,9 +800,9 @@ void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) int32 width = x2 - x1; if (width > 0) { - int32 d = FixedInvU(width); + uint32 d = FixedInvU(width); - int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; + uint32 dgdx = d * ((R.g - L.g) >> 8) >> 16; scanlineG(buffer, x1, x2, palIndex, L.g >> 8, dgdx); } @@ -713,8 +815,7 @@ void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) } } -void rasterizeGT(int16 y, Edge &L, Edge &R) -{ +void rasterizeGT(int16 y, Edge &L, Edge &R) { uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); while (1) @@ -748,7 +849,7 @@ void rasterizeGT(int16 y, Edge &L, Edge &R) { uint32 d = FixedInvU(width); - int32 dgdx = d * ((R.g - L.g) >> 8) >> 16; + uint32 dgdx = d * ((R.g - L.g) >> 8) >> 16; uint32 u = d * ((R.t >> 16) - (L.t >> 16)); uint32 v = d * ((R.t & 0xFFFF) - (L.t & 0xFFFF)); @@ -861,9 +962,13 @@ void drawQuad(const Face* face, VertexUV *v) { } void drawPoly(Face* face, VertexUV *v) { - int32 count = clipPoly((face->flags & FACE_TRIANGLE) ? 3 : 4, v); + VertexUV tmp[16]; - if (count < 3) return; + int32 count = (face->flags & FACE_TRIANGLE) ? 3 : 4; + + v = clipPoly(v, tmp, count); + + if (!v) return; if (count <= 4) { face->indices[0] = 0; @@ -965,12 +1070,13 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { DebugBreak(); } #endif - Vertex* v1 = gVertices + startVertex + indices[0]; - Vertex* v2 = gVertices + startVertex + indices[1]; - Vertex* v3 = gVertices + startVertex + indices[2]; - Vertex* v4 = gVertices + startVertex + indices[3]; + Vertex* v = gVertices + startVertex; + Vertex* v1 = v + indices[0]; + Vertex* v2 = v + indices[1]; + Vertex* v3 = v + indices[2]; + Vertex* v4 = v + indices[3]; - if ((v1->clip | v2->clip | v3->clip | v4->clip) & 16) + if ((v1->clip | v2->clip | v3->clip | v4->clip) & 16) // TODO znear clip return; if (checkBackface(v1, v2, v3)) @@ -1002,11 +1108,12 @@ void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { DebugBreak(); } #endif - Vertex* v1 = gVertices + startVertex + indices[0]; - Vertex* v2 = gVertices + startVertex + indices[1]; - Vertex* v3 = gVertices + startVertex + indices[2]; + Vertex* v = gVertices + startVertex; + Vertex* v1 = v + indices[0]; + Vertex* v2 = v + indices[1]; + Vertex* v3 = v + indices[2]; - if ((v1->clip | v2->clip | v3->clip) & 16) + if ((v1->clip | v2->clip | v3->clip) & 16) // TODO znear clip return; if (checkBackface(v1, v2, v3)) @@ -1065,7 +1172,7 @@ void flush() { // TODO //mipMask = mips[MIN(3, f.depth / 2048)]; - VertexUV v[8]; + VertexUV v[16]; uint32 flags = face->flags; @@ -1101,7 +1208,7 @@ void flush() { #ifdef DEBUG_FACES if (gFacesCount > gFacesCountMax) gFacesCountMax = gFacesCount; if (gVerticesCount > gVerticesCountMax) gVerticesCountMax = gVerticesCount; - printf("%d %d\n", gFacesCountMax, gVerticesCountMax); + printf("f: %d v: %d\n", gFacesCountMax, gVerticesCountMax); #endif gVerticesCount = 0; From f0bc71af6df767fb113e940597afd4f0a7a1d090 Mon Sep 17 00:00:00 2001 From: XProger Date: Wed, 14 Oct 2020 06:32:13 +0400 Subject: [PATCH 20/58] XBOX port WIP --- src/controller.h | 2 +- src/core.h | 30 +- src/format.h | 12 +- src/gameflow.h | 1 + src/gapi/d3d8.h | 866 ++++++++++++++++++++++++++++++ src/inventory.h | 24 +- src/lang.h | 8 +- src/level.h | 29 +- src/libs/stb_vorbis/stb_vorbis.c | 2 +- src/mesh.h | 12 +- src/platform/xbox/OpenLara.sln | 30 ++ src/platform/xbox/OpenLara.vcproj | 473 ++++++++++++++++ src/platform/xbox/main.cpp | 336 ++++++++++++ src/platform/xbox/titleimage.xbx | Bin 0 -> 10240 bytes src/shader.h | 1 - src/shaders/ambient_room.asm | 72 +++ src/shaders/ambient_sprite.asm | 10 + src/shaders/common.asm | 73 +++ src/shaders/compile_d3d8.bat | 44 ++ src/shaders/compose_entity.asm | 93 ++++ src/shaders/compose_flash.asm | 37 ++ src/shaders/compose_mirror.asm | 40 ++ src/shaders/compose_room.asm | 72 +++ src/shaders/compose_sprite.asm | 94 ++++ src/shaders/filter.asm | 65 +++ src/shaders/gui.asm | 14 + src/shaders/shadow_entity.asm | 22 + src/sound.h | 2 +- src/utils.h | 48 +- 29 files changed, 2462 insertions(+), 50 deletions(-) create mode 100644 src/gapi/d3d8.h create mode 100644 src/platform/xbox/OpenLara.sln create mode 100644 src/platform/xbox/OpenLara.vcproj create mode 100644 src/platform/xbox/main.cpp create mode 100644 src/platform/xbox/titleimage.xbx create mode 100644 src/shaders/ambient_room.asm create mode 100644 src/shaders/ambient_sprite.asm create mode 100644 src/shaders/common.asm create mode 100644 src/shaders/compile_d3d8.bat create mode 100644 src/shaders/compose_entity.asm create mode 100644 src/shaders/compose_flash.asm create mode 100644 src/shaders/compose_mirror.asm create mode 100644 src/shaders/compose_room.asm create mode 100644 src/shaders/compose_sprite.asm create mode 100644 src/shaders/filter.asm create mode 100644 src/shaders/gui.asm create mode 100644 src/shaders/shadow_entity.asm diff --git a/src/controller.h b/src/controller.h index 4006a3f..bf1f56a 100644 --- a/src/controller.h +++ b/src/controller.h @@ -1523,7 +1523,7 @@ struct DummyController : Controller { DummyController(IGame *game, int entity) : Controller(game, entity) {} - virtual void update() override {}; + virtual void update() {} }; diff --git a/src/core.h b/src/core.h index d15f153..621e639 100644 --- a/src/core.h +++ b/src/core.h @@ -7,7 +7,6 @@ #include #include -#include #define OS_FILEIO_CACHE #define OS_PTHREAD_MT @@ -129,6 +128,15 @@ #define _GAPI_GL 1 #undef OS_PTHREAD_MT +#elif _XBOX + #define _OS_XBOX 1 + #define _GAPI_D3D8 1 + + #undef OS_PTHREAD_MT + + #define NOMINMAX + #include + #include #endif #ifndef _OS_PSP @@ -608,6 +616,7 @@ enum BlendMode { bmNone, bmAlpha, bmAdd, bmMult, bmPremult, bmMAX }; namespace Core { float eye; + float aspectFix = 1.0f; Texture *eyeTex[2]; short4 viewport, viewportDef, scissor; mat4 mModel, mView, mProj, mViewProj, mViewInv; @@ -617,7 +626,6 @@ namespace Core { vec4 lightPos[MAX_LIGHTS]; vec4 lightColor[MAX_LIGHTS]; vec4 params; - vec4 fogParams; vec4 contacts[MAX_CONTACTS]; struct LightStack { @@ -707,6 +715,8 @@ namespace Core { #include "gapi/sw.h" #elif _GAPI_GL #include "gapi/gl.h" +#elif _GAPI_D3D8 + #include "gapi/d3d8.h" #elif _GAPI_D3D9 #include "gapi/d3d9.h" #elif _GAPI_D3D11 @@ -978,6 +988,13 @@ namespace Core { settings.audio.reverb = false; #endif + #ifdef _OS_XBOX + settings.detail.setFilter (Core::Settings::HIGH); + settings.detail.setLighting (Core::Settings::LOW); + settings.detail.setShadows (Core::Settings::LOW); + settings.detail.setWater (Core::Settings::LOW); + #endif + memset(&active, 0, sizeof(active)); renderState = 0; @@ -1190,6 +1207,15 @@ namespace Core { Core::active.shader->setParam(uMaterial, Core::active.material); } + void setFog(const vec4 ¶ms) { + #ifdef _XBOX + GAPI::setFog(params); + #else + ASSERT(Core::active.shader); + Core::active.shader->setParam(uFogParams, params); + #endif + } + void updateLights() { GAPI::updateLights(lightPos, lightColor, MAX_LIGHTS); } diff --git a/src/format.h b/src/format.h index 2f1d8e2..0ac234a 100644 --- a/src/format.h +++ b/src/format.h @@ -3111,14 +3111,14 @@ namespace TR { int16 waterSplash; int16 glyphs; - struct { + struct Weapon { int16 items[MAX_WEAPONS]; int16& operator[] (Entity::Type type) { return items[getWeaponIndex(type)]; }; } weapons; - struct { + struct Inventory { int16 passport; int16 passport_closed; int16 map; @@ -3131,14 +3131,14 @@ namespace TR { int16 gamma; int16 explosive; - struct { + struct Weapon { int16 items[MAX_WEAPONS]; int16& operator[] (Entity::Type type) { return items[getWeaponIndex(type)]; }; } weapons; - struct { + struct Ammo { int16 items[MAX_WEAPONS]; int16& operator[] (Entity::Type type) { return items[getWeaponIndex(type)]; @@ -3910,7 +3910,7 @@ namespace TR { ((uint64)((const char*)(str))[4] << 32) | ((uint64)((const char*)(str))[5] << 40) | ((uint64)((const char*)(str))[6] << 48) | ((uint64)((const char*)(str))[7] << 56)) void readSAT(Stream &stream) { - #if !defined(_OS_PSP) && !defined(_OS_3DS) + #if !defined(_OS_PSP) && !defined(_OS_3DS) && !defined(_OS_XBOX) Room *room = NULL; while (stream.pos < stream.size) { @@ -6224,7 +6224,7 @@ namespace TR { if (animTexBlockSize) { uint16 *animTexBlock = new uint16[animTexBlockSize]; - for (int i = 0; i < animTexBlockSize; i++) { + for (uint32 i = 0; i < animTexBlockSize; i++) { animTexBlock[i] = stream.readLE16(); } diff --git a/src/gameflow.h b/src/gameflow.h index 630e673..4b63918 100644 --- a/src/gameflow.h +++ b/src/gameflow.h @@ -1695,6 +1695,7 @@ namespace TR { } #define FOG_DIST (1.0f / (18 * 1024)) + #define FOG_NONE vec4(0.0f, 0.0f, 0.0f, 0.0f) #define FOG_BLACK vec4(0.0f, 0.0f, 0.0f, FOG_DIST) #define FOG_SANDY vec4(0.2f, 0.1f, 0.0f, FOG_DIST) #define FOG_GREEN vec4(0.0f, 0.1f, 0.0f, FOG_DIST) diff --git a/src/gapi/d3d8.h b/src/gapi/d3d8.h new file mode 100644 index 0000000..fe01446 --- /dev/null +++ b/src/gapi/d3d8.h @@ -0,0 +1,866 @@ +#ifndef H_GAPI_D3D8 +#define H_GAPI_D3D8 + +#include "core.h" + +#define PROFILE_MARKER(title) +#define PROFILE_LABEL(id, name, label) +#define PROFILE_TIMING(time) + +extern LPDIRECT3D8 D3D; +extern LPDIRECT3DDEVICE8 device; +extern D3DPRESENT_PARAMETERS d3dpp; + +#ifdef _DEBUG +void D3DCHECK(HRESULT res) { + if (!FAILED(res)) return; + + LOG("! "); + switch (res) { + case D3DERR_WRONGTEXTUREFORMAT : LOG("D3DERR_WRONGTEXTUREFORMAT"); break; + case D3DERR_UNSUPPORTEDCOLOROPERATION : LOG("D3DERR_UNSUPPORTEDCOLOROPERATION"); break; + case D3DERR_UNSUPPORTEDCOLORARG : LOG("D3DERR_UNSUPPORTEDCOLORARG"); break; + case D3DERR_UNSUPPORTEDALPHAOPERATION : LOG("D3DERR_UNSUPPORTEDALPHAOPERATION"); break; + case D3DERR_UNSUPPORTEDALPHAARG : LOG("D3DERR_UNSUPPORTEDALPHAARG"); break; + case D3DERR_TOOMANYOPERATIONS : LOG("D3DERR_TOOMANYOPERATIONS"); break; + case D3DERR_CONFLICTINGTEXTUREFILTER : LOG("D3DERR_CONFLICTINGTEXTUREFILTER"); break; + case D3DERR_UNSUPPORTEDFACTORVALUE : LOG("D3DERR_UNSUPPORTEDFACTORVALUE"); break; + case D3DERR_CONFLICTINGRENDERSTATE : LOG("D3DERR_CONFLICTINGRENDERSTATE"); break; + case D3DERR_UNSUPPORTEDTEXTUREFILTER : LOG("D3DERR_UNSUPPORTEDTEXTUREFILTER"); break; + case D3DERR_CONFLICTINGTEXTUREPALETTE : LOG("D3DERR_CONFLICTINGTEXTUREPALETTE"); break; + case D3DERR_DRIVERINTERNALERROR : LOG("D3DERR_DRIVERINTERNALERROR"); break; + case D3DERR_NOTFOUND : LOG("D3DERR_NOTFOUND"); break; + case D3DERR_MOREDATA : LOG("D3DERR_MOREDATA"); break; + case D3DERR_DEVICELOST : LOG("D3DERR_DEVICELOST"); break; + case D3DERR_DEVICENOTRESET : LOG("D3DERR_DEVICENOTRESET"); break; + case D3DERR_NOTAVAILABLE : LOG("D3DERR_NOTAVAILABLE"); break; + case D3DERR_OUTOFVIDEOMEMORY : LOG("D3DERR_OUTOFVIDEOMEMORY"); break; + case D3DERR_INVALIDDEVICE : LOG("D3DERR_INVALIDDEVICE"); break; + case D3DERR_INVALIDCALL : LOG("D3DERR_INVALIDCALL"); break; + default : LOG("D3DERR_UNKNOWN"); break; + } + LOG("\n"); + ASSERT(false); +} +#else + #define D3DCHECK(res) res +#endif + +namespace GAPI { + using namespace Core; + + typedef ::Vertex Vertex; + + int cullMode, blendMode; + uint32 clearColor; + + LPDIRECT3DSURFACE8 defRT, defDS; + + const DWORD vertexDecl[] = + { + D3DVSD_STREAM(0), + D3DVSD_REG( aCoord, D3DVSDT_SHORT4 ), + D3DVSD_REG( aNormal, D3DVSDT_NORMSHORT4 ), + D3DVSD_REG( aTexCoord, D3DVSDT_NORMSHORT4 ), + D3DVSD_REG( aColor, D3DVSDT_PBYTE4 ), + D3DVSD_REG( aLight, D3DVSDT_PBYTE4 ), + D3DVSD_END() + }; + + struct Texture; + struct Mesh; + + struct Resource { + Texture *texture; + Mesh *mesh; + } resList[256]; + int resCount; + + void registerResource(Mesh *mesh) { + resList[resCount].mesh = mesh; + resList[resCount].texture = NULL; + resCount++; + } + + void registerResource(Texture *texture) { + resList[resCount].mesh = NULL; + resList[resCount].texture = texture; + resCount++; + } + + void unregisterResource(void *res) { + for (int i = 0; i < resCount; i++) + if (resList[i].mesh == res || resList[i].texture == res) { + resList[i] = resList[--resCount]; + break; + } + } + +// Shader + #include "shaders/d3d8/shaders.h" + + enum { + USAGE_VS, + USAGE_PS, + }; + + static const struct Binding { + int reg; + int usage; + } bindings[uMAX] = { + { 0, USAGE_VS | USAGE_PS }, // uParam + { 1, USAGE_VS | USAGE_PS }, // uTexParam + { 2, USAGE_VS | USAGE_PS }, // uViewProj + { 6, USAGE_VS | USAGE_PS }, // uBasis + { 70, USAGE_VS | USAGE_PS }, // uLightProj + { 74, USAGE_VS | USAGE_PS }, // uMaterial + { 75, USAGE_VS | USAGE_PS }, // uAmbient + { 81, USAGE_VS | USAGE_PS }, // uFogParams + { 82, USAGE_VS | USAGE_PS }, // uViewPos + { 83, USAGE_VS | USAGE_PS }, // uLightPos + { 87, USAGE_VS | USAGE_PS }, // uLightColor + { 91, USAGE_VS | USAGE_PS }, // uRoomSize + { 92, USAGE_VS | USAGE_PS }, // uPosScale + { 98, USAGE_VS | USAGE_PS }, // uContacts + }; + + struct Shader { + DWORD VS; + DWORD PS; + + Shader() : VS(NULL), PS(NULL) {} + + void init(Core::Pass pass, int type, int *def, int defCount) { + bool underwater = false; + + for (int i = 0; i < defCount; i++) { + if (def[i] == SD_UNDERWATER) { + underwater = true; + } + } + + #define SHADER(S,P) S##_##P + #define SHADER_U(S,P) (underwater ? SHADER(S##_u,P) : SHADER(S,P)) + + const uint8 *vSrc, *fSrc; + switch (pass) { + case passCompose : + switch (type) { + case 0 : vSrc = SHADER_U ( compose_sprite, v ); fSrc = SHADER_U ( compose_sprite, f ); break; + case 1 : vSrc = SHADER ( compose_flash, v ); fSrc = SHADER ( compose_flash, f ); break; + case 2 : vSrc = SHADER_U ( compose_room, v ); fSrc = SHADER_U ( compose_room, f ); break; + case 3 : vSrc = SHADER_U ( compose_entity, v ); fSrc = SHADER_U ( compose_entity, f ); break; + case 4 : vSrc = SHADER ( compose_mirror, v ); fSrc = SHADER ( compose_mirror, f ); break; + default : ASSERT(false); + } + break; + case passShadow : + switch (type) { + case 3 : + case 4 : vSrc = SHADER ( shadow_entity, v ); fSrc = SHADER ( shadow_entity, f ); break; + default : ASSERT(false); + } + break; + case passAmbient : + switch (type) { + case 0 : vSrc = SHADER ( ambient_sprite, v ); fSrc = SHADER ( ambient_sprite, f ); break; + case 1 : vSrc = SHADER ( ambient_room, v ); fSrc = SHADER ( ambient_room, f ); break; // TYPE_FLASH (sky) + case 2 : vSrc = SHADER ( ambient_room, v ); fSrc = SHADER ( ambient_room, f ); break; + default : ASSERT(false); + } + break; + case passSky : vSrc = SHADER ( gui, v ); fSrc = SHADER ( gui, f ); break; // TODO + /* + case passWater : + switch (type) { + case 0 : vSrc = SHADER ( water_drop, v ); fSrc = SHADER ( water_drop, f ); break; + case 1 : vSrc = SHADER ( water_simulate, v ); fSrc = SHADER ( water_simulate, f ); break; + case 2 : vSrc = SHADER ( water_caustics, v ); fSrc = SHADER ( water_caustics, f ); break; + case 3 : vSrc = SHADER ( water_rays, v ); fSrc = SHADER ( water_rays, f ); break; + case 4 : vSrc = SHADER ( water_mask, v ); fSrc = SHADER ( water_mask, f ); break; + case 5 : vSrc = SHADER ( water_compose, v ); fSrc = SHADER ( water_compose, f ); break; + default : ASSERT(false); + } + break; + */ + case passFilter : + switch (type) { + case 0 : vSrc = SHADER ( filter_upscale, v ); fSrc = SHADER ( filter_upscale, f ); break; + case 1 : vSrc = SHADER ( filter_downsample, v ); fSrc = SHADER ( filter_downsample, f ); break; + case 3 : vSrc = SHADER ( filter_grayscale, v ); fSrc = SHADER ( filter_grayscale, f ); break; + case 4 : vSrc = SHADER ( filter_blur, v ); fSrc = SHADER ( filter_blur, f ); break; + case 5 : vSrc = SHADER ( filter_blur, v ); fSrc = SHADER ( filter_blur, f ); break; // TODO anaglyph + default : ASSERT(false); + } + break; + case passGUI : vSrc = SHADER ( gui, v ); fSrc = SHADER ( gui, f ); break; + default : ASSERT(false); LOG("! wrong pass id\n"); return; + } + + #undef SHADER + #undef SHADER_U + + device->CreateVertexShader(vertexDecl, (DWORD*)vSrc, &VS, 0); + device->CreatePixelShader(&((D3DPIXELSHADERDEF_FILE*)fSrc)->Psd, &PS); + } + + void deinit() { + device->SetVertexShader(0); + device->SetPixelShader(0); + if (VS) device->DeleteVertexShader(VS); + if (PS) device->DeletePixelShader(PS); + } + + void bind() { + if (Core::active.shader != this) { + Core::active.shader = this; + device->SetVertexShader(VS); + device->SetPixelShader(PS); + } + } + + void setConstant(UniformType uType, const float *value, int vectors) { + const Binding &b = bindings[uType]; + if (b.usage | USAGE_VS) device->SetVertexShaderConstant (b.reg, value, vectors); +// if (b.usage | USAGE_PS) device->SetPixelShaderConstant (b.reg, value, vectors); + } + + void setParam(UniformType uType, const vec4 &value, int count = 1) { + setConstant(uType, (float*)&value, count); + } + + void setParam(UniformType uType, const mat4 &value, int count = 1) { + setConstant(uType, (float*)&value, count * 4); + } + }; + +// Texture + struct Texture { + LPDIRECT3DTEXTURE8 tex2D; + LPDIRECT3DCUBETEXTURE8 texCube; + + int width, height, depth, origWidth, origHeight, origDepth; + TexFormat fmt; + uint32 opt; + D3DFORMAT d3dformat; + + Texture(int width, int height, int depth, uint32 opt) : tex2D(NULL), texCube(NULL), width(width), height(height), depth(depth), origWidth(width), origHeight(height), origDepth(depth), fmt(FMT_RGBA), opt(opt) {} + + void init(void *data) { + ASSERT((opt & OPT_PROXY) == 0); + + bool isDepth = fmt == FMT_DEPTH || fmt == FMT_SHADOW; + bool mipmaps = (opt & OPT_MIPMAPS) != 0; + bool cube = (opt & OPT_CUBEMAP) != 0; + bool dynamic = (opt & OPT_DYNAMIC) != 0; + bool isTarget = (opt & OPT_TARGET) != 0 && !isDepth; + + static const struct FormatDesc { + int bpp; + D3DFORMAT format; + } formats[FMT_MAX] = { + { 8, D3DFMT_L8 }, + { 32, D3DFMT_A8R8G8B8 }, + { 16, D3DFMT_R5G6B5 }, + { 16, D3DFMT_A1R5G5B5 }, + { 64, D3DFMT_A8R8G8B8 }, // TODO + { 32, D3DFMT_A8R8G8B8 }, // TODO + { 16, D3DFMT_LIN_D16 }, + { 16, D3DFMT_LIN_D16 }, + }; + + FormatDesc desc = formats[fmt]; + + if (isTarget) { + + } + + uint32 usage = 0; + if (isDepth) usage |= D3DUSAGE_DEPTHSTENCIL; + if (isTarget) usage |= D3DUSAGE_RENDERTARGET; + + D3DPOOL pool = (isTarget || isDepth) ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; + + d3dformat = desc.format; + + if (cube) { + D3DCHECK(device->CreateCubeTexture(width, 1, usage, desc.format, pool, &texCube)); + } else { + D3DCHECK(device->CreateTexture(width, height, mipmaps ? 4 : 1, usage, desc.format, pool, &tex2D)); + if (data && !isTarget) { + update(data); + } + } + + if (pool != D3DPOOL_MANAGED) + registerResource(this); + } + + void deinit() { + unregisterResource(this); + if (tex2D) tex2D->Release(); + if (texCube) texCube->Release(); + } + + VOID XBUtil_SwizzleTexture2D( D3DLOCKED_RECT* pLock, const D3DSURFACE_DESC* pDesc ) + { + DWORD dwPixelSize = XGBytesPerPixelFromFormat( pDesc->Format ); + DWORD dwTextureSize = pDesc->Width * pDesc->Height * dwPixelSize; + + BYTE* pSrcBits = new BYTE[ dwTextureSize ]; + memcpy( pSrcBits, pLock->pBits, dwTextureSize ); + + XGSwizzleRect( pSrcBits, 0, NULL, pLock->pBits, + pDesc->Width, pDesc->Height, + NULL, dwPixelSize ); + + delete[] pSrcBits; + } + + void updateLevel(int32 level, void *data) { + int32 bpp; + switch (fmt) { + case FMT_LUMINANCE : bpp = 1; break; + case FMT_RGBA : bpp = 4; break; + default : ASSERT(false); + } + + int32 w = width >> level; + int32 h = height >> level; + int32 ow = origWidth >> level; + int32 oh = origHeight >> level; + + uint8 *buffer = new uint8[w * h * bpp]; + + if (fmt == FMT_RGBA) { + uint8 *src = (uint8*)data; + uint8 *dst = buffer; + + for (int y = 0; y < oh; y++) { + uint8 *ptr = dst; + for (int x = 0; x < ow; x++) { + ptr[0] = src[2]; + ptr[1] = src[1]; + ptr[2] = src[0]; + ptr[3] = src[3]; + ptr += 4; + src += 4; + } + dst += w * 4; + } + } else { + if (w == ow && h == oh) { + memcpy(buffer, data, w * h * bpp); + } else { + uint8 *src = (uint8*)data; + uint8 *dst = buffer; + for (int y = 0; y < oh; y++) { + memcpy(dst, src, ow * bpp); + src += ow * bpp; + dst += w * bpp; + } + } + } + + D3DLOCKED_RECT rect; + D3DCHECK(tex2D->LockRect(level, &rect, NULL, 0)); + XGSwizzleRect(buffer, 0, NULL, rect.pBits, w, h, NULL, 4); + D3DCHECK(tex2D->UnlockRect(level)); + + delete[] buffer; + + if ((opt & OPT_MIPMAPS) && (level < 3)) { + ASSERT(fmt == FMT_RGBA); + + uint8 *mip = new uint8[(ow >> 1) * (oh >> 1) * 4]; + uint8 *dst = mip; + uint8 *src = (uint8*)data; + + for (int32 y = 0; y < oh; y += 2) { + for (int32 x = 0; x < ow; x += 2) { + *dst++ = (src[0] + src[4] + src[ow * 4] + src[ow * 4 + 4]) >> 2; src++; // R + *dst++ = (src[0] + src[4] + src[ow * 4] + src[ow * 4 + 4]) >> 2; src++; // G + *dst++ = (src[0] + src[4] + src[ow * 4] + src[ow * 4 + 4]) >> 2; src++; // B + *dst++ = (src[0] + src[4] + src[ow * 4] + src[ow * 4 + 4]) >> 2; src++; // A + src += 4; + } + src += ow * 4; + } + + updateLevel(level + 1, mip); + + delete[] mip; + } + } + + void update(void *data) { + updateLevel(0, data); + } + + void bind(int sampler) { + if (sampler > 3) return; // TODO + + if (opt & OPT_PROXY) return; + ASSERT(tex2D || texCube); + + if (Core::active.textures[sampler] != this) { + Core::active.textures[sampler] = this; + if (tex2D) { + device->SetTexture(sampler, tex2D); + /* TODO unsupported + if (opt & OPT_VERTEX) { + device->SetTexture(D3DVERTEXTEXTURESAMPLER0 + sampler, tex2D); + }*/ + } else if (texCube) { + device->SetTexture(sampler, texCube); + } + + bool filter = (Core::settings.detail.filter > Core::Settings::LOW) && !(opt & OPT_NEAREST); + bool mipmaps = (Core::settings.detail.filter > Core::Settings::LOW) && (opt & OPT_MIPMAPS); + bool aniso = (Core::settings.detail.filter > Core::Settings::MEDIUM) && mipmaps && (Core::support.maxAniso > 0); + + device->SetTextureStageState(sampler, D3DTSS_ADDRESSU, (opt & OPT_REPEAT) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); + device->SetTextureStageState(sampler, D3DTSS_ADDRESSV, (opt & OPT_REPEAT) ? D3DTADDRESS_WRAP : D3DTADDRESS_CLAMP); + + if (aniso) { + device->SetTextureStageState(sampler, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC); + device->SetTextureStageState(sampler, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + device->SetTextureStageState(sampler, D3DTSS_MIPFILTER, D3DTEXF_NONE); + device->SetTextureStageState(sampler, D3DTSS_MAXANISOTROPY, support.maxAniso); + } else { + device->SetTextureStageState(sampler, D3DTSS_MINFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + device->SetTextureStageState(sampler, D3DTSS_MAGFILTER, filter ? D3DTEXF_LINEAR : D3DTEXF_POINT); + device->SetTextureStageState(sampler, D3DTSS_MIPFILTER, mipmaps ? (filter ? D3DTEXF_LINEAR : D3DTEXF_POINT) : D3DTEXF_NONE); + device->SetTextureStageState(sampler, D3DTSS_MAXANISOTROPY, 1); + } + } + } + + void unbind(int sampler) { + if (Core::active.textures[sampler]) { + Core::active.textures[sampler] = NULL; + device->SetTexture(sampler, NULL); + } + } + + void generateMipMap() {} + + void setFilterQuality(int value) {} + }; + +// Mesh + struct Mesh { + LPDIRECT3DINDEXBUFFER8 IB; + LPDIRECT3DVERTEXBUFFER8 VB; + + int iCount; + int vCount; + bool dynamic; + + Mesh(bool dynamic) : IB(NULL), VB(NULL), dynamic(dynamic) {} + + void init(Index *indices, int iCount, ::Vertex *vertices, int vCount, int aCount) { + this->iCount = iCount; + this->vCount = vCount; + ASSERT(sizeof(GAPI::Vertex) == sizeof(::Vertex)); + + uint32 usage = D3DUSAGE_WRITEONLY | (dynamic ? D3DUSAGE_DYNAMIC : 0); + D3DPOOL pool = dynamic ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; + + D3DCHECK(device->CreateIndexBuffer (iCount * sizeof(Index), usage, D3DFMT_INDEX16, pool, &IB)); + D3DCHECK(device->CreateVertexBuffer (vCount * sizeof(Vertex), usage, D3DFMT_UNKNOWN, pool, &VB)); + + update(indices, iCount, vertices, vCount); + + if (pool != D3DPOOL_MANAGED) + registerResource(this); + } + + void deinit() { + unregisterResource(this); + IB->Release(); + VB->Release(); + } + + void update(Index *indices, int iCount, ::Vertex *vertices, int vCount) { + ASSERT(sizeof(GAPI::Vertex) == sizeof(::Vertex)); + + void* ptr; + int size; + + if (indices && iCount) { + size = iCount * sizeof(indices[0]); + D3DCHECK(IB->Lock(0, 0, (BYTE**)&ptr, 0)); + memcpy(ptr, indices, size); + D3DCHECK(IB->Unlock()); + } + + if (vertices && vCount) { + size = vCount * sizeof(vertices[0]); + D3DCHECK(VB->Lock(0, 0, (BYTE**)&ptr, 0)); + memcpy(ptr, vertices, size); + D3DCHECK(VB->Unlock()); + } + } + + void bind(const MeshRange &range) const { + device->SetIndices(IB, range.vStart); + device->SetStreamSource(0, VB, sizeof(Vertex)); + } + + void initNextRange(MeshRange &range, int &aIndex) const { + range.aIndex = -1; + } + }; + +// GLuint FBO, defaultFBO; + struct RenderTargetCache { + int count; + struct Item { + LPDIRECT3DSURFACE8 surface; + int width; + int height; + } items[MAX_RENDER_BUFFERS]; + } rtCache[2]; + + void init() { + memset(rtCache, 0, sizeof(rtCache)); + + D3DADAPTER_IDENTIFIER8 adapterInfo; + D3D->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &adapterInfo); + LOG("Vendor : %s\n", adapterInfo.Description); + LOG("Renderer : Direct3D 8\n"); + + support.maxAniso = 4; + support.maxVectors = 16; + support.shaderBinary = false; + support.VAO = false; // SHADOW_COLOR + support.depthTexture = false; // SHADOW_DEPTH + support.shadowSampler = false; + support.discardFrame = false; + support.texNPOT = false; + support.texRG = false; + support.texBorder = false; + support.colorFloat = false; + support.colorHalf = false; + support.texFloatLinear = false; + support.texFloat = false; + support.texHalfLinear = false; + support.texHalf = false; + + #ifdef PROFILE + support.profMarker = false; + support.profTiming = false; + #endif + + defRT = defDS = NULL; + + const float factors[] = { + 0.0f, 0.5f, 1.0f, 2.0f, + 0.6f, 0.9f, 0.9f, 32767.0f + }; + device->SetVertexShaderConstant(94, factors, 2); + + device->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_EXP); + } + + void deinit() { + if (defRT) defRT->Release(); + if (defDS) defDS->Release(); + } + + void resetDevice() { + // release dummy RTs + for (int i = 0; i < 2; i++) { + RenderTargetCache &cache = rtCache[i]; + for (int j = 0; j < cache.count; j++) + cache.items[j].surface->Release(); + cache.count = 0; + } + + // release texture RTs + int tmpCount = resCount; + Resource tmpList[256]; + memcpy(tmpList, resList, sizeof(Resource) * tmpCount); + + for (int i = 0; i < tmpCount; i++) { + Resource &res = tmpList[i]; + if (res.mesh) + res.mesh->deinit(); + else + res.texture->deinit(); + } + + if (defRT) defRT->Release(); + if (defDS) defDS->Release(); + + D3DCHECK(device->Reset(&d3dpp)); + device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &defRT); + device->GetDepthStencilSurface(&defDS); + + // reinit texture RTs + for (int i = 0; i < tmpCount; i++) { + Resource &res = tmpList[i]; + if (res.mesh) + res.mesh->init(NULL, res.mesh->iCount, NULL, res.mesh->vCount, 0); + else + res.texture->init(NULL); + } + } + + inline mat4::ProjRange getProjRange() { + return mat4::PROJ_ZERO_POS; + } + + mat4 ortho(float l, float r, float b, float t, float znear, float zfar) { + mat4 m; + m.ortho(getProjRange(), l, r, b, t, znear, zfar); + return m; + } + + mat4 perspective(float fov, float aspect, float znear, float zfar, float eye) { + mat4 m; + m.perspective(getProjRange(), fov, aspect, znear, zfar, eye); + return m; + } + + bool beginFrame() { + if (defRT == NULL) device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &defRT); + if (defDS == NULL) device->GetDepthStencilSurface(&defDS); + + device->BeginScene(); + return true; + } + + void endFrame() { + device->EndScene(); + } + + void resetState() { + device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); + device->SetRenderState(D3DRS_LIGHTING, FALSE); + } + + int cacheRenderTarget(bool depth, int width, int height) { + RenderTargetCache &cache = rtCache[depth]; + + for (int i = 0; i < cache.count; i++) + if (cache.items[i].width == width && cache.items[i].height == height) + return i; + + ASSERT(cache.count < MAX_RENDER_BUFFERS); + + RenderTargetCache::Item &item = cache.items[cache.count]; + item.width = width; + item.height = height; + + if (depth) + device->CreateDepthStencilSurface(width, height, D3DFMT_LIN_D16, D3DMULTISAMPLE_NONE, &item.surface); + else + device->CreateRenderTarget(width, height, D3DFMT_LIN_R5G6B5, D3DMULTISAMPLE_NONE, false, &item.surface); + + return cache.count++; + } + + void bindTarget(Texture *target, int face) { + if (!target) { // may be a null + D3DCHECK(device->SetRenderTarget(defRT, defDS)); + } else { + ASSERT(target->opt & OPT_TARGET); + + LPDIRECT3DSURFACE8 surface; + + bool depth = target->fmt == FMT_DEPTH || target->fmt == FMT_SHADOW; + + if (target->tex2D) { + D3DCHECK(target->tex2D->GetSurfaceLevel(0, &surface)); + } else if (target->texCube) { + D3DCHECK(target->texCube->GetCubeMapSurface(D3DCUBEMAP_FACES(D3DCUBEMAP_FACE_POSITIVE_X + face), 0, &surface)); + } + + int rtIndex = cacheRenderTarget(!depth, target->width, target->height); + + if (depth) { + D3DCHECK(device->SetRenderTarget(rtCache[false].items[rtIndex].surface, surface)); + } else { + D3DCHECK(device->SetRenderTarget(surface, rtCache[true].items[rtIndex].surface)); + } + + surface->Release(); + } + + Core::active.viewport = short4(0, 0, 0, 0); // forcing viewport reset + Core::active.scissor = short4(0, 0, 0, 0); + } + + void discardTarget(bool color, bool depth) {} + + void copyTarget(Texture *dst, int xOffset, int yOffset, int x, int y, int width, int height) { + ASSERT(dst && dst->tex2D); + + LPDIRECT3DSURFACE8 surface; + dst->tex2D->GetSurfaceLevel(0, &surface); + + RECT srcRect = { x, y, x + width, y + height }, + dstRect = { xOffset, yOffset, xOffset + width, yOffset + height }; + + //device->StretchRect(defRT, &srcRect, surface, &dstRect, D3DTEXF_POINT); TODO + + surface->Release(); + } + + void setVSync(bool enable) { + d3dpp.FullScreen_PresentationInterval = enable ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; + GAPI::resetDevice(); + } + + void waitVBlank() {} + + void clear(bool color, bool depth) { + uint32 flags = (color ? D3DCLEAR_TARGET : 0) | (depth ? (D3DCLEAR_ZBUFFER | D3DCLEAR_STENCIL) : 0); + if (flags) { + device->Clear(0, NULL, flags, clearColor, 1.0f, 0); + } + } + + void setClearColor(const vec4 &color) { + clearColor = (int(color.x * 255) << 16) | + (int(color.y * 255) << 8 ) | + (int(color.z * 255) ) | + (int(color.w * 255) << 24); + } + + void setViewport(const short4 &v) { + D3DVIEWPORT8 viewport; + viewport.X = v.x; + viewport.Y = v.y; + viewport.Width = v.z; + viewport.Height = v.w; + viewport.MinZ = 0.0f; + viewport.MaxZ = 1.0f; + + device->SetViewport(&viewport); + } + + void setScissor(const short4 &s) { + D3DRECT scissor; + scissor.x1 = s.x; + scissor.y1 = active.viewport.w - (s.y + s.w); + scissor.x2 = s.x + s.z; + scissor.y2 = active.viewport.w - s.y; + + device->SetScissors(1, FALSE, &scissor); + } + + void setDepthTest(bool enable) { + device->SetRenderState(D3DRS_ZENABLE, enable ? D3DZB_TRUE : D3DZB_FALSE); + } + + void setDepthWrite(bool enable) { + device->SetRenderState(D3DRS_ZWRITEENABLE, enable ? TRUE : FALSE); + } + + void setColorWrite(bool r, bool g, bool b, bool a) { + device->SetRenderState(D3DRS_COLORWRITEENABLE, + (r ? D3DCOLORWRITEENABLE_RED : 0) | + (g ? D3DCOLORWRITEENABLE_GREEN : 0) | + (b ? D3DCOLORWRITEENABLE_BLUE : 0) | + (a ? D3DCOLORWRITEENABLE_ALPHA : 0)); + } + + void setAlphaTest(bool enable) { + device->SetTextureStageState(0, D3DTSS_ALPHAKILL, enable ? D3DTALPHAKILL_ENABLE : D3DTALPHAKILL_DISABLE); + } + + void setCullMode(int rsMask) { + cullMode = rsMask; + switch (rsMask) { + case RS_CULL_BACK : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); break; + case RS_CULL_FRONT : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); break; + default : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); + } + } + + void setBlendMode(int rsMask) { + blendMode = rsMask; + switch (rsMask) { + case RS_BLEND_ALPHA : + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); + break; + case RS_BLEND_ADD : + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); + break; + case RS_BLEND_MULT : + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO); + break; + case RS_BLEND_PREMULT : + device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); + device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); + break; + default : + device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); + return; + } + device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); + } + + void setViewProj(const mat4 &mView, const mat4 &mProj) { + device->SetTransform(D3DTS_PROJECTION, (D3DXMATRIX*)&mProj); + } + + void updateLights(vec4 *lightPos, vec4 *lightColor, int count) { + if (active.shader) { + active.shader->setParam(uLightColor, lightColor[0], count); + active.shader->setParam(uLightPos, lightPos[0], count); + } + } + + void setFog(const vec4 ¶ms) { + if (params.w > 0.0f) { + device->SetRenderState(D3DRS_FOGENABLE, TRUE); + + DWORD fogColor = 0xFF000000 + | (DWORD(clamp(params.z * 255.0f, 0.0f, 255.0f)) << 0) + | (DWORD(clamp(params.y * 255.0f, 0.0f, 255.0f)) << 8) + | (DWORD(clamp(params.x * 255.0f, 0.0f, 255.0f)) << 16); + device->SetRenderState(D3DRS_FOGCOLOR, fogColor); + + ASSERT(Core::active.shader); + Core::active.shader->setParam(uFogParams, params); // color.rgb, factor + } else { + device->SetRenderState(D3DRS_FOGENABLE, FALSE); + } + } + + void DIP(Mesh *mesh, const MeshRange &range) { + device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, mesh->vCount, range.iStart, range.iCount / 3); + } + + vec4 copyPixel(int x, int y) { + GAPI::Texture *t = Core::active.target; + ASSERT(t && t->tex2D); +/* + LPDIRECT3DSURFACE8 surface, texSurface; + D3DCHECK(t->tex2D->GetSurfaceLevel(0, &texSurface)); + D3DCHECK(device->CreateOffscreenPlainSurface(t->width, t->height, t->d3dformat, D3DPOOL_SYSTEMMEM, &surface, NULL)); + D3DCHECK(device->GetRenderTargetData(texSurface, surface)); + + RECT r = { x, y, x + 1, y + 1 }; + D3DLOCKED_RECT rect; + surface->LockRect(&rect, &r, D3DLOCK_READONLY); + ubyte4 c = *((ubyte4*)rect.pBits); + surface->UnlockRect(); + + texSurface->Release(); + surface->Release(); + + return vec4(float(c.z), float(c.y), float(c.x), float(c.w)) * (1.0f / 255.0f); + */ + return vec4(1.0f); + } +} + +#endif \ No newline at end of file diff --git a/src/inventory.h b/src/inventory.h index dec19cb..7debb50 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -35,16 +35,16 @@ struct OptionItem { TYPE_KEY, } type; StringID title; - intptr_t offset; + int32 offset; uint32 color; uint32 icon; uint8 maxValue; bool bar; - OptionItem(Type type = TYPE_EMPTY, int title = STR_EMPTY, intptr_t offset = 0, uint32 color = 0xFFFFFFFF, int icon = 0, uint8 maxValue = 0, bool bar = false) : type(type), title(StringID(title)), offset(offset), color(color), icon(icon), maxValue(maxValue), bar(bar) {} + OptionItem(Type type = TYPE_EMPTY, int title = STR_EMPTY, int32 offset = 0, uint32 color = 0xFFFFFFFF, int icon = 0, uint8 maxValue = 0, bool bar = false) : type(type), title(StringID(title)), offset(offset), color(color), icon(icon), maxValue(maxValue), bar(bar) {} void setValue(uint8 value, Core::Settings *settings) const { - *(uint8*)(intptr_t(settings) + offset) = value; + *((uint8*)settings + offset) = value; } bool checkValue(uint8 value) const { @@ -102,7 +102,7 @@ struct OptionItem { if (active) UI::renderBar(CTEX_OPTION, vec2(x, y - LINE_HEIGHT + 6), vec2(w, LINE_HEIGHT - 6), 1.0f, 0xFFD8377C, 0); - const uint8 &value = *(uint8*)(intptr_t(settings) + offset); + const uint8 &value = *((uint8*)settings + offset); switch (type) { case TYPE_TITLE : @@ -164,7 +164,7 @@ static const OptionItem optSound[] = { #endif }; -#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) +#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) || defined(_OS_XBOX) #define INV_GAMEPAD_ONLY #endif @@ -182,7 +182,7 @@ static const OptionItem optSound[] = { #define INV_CTRL_START_OPTION 2 #endif -#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) +#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) || defined(_OS_XBOX) #define INV_VIBRATION #endif @@ -430,7 +430,7 @@ struct Inventory { case TR::Entity::INV_PASSPORT : if (value != 0) return NULL; optCount = optLoadSlots.length; - return optLoadSlots; + return optLoadSlots.items; case TR::Entity::INV_DETAIL : optCount = COUNT(optDetail); return optDetail; @@ -492,7 +492,7 @@ struct Inventory { opt = opt + slot; - uint8 &value = *(uint8*)(intptr_t(settings) + opt->offset); + uint8 &value = *((uint8*)settings + opt->offset); switch (key) { case cAction : return (opt->type == OptionItem::TYPE_BUTTON || opt->type == OptionItem::TYPE_KEY) ? opt : NULL; @@ -818,7 +818,7 @@ struct Inventory { } int pos = 0; - for (int pos = 0; pos < itemsCount; pos++) + for (; pos < itemsCount; pos++) if (items[pos]->type > type) break; @@ -1407,7 +1407,7 @@ struct Inventory { for (int i = 0; i < COUNT(background); i++) { if (!background[i]) { - background[i] = new Texture(INV_BG_SIZE, INV_BG_SIZE, 1, FMT_RGBA, OPT_TARGET); + background[i] = new Texture(INV_BG_SIZE, INV_BG_SIZE, 1, FMT_RGB16, OPT_TARGET); } } @@ -1748,7 +1748,7 @@ struct Inventory { aspectSrc = ax = ay = 1.0f; } - float aspectDst = float(Core::width) / float(Core::height); + float aspectDst = float(Core::width) / float(Core::height) * Core::aspectFix; float aspectImg = aspectSrc / aspectDst; #ifdef FFP @@ -2090,7 +2090,7 @@ struct Inventory { const char *bSelect = STR[STR_KEY_FIRST + ikEnter]; const char *bBack = STR[STR_KEY_FIRST + Core::settings.controls[playerIndex].keys[cInventory].key]; - #if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) + #if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) bSelect = "A"; bBack = "B"; #endif diff --git a/src/lang.h b/src/lang.h index 69fda91..96baba1 100644 --- a/src/lang.h +++ b/src/lang.h @@ -252,6 +252,12 @@ enum StringID { , STR_MAX }; +#ifdef _XBOX // TODO: illegal escape sequence + #define STR_RUSSIAN "Russian" +#else + #define STR_RUSSIAN "{" +#endif + #define STR_LANGUAGES \ "English" \ , "Fran|cais" \ @@ -260,7 +266,7 @@ enum StringID { , "Italiano" \ , "Polski" \ , "Portugu(es" \ - , "{" \ + , STR_RUSSIAN \ , "\x11\x02\x70\x01\x97\x01\xD6\xFF\xFF" \ , "\x11\x01\x22\x01\x0F\x01\x0F\x01\x0E\x01\x06\x01\x04\x01\x0C\x01\x0B\xFF\xFF" \ , "Suomi" \ diff --git a/src/level.h b/src/level.h index 5ee5203..64c5ba4 100644 --- a/src/level.h +++ b/src/level.h @@ -551,22 +551,24 @@ struct Level : IGame { #endif vec4 material; - if (Core::pass == Core::passAmbient) { if (room.flags.water) { - Core::fogParams = underwaterFogParams; material = vec4(underwaterColor, 1.0f); } else { - Core::fogParams = levelFogParams; material = vec4(1.0f); } } else { - Core::fogParams = levelFogParams; material = vec4(diffuse, ambient, specular, alpha); } setShader(Core::pass, type, (Core::pass == Core::passAmbient) ? false : room.flags.water, alphaTest); + if (room.flags.water) { + Core::setFog(underwaterFogParams); + } else { + Core::setFog(levelFogParams); + } + #ifdef _GAPI_SW GAPI::setPalette(room.flags.water ? GAPI::swPaletteWater : GAPI::swPaletteColor); GAPI::setShading(true); @@ -2384,6 +2386,7 @@ struct Level : IGame { renderEntitiesTransp(transp); #ifndef FFP + Core::setFog(FOG_NONE); Core::whiteTex->bind(sDiffuse); Core::setBlendMode(bmMult); for (int i = 0; i < level.entitiesCount; i++) { @@ -2529,11 +2532,17 @@ struct Level : IGame { } void renderAdditive(RoomDesc *roomsList, int roomsCount) { - vec4 oldFog = Core::fogParams; - Core::fogParams = FOG_BLACK; // don't apply fog for additive + // don't apply fog for additive geometry + vec4 oldLevelFogParams = levelFogParams; + vec4 oldUnderwaterFogParams = underwaterFogParams; + levelFogParams = FOG_NONE; + underwaterFogParams = FOG_NONE; + renderRooms(roomsList, roomsCount, 2); renderEntities(2); - Core::fogParams = oldFog; + + levelFogParams = oldLevelFogParams; + underwaterFogParams = oldUnderwaterFogParams; } virtual void renderView(int roomIndex, bool water, bool showUI, int roomsCount = 0, RoomDesc *roomsList = NULL) { @@ -2612,6 +2621,8 @@ struct Level : IGame { if (camera->isUnderwater()) renderAdditive(roomsList, roomsCount); + Core::setFog(FOG_NONE); + Core::setBlendMode(bmNone); if (water && waterCache && waterCache->visible) { Core::Pass pass = Core::pass; @@ -2631,6 +2642,8 @@ struct Level : IGame { if (!camera->isUnderwater()) renderAdditive(roomsList, roomsCount); + Core::setFog(FOG_NONE); + Core::setBlendMode(bmNone); Core::Pass pass = Core::pass; @@ -3065,7 +3078,7 @@ struct Level : IGame { int vW = Core::width; int vH = Core::height; - float aspect = float(vW) / float(vH); + float aspect = float(vW) / float(vH) * Core::aspectFix; if (Core::defaultTarget) { vX = 0; diff --git a/src/libs/stb_vorbis/stb_vorbis.c b/src/libs/stb_vorbis/stb_vorbis.c index 759065b..13bb815 100644 --- a/src/libs/stb_vorbis/stb_vorbis.c +++ b/src/libs/stb_vorbis/stb_vorbis.c @@ -1296,7 +1296,7 @@ static void compute_window(int n, float *window) rotate(c, s, s, c); for (i=0; i < n2; ++i) { - window[i] = sinf((float)(0.5 * M_PI * (y * y))); + window[i] = (float)sin(0.5 * M_PI * (y * y)); rotate(x, y, s, c); } } diff --git a/src/mesh.h b/src/mesh.h index b41ed44..cf6e17e 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -302,12 +302,12 @@ struct MeshBuilder { }; const short4 boxCoords[] = { - {-1, -1, 1, 0}, { 1, -1, 1, 0}, { 1, 1, 1, 0}, {-1, 1, 1, 0}, - { 1, 1, 1, 0}, { 1, 1, -1, 0}, { 1, -1, -1, 0}, { 1, -1, 1, 0}, - {-1, -1, -1, 0}, { 1, -1, -1, 0}, { 1, 1, -1, 0}, {-1, 1, -1, 0}, - {-1, -1, -1, 0}, {-1, -1, 1, 0}, {-1, 1, 1, 0}, {-1, 1, -1, 0}, - { 1, 1, 1, 0}, {-1, 1, 1, 0}, {-1, 1, -1, 0}, { 1, 1, -1, 0}, - {-1, -1, -1, 0}, { 1, -1, -1, 0}, { 1, -1, 1, 0}, {-1, -1, 1, 0}, + short4(-1, -1, 1, 0), short4( 1, -1, 1, 0), short4( 1, 1, 1, 0), short4(-1, 1, 1, 0), + short4( 1, 1, 1, 0), short4( 1, 1, -1, 0), short4( 1, -1, -1, 0), short4( 1, -1, 1, 0), + short4(-1, -1, -1, 0), short4( 1, -1, -1, 0), short4( 1, 1, -1, 0), short4(-1, 1, -1, 0), + short4(-1, -1, -1, 0), short4(-1, -1, 1, 0), short4(-1, 1, 1, 0), short4(-1, 1, -1, 0), + short4( 1, 1, 1, 0), short4(-1, 1, 1, 0), short4(-1, 1, -1, 0), short4( 1, 1, -1, 0), + short4(-1, -1, -1, 0), short4( 1, -1, -1, 0), short4( 1, -1, 1, 0), short4(-1, -1, 1, 0), }; iCount += COUNT(boxIndices); diff --git a/src/platform/xbox/OpenLara.sln b/src/platform/xbox/OpenLara.sln new file mode 100644 index 0000000..e764153 --- /dev/null +++ b/src/platform/xbox/OpenLara.sln @@ -0,0 +1,30 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenLara", "OpenLara.vcproj", "{9DC80A4E-C379-4FB3-994E-62C358071007}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Profile = Profile + Profile_FastCap = Profile_FastCap + Release = Release + Release_LTCG = Release_LTCG + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {9DC80A4E-C379-4FB3-994E-62C358071007}.Debug.ActiveCfg = Debug|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Debug.Build.0 = Debug|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Profile.ActiveCfg = Profile|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Profile.Build.0 = Profile|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Profile_FastCap.ActiveCfg = Profile_FastCap|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Profile_FastCap.Build.0 = Profile_FastCap|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Release.ActiveCfg = Release|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Release.Build.0 = Release|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Release_LTCG.ActiveCfg = Release_LTCG|Xbox + {9DC80A4E-C379-4FB3-994E-62C358071007}.Release_LTCG.Build.0 = Release_LTCG|Xbox + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/src/platform/xbox/OpenLara.vcproj b/src/platform/xbox/OpenLara.vcproj new file mode 100644 index 0000000..1ab81fd --- /dev/null +++ b/src/platform/xbox/OpenLara.vcproj @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/platform/xbox/main.cpp b/src/platform/xbox/main.cpp new file mode 100644 index 0000000..54d1cd6 --- /dev/null +++ b/src/platform/xbox/main.cpp @@ -0,0 +1,336 @@ +#include "game.h" + +LPDIRECT3D8 D3D; +LPDIRECT3DDEVICE8 device; +D3DPRESENT_PARAMETERS d3dpp; + +// multi-threading +void* osMutexInit() { + CRITICAL_SECTION *CS = new CRITICAL_SECTION(); + InitializeCriticalSection(CS); + return CS; +} + +void osMutexFree(void *obj) { + DeleteCriticalSection((CRITICAL_SECTION*)obj); + delete (CRITICAL_SECTION*)obj; +} + +void osMutexLock(void *obj) { + EnterCriticalSection((CRITICAL_SECTION*)obj); +} + +void osMutexUnlock(void *obj) { + LeaveCriticalSection((CRITICAL_SECTION*)obj); +} + +// timing +LARGE_INTEGER timerFreq; +LARGE_INTEGER timerStart; + +int osGetTimeMS() { + LARGE_INTEGER time; + QueryPerformanceCounter(&time); + return int32((time.QuadPart - timerStart.QuadPart) * 1000L / timerFreq.QuadPart); +} + + +// input +struct JoyDevice { + HANDLE handle; + int time; + float vL, vR; + float oL, oR; + XINPUT_FEEDBACK feedback; +} joyDevice[INPUT_JOY_COUNT]; + +#define JOY_MIN_UPDATE_FX_TIME 50 +#define JOY_TRIGGER_THRESHOLD 30 + +void osJoyVibrate(int index, float L, float R) { + joyDevice[index].vL = L; + joyDevice[index].vR = R; +} + +void joyInit() { + XInitDevices(0, NULL); +} + +float joyTrigger(int32 value) { + return clamp(float(value - JOY_TRIGGER_THRESHOLD) / (255 - JOY_TRIGGER_THRESHOLD), 0.0f, 1.0f); +} + +void joyUpdate() { + static XINPUT_POLLING_PARAMETERS params = { TRUE, TRUE, 0, 8, 8, 0, }; + + DWORD dwInsertions, dwRemovals; + XGetDeviceChanges(XDEVICE_TYPE_GAMEPAD, &dwInsertions, &dwRemovals); + + for (DWORD i = 0; i < XGetPortCount(); i++) { + JoyDevice &joy = joyDevice[i]; + + if (dwInsertions & (1 << i)) { + memset(&joy, 0, sizeof(joy)); + joy.handle = XInputOpen(XDEVICE_TYPE_GAMEPAD, i, XDEVICE_NO_SLOT, ¶ms); + LOG("joy insert: %d\n", i); + } + + if (dwRemovals & (1 << i)) { + XInputClose(joy.handle); + joy.handle = NULL; + LOG("joy remove: %d\n", i); + } + + if (joy.handle) { + XINPUT_STATE state; + XInputGetState(joy.handle, &state); + + Input::setJoyPos(i, jkL, vec2(state.Gamepad.sThumbLX + 0.5f, -(state.Gamepad.sThumbLY + 0.5f)) / 32767.5f); + Input::setJoyPos(i, jkR, vec2(state.Gamepad.sThumbRX + 0.5f, -(state.Gamepad.sThumbRY + 0.5f)) / 32767.5f); + Input::setJoyPos(i, jkLT, vec2(state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_WHITE], 0.0f)); + Input::setJoyPos(i, jkRT, vec2(state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_BLACK], 0.0f)); + + Input::setJoyDown(i, jkA, state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_A] > 0); + Input::setJoyDown(i, jkB, state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_B] > 0); + Input::setJoyDown(i, jkX, state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_X] > 0); + Input::setJoyDown(i, jkY, state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_Y] > 0); + Input::setJoyDown(i, jkLB, joyTrigger(state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_LEFT_TRIGGER]) > 0); + Input::setJoyDown(i, jkRB, joyTrigger(state.Gamepad.bAnalogButtons[XINPUT_GAMEPAD_RIGHT_TRIGGER]) > 0); + Input::setJoyDown(i, jkUp, (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) > 0); + Input::setJoyDown(i, jkDown, (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) > 0); + Input::setJoyDown(i, jkLeft, (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) > 0); + Input::setJoyDown(i, jkRight, (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) > 0); + Input::setJoyDown(i, jkStart, (state.Gamepad.wButtons & XINPUT_GAMEPAD_START) > 0); + Input::setJoyDown(i, jkSelect, (state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) > 0); + Input::setJoyDown(i, jkL, (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) > 0); + Input::setJoyDown(i, jkR, (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) > 0); + + if ((joy.vL != joy.oL || joy.vR != joy.oR) && Core::getTime() >= joy.time) { + if (joy.feedback.Header.dwStatus != ERROR_IO_PENDING) { + joy.feedback.Rumble.wLeftMotorSpeed = WORD(joy.vL * 65535.0f); + joy.feedback.Rumble.wRightMotorSpeed = WORD(joy.vR * 65535.0f); + joy.oL = joy.vL; + joy.oR = joy.vR; + joy.time = Core::getTime() + JOY_MIN_UPDATE_FX_TIME; + XInputSetState(joy.handle, &joy.feedback); + } + } + + } + } +} + + +// sound +#define SND_PACKETS 2 +#define SND_SAMPLES 2352 +#define SND_SIZE (SND_SAMPLES * sizeof(int16) * 2) + +LPDIRECTSOUND DSound; +LPDIRECTSOUNDSTREAM sndStream; +uint8* sndBuffer; + +void CALLBACK sndFill(VOID* pStreamContext, VOID* pPacketContext, DWORD dwStatus) { + if (Core::isQuit) return; + + if (dwStatus != XMEDIAPACKET_STATUS_SUCCESS) + return; + + int32 index = (int32)pPacketContext; + + XMEDIAPACKET packet = {0}; + packet.dwMaxSize = SND_SIZE; + packet.pvBuffer = sndBuffer + index * SND_SIZE; + packet.pContext = pPacketContext; + + Sound::fill((Sound::Frame*)packet.pvBuffer, SND_SIZE / 4); + + sndStream->Process(&packet, NULL); +} + +void sndInit() { + if (FAILED(DirectSoundCreate(NULL, &DSound, NULL))) + return; + + WAVEFORMATEX waveFmt = { WAVE_FORMAT_PCM, 2, 44100, 44100 * 4, 4, 16, sizeof(waveFmt) }; + + DSSTREAMDESC dssd = {0}; + dssd.dwMaxAttachedPackets = SND_PACKETS; + dssd.lpwfxFormat = &waveFmt; + dssd.lpfnCallback = sndFill; + + sndBuffer = (uint8*)XPhysicalAlloc(SND_SIZE * SND_PACKETS, MAXULONG_PTR, 0, PAGE_READWRITE | PAGE_NOCACHE); + if (!sndBuffer) + return; + memset(sndBuffer, 0, SND_SIZE * SND_PACKETS); + + if (FAILED(DirectSoundCreateStream(&dssd, &sndStream))) + return; + + XMEDIAPACKET packet = {0}; + packet.dwMaxSize = SND_SIZE; + for (int i = 0; i < SND_PACKETS; i++) { + packet.pvBuffer = sndBuffer + i * SND_SIZE; + packet.pContext = (VOID*)i; + sndStream->Process(&packet, NULL); + } +} + +void sndFree() { + if (sndStream) { + sndStream->Pause(DSSTREAMPAUSE_PAUSE); + sndStream->Discontinuity(); + sndStream->Flush(); + sndStream->Release(); + } + if (sndBuffer) { + XPhysicalFree(sndBuffer); + } +} + +void sndUpdate() { + DirectSoundDoWork(); +} + + +// context +struct { + int width; + int height; + bool prog; + bool wide; + + bool support(DWORD videoFlags) { + if (wide && !(videoFlags & XC_VIDEO_FLAGS_WIDESCREEN)) + return false; + if ((height == 480) && wide && !(videoFlags & XC_VIDEO_FLAGS_WIDESCREEN)) + return false; + if ((height == 480) && prog && !(videoFlags & XC_VIDEO_FLAGS_HDTV_480p)) + return false; + if ((height == 720) && !(videoFlags & XC_VIDEO_FLAGS_HDTV_720p)) + return false; + if ((height == 1080) && !(videoFlags & XC_VIDEO_FLAGS_HDTV_1080i)) + return false; + return true; + } +} displayModes[] = { + { 1920, 1080, false, true }, // 1920x1080 interlaced 16x9 + { 1280, 720, true, true }, // 1280x720 progressive 16x9 + { 720, 480, true, true }, // 720x480 progressive 16x9 + { 720, 480, false, true }, // 720x480 interlaced 16x9 + { 640, 480, true, true }, // 640x480 progressive 16x9 + { 640, 480, false, true }, // 640x480 interlaced 16x9 + { 720, 480, true, false }, // 720x480 progressive 4x3 + { 720, 480, false, false }, // 720x480 interlaced 4x3 + { 640, 480, true, false }, // 640x480 progressive 4x3 + { 640, 480, false, false }, // 640x480 interlaced 4x3 +}; + +HRESULT ContextCreate() { + D3D = Direct3DCreate8(D3D_SDK_VERSION); + + if (!D3D) return E_FAIL; + + memset(&d3dpp, 0, sizeof(d3dpp)); + d3dpp.BackBufferWidth = 640; + d3dpp.BackBufferHeight = 480; + + DWORD videoFlags = XGetVideoFlags(); + + for (int i = 0; i < COUNT(displayModes); i++) { + if (displayModes[i].support(videoFlags)) { + d3dpp.BackBufferWidth = displayModes[i].width; + d3dpp.BackBufferHeight = displayModes[i].height; + if (displayModes[i].wide) { + d3dpp.Flags |= D3DPRESENTFLAG_WIDESCREEN; + } + if (displayModes[i].prog) { + d3dpp.Flags |= D3DPRESENTFLAG_PROGRESSIVE; + } + break; + } + } + + float f = float(d3dpp.BackBufferWidth) / float(d3dpp.BackBufferHeight); + if (d3dpp.Flags & D3DPRESENTFLAG_WIDESCREEN) { + Core::aspectFix = (16.0f / 9.0f) / f; + } else { + Core::aspectFix = (4.0f / 3.0f) / f; + } + + d3dpp.BackBufferFormat = D3DFMT_LIN_X8R8G8B8; + d3dpp.BackBufferCount = 1; + d3dpp.EnableAutoDepthStencil = TRUE; + d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; + d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; + d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE_OR_IMMEDIATE; + + if (FAILED(D3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &device))) + return E_FAIL; + + Core::width = d3dpp.BackBufferWidth; + Core::height = d3dpp.BackBufferHeight; + + return S_OK; +} + +void ContextSwap() { + device->Present(NULL, NULL, NULL, NULL); +} + + +int checkLanguage() { + int str = STR_LANG_EN; + switch (XGetLanguage()) { + case XC_LANGUAGE_ENGLISH : str = STR_LANG_EN; break; + case XC_LANGUAGE_FRENCH : str = STR_LANG_FR; break; + case XC_LANGUAGE_GERMAN : str = STR_LANG_DE; break; + case XC_LANGUAGE_SPANISH : str = STR_LANG_ES; break; + case XC_LANGUAGE_ITALIAN : str = STR_LANG_IT; break; + case XC_LANGUAGE_PORTUGUESE : str = STR_LANG_PT; break; + case XC_LANGUAGE_JAPANESE : str = STR_LANG_JA; break; + case XC_LANGUAGE_TCHINESE : str = STR_LANG_CN; break; + } + return str - STR_LANG_EN; +} + +void main() +{ + strcpy(contentDir, "D:\\"); + + saveDir[0] = cacheDir[0] = 0; + if (XCreateSaveGame("U:\\", L"OpenLara", OPEN_ALWAYS, 0, saveDir, 256) == ERROR_SUCCESS) { + strcpy(cacheDir, saveDir); + } + + if (FAILED(ContextCreate())) + return; + + QueryPerformanceFrequency(&timerFreq); + QueryPerformanceCounter(&timerStart); + + Sound::channelsCount = 0; + + joyInit(); + sndInit(); + + Core::defLang = checkLanguage(); + + Game::init("PSXDATA\\LEVEL1.PSX"); // (char*)NULL); + + while (!Core::isQuit) { + joyUpdate(); + sndUpdate(); + + if (Game::update()) { + Game::render(); + ContextSwap(); + } + }; + + sndFree(); + Game::deinit(); + + LD_LAUNCH_DASHBOARD LaunchData = { XLD_LAUNCH_DASHBOARD_MAIN_MENU }; + XLaunchNewImage(NULL, (LAUNCH_DATA*)&LaunchData); +} diff --git a/src/platform/xbox/titleimage.xbx b/src/platform/xbox/titleimage.xbx new file mode 100644 index 0000000000000000000000000000000000000000..8598f21d288db3a2d1f48ae17596db157bf3d6a7 GIT binary patch literal 10240 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 d3d8/shaders.h + echo #include "%~1%~2_f.h" >> d3d8/shaders.h + xsasm /D VERTEX /O2 %~3 %~1.asm tmp + bin2c -n %~1%~2_v -o d3d8/%~1%~2_v.h tmp + xsasm /D PIXEL /O2 %~3 %~1.asm tmp + bin2c -n %~1%~2_f -o d3d8/%~1%~2_f.h tmp + ENDLOCAL +EXIT /B 0 + +:compile_u + SETLOCAL + call :compile %~1 + call :compile %~1 _u "/D UNDERWATER" + ENDLOCAL +EXIT /B 0 diff --git a/src/shaders/compose_entity.asm b/src/shaders/compose_entity.asm new file mode 100644 index 0000000..fc3bc22 --- /dev/null +++ b/src/shaders/compose_entity.asm @@ -0,0 +1,93 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define lv0 r0 + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define att r5 + #define light r6 + #define pos r7 + + #define MAT_AMBIENT c[uMaterial].y + #define MAT_ALPHA c[uMaterial].w + +; joint = int(aCoord.w) + mov a0.x, aCoord.w + +; pos = mulQuatPos(uBasis[joint], aCoord) + mulQuatPos(pos, aCoord, a0.x) + +; vFog = length((uViewPos - pos) * uFogParams.w) + applyFog(vFog, pos) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; lighting + ; lv[0..3] = (uLightPos[0..3].xyz - pos) * uLightColor[0..3].w; + add lv0.xyz, c[uLightPos + 0], -pos + add lv1.xyz, c[uLightPos + 1], -pos + add lv2.xyz, c[uLightPos + 2], -pos + add lv3.xyz, c[uLightPos + 3], -pos + mul lv0.xyz, c[uLightColor + 0].w, lv0 + mul lv1.xyz, c[uLightColor + 1].w, lv1 + mul lv2.xyz, c[uLightColor + 2].w, lv2 + mul lv3.xyz, c[uLightColor + 3].w, lv3 + + ; att[0..3] = dot(lv[0..3], lv[0..3]) + dp3 att.x, lv0, lv0 + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.x, att.x + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; normal = mulQuat(uBasis[joint], aNormal) + mul pos.xyz, c[uBasis + a0.x], aNormal.zxyw + mad pos.xyz, aNormal, c[uBasis + a0.x].zxyw, -pos + mad pos.xyz, aNormal.yzxw, c[uBasis + a0.x].w, pos + mul tmp.xyz, c[uBasis + a0.x].zxyw, pos + mad pos.xyz, pos.yzxw, c[uBasis + a0.x].yzxw, -tmp + mad normal, pos, TWO, aNormal + + ; light = max(0, dot(normal, lv[0..3])) + dp3 light.x, lv0, normal + dp3 light.y, lv1, normal + dp3 light.z, lv2, normal + dp3 light.w, lv3, normal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; vColor = aColor * material.alpha * (material.ambient + light[0..3] * uLightColor[0..3]) * 2 + mov pos, aColor + mul pos, MAT_ALPHA, pos + mov tmp.xyz, MAT_AMBIENT + mov tmp.w, ONE + mad tmp.xyz, light.x, c[uLightColor + 0], tmp + mad tmp.xyz, light.y, c[uLightColor + 1], tmp + mad tmp.xyz, light.z, c[uLightColor + 2], tmp + mad tmp.xyz, light.w, c[uLightColor + 3], tmp + mul tmp, pos, tmp + applyUnderwater(tmp) + add vColor, tmp, tmp + +; vTecCoord = (aTexCoord.xyz, 1) + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + tex t0 + mul r0, t0, vColor +#endif diff --git a/src/shaders/compose_flash.asm b/src/shaders/compose_flash.asm new file mode 100644 index 0000000..d6e0ca2 --- /dev/null +++ b/src/shaders/compose_flash.asm @@ -0,0 +1,37 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define lv0 r0 + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define att r5 + #define light r6 + #define pos r7 + #define MAT_DIFFUSE c[uMaterial].x + #define MAT_EMISSIVE c[uMaterial].w + +; pos = mulQuatPos(uBasis[0], aCoord) + mulQuatPos(pos, aCoord, 0) + +; vFog = length((uViewPos - pos) * uFogParams.w) + applyFog(vFog, pos) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; vColor = (material.diffuse * aColor.xyz * 2.0 + material.emissive, 1.0) + mul tmp, MAT_DIFFUSE, aColor + add tmp, tmp, tmp + add vColor, tmp, MAT_EMISSIVE + mov vColor.w, MAT_EMISSIVE + +; vTecCoord = (aTexCoord.xyz, 1) + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + tex t0 + mul r0, t0, vColor +#endif \ No newline at end of file diff --git a/src/shaders/compose_mirror.asm b/src/shaders/compose_mirror.asm new file mode 100644 index 0000000..fdd4459 --- /dev/null +++ b/src/shaders/compose_mirror.asm @@ -0,0 +1,40 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define lv0 r0 + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define att r5 + #define light r6 + #define pos r7 + +; joint = int(aCoord.w) + mov a0.x, aCoord.w + +; pos = mulQuatPos(uBasis[joint], aCoord) + mulQuatPos(pos, aCoord, a0.x) + +; vFog = length((uViewPos - pos) * uFogParams.w) + applyFog(vFog, pos) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; vColor = uMaterial + mov vColor, ONE ; TODO + +; normal = mulQuat(uBasis, aNormal) + mov normal, aNormal + mul pos.xyz, c[uBasis + 0 + a0.x], normal.zxyw + mad pos.xyz, normal, c[uBasis + 0 + a0.x].zxyw, -pos + mad pos.xyz, normal.yzxw, c[uBasis + 0 + a0.x].w, pos + mul tmp.xyz, c[uBasis + 0 + a0.x].zxyw, pos + mad pos.xyz, pos.yzxw, c[uBasis + 0 + a0.x].yzxw, -tmp + mad vTexCoord, pos, TWO, normal +#else + tex t0 + mul r0, t0, vColor +#endif \ No newline at end of file diff --git a/src/shaders/compose_room.asm b/src/shaders/compose_room.asm new file mode 100644 index 0000000..a3aef76 --- /dev/null +++ b/src/shaders/compose_room.asm @@ -0,0 +1,72 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define att r5 + #define light r6 + #define pos r7 + +; pos = mulQuatPos(uBasis[0], aCoord) + mulQuatPos(pos, aCoord, 0) + +; vFog = length((uViewPos - pos) * uFogParams.w) + applyFog(vFog, pos) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; lighting + ; lv[1..3] = (uLightPos[1..3].xyz - pos) * uLightColor[1..3].w; + add lv1.xyz, c[uLightPos + 1], -pos + add lv2.xyz, c[uLightPos + 2], -pos + add lv3.xyz, c[uLightPos + 3], -pos + mul lv1.xyz, c[uLightColor + 1].w, lv1 + mul lv2.xyz, c[uLightColor + 2].w, lv2 + mul lv3.xyz, c[uLightColor + 3].w, lv3 + + ; att[1..3] = dot(lv[1..3], lv[1..3]) + mov att.x, ONE + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; light = max(0, dot(aNormal, lv[1..3])) + mov light.x, ZERO + dp3 light.y, lv1, aNormal + dp3 light.z, lv2, aNormal + dp3 light.w, lv3, aNormal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; vColor = (aLight + light[1..3] * uLightColor[1..3]) * aColor * 2 + mov pos, aColor + mov tmp, aLight + mad tmp.xyz, light.y, c[uLightColor + 1], tmp + mad tmp.xyz, light.z, c[uLightColor + 2], tmp + mad tmp.xyz, light.w, c[uLightColor + 3], tmp + mul tmp, pos, tmp + applyUnderwater(tmp) + add vColor, tmp, tmp + +; vTecCoord = (aTexCoord.xyz, 1) + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + tex t0 + mul r0, t0, vColor +#endif \ No newline at end of file diff --git a/src/shaders/compose_sprite.asm b/src/shaders/compose_sprite.asm new file mode 100644 index 0000000..7e3c8ef --- /dev/null +++ b/src/shaders/compose_sprite.asm @@ -0,0 +1,94 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define lv0 r0 + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define att r5 + #define light r6 + #define pos r7 + #define size r4 + #define vv r6 + + #define MAT_AMBIENT c[uMaterial].y + #define MAT_ALPHA c[uMaterial].w + +; pos = (aTexCoord.zw * 32767, 0, 0) + mov pos, ZERO + mul pos.xy, aTexCoord.zw, MAX_SHORT + +; size = mulQuatPos(uBasis[0], pos) + mulQuatPos(size, pos, 0) + +; pos = size + aCoord + add pos, size, aCoord + mov pos.w, ONE + +; vFog = length((uViewPos - pos) * uFogParams.w) + applyFog(vFog, pos) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; lighting + ; lv[1..3] = (uLightPos[1..3].xyz - pos) * uLightColor[1..3].w; + add lv1.xyz, c[uLightPos + 1], -pos + add lv2.xyz, c[uLightPos + 2], -pos + add lv3.xyz, c[uLightPos + 3], -pos + mul lv1.xyz, c[uLightColor + 1].w, lv1 + mul lv2.xyz, c[uLightColor + 2].w, lv2 + mul lv3.xyz, c[uLightColor + 3].w, lv3 + + ; att[1..3] = dot(lv[1..3], lv[1..3]) + mov att.x, ONE + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; viewVec = uViewPos - pos + add vv, c[uViewPos], -pos + + ; normal = normalize(viewVec) + dp3 tmp.x, vv, vv + rsq tmp.x, tmp.x + mul normal, vv, tmp.x + + ; light = max(0, dot(normal, lv[1..3])) + mov light.x, MAT_AMBIENT + dp3 light.y, lv1, normal + dp3 light.z, lv2, normal + dp3 light.w, lv3, normal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; vColor = vec4(aLight.rgb * aLight.a, aLight.a) * 2 + mov tmp, aLight + mad tmp.xyz, light.x, c[uLightColor + 0], tmp + mad tmp.xyz, light.y, c[uLightColor + 1], tmp + mad tmp.xyz, light.z, c[uLightColor + 2], tmp + mad tmp.xyz, light.w, c[uLightColor + 3], tmp + mul tmp.xyz, tmp, tmp.w + applyUnderwater(tmp) + add vColor, tmp, tmp + +; vTecCoord = (aTexCoord.xyz, 1) + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + tex t0 + mul r0, t0, vColor +#endif \ No newline at end of file diff --git a/src/shaders/filter.asm b/src/shaders/filter.asm new file mode 100644 index 0000000..9349437 --- /dev/null +++ b/src/shaders/filter.asm @@ -0,0 +1,65 @@ +#include "common.asm" + +#ifdef VERTEX + mulMat(vPosition, aCoord, uViewProj) + + + #ifdef GRAYSCALE + mov vColor.xyz, c[uParam].xyz + mov vColor.w, ONE + #else + mov vColor, aLight + #endif + +; vTecCoord = (aTexCoord.xyz, 1) + #ifdef UPSCALE + mov vTexCoord, aTexCoord ; TODO + 0.5 * (1 / uParam.xy) + #endif + + #ifdef DOWNSAMPLE + mov vTexCoord, aTexCoord + #endif + + #ifdef GRAYSCALE + mov tmp, c[uParam].wwww + mad vTexCoord, tmp, HALF, aTexCoord + #endif + + #ifdef BLUR + mov tmp, c[uParam].wwww + mad vTexCoord, tmp, HALF, aTexCoord + #endif + + #ifdef ANAGLYPH + mov vTexCoord, aTexCoord + #endif + + mov vTexCoord.w, ONE +#else + def c0, 0.299f, 0.587f, 0.114f, 0.0f + + tex t0 + + #ifdef UPSCALE + mul r0, t0, vColor + #endif + + #ifdef DOWNSAMPLE + mul r0, t0, vColor + #endif + + #ifdef GRAYSCALE + dp3 r1.rgb, t0, c0 + mov r0, vColor + mul r0.rgb, r0.rgb, r1.rgb + #endif + + #ifdef BLUR ; TODO four tap blur + mul r0, t0, vColor + #endif + + #ifdef ANAGLYPH + mul r0, t0, vColor + #endif + +#endif \ No newline at end of file diff --git a/src/shaders/gui.asm b/src/shaders/gui.asm new file mode 100644 index 0000000..27ab378 --- /dev/null +++ b/src/shaders/gui.asm @@ -0,0 +1,14 @@ +#include "common.asm" + +#ifdef VERTEX + mulMat(vPosition, aCoord, uViewProj) + + mul vColor, aLight, c[uMaterial] + +; vTecCoord = (aTexCoord.xyz, 1) + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + tex t0 + mul r0, t0, vColor +#endif \ No newline at end of file diff --git a/src/shaders/shadow_entity.asm b/src/shaders/shadow_entity.asm new file mode 100644 index 0000000..d22c84a --- /dev/null +++ b/src/shaders/shadow_entity.asm @@ -0,0 +1,22 @@ +#include "common.asm" + +#ifdef VERTEX +; variables + #define pos r7 + +; joint = int(aCoord.w) + mov a0.x, aCoord.w + +; pos = mulQuatPos(uBasis[joint], aCoord) + mulQuatPos(pos, aCoord, a0.x) + +; vPosition = uViewProj * pos + mulMat(vPosition, pos, uViewProj) + +; vTecCoord = (aTexCoord.xyz, 1) TODO check AKILL + mov vTexCoord, aTexCoord + mov vTexCoord.w, ONE +#else + def c0, 0.0f, 0.0f, 0.0f, 1.0f + mov r0, c0 +#endif \ No newline at end of file diff --git a/src/sound.h b/src/sound.h index b9659fa..f8691c8 100644 --- a/src/sound.h +++ b/src/sound.h @@ -8,7 +8,7 @@ #define DECODE_OGG -#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) +#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) #define DECODE_MP3 #endif diff --git a/src/utils.h b/src/utils.h index 18afd7c..1a9e48e 100644 --- a/src/utils.h +++ b/src/utils.h @@ -20,7 +20,7 @@ #define ASSERTV(expr) ASSERT(expr) #ifndef _OS_ANDROID - #define LOG(...) printf(__VA_ARGS__) + #define LOG printf #endif #else @@ -35,7 +35,7 @@ #define LOG(...) printf(__VA_ARGS__) #endif #else - #define LOG(...) printf(__VA_ARGS__) + #define LOG printf #endif #endif @@ -50,6 +50,21 @@ #define LOG(...) __android_log_print(ANDROID_LOG_INFO,"OpenLara",__VA_ARGS__) #endif +#ifdef _OS_XBOX + #define MAX_LOG_LENGTH 1024 + + #undef LOG + void LOG(const char *format, ...) { + char str[MAX_LOG_LENGTH]; + va_list arglist; + va_start(arglist, format); + _vsnprintf(str, MAX_LOG_LENGTH, format, arglist); + va_end(arglist); + OutputDebugStringA(str); + } +#endif + + #ifdef _OS_PSP extern "C" { // pspmath.h @@ -74,7 +89,7 @@ #define DECL_STR(v) #v, #define EPS FLT_EPSILON -#define INF INFINITY +#define INF FLT_MAX #define PI 3.14159265358979323846f #define PIH (PI * 0.5f) #define PI2 (PI * 2.0f) @@ -1585,14 +1600,15 @@ struct Stream { ASSERT(false); } + char path[256]; + path[0] = 0; if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) { - char path[255]; - path[0] = 0; strcat(path, contentDir); - strcat(path, name); - f = fopen(path, "rb"); - } else - f = fopen(name, "rb"); + } + strcat(path, name); + fixBackslash(path); + + f = fopen(path, "rb"); if (!f) { #ifdef _OS_WEB @@ -1650,6 +1666,17 @@ struct Stream { osCacheWrite(stream); } + static void fixBackslash(char *str) { + #ifdef _OS_XBOX + int len = strlen(str); + for (int i = 0; i < len; i++) { + if (str[i] == '/') { + str[i] = '\\'; + } + } + #endif + } + static bool exists(const char *name) { FILE *f = fopen(name, "rb"); if (!f) return false; @@ -1661,6 +1688,7 @@ struct Stream { char fileName[1024]; strcpy(fileName, contentDir); strcat(fileName, name); + fixBackslash(fileName); return exists(fileName); } @@ -2151,8 +2179,6 @@ struct Array { ASSERT(index >= 0 && index < length); return items[index]; }; - - inline operator T*() const { return items; }; }; From 045ed9b63b848a06060a1ca35d98570f139955dc Mon Sep 17 00:00:00 2001 From: XProger Date: Wed, 14 Oct 2020 07:45:40 +0400 Subject: [PATCH 21/58] XBOX fix mip generation for small textures, increase gamepads stick deadzone --- src/gapi/d3d8.h | 8 ++++---- src/input.h | 2 +- src/platform/xbox/main.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gapi/d3d8.h b/src/gapi/d3d8.h index fe01446..7f99f91 100644 --- a/src/gapi/d3d8.h +++ b/src/gapi/d3d8.h @@ -249,6 +249,10 @@ namespace GAPI { void init(void *data) { ASSERT((opt & OPT_PROXY) == 0); + if (origWidth < 8 || origHeight < 8) { + opt &= ~OPT_MIPMAPS; + } + bool isDepth = fmt == FMT_DEPTH || fmt == FMT_SHADOW; bool mipmaps = (opt & OPT_MIPMAPS) != 0; bool cube = (opt & OPT_CUBEMAP) != 0; @@ -271,10 +275,6 @@ namespace GAPI { FormatDesc desc = formats[fmt]; - if (isTarget) { - - } - uint32 usage = 0; if (isDepth) usage |= D3DUSAGE_DEPTHSTENCIL; if (isTarget) usage |= D3DUSAGE_RENDERTARGET; diff --git a/src/input.h b/src/input.h index f22cc60..4f95302 100644 --- a/src/input.h +++ b/src/input.h @@ -7,7 +7,7 @@ #define MAX_PLAYERS COUNT(Core::settings.controls) #define INPUT_JOY_COUNT 4 -#define INPUT_JOY_DZ_STICK 0.2f +#define INPUT_JOY_DZ_STICK 0.3f #define INPUT_JOY_DZ_TRIGGER 0.01f namespace Input { diff --git a/src/platform/xbox/main.cpp b/src/platform/xbox/main.cpp index 54d1cd6..2a96241 100644 --- a/src/platform/xbox/main.cpp +++ b/src/platform/xbox/main.cpp @@ -316,7 +316,7 @@ void main() Core::defLang = checkLanguage(); - Game::init("PSXDATA\\LEVEL1.PSX"); // (char*)NULL); + Game::init((char*)NULL);//"PSXDATA\\LEVEL1.PSX"); while (!Core::isQuit) { joyUpdate(); From 7ad630da2688ff429019257300df22e332957610 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Thu, 29 Oct 2020 06:28:06 +0300 Subject: [PATCH 22/58] GBA optimizations --- src/platform/gba/common.h | 20 ++++++++++ src/platform/gba/render.iwram.cpp | 61 ++++++++++++++++--------------- 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 4821331..1632596 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -71,6 +71,26 @@ typedef int16 Index; #define ALIGN4 #else #define ALIGN4 __attribute__ ((aligned (4))) + + // TODO profiling + #define REG_TM2D *(vu16*)(REG_BASE+0x0108) + #define REG_TM3D *(vu16*)(REG_BASE+0x010C) + #define TM_ENABLE 0x800000 + #define TM_CASCADE 0x0004 + + INLINE void profile_start() + { + REG_TM2D= 0; REG_TM3D= 0; + REG_TM2CNT= 0; REG_TM3CNT= 0; + REG_TM3CNT= TM_ENABLE | TM_CASCADE; + REG_TM2CNT= TM_ENABLE; + } + + INLINE uint32 profile_stop() + { + REG_TM2CNT= 0; + return (REG_TM3D<<16)|REG_TM2D; + } #endif enum InputKey { diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index b470b94..03152ba 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -30,7 +30,6 @@ int32 gFacesCount = 0; Face* gFacesSorted[MAX_FACES]; EWRAM_DATA Face gFaces[MAX_FACES]; -const uint8* curTile; uint16 mipMask; Rect clip; @@ -302,7 +301,7 @@ void transform(const vec3s &v, int32 vg) { const Matrix &m = matrixStack[matrixStackIndex]; Vertex &res = gVertices[gVerticesCount++]; - + // TODO https://mikro.naprvyraz.sk/docs/Coding/1/3D-ROTAT.TXT int32 z = DP43(m[2], v); if (z < VIEW_MIN_F || z >= VIEW_MAX_F) { // TODO znear clip @@ -328,9 +327,9 @@ void transform(const vec3s &v, int32 vg) { z >>= FOV_SHIFT; #if 1 - x >>= 11; - y >>= 11; - z >>= 11; + x >>= (10 + SCALE); + y >>= (10 + SCALE); + z >>= (10 + SCALE); #ifdef WIN32 if (abs(z) >= DIV_TABLE_SIZE) { @@ -488,14 +487,16 @@ VertexUV* clipPoly(VertexUV* poly, VertexUV* tmp, int32 &pCount) { #ifdef DEBUG_OVERDRAW #define FETCH_GT() 32 #define FETCH_G(palIndex) 32 +#define FETCH_GT_PAL() 32 +#define FETCH_G_PAL(palIndex) 32 #else -#define FETCH_T() curTile[(t & 0xFF00) | (t >> 24)] -#define FETCH_T_MIP() curTile[(t & 0xFF00) | (t >> 24) & mipMask] +#define FETCH_T() tile[(t & 0xFF00) | (t >> 24)] +#define FETCH_T_MIP() tile[(t & 0xFF00) | (t >> 24) & mipMask] #define FETCH_GT() lightmap[(g & 0x1F00) | FETCH_T()] #define FETCH_G(palIndex) lightmap[(g & 0x1F00) | palIndex] -#endif #define FETCH_GT_PAL() palette[FETCH_GT()] #define FETCH_G_PAL(palIndex) palette[FETCH_G(palIndex)] +#endif struct Edge { int32 h; @@ -591,7 +592,7 @@ struct Edge { } }; -INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, uint32 dgdx) { +INLINE void scanlineG(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, uint32 dgdx) { #ifdef USE_MODE_5 uint16* pixel = buffer + x1; @@ -673,7 +674,7 @@ INLINE void scanlineG(uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 #endif } -INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, uint32 dgdx, uint32 dtdx) { +INLINE void scanlineGT(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, uint32 dgdx, uint32 dtdx) { #ifdef USE_MODE_5 uint16* pixel = buffer + x1; @@ -768,7 +769,7 @@ INLINE void scanlineGT(uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, u #endif } -void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) { +void rasterizeG(const uint8 *tile, int16 y, int32 palIndex, Edge &L, Edge &R) { uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); while (1) @@ -804,7 +805,7 @@ void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) { uint32 dgdx = d * ((R.g - L.g) >> 8) >> 16; - scanlineG(buffer, x1, x2, palIndex, L.g >> 8, dgdx); + scanlineG(tile, buffer, x1, x2, palIndex, L.g >> 8, dgdx); } buffer += WIDTH / PIXEL_SIZE; @@ -815,7 +816,7 @@ void rasterizeG(int16 y, int32 palIndex, Edge &L, Edge &R) { } } -void rasterizeGT(int16 y, Edge &L, Edge &R) { +void rasterizeGT(const uint8 *tile, int16 y, Edge &L, Edge &R) { uint16 *buffer = (uint16*)fb + y * (WIDTH / PIXEL_SIZE); while (1) @@ -855,7 +856,7 @@ void rasterizeGT(int16 y, Edge &L, Edge &R) { uint32 v = d * ((R.t & 0xFFFF) - (L.t & 0xFFFF)); uint32 dtdx = (u & 0xFFFF0000) | (v >> 16); - scanlineGT(buffer, x1, x2, L.g >> 8, L.t, dgdx, dtdx); + scanlineGT(tile, buffer, x1, x2, L.g >> 8, L.t, dgdx, dtdx); }; buffer += WIDTH / PIXEL_SIZE; @@ -866,7 +867,7 @@ void rasterizeGT(int16 y, Edge &L, Edge &R) { } } -void drawTriangle(const Face* face, VertexUV *v) { +void drawTriangle(const uint8* tile, const Face* face, VertexUV *v) { VertexUV *v1 = v + 0, *v2 = v + 1, *v3 = v + 2; @@ -905,13 +906,13 @@ void drawTriangle(const Face* face, VertexUV *v) { } if (face->flags & FACE_COLORED) { - rasterizeG(v1->v.y, face->flags & FACE_TEXTURE, L, R); + rasterizeG(tile, v1->v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v1->v.y, L, R); + rasterizeGT(tile, v1->v.y, L, R); } } -void drawQuad(const Face* face, VertexUV *v) { +void drawQuad(const uint8* tile, const Face* face, VertexUV *v) { VertexUV *v1 = v + 0, *v2 = v + 1, *v3 = v + 2, @@ -955,13 +956,13 @@ void drawQuad(const Face* face, VertexUV *v) { } while (poly[b] != v1); if (face->flags & FACE_COLORED) { - rasterizeG(v1->v.y, face->flags & FACE_TEXTURE, L, R); + rasterizeG(tile, v1->v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v1->v.y, L, R); + rasterizeGT(tile, v1->v.y, L, R); } } -void drawPoly(Face* face, VertexUV *v) { +void drawPoly(const uint8* tile, Face* face, VertexUV* v) { VertexUV tmp[16]; int32 count = (face->flags & FACE_TRIANGLE) ? 3 : 4; @@ -977,9 +978,9 @@ void drawPoly(Face* face, VertexUV *v) { face->indices[3] = 3; if (count == 3) { - drawTriangle(face, v); + drawTriangle(tile, face, v); } else { - drawQuad(face, v); + drawQuad(tile, face, v); } return; } @@ -1008,9 +1009,9 @@ void drawPoly(Face* face, VertexUV *v) { R.build(v, count, t, b, count - 1); if (face->flags & FACE_COLORED) { - rasterizeG(v[t].v.y, face->flags & FACE_TEXTURE, L, R); + rasterizeG(tile, v[t].v.y, face->flags & FACE_TEXTURE, L, R); } else { - rasterizeGT(v[t].v.y, L, R); + rasterizeGT(tile, v[t].v.y, L, R); } } @@ -1166,6 +1167,8 @@ void flush() { //const uint16 mips[] = { 0xFFFF, 0xFEFE, 0xFCFC, 0xF8F8 }; + const uint8* gTile = NULL; + for (int32 i = 0; i < gFacesCount; i++) { Face *face = gFacesSorted[i]; @@ -1178,7 +1181,7 @@ void flush() { if (!(flags & FACE_COLORED)) { const Texture &tex = textures[face->flags & FACE_TEXTURE]; - curTile = tiles[tex.tile]; + gTile = tiles[tex.tile]; v[0].uv = tex.uv0; v[1].uv = tex.uv1; v[2].uv = tex.uv2; @@ -1194,12 +1197,12 @@ void flush() { } if (flags & FACE_CLIPPED) { - drawPoly(face, v); + drawPoly(gTile, face, v); } else { if (flags & FACE_TRIANGLE) { - drawTriangle(face, v); + drawTriangle(gTile, face, v); } else { - drawQuad(face, v); + drawQuad(gTile, face, v); } }; } From 8cc844e9ea2c587e5cf88cfe30865da23b6b379d Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sun, 1 Nov 2020 10:56:17 +0300 Subject: [PATCH 23/58] Xbox One port (UWP) --- src/cache.h | 8 +- src/core.h | 18 +- src/gapi/d3d11.h | 17 +- src/inventory.h | 76 +-- src/level.h | 28 +- src/libs/tinf/tinflate.c | 2 +- .../xb1/Assets/LargeTile.scale-200.png | Bin 0 -> 11210 bytes .../xb1/Assets/SmallTile.scale-200.png | Bin 0 -> 2296 bytes .../xb1/Assets/SplashScreen.scale-200.png | Bin 0 -> 11991 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 5198 bytes ...x44Logo.altform-unplated_targetsize-48.png | Bin 0 -> 706 bytes .../xb1/Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1519 bytes .../Assets/Square44x44Logo.targetsize-48.png | Bin 0 -> 706 bytes .../xb1/Assets/StoreLogo.scale-200.png | Bin 0 -> 1589 bytes .../xb1/Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 5645 bytes src/platform/xb1/OpenLara.sln | 51 ++ src/platform/xb1/OpenLara.vcxproj | 332 ++++++++++++ src/platform/xb1/OpenLara.vcxproj.filters | 103 ++++ src/platform/xb1/OpenLara.vcxproj.user | 23 + src/platform/xb1/OpenLara_TemporaryKey.pfx | Bin 0 -> 2512 bytes src/platform/xb1/Package.StoreAssociation.xml | 371 +++++++++++++ src/platform/xb1/Package.appxmanifest | 33 ++ src/platform/xb1/main.cpp | 503 ++++++++++++++++++ src/shader.h | 2 +- src/shaders/common.hlsl | 13 +- src/shaders/compile_d3d11.bat | 4 + src/shaders/sky.hlsl | 116 ++++ src/shaders/water_compose.hlsl | 4 +- src/shaders/water_rays.hlsl | 6 +- src/sound.h | 2 +- src/utils.h | 239 ++++++++- 31 files changed, 1868 insertions(+), 83 deletions(-) create mode 100644 src/platform/xb1/Assets/LargeTile.scale-200.png create mode 100644 src/platform/xb1/Assets/SmallTile.scale-200.png create mode 100644 src/platform/xb1/Assets/SplashScreen.scale-200.png create mode 100644 src/platform/xb1/Assets/Square150x150Logo.scale-200.png create mode 100644 src/platform/xb1/Assets/Square44x44Logo.altform-unplated_targetsize-48.png create mode 100644 src/platform/xb1/Assets/Square44x44Logo.scale-200.png create mode 100644 src/platform/xb1/Assets/Square44x44Logo.targetsize-48.png create mode 100644 src/platform/xb1/Assets/StoreLogo.scale-200.png create mode 100644 src/platform/xb1/Assets/Wide310x150Logo.scale-200.png create mode 100644 src/platform/xb1/OpenLara.sln create mode 100644 src/platform/xb1/OpenLara.vcxproj create mode 100644 src/platform/xb1/OpenLara.vcxproj.filters create mode 100644 src/platform/xb1/OpenLara.vcxproj.user create mode 100644 src/platform/xb1/OpenLara_TemporaryKey.pfx create mode 100644 src/platform/xb1/Package.StoreAssociation.xml create mode 100644 src/platform/xb1/Package.appxmanifest create mode 100644 src/platform/xb1/main.cpp create mode 100644 src/shaders/sky.hlsl diff --git a/src/cache.h b/src/cache.h index 6605252..5a6721f 100644 --- a/src/cache.h +++ b/src/cache.h @@ -12,6 +12,10 @@ #define USE_SCREEN_TEX #endif +#if defined(_GAPI_D3D8) || defined(_GAPI_D3D9) || defined(_GAPI_D3D11) + #define EARLY_CLEAR +#endif + struct ShaderCache { enum Effect { FX_NONE = 0, FX_UNDERWATER = 1, FX_ALPHA_TEST = 2 }; @@ -86,8 +90,8 @@ struct ShaderCache { void prepareSky(int fx) { compile(Core::passSky, Shader::DEFAULT, fx, rsBase); if (Core::support.tex3D) { - compile(Core::passSky, Shader::SKY_CLOUDS, fx, rsBase); - compile(Core::passSky, Shader::SKY_CLOUDS_AZURE, fx, rsBase); + compile(Core::passSky, Shader::SKY_CLOUDS, fx, rsBase); + compile(Core::passSky, Shader::SKY_AZURE, fx, rsBase); } } diff --git a/src/core.h b/src/core.h index 621e639..adba0a4 100644 --- a/src/core.h +++ b/src/core.h @@ -13,7 +13,16 @@ #define USE_CUBEMAP_MIPS -#ifdef WIN32 +#ifdef __UWP__ + #define _OS_UWP 1 + #define _GAPI_D3D11 1 + + #ifdef __XB1__ + #define _OS_XB1 + #endif + + #undef OS_PTHREAD_MT +#elif WIN32 #define _OS_WIN 1 #define _GAPI_GL 1 //#define _GAPI_D3D9 1 @@ -137,6 +146,12 @@ #define NOMINMAX #include #include +#elif _X360 + #define _OS_X360 1 + // TODO +#elif _XB1 + #define _OS_XB1 1 + #define _GAPI_D3D11 1 #endif #ifndef _OS_PSP @@ -1014,6 +1029,7 @@ namespace Core { GAPI::deinit(); NAPI::deinit(); Sound::deinit(); + Stream::deinit(); } void setVSync(bool enable) { diff --git a/src/gapi/d3d11.h b/src/gapi/d3d11.h index 801a7e1..bb2426e 100644 --- a/src/gapi/d3d11.h +++ b/src/gapi/d3d11.h @@ -37,7 +37,11 @@ extern ID3D11Device *device; extern ID3D11DeviceContext *deviceContext; +#ifdef _OS_XB1 +extern IDXGISwapChain1 *swapChain; +#else extern IDXGISwapChain *swapChain; +#endif namespace GAPI { using namespace Core; @@ -134,7 +138,7 @@ namespace GAPI { #define SHADER_U(S,P) (underwater ? SHADER(S##_u,P) : SHADER(S,P)) #define SHADER_AU(S,P) ((underwater && alphatest) ? SHADER(S##_au,P) : (alphatest ? SHADER(S##_a,P) : SHADER_U(S,P))) - const uint8 *vSrc, *fSrc; + const uint8 *vSrc = NULL, *fSrc = NULL; switch (pass) { case passCompose : switch (type) { @@ -161,7 +165,14 @@ namespace GAPI { default : ASSERT(false); } break; - case passSky : SHADER ( gui, v ); SHADER ( gui, f ); break; // TODO + case passSky : + switch (type) { + case 0 : SHADER ( sky, v ); SHADER ( sky, f ); break; + case 1 : SHADER ( sky_clouds, v ); SHADER ( sky_clouds, f ); break; + case 2 : SHADER ( sky_azure, v ); SHADER ( sky_azure, f ); break; + default : ASSERT(false); + } + break; case passWater : switch (type) { case 0 : SHADER ( water_drop, v ); SHADER ( water_drop, f ); break; @@ -179,7 +190,7 @@ namespace GAPI { case 1 : SHADER ( filter_downsample, v ); SHADER ( filter_downsample, f ); break; case 3 : SHADER ( filter_grayscale, v ); SHADER ( filter_grayscale, f ); break; case 4 : SHADER ( filter_blur, v ); SHADER ( filter_blur, f ); break; - case 5 : SHADER ( filter_anaglyph, v ); SHADER ( filter_anaglyph, f ); break; // TODO anaglyph + case 5 : SHADER ( filter_anaglyph, v ); SHADER ( filter_anaglyph, f ); break; default : ASSERT(false); } break; diff --git a/src/inventory.h b/src/inventory.h index 7debb50..c9a12f9 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -82,8 +82,10 @@ struct OptionItem { int maxWidth = UI::getTextSize(STR[color + value]).x; maxWidth = maxWidth / 2 + 8; x += w * 0.5f; - if (checkValue(value - 1)) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108); - if (checkValue(value + 1)) UI::specOut(vec2(x + maxWidth, y), 109); + if (maxValue != 0xFF) { + if (checkValue(value - 1)) UI::specOut(vec2(x - maxWidth - 16.0f, y), 108); + if (checkValue(value + 1)) UI::specOut(vec2(x + maxWidth, y), 109); + } } return y + LINE_HEIGHT; } @@ -123,23 +125,51 @@ struct OptionItem { } }; -#define SETTINGS(x) OFFSETOF(Core::Settings, x) +#define SETTINGS(x) int32(OFFSETOF(Core::Settings, x)) + +#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) || defined(_OS_XBOX) || defined(_OS_XB1) + #define INV_GAMEPAD_ONLY +#else + #define INV_QUALITY +#endif + +#if !(defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1)) + #define INV_STEREO +#endif + +#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) + #define INV_SINGLE_PLAYER +#endif + +#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_CLOVER) || defined(_OS_XBOX) + #define INV_GAMEPAD_NO_TRIGGER +#endif + +#ifdef INV_SINGLE_PLAYER + #define INV_CTRL_START_OPTION 1 +#else + #define INV_CTRL_START_OPTION 2 +#endif + +#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1) + #define INV_VIBRATION +#endif static const OptionItem optDetail[] = { OptionItem( OptionItem::TYPE_TITLE, STR_SELECT_DETAIL ), OptionItem( ), +#ifdef INV_QUALITY OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_FILTER, SETTINGS( detail.filter ), STR_QUALITY_LOW, 0, 2 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_LIGHTING, SETTINGS( detail.lighting ), STR_QUALITY_LOW, 0, 2 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_SHADOWS, SETTINGS( detail.shadows ), STR_QUALITY_LOW, 0, 2 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_WATER, SETTINGS( detail.water ), STR_QUALITY_LOW, 0, 2 ), - OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SIMPLE_ITEMS, SETTINGS( detail.simple ), STR_OFF, 0, 1 ), -#if !defined(_OS_3DS) && !defined(_OS_GCW0) - OptionItem( OptionItem::TYPE_PARAM, STR_OPT_RESOLUTION, SETTINGS( detail.scale ), STR_SCALE_100, 0, 3 ), #endif -#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_PSP) || defined(_OS_RPI) || defined(_OS_PSV) + OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SIMPLE_ITEMS, SETTINGS( detail.simple ), STR_OFF, 0, 1 ), +#ifdef INV_QUALITY + OptionItem( OptionItem::TYPE_PARAM, STR_OPT_RESOLUTION, SETTINGS( detail.scale ), STR_SCALE_100, 0, 3 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_VSYNC, SETTINGS( detail.vsync ), STR_OFF, 0, 1 ), #endif -#if !defined(_OS_PSP) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_GCW0) +#ifdef INV_STEREO OptionItem( OptionItem::TYPE_PARAM, STR_OPT_DETAIL_STEREO, SETTINGS( detail.stereo ), STR_NO_STEREO, 0, #if defined(_OS_WIN) || defined(_OS_ANDROID) 4 /* with VR option */ @@ -164,28 +194,6 @@ static const OptionItem optSound[] = { #endif }; -#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_CLOVER) || defined(_OS_PSC) || defined(_OS_XBOX) - #define INV_GAMEPAD_ONLY -#endif - -#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_GCW0) - #define INV_SINGLE_PLAYER -#endif - -#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS) || defined(_OS_CLOVER) - #define INV_GAMEPAD_NO_TRIGGER -#endif - -#ifdef INV_SINGLE_PLAYER - #define INV_CTRL_START_OPTION 1 -#else - #define INV_CTRL_START_OPTION 2 -#endif - -#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI) || defined(_OS_GCW0) || defined(_OS_XBOX) - #define INV_VIBRATION -#endif - static const OptionItem optControls[] = { OptionItem( OptionItem::TYPE_TITLE, STR_SET_CONTROLS ), OptionItem( ), @@ -199,7 +207,7 @@ static const OptionItem optControls[] = { OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_RETARGET , SETTINGS( controls[0].retarget ), STR_OFF, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_MULTIAIM , SETTINGS( controls[0].multiaim ), STR_OFF, 0, 1 ), #ifdef INV_GAMEPAD_ONLY - OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( playerIndex ), STR_OPT_CONTROLS_GAMEPAD, 0, 0 ), + OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 0xFF ), #else OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 1 ), #endif @@ -499,14 +507,14 @@ struct Inventory { case cUp : nextSlot(slot, -1); break; case cDown : nextSlot(slot, +1); break; case cLeft : - if (opt->type == OptionItem::TYPE_PARAM && opt->checkValue(value - 1)) { + if (opt->type == OptionItem::TYPE_PARAM && (opt->maxValue != 0xFF) && opt->checkValue(value - 1)) { value--; timer = 0.2f; return opt; } break; case cRight : - if (opt->type == OptionItem::TYPE_PARAM && opt->checkValue(value + 1)) { + if (opt->type == OptionItem::TYPE_PARAM && (opt->maxValue != 0xFF) && opt->checkValue(value + 1)) { value++; timer = 0.2f; return opt; @@ -2090,7 +2098,7 @@ struct Inventory { const char *bSelect = STR[STR_KEY_FIRST + ikEnter]; const char *bBack = STR[STR_KEY_FIRST + Core::settings.controls[playerIndex].keys[cInventory].key]; - #if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) + #if defined(_OS_SWITCH) || defined(_OS_3DS) || defined(_OS_GCW0) || defined(_OS_XBOX) || defined(_OS_XB1) bSelect = "A"; bBack = "B"; #endif diff --git a/src/level.h b/src/level.h index 64c5ba4..a7c02b4 100644 --- a/src/level.h +++ b/src/level.h @@ -1808,7 +1808,7 @@ struct Level : IGame { } void renderSky() { - #ifndef _GAPI_GL + #if !defined(_GAPI_GL) && !defined(_GAPI_D3D11) return; #endif ASSERT(mesh->transparent == 0); @@ -1819,7 +1819,7 @@ struct Level : IGame { if (level.version & TR::VER_TR1) { if (Core::settings.detail.lighting < Core::Settings::HIGH || !Core::support.tex3D || !TR::getSkyParams(level.id, skyParams)) return; - type = Shader::SKY_CLOUDS_AZURE; + type = Shader::SKY_AZURE; } else { // TR2, TR3 if (level.extra.sky == -1) return; @@ -1857,7 +1857,7 @@ struct Level : IGame { time = (time - int(time)) * SKY_TIME_PERIOD; } - Core::active.shader->setParam(uParam, vec4(skyParams.wind * time, 1.0)); + Core::active.shader->setParam(uParam, vec4(skyParams.wind * time * 2.0f, 1.0)); Core::active.shader->setParam(uLightProj, *(mat4*)&skyParams); Core::active.shader->setParam(uPosScale, skyParams.cloudDownColor, 2); @@ -2608,7 +2608,18 @@ struct Level : IGame { Texture *screen = NULL; if (water) { screen = (waterCache && waterCache->visible) ? waterCache->getScreenTex() : NULL; - Core::setTarget(screen, NULL, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR | (screen ? RT_STORE_DEPTH : 0)); // render to screen texture (FUCK YOU iOS!) or back buffer + + int clearFlags = RT_STORE_COLOR; + + if (screen) { + clearFlags |= RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_DEPTH; + } + + #ifndef EARLY_CLEAR + clearFlags |= RT_CLEAR_COLOR | RT_CLEAR_DEPTH; + #endif + + Core::setTarget(screen, NULL, clearFlags); // render to screen texture or back buffer Core::validateRenderState(); setupBinding(); } @@ -2649,7 +2660,7 @@ struct Level : IGame { Core::Pass pass = Core::pass; if (water && waterCache && waterCache->visible && screen) { - Core::setTarget(NULL, NULL, RT_STORE_COLOR); + Core::setTarget(NULL, NULL, RT_CLEAR_DEPTH | RT_STORE_COLOR); Core::validateRenderState(); waterCache->blitTexture(screen); } @@ -3201,6 +3212,13 @@ struct Level : IGame { #endif } } + + #ifdef EARLY_CLEAR + if (view == 0 && eye <= 0) { + Core::setTarget(NULL, NULL, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR | RT_STORE_DEPTH); + Core::validateRenderState(); + } + #endif } void renderEye(int eye, bool showUI, bool invBG) { diff --git a/src/libs/tinf/tinflate.c b/src/libs/tinf/tinflate.c index b2bec56..8de5f73 100644 --- a/src/libs/tinf/tinflate.c +++ b/src/libs/tinf/tinflate.c @@ -303,7 +303,7 @@ static int tinf_inflate_block_data(TINF_DATA *d, TINF_TREE *lt, TINF_TREE *dt) /* check for end of block */ if (sym == 256) { - *d->destLen += d->dest - start; + *d->destLen += (unsigned int)(d->dest - start); return TINF_OK; } diff --git a/src/platform/xb1/Assets/LargeTile.scale-200.png b/src/platform/xb1/Assets/LargeTile.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8e2cb58d81da4ec9fffa88541443765dd3d7f8 GIT binary patch literal 11210 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 Z2NZA_YlCIEF6@6~HHa4YyP`Gh{{YN1Hyr=~ literal 0 HcmV?d00001 diff --git a/src/platform/xb1/Assets/SmallTile.scale-200.png b/src/platform/xb1/Assets/SmallTile.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e72e284f9b058543bd0c82dc903b18a5dafa84 GIT binary patch literal 2296 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 literal 0 HcmV?d00001 diff --git a/src/platform/xb1/Assets/Square150x150Logo.scale-200.png b/src/platform/xb1/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..78f8b2354c252e7b1929ca1d9353c4bc132adefd GIT binary patch literal 5198 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 IM6N<$g3+iZ9{>OV literal 0 HcmV?d00001 diff --git a/src/platform/xb1/Assets/Square44x44Logo.altform-unplated_targetsize-48.png b/src/platform/xb1/Assets/Square44x44Logo.altform-unplated_targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..42fb2bdbac909e43fa7484cb12614fc21e31dbe6 GIT binary patch literal 706 zcmV;z0zLhSP)c~w|hT3K6LUX{VXU>Ypjj0U?+ElaN%mPA-s7z_pq z zwHJk(xq_t3IkjPT=Q(_tp`8BOB~Fd+uA4;pPRlb`0wj~C*g663!sHtZ677X%N$f|1filVKA#RddFkcsJ z_NJ!_qMoIpe2_9ttH9nwH!z>$ceCJ@HQLzyVDkP=oi0&ASIcAYUwu!(>!B2nc`(pQ zae|)9Kq*zv*iZXAy=o2PauKzqeEyR9D50g)Feiu$-INHBk?zXrW1L2`#GM)-*ZM1U z09s2#pcir=XqMK2wpO>Dyhbm6{5ZKo?$JiP^|#7~hv7!RQz>i$4Pd1C<7;pI2Cc!y z5bPcGzoR|N?oSsi~*kS8vLumEf3d1?jlfqmGi+XE&P`lEu5}k3jt)gd3itg o>J|XOiWBsQBhS@ zRbO9UW@ct-X=!Y1Y;tjObaZrnetv<0frp2Oj*gC!l9HE~mz+bIE@$vEU^78fd_4fAm_xJbs z`1twx`TP6({QUg={r&#_{{R2~L`HN0000E`Nkl+a3fcwCK+IOO@Ak?Y2`@e>lB$}V!hiZt|DO^8#2QJDg|YENYVLl` zV(+?XAt|}24yLYs^GrU~5|RanPgEu8XY9Zrl?=L^E1e7U{aH0x$%4J-STE_>9-qP{ zE4abHsK8$DJQ>)^EghpgyZ0BVz=G0vS+R1Gu403_DwmoLTapNDaY45R4_fK0=&9#Y z?~lhY$(oHBD|$zeMBvIt2K?5qqyzgESowNWmQ>(_umXENh)uWI0+$MG!Xz8$D#MC9 zvZ)*vSadj#T%GYOS+AM0pgjDnIdGEbmoqr%y>^aJ>%3EyFM|^#;?`fNoR6oMBL>HN zSZgH-_k&Jd(B&_;2Z2a}bvdGoNR1XN$5)-(!{6>8BeqLVuUtu$%J(|V?|j(n(=#w| zt>B#Fa})9#Ze`(vXYVnGCIe>&KPQ_-l5ljqD!)*fljFJApYPyt4oIHlVLU;PMdfJ=IHd??2U>1-SPqcCJ}Jfc_6o6jMu zyS&MP{zt*k;*#oB!x^k(<5hM@rWMG}+!K2L*;4YEVBd2Uzl~JA?wp1UYHw6J_Qc4) z|GB2m_%JwO@O*&Tb>5yB==ic4EY-!LbIMlq8QJ&CXD24*ERSL3?6mP+wZRnV{y0OKG(!% zxUwF;xI2tNi(bE-FT@D0=^V!uvH7)pxC)zL;Xn+D{+o-)7>kp^OdW@Nxk@Y!#+kS> zE$Pw)7h{4D}pQ+-?yCTGLJgg&f$4K~g^gJ<_^FDzQUKE3n2Hj=gX-*vxKTpw6y zxM=mSyby~sl3tb9VzOM=*22xTyk5kTclsts| zZ|)VHl2q5ox@Jn~avqqIvW~d&n)LB=G1n{xHn`v%KN^tS9brmkPO*_K070K~w#5{3 z1#QlQet2@4EkMw^?oL6PFrHg+)5xM6~-{#Fmr(cK7ruYvkx8?Z|VFn$Yv1luc z*ayyd*@!P#lG_g*{`K6J@~r|Bzj+pTCnb>ruIITJ5tF|n35ML{E)(bSt1rp%q9WPi zqTJIkYDzBhehofr9@w~IpBS`Vg2)zksJs&xY)kOSzyc|cVB&YX!12=+Wb^gy)wQLl zV@5?_b)GedpfO>f*X@UiV80>-@m$cSXQ8SPgDze0fph-Z>XQS@>)fxXDLUwrm^@_X*9GeA6N{xLqyJzGsMU zBCzKWvUE~vm3tlRQZXvi0xwoENQ^)X>guXHksk_5jvFq!9`ASbqE!gK6q~>HJ?@mY z_Fw6ol3&DbLAl*2@8E@%E*)Li;?6d+itHL_PbPP*#@5T2##OPAN_IpGENbcB zzdd7#Sc`*qYHsTGQe7JB002ovPDHLkV1jV20UrPW literal 0 HcmV?d00001 diff --git a/src/platform/xb1/Assets/Square44x44Logo.targetsize-48.png b/src/platform/xb1/Assets/Square44x44Logo.targetsize-48.png new file mode 100644 index 0000000000000000000000000000000000000000..42fb2bdbac909e43fa7484cb12614fc21e31dbe6 GIT binary patch literal 706 zcmV;z0zLhSP)c~w|hT3K6LUX{VXU>Ypjj0U?+ElaN%mPA-s7z_pq z zwHJk(xq_t3IkjPT=Q(_tp`8BOB~Fd+uA4;pPRlb`0wj~C*g663!sHtZ677X%N$f|1filVKA#RddFkcsJ z_NJ!_qMoIpe2_9ttH9nwH!z>$ceCJ@HQLzyVDkP=oi0&ASIcAYUwu!(>!B2nc`(pQ zae|)9Kq*zv*iZXAy=o2PauKzqeEyR9D50g)Feiu$-INHBk?zXrW1L2`#GM)-*ZM1U z09s2#pcir=XqMK2wpO>Dyhbm6{5ZKo?$JiP^|#7~hv7!RQz>i$4Pd1C<7;pI2Cc!y z5bPcGzoR|N?oSsi~*kS8vLumEf3d1?jlfqmGi+XE&P`lEu5}k3jt)gd3itg o>J|X@$&cC;5ENvSeT-qRzyz zlqYv5h{!;v|F`Iv@UIa3+GnfX;~? zFEfAyR9!g{pRSHK4~b|nO+orsn=g5RbZ8TV^YLOY14ypt(~zgjUC72E-yZ1GPMSY6 zfP8Pn#HFErUuFL{zA+l*HbTO&gJb zZ{HD6;{Rp&JU<`K5ioh*)XHQWS*R~0ZC^+ zFS6MwGUABINm9+p5v5xy?iDsji6~Ch$1BBN60H$MHpSR|q|uerGILWlARA)r58Pqt77t^oQnrDPlcJ94D+N?jugX&6#*9TNNr34-nU598*ajvL3?J zDNT=EOg!3AdSYGTnsshYHO}<%AkC?wAH}InRkk7PF!qu=6Z^A?6HuO+?Jj|;>v~BX zvHMJ8;#C1rW-lWi=u^>x>(VRyJpPR3?uBc}Gg(!0l3#H4cCB7{J1T?A6=K|!zE+W3wJ8sHU zMO^p_4`+`32yxtNjENuK9Yq9%TdFDh4kdYO0mL&X@QF)<_!!VewUx^`h zJaJym`_U3KDaa81+7QjmUo2VTMQ#=%*mdWkl!u7p#k)ggKM(oa(5}gJU^KQOWM<)Q zoL_Sp#Mm7-#()Frs#2MJS5*goP`>CkXMF_JnHCX~g)WTEUNP}zb+bC*&{D0w2Z2Cj z_NGoX8JEi0d$Y1nr4|w1XPk1tK?MQ{0U`_A58sjT77_)3phaaFAp}_p!6{$(R6>ja z^I8o_Y$CjkHeLGgY#So7j8SK@T0X@0kBjff`Os}Q$`Bynf@d+Wuk@qRt(Vp+&7Yiq=7k7kxMehwkBWNjas3qn!g#j zK^BVRQ?U^!v4MzFYe1{+- ni3AY=VjkH_B!vH^f57<<2E05hM_=vT00000NkvXXu0mjfObPnH literal 0 HcmV?d00001 diff --git a/src/platform/xb1/Assets/Wide310x150Logo.scale-200.png b/src/platform/xb1/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..12e41d09e6961eb138cb6c9419c416222133f547 GIT binary patch literal 5645 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 literal 0 HcmV?d00001 diff --git a/src/platform/xb1/OpenLara.sln b/src/platform/xb1/OpenLara.sln new file mode 100644 index 0000000..86965dc --- /dev/null +++ b/src/platform/xb1/OpenLara.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1022 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenLara", "OpenLara.vcxproj", "{0DF8D188-E91B-49C5-A2C5-75C430648B5E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.ActiveCfg = Debug|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.Build.0 = Debug|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM.Deploy.0 = Debug|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.Build.0 = Debug|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.ActiveCfg = Debug|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.Build.0 = Debug|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x64.Deploy.0 = Debug|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.ActiveCfg = Debug|Win32 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.Build.0 = Debug|Win32 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Debug|x86.Deploy.0 = Debug|Win32 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.ActiveCfg = Release|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.Build.0 = Release|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM.Deploy.0 = Release|ARM + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.ActiveCfg = Release|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.Build.0 = Release|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|ARM64.Deploy.0 = Release|ARM64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.ActiveCfg = Release|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.Build.0 = Release|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x64.Deploy.0 = Release|x64 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.ActiveCfg = Release|Win32 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.Build.0 = Release|Win32 + {0DF8D188-E91B-49C5-A2C5-75C430648B5E}.Release|x86.Deploy.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {037CFBE7-50F7-492C-B712-18C42FD39BE3} + EndGlobalSection +EndGlobal diff --git a/src/platform/xb1/OpenLara.vcxproj b/src/platform/xb1/OpenLara.vcxproj new file mode 100644 index 0000000..f12b042 --- /dev/null +++ b/src/platform/xb1/OpenLara.vcxproj @@ -0,0 +1,332 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + Debug + ARM64 + + + Release + ARM64 + + + + {0df8d188-e91b-49c5-a2c5-75c430648b5e} + DirectXApp + OpenLara + en-US + 14.0 + true + Windows Store + 10.0.17763.0 + 10.0.16299.0 + 10.0 + + + + Application + true + v141 + + + Application + true + v141 + + + Application + true + v141 + true + + + Application + true + v141 + + + Application + false + true + v141 + true + + + Application + false + true + v141 + true + + + Application + false + true + v141 + true + + + Application + false + true + v141 + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OpenLara_TemporaryKey.pfx + False + False + Always + x64 + 0F7D3218F53B8902E26C7E787E16EB3520A9898C + 1 + OnApplicationRun + False + + + ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64 + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm64; $(VCInstallDir)\lib\arm64 + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + NDEBUG;%(PreprocessorDefinitions) + + + + + d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + + + pch.h + $(IntDir)pch.pch + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + _DEBUG;%(PreprocessorDefinitions) + + + + + vccorlib.lib; msvcrt.lib; d2d1.lib; d3d11.lib; dxgi.lib; windowscodecs.lib; dwrite.lib; %(AdditionalDependencies) + %(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\amd64; $(VCInstallDir)\lib\amd64 + vccorlib;msvcrt + + + $(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories) + /bigobj %(AdditionalOptions) + 4453;28204 + __XB1__;__UWP__;NOMINMAX;_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions) + NotUsing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + false + + + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/platform/xb1/OpenLara.vcxproj.filters b/src/platform/xb1/OpenLara.vcxproj.filters new file mode 100644 index 0000000..619c14b --- /dev/null +++ b/src/platform/xb1/OpenLara.vcxproj.filters @@ -0,0 +1,103 @@ + + + + + db6ab835-f1cb-4efb-94eb-2bdfd0c3a3d2 + bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png + + + {ba6867bc-3dac-49f7-b628-c02d534f8825} + + + {d606bd3a-145c-432f-ae5a-66dcb178b466} + + + {d5e2e716-2bc5-43a1-bebc-4c5631d0b1bc} + + + + + + libs\tinf + + + libs\stb_vorbis + + + + + libs\tinf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + \ No newline at end of file diff --git a/src/platform/xb1/OpenLara.vcxproj.user b/src/platform/xb1/OpenLara.vcxproj.user new file mode 100644 index 0000000..8551252 --- /dev/null +++ b/src/platform/xb1/OpenLara.vcxproj.user @@ -0,0 +1,23 @@ + + + + UWPRemoteDebugger + 192.168.1.49 + + + AppHostLocalDebugger + 192.168.1.49 + + + UWPRemoteDebugger + 192.168.1.49 + + + True + False + x64 + False + 192.168.1.49 + True + + \ No newline at end of file diff --git a/src/platform/xb1/OpenLara_TemporaryKey.pfx b/src/platform/xb1/OpenLara_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..fc69764f43cbcc350600d74caed1b4780f7521c5 GIT binary patch literal 2512 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 + + CN=EAAE5CD2-DCE4-4EC0-B98D-40B753FDC939 + XProger + MSA + http://www.w3.org/2001/04/xmlenc#sha256 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 39822XProger.OpenLara + + OpenLara + + + + + \ No newline at end of file diff --git a/src/platform/xb1/Package.appxmanifest b/src/platform/xb1/Package.appxmanifest new file mode 100644 index 0000000..312c87c --- /dev/null +++ b/src/platform/xb1/Package.appxmanifest @@ -0,0 +1,33 @@ + + + + + + OpenLara + XProger + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/platform/xb1/main.cpp b/src/platform/xb1/main.cpp new file mode 100644 index 0000000..1207fb1 --- /dev/null +++ b/src/platform/xb1/main.cpp @@ -0,0 +1,503 @@ +#include +#include +#include +#include + +#include "game.h" + +using namespace Concurrency; +using namespace Windows; +using namespace Windows::ApplicationModel::Activation; +using namespace Windows::UI::Core; +using namespace Windows::Foundation; +using namespace Windows::Graphics; +using namespace Windows::Gaming::Input; +using namespace Windows::Storage; +using namespace Windows::Globalization; +using namespace Windows::System::UserProfile; +using namespace Microsoft::WRL; + + +ID3D11Device *device; +ID3D11DeviceContext *deviceContext; +IDXGISwapChain1 *swapChain; + + +// multi-threading +void* osMutexInit() +{ + CRITICAL_SECTION *CS = new CRITICAL_SECTION(); + InitializeCriticalSection(CS); + return CS; +} + +void osMutexFree(void *obj) +{ + DeleteCriticalSection((CRITICAL_SECTION*)obj); + delete (CRITICAL_SECTION*)obj; +} + +void osMutexLock(void *obj) +{ + EnterCriticalSection((CRITICAL_SECTION*)obj); +} + +void osMutexUnlock(void *obj) +{ + LeaveCriticalSection((CRITICAL_SECTION*)obj); +} + + +// timing +LARGE_INTEGER timerFreq; +LARGE_INTEGER timerStart; + +int osGetTimeMS() +{ + LARGE_INTEGER time; + QueryPerformanceCounter(&time); + return int32((time.QuadPart - timerStart.QuadPart) * 1000L / timerFreq.QuadPart); +} + + +// input +struct JoyDevice { + Gamepad^ gamepad; + int time; + float vL, vR; + float oL, oR; +} joyDevice[INPUT_JOY_COUNT]; + +Core::Mutex joyLock; + +#define JOY_MIN_UPDATE_FX_TIME 50 +#define JOY_TRIGGER_THRESHOLD 0.1f + +void osJoyVibrate(int index, float L, float R) +{ + joyDevice[index].vL = L; + joyDevice[index].vR = R; +} + +float joyTrigger(double value) +{ + return clamp(((float)value - JOY_TRIGGER_THRESHOLD) / (1.0f - JOY_TRIGGER_THRESHOLD), 0.0f, 1.0f); +} + +void joyUpdate() +{ + OS_LOCK(joyLock); + + #define JOY_BUTTON(index, btn, mask) Input::setJoyDown(index, btn, (state.Buttons & mask) == mask); + + for (int i = 0; i < INPUT_JOY_COUNT; i++) + { + JoyDevice &joy = joyDevice[i]; + + if (!joy.gamepad) continue; + + GamepadReading& state = joy.gamepad->GetCurrentReading(); + + JOY_BUTTON(i, jkA, GamepadButtons::A); + JOY_BUTTON(i, jkB, GamepadButtons::B); + JOY_BUTTON(i, jkX, GamepadButtons::X); + JOY_BUTTON(i, jkY, GamepadButtons::Y); + JOY_BUTTON(i, jkLeft, GamepadButtons::DPadLeft); + JOY_BUTTON(i, jkRight, GamepadButtons::DPadRight); + JOY_BUTTON(i, jkUp, GamepadButtons::DPadUp); + JOY_BUTTON(i, jkDown, GamepadButtons::DPadDown); + JOY_BUTTON(i, jkSelect, GamepadButtons::View); + JOY_BUTTON(i, jkStart, GamepadButtons::Menu); + JOY_BUTTON(i, jkL, GamepadButtons::LeftThumbstick); + JOY_BUTTON(i, jkR, GamepadButtons::RightThumbstick); + JOY_BUTTON(i, jkLB, GamepadButtons::LeftShoulder); + JOY_BUTTON(i, jkRB, GamepadButtons::RightShoulder); + + Input::setJoyPos(i, jkL, vec2(float(state.LeftThumbstickX), -float(state.LeftThumbstickY))); + Input::setJoyPos(i, jkR, vec2(float(state.RightThumbstickX), -float(state.RightThumbstickY))); + Input::setJoyPos(i, jkLT, vec2(joyTrigger(state.LeftTrigger), 0.0f)); + Input::setJoyPos(i, jkRT, vec2(joyTrigger(state.RightTrigger), 0.0f)); + + if ((joy.vL != joy.oL || joy.vR != joy.oR) && osGetTimeMS() >= joy.time) { + GamepadVibration vibration; + vibration.LeftMotor = joy.vL; + vibration.RightMotor = joy.vR; + joy.gamepad->Vibration = vibration; + joy.oL = joy.vL; + joy.oR = joy.vR; + joy.time = osGetTimeMS() + JOY_MIN_UPDATE_FX_TIME; + } + } + + #undef JOY_BUTTON +} + +void joyAdd(Platform::Object^, Gamepad^ args) +{ + OS_LOCK(joyLock); + for (int i = 0; i < INPUT_JOY_COUNT; i++) + { + JoyDevice &joy = joyDevice[i]; + if (joy.gamepad) continue; + joy.gamepad = args; + return; + } +} + +void joyRemove(Platform::Object^, Gamepad^ args) +{ + OS_LOCK(joyLock); + for (int i = 0; i < INPUT_JOY_COUNT; i++) + { + JoyDevice &joy = joyDevice[i]; + if (!joy.gamepad) continue; + if (joy.gamepad == args) { + joy = {}; + return; + } + } +} + +void joyInit() +{ + Gamepad::GamepadAdded += ref new EventHandler(&joyAdd); + Gamepad::GamepadRemoved += ref new EventHandler(&joyRemove); +} + + +// sound +#define SND_SIZE 4704*sizeof(int16) +#define SND_MAX_BUFFERS 2 + +struct AudioContext : public IXAudio2VoiceCallback +{ + Microsoft::WRL::ComPtr pXAudio2; + HANDLE event; + + virtual void STDMETHODCALLTYPE OnVoiceProcessingPassStart(UINT32) override {} + virtual void STDMETHODCALLTYPE OnVoiceProcessingPassEnd() override {} + virtual void STDMETHODCALLTYPE OnStreamEnd() override {} + virtual void STDMETHODCALLTYPE OnLoopEnd(void*) override {} + virtual void STDMETHODCALLTYPE OnVoiceError(void*, HRESULT) override {} + virtual void STDMETHODCALLTYPE OnBufferStart(void*) override {} + + virtual void STDMETHODCALLTYPE OnBufferEnd(void* pBufferContext) + { + SetEvent(event); + } + + AudioContext() + { + event = CreateEventEx(NULL, NULL, 0, EVENT_ALL_ACCESS); + } + + virtual ~AudioContext() + { + CloseHandle(event); + } + + void start() + { + CreateThread(NULL, 0, fill, this, 0, NULL); + } + + void stop() { + SetEvent(event); + } + + void suspend() { + pXAudio2->StopEngine(); + } + + void resume() { + pXAudio2->StartEngine(); + } + + static DWORD WINAPI fill(LPVOID lpParam) + { + AudioContext* context = (AudioContext*)lpParam; + + IXAudio2MasteringVoice* masteringVoice; + IXAudio2SourceVoice* sourceVoice; + uint32 bufferIndex = 0; + + if (FAILED(XAudio2Create(context->pXAudio2.GetAddressOf(), 0))) { + return 0; + } + + if (FAILED(context->pXAudio2->CreateMasteringVoice(&masteringVoice))) { + return 0; + } + + uint8* data = new uint8[SND_SIZE * SND_MAX_BUFFERS]; + + WAVEFORMATEX waveFmt = { WAVE_FORMAT_PCM, 2, 44100, 44100 * 4, 4, 16, sizeof(waveFmt) }; + + if (FAILED(context->pXAudio2->CreateSourceVoice(&sourceVoice, &waveFmt, 0, XAUDIO2_DEFAULT_FREQ_RATIO, context))) { + return 0; + } + + if (FAILED(sourceVoice->Start(0))) { + return 0; + } + + while (!Core::isQuit) + { + XAUDIO2_VOICE_STATE state; + sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED); + + if (state.BuffersQueued < SND_MAX_BUFFERS) { + XAUDIO2_BUFFER buffer = {}; + buffer.AudioBytes = SND_SIZE; + buffer.pAudioData = data + SND_SIZE * bufferIndex; + + Sound::fill((Sound::Frame*)buffer.pAudioData, buffer.AudioBytes / 4); + + bufferIndex = (bufferIndex + 1) % SND_MAX_BUFFERS; + + sourceVoice->SubmitSourceBuffer(&buffer); + } else { + WaitForSingleObject(context->event, INFINITE); + } + } + + delete[] data; + + return 0; + } +}; + + +struct RenderContext +{ + void init(CoreWindow^ window) + { + D3D_FEATURE_LEVEL featureLevels[] = { + D3D_FEATURE_LEVEL_10_0, + D3D_FEATURE_LEVEL_9_3, + D3D_FEATURE_LEVEL_9_2, + D3D_FEATURE_LEVEL_9_1 + }; + + HRESULT ret; + ret = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION, &device, NULL, &deviceContext); + ASSERT(ret == S_OK); + + ComPtr dxgiDevice; + ComPtr(device).As(&dxgiDevice); + + ComPtr dxgiAdapter; + dxgiDevice->GetAdapter(&dxgiAdapter); + + ComPtr dxgiFactory; + dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)); + + DXGI_SWAP_CHAIN_DESC1 desc = {}; + desc.Width = Core::width; + desc.Height = Core::height; + desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; + desc.BufferCount = 2; + desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; + desc.Scaling = DXGI_SCALING_NONE; + desc.AlphaMode = DXGI_ALPHA_MODE_IGNORE; + + ret = dxgiFactory->CreateSwapChainForCoreWindow(device, reinterpret_cast(window), &desc, NULL, &swapChain); + ASSERT(ret == S_OK); + + dxgiDevice->SetMaximumFrameLatency(1); + } + + void present() + { + swapChain->Present(Core::settings.detail.vsync ? 1 : 0, 0); + } +}; + + +ref class View sealed : public ApplicationModel::Core::IFrameworkView +{ +private: + AudioContext audioContext; + RenderContext renderContext; + + bool m_windowVisible; + +public: + View() : m_windowVisible(true) {}; + + virtual void Initialize(ApplicationModel::Core::CoreApplicationView^ applicationView) + { + applicationView->Activated += ref new TypedEventHandler(this, &View::OnActivated); + ApplicationModel::Core::CoreApplication::Suspending += ref new EventHandler(this, &View::OnSuspending); + ApplicationModel::Core::CoreApplication::Resuming += ref new EventHandler(this, &View::OnResuming); + } + + virtual void SetWindow(CoreWindow^ window) + { + window->VisibilityChanged += ref new TypedEventHandler(this, &View::OnVisibilityChanged); + window->Closed += ref new TypedEventHandler(this, &View::OnWindowClosed); + SystemNavigationManager::GetForCurrentView()->BackRequested += ref new EventHandler(this, &View::OnBackRequested); + + Core::width = 1920; + Core::height = 1080; + + renderContext.init(window); + } + + int checkLanguage() + { + Platform::String^ language = GlobalizationPreferences::Languages->GetAt(0); + const wchar_t* id = language->Begin(); + + #define CHECK(str) (wcsstr(id, L##str"-") != 0) + + int str = STR_LANG_EN; + + if (CHECK("fr")) { + str = STR_LANG_FR; + } else if (CHECK("de")) { + str = STR_LANG_DE; + } else if (CHECK("es")) { + str = STR_LANG_ES; + } else if (CHECK("it")) { + str = STR_LANG_IT; + } else if (CHECK("pl")) { + str = STR_LANG_PL; + } else if (CHECK("pt")) { + str = STR_LANG_PT; + } else if (CHECK("ru") || CHECK("be") || CHECK("uk")) { + str = STR_LANG_RU; + } else if (CHECK("ja")) { + str = STR_LANG_JA; + } else if (CHECK("gr")) { + str = STR_LANG_GR; + } else if (CHECK("fi")) { + str = STR_LANG_FI; + } else if (CHECK("cs")) { + str = STR_LANG_CZ; + } else if (CHECK("zh")) { + str = STR_LANG_CN; + } + + return str - STR_LANG_EN; + } + + virtual void Load(Platform::String^ entryPoint) + { + // + } + + virtual void Run() + { + contentDir[0] = saveDir[0] = cacheDir[0] = 0; + + StorageFolder^ localFolder = ApplicationData::Current->LocalFolder; + wcstombs(contentDir, localFolder->Path->Data(), sizeof(contentDir)); + strcat(contentDir, "\\"); + strcpy(saveDir, contentDir); + strcpy(cacheDir, contentDir); + + Stream::addPack("content.zip"); + + GAPI::defRTV = NULL; + GAPI::defDSV = NULL; + + QueryPerformanceFrequency(&timerFreq); + QueryPerformanceCounter(&timerStart); + + Sound::channelsCount = 0; + + joyInit(); + audioContext.start(); + + Core::defLang = checkLanguage(); + + Game::init((const char*)NULL); + + while (!Core::isQuit) + { + if (m_windowVisible) + { + CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); + + joyUpdate(); + + if (Game::update()) { + Game::render(); + renderContext.present(); + } + } else { + CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending); + } + } + + audioContext.stop(); + Game::deinit(); + } + + virtual void Uninitialize() + { + // TODO save state? + } + +protected: + void OnActivated(ApplicationModel::Core::CoreApplicationView^ applicationView, ApplicationModel::Activation::IActivatedEventArgs^ args) + { + CoreWindow::GetForCurrentThread()->Activate(); + } + + void OnSuspending(Platform::Object^ sender, ApplicationModel::SuspendingEventArgs^ args) + { + audioContext.suspend(); + + ApplicationModel::SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral(); + + create_task([this, deferral]() + { + // TODO save state? + deferral->Complete(); + }); + } + + void OnResuming(Platform::Object^ sender, Platform::Object^ args) + { + audioContext.resume(); + // TODO load state? + } + + void OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) + { + m_windowVisible = args->Visible; + } + + void OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) + { + ::Core::quit(); + } + + void OnBackRequested(Platform::Object^, BackRequestedEventArgs^ args) + { + args->Handled = true; + } +}; + + +ref class ViewSource sealed : ApplicationModel::Core::IFrameworkViewSource +{ +public: + virtual ApplicationModel::Core::IFrameworkView^ CreateView() + { + return ref new View(); + } +}; + + +[Platform::MTAThread] +int main(Platform::Array^) { + auto viewSource = ref new ViewSource(); + ApplicationModel::Core::CoreApplication::Run(viewSource); + return 0; +} \ No newline at end of file diff --git a/src/shader.h b/src/shader.h index 25306a6..754e516 100644 --- a/src/shader.h +++ b/src/shader.h @@ -10,7 +10,7 @@ struct Shader : GAPI::Shader { SPRITE = 0, FLASH, ROOM, ENTITY, MIRROR, FILTER_UPSCALE = 0, FILTER_DOWNSAMPLE, FILTER_DOWNSAMPLE_DEPTH, FILTER_GRAYSCALE, FILTER_BLUR, FILTER_ANAGLYPH, FILTER_EQUIRECTANGULAR, WATER_DROP = 0, WATER_SIMULATE, WATER_CAUSTICS, WATER_RAYS, WATER_MASK, WATER_COMPOSE, - SKY_TEXTURE = 0, SKY_CLOUDS, SKY_CLOUDS_AZURE, + SKY_TEXTURE = 0, SKY_CLOUDS, SKY_AZURE, MAX = 6 }; diff --git a/src/shaders/common.hlsl b/src/shaders/common.hlsl index c5ed1c7..9c5edd9 100644 --- a/src/shaders/common.hlsl +++ b/src/shaders/common.hlsl @@ -62,8 +62,8 @@ struct VS_INPUT { #define SAMPLE_2D_LINEAR_WRAP(T,uv) T.Sample(smpLinearWrap, uv) #define SAMPLE_2D_CMP(T,uv) T.SampleCmp(smpCmp, uv.xy, uv.z) #define SAMPLE_2D_LOD0(T,uv) T.SampleLevel(smpLinear, uv, 0) - #define SAMPLE_3D(T,uv) T.Sample(smpLinear, uv) - #define SAMPLE_CUBE(T,uv) T.Sample(smpLinear, uv) + #define SAMPLE_3D(T,uv) T.SampleLevel(smpLinearWrap, uv, 0) + #define SAMPLE_CUBE(T,uv) T.Sample(smpLinear, uv) #else sampler2D sDiffuse : register(s0); sampler2D sNormal : register(s1); @@ -81,6 +81,8 @@ struct VS_INPUT { #define SAMPLE_2D_CMP(T,uv) ((tex2D(T, uv.xy) => uv.z) ? 1 : 0) #define SAMPLE_3D(T,uv) tex3D(T, uv) #define SAMPLE_CUBE(T,uv) texCUBE(T, uv) + + #define SV_POSITION POSITION #endif float4 uParam : register( c0 ); @@ -147,15 +149,16 @@ float calcCausticsV(float3 coord) { return 0.5 + abs(sin(dot(coord.xyz, 1.0 / 1024.0) + uParam.x)) * 0.75; } +#ifndef NORMAL_AS_3D float3 calcHeightMapNormal(float2 tcR, float2 tcB, float base) { float dx = SAMPLE_2D_LOD0(sNormal, tcR).x - base; float dz = SAMPLE_2D_LOD0(sNormal, tcB).x - base; return normalize( float3(dx, 64.0 / (1024.0 * 8.0), dz) ); } +#endif -half calcFresnel(half VoH, half f0) { - half f = (half)pow(1.0 - VoH, 5.0); - return f + f0 * (1.0h - f); +float calcFresnel(float NdotV, float f0) { + return f0 + (1.0 - f0) * pow(1.0 - NdotV, 5.0); } void applyFogUW(inout float3 color, float3 coord, float waterFogDist, float waterColorDist) { diff --git a/src/shaders/compile_d3d11.bat b/src/shaders/compile_d3d11.bat index 2382817..6e38efd 100644 --- a/src/shaders/compile_d3d11.bat +++ b/src/shaders/compile_d3d11.bat @@ -25,6 +25,10 @@ call :compile filter _grayscale "/DGRAYSCALE" call :compile filter _blur "/DBLUR" call :compile filter _anaglyph "/DANAGLYPH" +call :compile sky +call :compile sky _clouds "/DSKY_CLOUDS" +call :compile sky _azure "/DSKY_AZURE" + call :compile gui diff --git a/src/shaders/sky.hlsl b/src/shaders/sky.hlsl new file mode 100644 index 0000000..2b05139 --- /dev/null +++ b/src/shaders/sky.hlsl @@ -0,0 +1,116 @@ +#define NORMAL_AS_3D + +#include "common.hlsl" + +struct VS_OUTPUT { + float4 pos : SV_POSITION; + half4 color : TEXCOORD0; + half2 texCoord : TEXCOORD1; + float3 coord : TEXCOORD2; +}; + +#ifdef VERTEX + VS_OUTPUT main(VS_INPUT In) { + VS_OUTPUT Out; + + Out.color = (half4)In.aColor; + Out.texCoord = (half2)In.aTexCoord.xy; + Out.coord = float3(In.aCoord.x, -In.aCoord.y, In.aCoord.z); + + Out.pos = mul(uViewProj, float4(In.aCoord.xyz * 5.0, 1.0)); + Out.pos.z = Out.pos.w; + + return Out; + } + +#else // PIXEL + + #ifdef SKY_AZURE + #define SKY_CLOUDS + #endif + + #ifdef SKY_CLOUDS + #define STEPS 8.0 + #define MIN_HEIGHT 2.0 + #define MAX_HEIGHT 4.0 + #define skyWind uParam.xyz + #define skyDown float3(uLightProj[0].x, uLightProj[1].x, uLightProj[2].x) + #define skyUp float3(uLightProj[0].y, uLightProj[1].y, uLightProj[2].y) + #define sunDir float3(uLightProj[0].z, uLightProj[1].z, uLightProj[2].z) + #define sunSize uLightProj[3].z + #define sunColor float3(uLightProj[0].w, uLightProj[1].w, uLightProj[2].w) + #define sunGlare uLightProj[3].w + #define cloudsDown uPosScale[0].xyz + #define cloudsUp uPosScale[1].xyz + + // based on https://www.shadertoy.com/view/XsVGz3 / https://www.shadertoy.com/view/XslGRr + float noise3D(float3 p) { + p = p * 0.15 + skyWind; + return SAMPLE_3D(sNormal, p).x; + } + + float density(float3 pos) { + float den = noise3D(pos) * 3.0 - 2.0 + (pos.y - MIN_HEIGHT); + float edge = 1.0 - smoothstep(MIN_HEIGHT, MAX_HEIGHT, pos.y); + den = clamp(den * edge * edge, 0.0, 1.0); + return den; + } + + float3 raymarching(float2 screenPos, float3 dir, float t0, float t1, float3 backCol) { + float dither = SAMPLE_2D_POINT_WRAP(sMask, screenPos * (1.0 / 8.0)).x; + + float3 step = dir * ((t1 - t0) / STEPS); + float3 pos = dir * t0 + step * dither; + float4 sum = 0.0; + + for (float i = 0.0; i < STEPS; i++) { + float den = density(pos); + + if (den > 0.01) { + float dif = max(0.0, den - density(pos + 0.3 * sunDir)) * 4.0; + + float4 col = float4(lerp(cloudsUp, cloudsDown, den), den); + float3 lin = sunColor * dif + 1.0; + + col.rgb *= lin; + + col.a *= 0.5; + col.rgb *= col.a; + sum = sum + col * (1.0 - sum.a); + } + + pos += step; + } + + sum = clamp(sum, 0.0, 1.0); + + float h = dir.y; + sum.rgb = lerp(sum.rgb, backCol, exp(-20.0 * h * h) ); + + return lerp(backCol, sum.xyz, sum.a); + } + #endif + + half4 main(VS_OUTPUT In) : COLOR0 { + float3 dir = normalize(In.coord); + + #ifdef SKY_AZURE + float3 col = lerp(skyDown, skyUp, dir.y); + #else + float3 col = SAMPLE_2D_LINEAR(sDiffuse, In.texCoord).xyz * In.color.xyz; + #endif + + #ifdef SKY_CLOUDS + float sun = clamp(sunSize + dot(sunDir, dir), 0.0, 1.0); + col += sunColor * pow(sun, sunGlare); + + float2 dist = float2(MIN_HEIGHT, MAX_HEIGHT) / dir.y; + + if (dist.x > 0.0) { + col = raymarching(In.pos.xy, dir, dist.x, dist.y, col); + } + #endif + + return half4(col, 1.0h); + } +#endif diff --git a/src/shaders/water_compose.hlsl b/src/shaders/water_compose.hlsl index fc588c4..5f3abe8 100644 --- a/src/shaders/water_compose.hlsl +++ b/src/shaders/water_compose.hlsl @@ -30,9 +30,9 @@ VS_OUTPUT main(VS_INPUT In) { Out.pos = mul(uViewProj, float4(coord, 1.0)); Out.hpos = Out.pos.xyw; Out.viewVec.xyz = uViewPos.xyz - coord; + Out.lightVec = uLightPos[0].xyz - coord; Out.viewVec.y = abs(Out.viewVec.y); Out.lightVec.y = abs(Out.lightVec.y); - Out.lightVec = uLightPos[0].xyz - coord; Out.viewVec.w = step(uPosScale[0].y, uViewPos.y); @@ -63,7 +63,7 @@ half4 main(VS_OUTPUT In) : COLOR0 { half3 refr = lerp(refrA.xyz, refrB.xyz, refrA.w); half3 refl = SAMPLE_2D_LINEAR(sReflect, float2(tc.x, tc.y) + dudv * uParam.w).xyz; - half fresnel = calcFresnel(max(0.0, dot(normal, viewVec)), 0.12); + half fresnel = calcFresnel(abs(dot(normal, viewVec)), 0.12); half mask = SAMPLE_2D_POINT(sMask, In.maskCoord).r; half4 color = half4(lerp(refr, refl, fresnel), mask); diff --git a/src/shaders/water_rays.hlsl b/src/shaders/water_rays.hlsl index da95581..ff776b5 100644 --- a/src/shaders/water_rays.hlsl +++ b/src/shaders/water_rays.hlsl @@ -33,9 +33,9 @@ float boxIntersect(float3 rayPos, float3 rayDir, float3 center, float3 hsize) { #ifdef _GAPI_GXM float4 main(VS_OUTPUT In) : COLOR0 { float2 pixelCoord = float2(__pixel_x(), __pixel_y()); -#else -float4 main(VS_OUTPUT In/*, float2 pixelCoord: VPOS*/) : COLOR0 { - float2 pixelCoord = 0.0; +#else defined(_GAPI_D3D11 +float4 main(VS_OUTPUT In) : COLOR0 { + float2 pixelCoord = In.pos.xy; #endif float3 viewVec = normalize(In.viewVec); diff --git a/src/sound.h b/src/sound.h index f8691c8..29e9c7e 100644 --- a/src/sound.h +++ b/src/sound.h @@ -8,7 +8,7 @@ #define DECODE_OGG -#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) +#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) && !defined(_OS_XB1) #define DECODE_MP3 #endif diff --git a/src/utils.h b/src/utils.h index 1a9e48e..2ec5854 100644 --- a/src/utils.h +++ b/src/utils.h @@ -23,6 +23,20 @@ #define LOG printf #endif + #if defined(_OS_XBOX) || defined(_OS_XB1) + #define MAX_LOG_LENGTH 1024 + + #undef LOG + void LOG(const char *format, ...) { + char str[MAX_LOG_LENGTH]; + va_list arglist; + va_start(arglist, format); + _vsnprintf(str, MAX_LOG_LENGTH, format, arglist); + va_end(arglist); + OutputDebugStringA(str); + } + #endif + #else #define ASSERT(expr) @@ -50,20 +64,6 @@ #define LOG(...) __android_log_print(ANDROID_LOG_INFO,"OpenLara",__VA_ARGS__) #endif -#ifdef _OS_XBOX - #define MAX_LOG_LENGTH 1024 - - #undef LOG - void LOG(const char *format, ...) { - char str[MAX_LOG_LENGTH]; - va_list arglist; - va_start(arglist, format); - _vsnprintf(str, MAX_LOG_LENGTH, format, arglist); - va_end(arglist); - OutputDebugStringA(str); - } -#endif - #ifdef _OS_PSP extern "C" { @@ -1572,6 +1572,8 @@ char contentDir[255]; #define STREAM_BUFFER_SIZE (16 * 1024) +#define MAX_PACKS 32 + struct Stream { typedef void (Callback)(Stream *stream, void *userData); Callback *callback; @@ -1584,12 +1586,144 @@ struct Stream { char *buffer; int bufferIndex; + bool buffering; + uint32 baseOffset; + + struct Pack + { + Stream* stream; + uint8* table; + uint32 count; + + struct FileInfo + { + uint32 size; + uint32 offset; + }; + + bool findFile(const char* name, FileInfo &info) + { + if (!table || !name || !name[0]) { + return false; + } + + uint16 len = (uint16)strlen(name); + uint8* ptr = table; + + for (uint32 i = 0; i < count; i++) + { + uint32 magic; + memcpy(&magic, ptr, sizeof(magic)); + if (magic != 0x02014B50) { + ASSERT(false); + return false; + } + + uint16 nameLen, extraLen, infoLen; + memcpy(&nameLen, ptr + 28, sizeof(nameLen)); + memcpy(&extraLen, ptr + 30, sizeof(extraLen)); + + if ((nameLen == len) && (memcmp(ptr + 46, name, len) == 0)) + { + uint16 compression; + memcpy(&compression, ptr + 10, sizeof(compression)); + + if (compression != 0) + { + ASSERT(false); + return false; + } + + memcpy(&info.size, ptr + 24, sizeof(info.size)); + memcpy(&info.offset, ptr + 42, sizeof(info.offset)); + + stream->setPos(info.offset); + magic = stream->readLE32(); + + if (magic != 0x04034B50) { + ASSERT(false); + return false; + } + stream->seek(22); + nameLen = stream->readLE16(); + extraLen = stream->readLE16(); + + info.offset += 4 + 22 + 2 + 2 + nameLen + extraLen; + + return true; + } + + memcpy(&infoLen, ptr + 32, sizeof(infoLen)); + + ptr += 46 + nameLen + extraLen + infoLen; + } + + return false; + } + + Pack(const char *name) : stream(NULL), table(NULL), count(0) + { + stream = new Stream(name); + stream->buffering = false; + stream->setPos(stream->size - 22); + uint32 magic = stream->readLE32(); + + if (magic != 0x06054B50) + { + ASSERT(false); + return; + } + + stream->seek(6); + count = stream->readLE16(); + uint32 tableSize = stream->readLE32(); + uint32 tableOffset = stream->readLE32(); + + stream->setPos(tableOffset); + + table = new uint8[tableSize]; + stream->raw(table, tableSize); + } + + ~Pack() { + delete stream; + delete[] table; + } + }; + + static Pack* packs[MAX_PACKS]; + + static bool addPack(const char *name) + { + if (!existsContent(name)) { + return false; + } + + for (int i = 0; i < MAX_PACKS; i++) + { + if (!packs[i]) + { + packs[i] = new Pack(name); + return true; + } + } + return false; + } + + static void deinit() + { + for (int i = 0; i < MAX_PACKS; i++) + { + if (!packs[i]) break; + delete packs[i]; + } + } Stream(const char *name, const void *data, int size, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data((char*)data), name(NULL), size(size), pos(0), buffer(NULL) { this->name = String::copy(name); } - Stream(const char *name, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data(NULL), name(NULL), size(-1), pos(0), buffer(NULL) { + Stream(const char *name, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data(NULL), name(NULL), size(-1), pos(0), buffer(NULL), buffering(true), baseOffset(0) { if (!name && callback) { callback(NULL, userData); delete this; @@ -1600,10 +1734,45 @@ struct Stream { ASSERT(false); } + Stream::Pack::FileInfo info; + char path[256]; + + for (int i = 0; i < MAX_PACKS; i++) + { + if (!packs[i]) break; + + if (packs[i]->findFile(name, info)) + { + path[0] = 0; + if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) { + strcpy(path, contentDir); + } + strcat(path, packs[i]->stream->name); + fixBackslash(path); + + f = fopen(path, "rb"); + if (!f) { + LOG("error loading file from pack \"%s -> %s\"\n", packs[i]->stream->name, name); + ASSERT(false); + return; + } + baseOffset = info.offset; + fseek(f, info.offset, SEEK_SET); + size = info.size; + + fpos = 0; + bufferIndex = -1; + + this->name = String::copy(name); + if (callback) callback(this, userData); + return; + } + } + path[0] = 0; if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) { - strcat(path, contentDir); + strcpy(path, contentDir); } strcat(path, name); fixBackslash(path); @@ -1627,14 +1796,12 @@ struct Stream { fseek(f, 0, SEEK_END); size = (int32)ftell(f); fseek(f, 0, SEEK_SET); - fpos = 0; + fpos = 0; bufferIndex = -1; this->name = String::copy(name); - - if (callback) - callback(this, userData); + if (callback) callback(this, userData); } } @@ -1685,6 +1852,15 @@ struct Stream { } static bool existsContent(const char *name) { + for (uint32 i = 0; i < MAX_PACKS; i++) + { + if (!packs[i]) break; + + Pack::FileInfo info; + if (packs[i]->findFile(name, info)) + return true; + } + char fileName[1024]; strcpy(fileName, contentDir); strcat(fileName, name); @@ -1704,6 +1880,18 @@ struct Stream { if (!count) return; if (f) { + + if (!buffering) { + if (fpos != pos) { + fseek(f, baseOffset + pos, SEEK_SET); + fpos = pos; + } + fread(data, 1, count, f); + pos += count; + fpos += count; + return; + } + uint8 *ptr = (uint8*)data; while (count > 0) { @@ -1712,16 +1900,16 @@ struct Stream { if (bufferIndex != bIndex) { bufferIndex = bIndex; - size_t readed; + int readed; int part; if (fpos == pos) { part = min(count / STREAM_BUFFER_SIZE * STREAM_BUFFER_SIZE, size - fpos); if (part > STREAM_BUFFER_SIZE) { - readed = fread(ptr, 1, part, f); + readed = (int)fread(ptr, 1, part, f); #ifdef TEST_SLOW_FIO - LOG("%s read %d + %d\n", name, fpos, (int)readed); + LOG("%s read %d + %d\n", name, fpos, readed); Sleep(5); #endif @@ -1742,7 +1930,7 @@ struct Stream { if (fpos != bufferIndex * STREAM_BUFFER_SIZE) { fpos = bufferIndex * STREAM_BUFFER_SIZE; - fseek(f, fpos, SEEK_SET); + fseek(f, baseOffset + fpos, SEEK_SET); #ifdef TEST_SLOW_FIO LOG("%s seek %d\n", name, fpos); @@ -1755,7 +1943,7 @@ struct Stream { } part = min(STREAM_BUFFER_SIZE, size - fpos); - readed = fread(buffer, 1, part, f); + readed = (int)fread(buffer, 1, part, f); #ifdef TEST_SLOW_FIO LOG("%s read %d + %d\n", name, fpos, readed); @@ -1829,6 +2017,7 @@ struct Stream { } }; +Stream::Pack* Stream::packs[MAX_PACKS]; #ifdef OS_FILEIO_CACHE void osDataWrite(Stream *stream, const char *dir) { From af08ce9cdca1bd7c6a75900928384caa03a782ce Mon Sep 17 00:00:00 2001 From: Manuel Alfayate Corchete Date: Tue, 3 Nov 2020 16:50:38 +0100 Subject: [PATCH 24/58] SDL2 platform: Rewrite inputUpdate() so joystick/gamecontroller inputs are NOT processed as both joystick AND gamecontroller inputs, since that causes major input problems. (#276) --- src/platform/sdl2/main.cpp | 148 +++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 57 deletions(-) diff --git a/src/platform/sdl2/main.cpp b/src/platform/sdl2/main.cpp index f99cbd9..2e34db3 100644 --- a/src/platform/sdl2/main.cpp +++ b/src/platform/sdl2/main.cpp @@ -346,31 +346,33 @@ void inputUpdate() { } } #endif - - break; - } - case SDL_KEYUP: { + break; + } + + case SDL_KEYUP: { int scancode = event.key.keysym.scancode; InputKey key = codeToInputKey(scancode); if (key != ikNone) { Input::setDown(key, 0); } break; - } - // Joystick reading using the modern GameController interface - case SDL_CONTROLLERBUTTONDOWN: { - joyIndex = joyGetIndex(event.cbutton.which); - JoyKey key = controllerCodeToJoyKey(event.cbutton.button); - Input::setJoyDown(joyIndex, key, 1); - break; - } - case SDL_CONTROLLERBUTTONUP: { - joyIndex = joyGetIndex(event.cbutton.which); - JoyKey key = controllerCodeToJoyKey(event.cbutton.button); - Input::setJoyDown(joyIndex, key, 0); - break; - } - case SDL_CONTROLLERAXISMOTION: { + } + + // Joystick reading using the modern SDL GameController interface + case SDL_CONTROLLERBUTTONDOWN: { + joyIndex = joyGetIndex(event.cbutton.which); + JoyKey key = controllerCodeToJoyKey(event.cbutton.button); + Input::setJoyDown(joyIndex, key, 1); + break; + } + case SDL_CONTROLLERBUTTONUP: { + joyIndex = joyGetIndex(event.cbutton.which); + JoyKey key = controllerCodeToJoyKey(event.cbutton.button); + Input::setJoyDown(joyIndex, key, 0); + break; + } + + case SDL_CONTROLLERAXISMOTION: { joyIndex = joyGetIndex(event.caxis.which); switch (event.caxis.axis) { case SDL_CONTROLLER_AXIS_LEFTX: joyL.x = joyAxisValue(event.caxis.value); break; @@ -381,49 +383,81 @@ void inputUpdate() { Input::setJoyPos(joyIndex, jkL, joyDir(joyL)); Input::setJoyPos(joyIndex, jkR, joyDir(joyR)); break; - } - // Joystick reading using the classic Joystick interface - case SDL_JOYBUTTONDOWN: { - joyIndex = joyGetIndex(event.jbutton.which); - JoyKey key = joyCodeToJoyKey(event.jbutton.button); - Input::setJoyDown(joyIndex, key, 1); - break; - } - case SDL_JOYBUTTONUP: { - joyIndex = joyGetIndex(event.jbutton.which); - JoyKey key = joyCodeToJoyKey(event.jbutton.button); - Input::setJoyDown(joyIndex, key, 0); - break; - } - case SDL_JOYAXISMOTION: { - joyIndex = joyGetIndex(event.jaxis.which); - switch (event.jaxis.axis) { - // In the classic joystick interface we know what axis changed by it's number, - // they have no names like on the fancy GameController interface. - case 0: joyL.x = joyAxisValue(event.jaxis.value); break; - case 1: joyL.y = joyAxisValue(event.jaxis.value); break; - case 2: joyR.x = joyAxisValue(event.jaxis.value); break; - case 3: joyR.y = joyAxisValue(event.jaxis.value); break; - } - Input::setJoyPos(joyIndex, jkL, joyDir(joyL)); - Input::setJoyPos(joyIndex, jkR, joyDir(joyR)); - break; - } - // Joystick connection or disconnection - case SDL_JOYDEVICEADDED : { + } + + // GameController connection or disconnection + case SDL_CONTROLLERDEVICEADDED: { // Upon connection, 'which' is the internal SDL2 joystick index, // but on disconnection, 'which' is the instanceID. // We store the joysticks in their corresponding position on the joysticks array, // IE: joystick with index 3 will be in sdl_joysticks[3]. - joyAdd(event.jdevice.which); + joyAdd(event.cdevice.which); break; - } - case SDL_JOYDEVICEREMOVED : { - joyRemove(event.jdevice.which); - break; - } - } - } + } + case SDL_CONTROLLERDEVICEREMOVED: { + joyRemove(event.cdevice.which); + break; + + // Joystick reading using the old SDL Joystick interface + case SDL_JOYBUTTONDOWN: + case SDL_JOYBUTTONUP: + case SDL_JOYAXISMOTION: + case SDL_JOYDEVICEADDED: + case SDL_JOYDEVICEREMOVED: + // Only handle the event if the joystick is incompatible with the SDL_GameController interface. + // (Otherwise it will interfere with the normal action of the SDL_GameController API, because + // the event is both a GameController event AND a Joystick event.) + if (SDL_IsGameController(joyIndex)) { + break; + } + + switch (event.type) { + case SDL_JOYBUTTONDOWN: { + joyIndex = joyGetIndex(event.jbutton.which); + JoyKey key = joyCodeToJoyKey(event.jbutton.button); + Input::setJoyDown(joyIndex, key, 1); + break; + } + case SDL_JOYBUTTONUP: { + joyIndex = joyGetIndex(event.jbutton.which); + JoyKey key = joyCodeToJoyKey(event.jbutton.button); + Input::setJoyDown(joyIndex, key, 0); + break; + } + case SDL_JOYAXISMOTION: { + joyIndex = joyGetIndex(event.jaxis.which); + switch (event.jaxis.axis) + { + // In the classic joystick interface we know what axis changed by it's number, + // they have no names like on the fancy GameController interface. + case 0: joyL.x = joyAxisValue(event.jaxis.value); break; + case 1: joyL.y = joyAxisValue(event.jaxis.value); break; + case 2: joyR.x = joyAxisValue(event.jaxis.value); break; + case 3: joyR.y = joyAxisValue(event.jaxis.value); break; + } + Input::setJoyPos(joyIndex, jkL, joyDir(joyL)); + Input::setJoyPos(joyIndex, jkR, joyDir(joyR)); + break; + } + + // Joystick connection or disconnection + case SDL_JOYDEVICEADDED: { + // Upon connection, 'which' is the internal SDL2 joystick index, + // but on disconnection, 'which' is the instanceID. + // We store the joysticks in their corresponding position on the joysticks array, + // IE: joystick with index 3 will be in sdl_joysticks[3]. + joyAdd(event.jdevice.which); + break; + } + case SDL_JOYDEVICEREMOVED: { + joyRemove(event.jdevice.which); + break; + } + break; + } + } + } + } } int main(int argc, char **argv) { From 9a80717f35694e6fd484246f19ce739157cc129d Mon Sep 17 00:00:00 2001 From: XProger Date: Thu, 5 Nov 2020 06:23:19 +0400 Subject: [PATCH 25/58] XBOX fix inventory background, add MSAA 4x, add title and save icons --- src/gapi/d3d8.h | 4 ++-- src/inventory.h | 18 +++++++++--------- src/level.h | 6 ++++++ src/platform/xbox/OpenLara.vcproj | 9 +++++++++ src/platform/xbox/main.cpp | 3 ++- src/platform/xbox/saveimage.xbx | Bin 0 -> 4096 bytes src/platform/xbox/titleimage.xbx | Bin 10240 -> 10240 bytes 7 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 src/platform/xbox/saveimage.xbx diff --git a/src/gapi/d3d8.h b/src/gapi/d3d8.h index 7f99f91..b76fc62 100644 --- a/src/gapi/d3d8.h +++ b/src/gapi/d3d8.h @@ -710,8 +710,8 @@ namespace GAPI { } void setVSync(bool enable) { - d3dpp.FullScreen_PresentationInterval = enable ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; - GAPI::resetDevice(); + // d3dpp.FullScreen_PresentationInterval = enable ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE; + // GAPI::resetDevice(); } void waitVBlank() {} diff --git a/src/inventory.h b/src/inventory.h index c9a12f9..aa5043f 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -1460,9 +1460,9 @@ struct Inventory { } void prepareBackground() { - #ifdef FFP - return; - #endif + #ifdef FFP + return; + #endif if (Core::settings.detail.stereo == Core::Settings::STEREO_VR) return; @@ -1471,9 +1471,9 @@ struct Inventory { return; #endif - #ifdef _OS_3DS - GAPI::rotate90 = false; - #endif + #ifdef _OS_3DS + GAPI::rotate90 = false; + #endif game->renderGame(false, true); @@ -1494,9 +1494,9 @@ struct Inventory { swap(background[view], background[2]); } - #ifdef _OS_3DS - GAPI::rotate90 = true; - #endif + #ifdef _OS_3DS + GAPI::rotate90 = true; + #endif Core::setDepthTest(true); } diff --git a/src/level.h b/src/level.h index a7c02b4..e90d7b2 100644 --- a/src/level.h +++ b/src/level.h @@ -3213,6 +3213,12 @@ struct Level : IGame { } } + if (Core::defaultTarget) { + Core::viewportDef = short4(0, 0, Core::defaultTarget->origWidth, Core::defaultTarget->origHeight); + } else { + Core::viewportDef = short4(0, 0, Core::width, Core::height); + } + #ifdef EARLY_CLEAR if (view == 0 && eye <= 0) { Core::setTarget(NULL, NULL, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR | RT_STORE_DEPTH); diff --git a/src/platform/xbox/OpenLara.vcproj b/src/platform/xbox/OpenLara.vcproj index 1ab81fd..b84f795 100644 --- a/src/platform/xbox/OpenLara.vcproj +++ b/src/platform/xbox/OpenLara.vcproj @@ -59,6 +59,7 @@ TitleID="0x14021968" TitleName="OpenLara" TitleImage="titleimage.xbx" + SaveGameImage="saveimage.xbx" XBEVersion="4096"/> diff --git a/src/platform/xbox/main.cpp b/src/platform/xbox/main.cpp index 2a96241..02e4292 100644 --- a/src/platform/xbox/main.cpp +++ b/src/platform/xbox/main.cpp @@ -263,7 +263,8 @@ HRESULT ContextCreate() { d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; - d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE_OR_IMMEDIATE; + d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES_MULTISAMPLE_GAUSSIAN; + d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE; if (FAILED(D3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &device))) return E_FAIL; diff --git a/src/platform/xbox/saveimage.xbx b/src/platform/xbox/saveimage.xbx new file mode 100644 index 0000000000000000000000000000000000000000..7e195e6f2917082e4339ca38ef6fbdc60cdea2dd GIT binary patch literal 4096 zcmeHKKWGzC82>KU$b~kLOXbd93mv2svIMMBII0u} z1(C+7?O@TZW4jr$b*rG31B(m{=PrXY2klck+@+yHZ?u3LN{iFu?x)GfK0-l42W=hv`XAr4dK`) z&fymEAsJf{zAWe^m3W$3;Jc3311Obr9kCm$nnt}K(mFw(8w77~E?u`?`&%6bOo^*A zj|%ZkaO)1|YTk3i0^x@eZ*CScio$&aosQ9t7YpU$iXBl78ou9QeA{-8JqJ^?jSx9-;l}-FUj-`!&gT(so4rCh3oHE2TlgYsZ>O!1P3YlkVNP zY;=M(%7<;$YYRP7%U1M|b#UtqpZlk_e#--=M}#`%3g996x=8lf}EouB8+ z06G=oYH#Q#zmM?g{0IEkZn5?i;Ozs#b1W;uYs1ruLOPMI&S4*i=Thy-sl_i4xwwj#7uR@%Y9p@gUgp#U*spx4(qca# tb4ljE6Bt+dK6YKpK5n0re$V-6wuD%t{9LBI@Og*9P_Vuh<@HbZ{{ashxTXLA literal 0 HcmV?d00001 diff --git a/src/platform/xbox/titleimage.xbx b/src/platform/xbox/titleimage.xbx index 8598f21d288db3a2d1f48ae17596db157bf3d6a7..9115b8d2edcd69f2d4b87964d08eb06936d916e5 100644 GIT binary patch literal 10240 zcmeHLPiP!f9DX}%aMpB7Ko)Z7VOCs74$6uwRLNoX;GqR!3Hx?8Ww&m{QdEL#!XAnQ zhbSJTUZmrpnBYYzY7~U@P-z$}RI$*DObZ@n3l$>%A%cfFRDFKmn@p>lZ2nl=CSm9D zcK+a-LEwEnm$F1+iwS<5PmL| zRO;lFLl8izkH-solnahtC3dz^UuOh-MMO&S0P+j@N84UM3p5U-vUtwSO0gOUj?% zc11Ji%0MYPp)sHo?}%BY-g*LKOCdjM^$PrOckA6=uvoV;taEAYa!cWt0LZ)_xhw=x z@6+cUHR}km6h1#xDtY3-vi_ej^rq&myxVvfzH}RRE@c4kQfLUrQi_Pg{y5INM?Uv~ z<|7E5pUF?rtTlx=c!@kzcRUa61+5qKzA-$IAnv&p;->yivsQu1L#ae!O}*>pAwFlE zI3D9dhAT&I9y;w%u%UzQzvn!#VUZ=-=UMMKi6@1mQ!oR{k%n*J;(O)NAHw^_Gum z-^=9+njd3r-xK3sOjVqQmJQOhWz@Uh@V@1?`{0p2|1pv;E#jpwC)r0mNh%Jj6SGbuHP>| zd~Y?*>D!U7t-J<(9O@6fCHHX~^(o|~?fPx26bJ( z@BRIK&Ke#RgLMjLoX4Cc@&Qp<%JN`a$@`^>=nP|NR zbY@>Fe$iD*oWs0XQ+QL7`Cq|tCj!mhjCvHcNrSMLg&NTAz_!Q6IUXAfm(bHp)DXd(ddmk z=7W4?3WdUIKfmSr-pzwj%pBXf8Q}X*RXYFVA=7rXABbcs%{-{roYnqN{=xNbr9a|x zzUxPPrazR8m7-~vA|IQ9z%icfj>Hf6(7&Tl-Z9Jebnkv%=lj!^#X3;NQRKR1`*?tP z(rH8I)pcmY=SCj+<}BkE;ZWP^y2--=;)>(Z4dQyM@1t*nRtePTgnQTbZk)Z&=?50R zgAAkp2mA`x+4f!N#`>A|=fQ&zXRAux7#3s0XXw+VR?{X=RT#ro*ZqGz$MqdYe0IPC z%2m((eJ{M-*NH!$w*$HISPdBQMlgLlrPeMPXo*DIK6RD_Ay!ZPht_$+Z znH5V6 z=ij5xWgajNg!7#C8L>a7`9S@`YB%OVsY&$5!VbdG!;a^@LVS&hiB02~{I?gQe3nS) zyNz?R_jBF!l`l?5eSb%P-`U(3=x^BWMfLxs+i}0yd^`0%eIbsAR66G?b@>RS(*BL{ z@i-oIo;Z%jI$tW)>eO?ixZkOGd##H+Fh1$$k0CC&e-?wR!x)9J7}b3%!M>&rzwh;) dy>gxT;e!YAaukJ_zDZub!!Br}KJ!lT{|&3uo>l+= literal 10240 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 Date: Thu, 5 Nov 2020 14:03:12 +0400 Subject: [PATCH 26/58] XBOX underwater vertex caustics, cubemaps, fix lighting intensity --- src/character.h | 4 +++ src/core.h | 5 +--- src/enemy.h | 4 ++- src/gapi/d3d8.h | 33 +++++++++------------ src/lara.h | 6 +++- src/level.h | 44 ++++++++++++++++++---------- src/objects.h | 4 ++- src/shaders/ambient_room.asm | 6 ++-- src/shaders/common.asm | 53 ++++++++++++++++++++++++++++++++-- src/shaders/compose_entity.asm | 19 +++++------- src/shaders/compose_flash.asm | 8 +++-- src/shaders/compose_mirror.asm | 39 +++++++++++++------------ src/shaders/compose_room.asm | 10 +++---- src/shaders/compose_sprite.asm | 18 ++++++------ 14 files changed, 157 insertions(+), 96 deletions(-) diff --git a/src/character.h b/src/character.h index 4e0ec19..f3e954f 100644 --- a/src/character.h +++ b/src/character.h @@ -308,6 +308,8 @@ struct Character : Controller { } void bakeEnvironment(Texture *&environment) { + Core::beginFrame(); + flags.invisible = true; if (!environment) { uint32 opt = OPT_CUBEMAP | OPT_TARGET; @@ -321,6 +323,8 @@ struct Character : Controller { environment->generateMipMap(); #endif flags.invisible = false; + + Core::endFrame(); } }; diff --git a/src/core.h b/src/core.h index adba0a4..eb712d2 100644 --- a/src/core.h +++ b/src/core.h @@ -142,6 +142,7 @@ #define _GAPI_D3D8 1 #undef OS_PTHREAD_MT + #undef USE_CUBEMAP_MIPS #define NOMINMAX #include @@ -149,9 +150,6 @@ #elif _X360 #define _OS_X360 1 // TODO -#elif _XB1 - #define _OS_XB1 1 - #define _GAPI_D3D11 1 #endif #ifndef _OS_PSP @@ -553,7 +551,6 @@ struct MeshRange { E( sNormal ) \ E( sReflect ) \ E( sShadow ) \ - E( sEnvironment ) \ E( sMask ) #define SHADER_UNIFORMS(E) \ diff --git a/src/enemy.h b/src/enemy.h index edc9c02..8c61a04 100644 --- a/src/enemy.h +++ b/src/enemy.h @@ -3503,8 +3503,10 @@ struct Winston : Enemy { virtual void render(Frustum *frustum, MeshBuilder *mesh, Shader::Type type, bool caustics) { if (environment && (flags.unused & 4)) { game->setRoomParams(getRoomIndex(), Shader::MIRROR, 1.5f, 2.0f, 2.5f, 1.0f, false); - environment->bind(sEnvironment); + GAPI::Texture *dtex = Core::active.textures[sDiffuse]; + environment->bind(sDiffuse); Controller::render(frustum, mesh, type, caustics); + if (dtex) dtex->bind(sDiffuse); } else { Enemy::render(frustum, mesh, type, caustics); } diff --git a/src/gapi/d3d8.h b/src/gapi/d3d8.h index b76fc62..6295733 100644 --- a/src/gapi/d3d8.h +++ b/src/gapi/d3d8.h @@ -53,6 +53,7 @@ namespace GAPI { int cullMode, blendMode; uint32 clearColor; + bool isFrontCW; LPDIRECT3DSURFACE8 defRT, defDS; @@ -222,7 +223,6 @@ namespace GAPI { void setConstant(UniformType uType, const float *value, int vectors) { const Binding &b = bindings[uType]; if (b.usage | USAGE_VS) device->SetVertexShaderConstant (b.reg, value, vectors); -// if (b.usage | USAGE_PS) device->SetPixelShaderConstant (b.reg, value, vectors); } void setParam(UniformType uType, const vec4 &value, int count = 1) { @@ -302,21 +302,6 @@ namespace GAPI { if (texCube) texCube->Release(); } - VOID XBUtil_SwizzleTexture2D( D3DLOCKED_RECT* pLock, const D3DSURFACE_DESC* pDesc ) - { - DWORD dwPixelSize = XGBytesPerPixelFromFormat( pDesc->Format ); - DWORD dwTextureSize = pDesc->Width * pDesc->Height * dwPixelSize; - - BYTE* pSrcBits = new BYTE[ dwTextureSize ]; - memcpy( pSrcBits, pLock->pBits, dwTextureSize ); - - XGSwizzleRect( pSrcBits, 0, NULL, pLock->pBits, - pDesc->Width, pDesc->Height, - NULL, dwPixelSize ); - - delete[] pSrcBits; - } - void updateLevel(int32 level, void *data) { int32 bpp; switch (fmt) { @@ -525,6 +510,7 @@ namespace GAPI { void init() { memset(rtCache, 0, sizeof(rtCache)); + isFrontCW = true; D3DADAPTER_IDENTIFIER8 adapterInfo; D3D->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &adapterInfo); @@ -555,11 +541,13 @@ namespace GAPI { defRT = defDS = NULL; - const float factors[] = { + const float factors[] = { + 1.0f, -19.555555555556f, 60.444444444444f, -56.888888888889f, // uCosCoeff + 0.5f, 0.5f/PI, 0.75f, 1.0f/1024.0f, // uAngles 0.0f, 0.5f, 1.0f, 2.0f, 0.6f, 0.9f, 0.9f, 32767.0f }; - device->SetVertexShaderConstant(94, factors, 2); + device->SetVertexShaderConstant(92, factors, 4); device->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_EXP); } @@ -775,12 +763,17 @@ namespace GAPI { void setCullMode(int rsMask) { cullMode = rsMask; switch (rsMask) { - case RS_CULL_BACK : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); break; - case RS_CULL_FRONT : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); break; + case RS_CULL_BACK : device->SetRenderState(D3DRS_CULLMODE, isFrontCW ? D3DCULL_CW : D3DCULL_CCW); break; + case RS_CULL_FRONT : device->SetRenderState(D3DRS_CULLMODE, isFrontCW ? D3DCULL_CCW : D3DCULL_CW); break; default : device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); } } + void setFrontFace(bool cw) { + isFrontCW = cw; + setCullMode(cullMode); + } + void setBlendMode(int rsMask) { blendMode = rsMask; switch (rsMask) { diff --git a/src/lara.h b/src/lara.h index d54f9a6..1c0859c 100644 --- a/src/lara.h +++ b/src/lara.h @@ -3865,10 +3865,14 @@ struct Lara : Character { game->setRoomParams(getRoomIndex(), Shader::MIRROR, 0.3f, 0.3f, 0.3f, 1.0f, false); Core::updateLights(); */ - environment->bind(sEnvironment); + GAPI::Texture *dtex = Core::active.textures[sDiffuse]; + + environment->bind(sDiffuse); visibleMask ^= 0xFFFFFFFF; Controller::render(frustum, mesh, type, caustics); visibleMask ^= 0xFFFFFFFF; + + if (dtex) dtex->bind(sDiffuse); } } }; diff --git a/src/level.h b/src/level.h index e90d7b2..8db8b09 100644 --- a/src/level.h +++ b/src/level.h @@ -396,7 +396,7 @@ struct Level : IGame { Stream::cacheWrite("settings", (char*)&settings, sizeof(settings)); if (rebuildShaders) { - #if !defined(_GAPI_D3D9) && !defined(_GAPI_D3D11) && !defined(_GAPI_GXM) + #if !defined(_GAPI_D3D8) && !defined(_GAPI_D3D9) && !defined(_GAPI_D3D11) && !defined(_GAPI_GXM) delete shaderCache; shaderCache = new ShaderCache(); #endif @@ -595,11 +595,10 @@ struct Level : IGame { } virtual void setupBinding() { - atlasRooms->bind(sDiffuse); Core::whiteTex->bind(sNormal); Core::whiteTex->bind(sMask); Core::whiteTex->bind(sReflect); - Core::whiteCube->bind(sEnvironment); + atlasRooms->bind(sDiffuse); if (Core::pass != Core::passShadow) { Texture *shadowMap = shadow[player ? player->camera->cameraIndex : 0]; @@ -610,18 +609,18 @@ struct Level : IGame { } virtual void renderEnvironment(int roomIndex, const vec3 &pos, Texture **targets, int stride = 0, Core::Pass pass = Core::passAmbient) { - #ifdef FFP - return; - #endif + #ifdef FFP + return; + #endif - #ifdef _GAPI_SW - return; - #endif + #ifdef _GAPI_SW + return; + #endif - #ifdef _OS_3DS - return; // TODO render to cubemap face - GAPI::rotate90 = false; - #endif + #ifdef _OS_3DS + return; // TODO render to cubemap face + GAPI::rotate90 = false; + #endif PROFILE_MARKER("ENVIRONMENT"); setupBinding(); @@ -632,6 +631,10 @@ struct Level : IGame { int16 rIndex = roomIndex; level.getSector(rIndex, pos); // fix room index for overlapped blocks + #ifdef _GAPI_D3D8 + GAPI::setFrontFace(false); + #endif + // render level into cube faces or texture images for (int i = 0; i < 6; i++) { setupCubeCamera(pos, i); @@ -644,9 +647,13 @@ struct Level : IGame { renderView(rIndex, false, false); } - #ifdef _OS_3DS - GAPI::rotate90 = true; - #endif + #ifdef _GAPI_D3D8 + GAPI::setFrontFace(true); + #endif + + #ifdef _OS_3DS + GAPI::rotate90 = true; + #endif Core::pass = tmpPass; Core::eye = tmpEye; @@ -2687,6 +2694,11 @@ struct Level : IGame { Core::mViewInv = mat4(pos, pos + dir, up); Core::mView = Core::mViewInv.inverseOrtho(); Core::mProj = GAPI::perspective(90, 1.0f, 32.0f, 45.0f * 1024.0f, 0.0f); + + #ifdef _GAPI_D3D8 + Core::mProj.scale(vec3(1.0f, -1.0f, 1.0f)); + #endif + Core::mViewProj = Core::mProj * Core::mView; Core::viewPos = Core::mViewInv.offset().xyz(); diff --git a/src/objects.h b/src/objects.h index 1af31c6..7e5dfc3 100644 --- a/src/objects.h +++ b/src/objects.h @@ -896,8 +896,10 @@ struct Crystal : Controller { virtual void render(Frustum *frustum, MeshBuilder *mesh, Shader::Type type, bool caustics) { Core::setMaterial(0.5, 0.5, 3.0, 1.0f); - environment->bind(sEnvironment); + GAPI::Texture *dtex = Core::active.textures[sDiffuse]; + environment->bind(sDiffuse); Controller::render(frustum, mesh, type, caustics); + if (dtex) dtex->bind(sDiffuse); } }; diff --git a/src/shaders/ambient_room.asm b/src/shaders/ambient_room.asm index a3aef76..98eb8af 100644 --- a/src/shaders/ambient_room.asm +++ b/src/shaders/ambient_room.asm @@ -54,13 +54,13 @@ mul light, light, att ; vColor = (aLight + light[1..3] * uLightColor[1..3]) * aColor * 2 - mov pos, aColor + mov att, aColor mov tmp, aLight mad tmp.xyz, light.y, c[uLightColor + 1], tmp mad tmp.xyz, light.z, c[uLightColor + 2], tmp mad tmp.xyz, light.w, c[uLightColor + 3], tmp - mul tmp, pos, tmp - applyUnderwater(tmp) + mul att, att, tmp + applyUnderwater(tmp, pos) add vColor, tmp, tmp ; vTecCoord = (aTexCoord.xyz, 1) diff --git a/src/shaders/common.asm b/src/shaders/common.asm index 3c2f30c..00b2564 100644 --- a/src/shaders/common.asm +++ b/src/shaders/common.asm @@ -31,7 +31,8 @@ #define uLightPos 83 #define uLightColor 87 #define uRoomSize 91 -#define uPosScale 92 +#define uCosCoeff 92 +#define uAngles 93 #define ZERO c94.xxxx #define HALF c94.yyyy @@ -39,6 +40,8 @@ #define TWO c94.wwww #define UW_COLOR c95.xyz #define MAX_SHORT c95.wwww +#define WAVE_SIZE c[uAngles].wwww ; 1 / 1024 +#define WAVE_LUM c[uAngles].zzzz ; 0.75 #define tmp r8 @@ -48,6 +51,15 @@ mad tmp, src.z, c[matrix + 2], tmp \ mad dst, src.w, c[matrix + 3], tmp +#define mulQuat(dst, src, joint) \ + mul dst.xyz, c[uBasis + joint], src.zxyw \ + mad dst.xyz, src, c[uBasis + joint].zxyw, -dst \ + mad dst.xyz, src.yzxw, c[uBasis + joint].w, dst \ + mul tmp.xyz, c[uBasis + joint].zxyw, dst \ + mad dst.xyz, dst.yzxw, c[uBasis + joint].yzxw, -tmp \ + mad dst.xyz, dst, TWO, src \ + mov dst.w, ONE + #define mulQuatPos(dst, src, joint) \ mul dst.xyz, c[uBasis + joint], src.zxyw \ mad dst.xyz, src, c[uBasis + joint].zxyw, -dst \ @@ -58,6 +70,16 @@ add dst.xyz, c[uBasis + joint + 1], dst \ mov dst.w, c[uBasis + joint + 1].w +#define reflect(dst, a, b) \ + dp3 tmp.x, a, b \ + add tmp.x, tmp.x, tmp.x \ + mad dst, -tmp.xxxx, b, a + +#define normalize(v) \ + dp3 tmp.x, v, v \ + rsq tmp.x, tmp.x \ + mul v, v, tmp.xxxx + #define applyFog(dst, src) \ add tmp.xyz, c[uViewPos].xyz, -src.xyz \ mul tmp.xyz, tmp.xyz, c[uFogParams].www \ @@ -65,9 +87,34 @@ rsq tmp.x, tmp.x \ rcp dst.x, tmp.x +#define encodeColor(v) \ + mul vColor, v, HALF + +#define applyColor(dst, src) \ + mul dst, src, vColor \ + add dst, dst, dst \ + add dst, dst, dst + +#define cos(dst, ang) \ + mad dst.x, ang, c[uAngles].y, c[uAngles].x \ + expp dst.yw, dst.xxxx \ + add dst.x, dst.y, -c[uAngles].x \ + mul dst, dst.wwxx, dst.wxxx \ + mul dst.w, dst.w, dst.y \ + mul dst, dst, dst \ + dp4 dst.x, dst, c[uCosCoeff] + #ifdef UNDERWATER - #define applyUnderwater(dst) \ + #define applyUnderwater(dst, pos) \ + dp3 tmp.x, pos, WAVE_SIZE \ + add tmp.x, tmp.x, c[uParam].x \ + cos(tmp, tmp.x) \ + max tmp.x, tmp.x, -tmp.x \ + mul tmp.x, tmp.x, WAVE_LUM \ + add tmp.x, tmp.x, HALF \ + mul dst.xyz, dst.xyz, tmp.xxx \ mul dst.xyz, dst.xyz, UW_COLOR + #else - #define applyUnderwater(dst) + #define applyUnderwater(dst, pos) #endif diff --git a/src/shaders/compose_entity.asm b/src/shaders/compose_entity.asm index fc3bc22..f9a98e9 100644 --- a/src/shaders/compose_entity.asm +++ b/src/shaders/compose_entity.asm @@ -54,12 +54,7 @@ mul att, tmp, att ; normal = mulQuat(uBasis[joint], aNormal) - mul pos.xyz, c[uBasis + a0.x], aNormal.zxyw - mad pos.xyz, aNormal, c[uBasis + a0.x].zxyw, -pos - mad pos.xyz, aNormal.yzxw, c[uBasis + a0.x].w, pos - mul tmp.xyz, c[uBasis + a0.x].zxyw, pos - mad pos.xyz, pos.yzxw, c[uBasis + a0.x].yzxw, -tmp - mad normal, pos, TWO, aNormal + mulQuat(normal, aNormal, a0.x) ; light = max(0, dot(normal, lv[0..3])) dp3 light.x, lv0, normal @@ -72,22 +67,22 @@ mul light, light, att ; vColor = aColor * material.alpha * (material.ambient + light[0..3] * uLightColor[0..3]) * 2 - mov pos, aColor - mul pos, MAT_ALPHA, pos + mov att, aColor + mul att, MAT_ALPHA, att mov tmp.xyz, MAT_AMBIENT mov tmp.w, ONE mad tmp.xyz, light.x, c[uLightColor + 0], tmp mad tmp.xyz, light.y, c[uLightColor + 1], tmp mad tmp.xyz, light.z, c[uLightColor + 2], tmp mad tmp.xyz, light.w, c[uLightColor + 3], tmp - mul tmp, pos, tmp - applyUnderwater(tmp) - add vColor, tmp, tmp + mul att, att, tmp + applyUnderwater(att, pos) + encodeColor(att) ; vTecCoord = (aTexCoord.xyz, 1) mov vTexCoord, aTexCoord mov vTexCoord.w, ONE #else tex t0 - mul r0, t0, vColor + applyColor(r0, t0) #endif diff --git a/src/shaders/compose_flash.asm b/src/shaders/compose_flash.asm index d6e0ca2..b318150 100644 --- a/src/shaders/compose_flash.asm +++ b/src/shaders/compose_flash.asm @@ -25,13 +25,15 @@ ; vColor = (material.diffuse * aColor.xyz * 2.0 + material.emissive, 1.0) mul tmp, MAT_DIFFUSE, aColor add tmp, tmp, tmp - add vColor, tmp, MAT_EMISSIVE - mov vColor.w, MAT_EMISSIVE + add tmp, tmp, MAT_EMISSIVE + mov tmp.w, MAT_EMISSIVE + mul tmp, tmp, HALF + encodeColor(tmp) ; vTecCoord = (aTexCoord.xyz, 1) mov vTexCoord, aTexCoord mov vTexCoord.w, ONE #else tex t0 - mul r0, t0, vColor + applyColor(r0, t0) #endif \ No newline at end of file diff --git a/src/shaders/compose_mirror.asm b/src/shaders/compose_mirror.asm index fdd4459..942a329 100644 --- a/src/shaders/compose_mirror.asm +++ b/src/shaders/compose_mirror.asm @@ -2,14 +2,14 @@ #ifdef VERTEX ; variables - #define lv0 r0 - #define lv1 r1 - #define lv2 r2 - #define lv3 r3 - #define normal r4 - #define att r5 - #define light r6 - #define pos r7 + #define lv0 r0 + #define lv1 r1 + #define lv2 r2 + #define lv3 r3 + #define normal r4 + #define tmp2 r5 + #define viewVec r6 + #define pos r7 ; joint = int(aCoord.w) mov a0.x, aCoord.w @@ -23,18 +23,21 @@ ; vPosition = uViewProj * pos mulMat(vPosition, pos, uViewProj) -; vColor = uMaterial - mov vColor, ONE ; TODO +; viewVec = normalize(pos - uViewPos) + sub viewVec, pos, c[uViewPos] + normalize(viewVec) ; normal = mulQuat(uBasis, aNormal) - mov normal, aNormal - mul pos.xyz, c[uBasis + 0 + a0.x], normal.zxyw - mad pos.xyz, normal, c[uBasis + 0 + a0.x].zxyw, -pos - mad pos.xyz, normal.yzxw, c[uBasis + 0 + a0.x].w, pos - mul tmp.xyz, c[uBasis + 0 + a0.x].zxyw, pos - mad pos.xyz, pos.yzxw, c[uBasis + 0 + a0.x].yzxw, -tmp - mad vTexCoord, pos, TWO, normal + mulQuat(normal, aNormal, a0.x) + +; vTexCoord = reflect(viewVec, normal) + reflect(vTexCoord, viewVec, normal) + +; vColor = uMaterial + mov tmp, c[uMaterial] + mul tmp, tmp, HALF + encodeColor(tmp) #else tex t0 - mul r0, t0, vColor + applyColor(r0, t0) #endif \ No newline at end of file diff --git a/src/shaders/compose_room.asm b/src/shaders/compose_room.asm index a3aef76..557f489 100644 --- a/src/shaders/compose_room.asm +++ b/src/shaders/compose_room.asm @@ -54,19 +54,19 @@ mul light, light, att ; vColor = (aLight + light[1..3] * uLightColor[1..3]) * aColor * 2 - mov pos, aColor + mov att, aColor mov tmp, aLight mad tmp.xyz, light.y, c[uLightColor + 1], tmp mad tmp.xyz, light.z, c[uLightColor + 2], tmp mad tmp.xyz, light.w, c[uLightColor + 3], tmp - mul tmp, pos, tmp - applyUnderwater(tmp) - add vColor, tmp, tmp + mul att, att, tmp + applyUnderwater(att, pos) + encodeColor(att) ; vTecCoord = (aTexCoord.xyz, 1) mov vTexCoord, aTexCoord mov vTexCoord.w, ONE #else tex t0 - mul r0, t0, vColor + applyColor(r0, t0) #endif \ No newline at end of file diff --git a/src/shaders/compose_sprite.asm b/src/shaders/compose_sprite.asm index 7e3c8ef..8d7e789 100644 --- a/src/shaders/compose_sprite.asm +++ b/src/shaders/compose_sprite.asm @@ -76,19 +76,19 @@ mul light, light, att ; vColor = vec4(aLight.rgb * aLight.a, aLight.a) * 2 - mov tmp, aLight - mad tmp.xyz, light.x, c[uLightColor + 0], tmp - mad tmp.xyz, light.y, c[uLightColor + 1], tmp - mad tmp.xyz, light.z, c[uLightColor + 2], tmp - mad tmp.xyz, light.w, c[uLightColor + 3], tmp - mul tmp.xyz, tmp, tmp.w - applyUnderwater(tmp) - add vColor, tmp, tmp + mov att, aLight + mad att.xyz, light.x, c[uLightColor + 0], att + mad att.xyz, light.y, c[uLightColor + 1], att + mad att.xyz, light.z, c[uLightColor + 2], att + mad att.xyz, light.w, c[uLightColor + 3], att + mul att.xyz, att, att.w + applyUnderwater(att, pos) + encodeColor(att) ; vTecCoord = (aTexCoord.xyz, 1) mov vTexCoord, aTexCoord mov vTexCoord.w, ONE #else tex t0 - mul r0, t0, vColor + applyColor(r0, t0) #endif \ No newline at end of file From 1f6c3a771ec811be9363d887ec643dddba9b7696 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 6 Nov 2020 05:06:31 +0300 Subject: [PATCH 27/58] remove sEnvironment sampler from shaders --- src/shaders/common.hlsl | 41 ++++++++++++++++++++++----------- src/shaders/compose.glsl | 8 +++---- src/shaders/compose_mirror.hlsl | 3 ++- src/shaders/filter.glsl | 4 ++-- src/shaders/sky.hlsl | 2 +- src/shaders/water_rays.hlsl | 8 +++---- 6 files changed, 40 insertions(+), 26 deletions(-) diff --git a/src/shaders/common.hlsl b/src/shaders/common.hlsl index 9c5edd9..5e3db85 100644 --- a/src/shaders/common.hlsl +++ b/src/shaders/common.hlsl @@ -44,16 +44,21 @@ struct VS_INPUT { SamplerState smpLinearWrap : register(s4); SamplerComparisonState smpCmp : register(s5); - Texture2D sDiffuse : register(t0); -#ifdef NORMAL_AS_3D - Texture3D sNormal : register(t1); -#else - Texture2D sNormal : register(t1); -#endif + #ifdef DIFFUSE_AS_CUBE + TextureCube sDiffuse : register(t0); + #else + Texture2D sDiffuse : register(t0); + #endif + + #ifdef NORMAL_AS_3D + Texture3D sNormal : register(t1); + #else + Texture2D sNormal : register(t1); + #endif + Texture2D sReflect : register(t2); Texture2D sShadow : register(t3); - TextureCube sEnvironment : register(t4); - Texture2D sMask : register(t5); + Texture2D sMask : register(t4); #define SAMPLE_2D(T,uv) T.Sample(smpDefault, uv) #define SAMPLE_2D_POINT(T,uv) T.Sample(smpPoint, uv) @@ -64,14 +69,20 @@ struct VS_INPUT { #define SAMPLE_2D_LOD0(T,uv) T.SampleLevel(smpLinear, uv, 0) #define SAMPLE_3D(T,uv) T.SampleLevel(smpLinearWrap, uv, 0) #define SAMPLE_CUBE(T,uv) T.Sample(smpLinear, uv) + + #define POSITION SV_POSITION #else - sampler2D sDiffuse : register(s0); + #ifdef DIFFUSE_AS_CUBE + samplerCUBE sDiffuse : register(s0); + #else + sampler2D sDiffuse : register(s0); + #endif + sampler2D sNormal : register(s1); sampler2D sReflect : register(s2); sampler2D sShadow : register(s3); - samplerCUBE sEnvironment : register(s4); - sampler2D sMask : register(s5); - + sampler2D sMask : register(s4); + #define SAMPLE_2D(T,uv) tex2D(T, uv) #define SAMPLE_2D_POINT(T,uv) tex2D(T, uv) #define SAMPLE_2D_POINT_WRAP(T,uv) tex2D(T, uv) @@ -81,8 +92,10 @@ struct VS_INPUT { #define SAMPLE_2D_CMP(T,uv) ((tex2D(T, uv.xy) => uv.z) ? 1 : 0) #define SAMPLE_3D(T,uv) tex3D(T, uv) #define SAMPLE_CUBE(T,uv) texCUBE(T, uv) - - #define SV_POSITION POSITION + + #ifdef PIXEL + #define POSITION VPOS + #endif #endif float4 uParam : register( c0 ); diff --git a/src/shaders/compose.glsl b/src/shaders/compose.glsl index 5123250..16264ff 100644 --- a/src/shaders/compose.glsl +++ b/src/shaders/compose.glsl @@ -247,10 +247,10 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - trapezoidal correction #else - uniform sampler2D sDiffuse; - #ifdef TYPE_MIRROR - uniform samplerCube sEnvironment; + uniform samplerCube sDiffuse; + #else + uniform sampler2D sDiffuse; #endif float unpack(vec4 value) { @@ -356,7 +356,7 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - trapezoidal correction vec4 color; #ifdef TYPE_MIRROR vec3 rv = reflect(-normalize(vViewVec.xyz), normalize(vNormal.xyz)); - color = textureCube(sEnvironment, normalize(rv)); + color = textureCube(sDiffuse, normalize(rv)); #else #ifndef TYPE_SPRITE #ifdef OPT_TRAPEZOID diff --git a/src/shaders/compose_mirror.hlsl b/src/shaders/compose_mirror.hlsl index 2a84b12..df1a487 100644 --- a/src/shaders/compose_mirror.hlsl +++ b/src/shaders/compose_mirror.hlsl @@ -1,3 +1,4 @@ +#define DIFFUSE_AS_CUBE #include "common.hlsl" struct VS_OUTPUT { @@ -31,7 +32,7 @@ VS_OUTPUT main(VS_INPUT In) { float4 main(VS_OUTPUT In) : COLOR0 { float3 rv = reflect(-In.viewVec.xyz, In.normal.xyz); - float4 color = SAMPLE_CUBE(sEnvironment, normalize(rv)); + float4 color = SAMPLE_CUBE(sDiffuse, normalize(rv)); color *= uMaterial; color.xyz = saturate(color.xyz); diff --git a/src/shaders/filter.glsl b/src/shaders/filter.glsl index 925e45b..b8f8bd2 100644 --- a/src/shaders/filter.glsl +++ b/src/shaders/filter.glsl @@ -71,14 +71,14 @@ uniform mat4 uViewProj; #endif #ifdef FILTER_EQUIRECTANGULAR - uniform samplerCube sEnvironment; + uniform samplerCube sDiffuse; #define PI 3.14159265358979323846 vec4 equirectangular() { vec2 a = (vTexCoord - 0.5) * vec2(PI * 2.0, PI); vec3 v = vec3(sin(a.x) * cos(a.y), -sin(a.y), cos(a.x) * cos(a.y)); - return textureCube(sEnvironment, normalize(v)); + return textureCube(sDiffuse, normalize(v)); } #endif diff --git a/src/shaders/sky.hlsl b/src/shaders/sky.hlsl index 2b05139..801ecec 100644 --- a/src/shaders/sky.hlsl +++ b/src/shaders/sky.hlsl @@ -3,7 +3,7 @@ #include "common.hlsl" struct VS_OUTPUT { - float4 pos : SV_POSITION; + float4 pos : POSITION; half4 color : TEXCOORD0; half2 texCoord : TEXCOORD1; float3 coord : TEXCOORD2; diff --git a/src/shaders/water_rays.hlsl b/src/shaders/water_rays.hlsl index ff776b5..3020c1b 100644 --- a/src/shaders/water_rays.hlsl +++ b/src/shaders/water_rays.hlsl @@ -29,13 +29,13 @@ float boxIntersect(float3 rayPos, float3 rayDir, float3 center, float3 hsize) { float3 m = min(bMin, bMax); return max(0.0, max(m.x, max(m.y, m.z))); } - -#ifdef _GAPI_GXM + +#if defined(_GAPI_GXM) float4 main(VS_OUTPUT In) : COLOR0 { float2 pixelCoord = float2(__pixel_x(), __pixel_y()); -#else defined(_GAPI_D3D11 +#else float4 main(VS_OUTPUT In) : COLOR0 { - float2 pixelCoord = In.pos.xy; + float2 pixelCoord = In.pos.xy; #endif float3 viewVec = normalize(In.viewVec); From 0cd27e7d5addbf97781e141875eb8d738ce6fb35 Mon Sep 17 00:00:00 2001 From: XProger Date: Fri, 6 Nov 2020 12:41:34 +0400 Subject: [PATCH 28/58] XBOX fix 1080i video mode support fix #277 --- src/platform/xbox/main.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/platform/xbox/main.cpp b/src/platform/xbox/main.cpp index 02e4292..2fcf139 100644 --- a/src/platform/xbox/main.cpp +++ b/src/platform/xbox/main.cpp @@ -263,9 +263,16 @@ HRESULT ContextCreate() { d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; - d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES_MULTISAMPLE_GAUSSIAN; d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE; + if (d3dpp.BackBufferHeight == 480) { + d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES_MULTISAMPLE_GAUSSIAN; + } else if (d3dpp.BackBufferHeight == 720) { + d3dpp.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES_MULTISAMPLE_QUINCUNX; + } else if (d3dpp.BackBufferHeight == 1080) { + d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; + } + if (FAILED(D3D->CreateDevice(0, D3DDEVTYPE_HAL, NULL, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &device))) return E_FAIL; From 8a5cc60873715be6db2e2449304d018bf7c90194 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sat, 7 Nov 2020 05:47:48 +0300 Subject: [PATCH 29/58] 3DS fix build --- src/gapi/c3d.h | 13 ++----------- src/platform/3ds/compose_entity.v.pica | 2 +- src/platform/3ds/compose_room.v.pica | 2 +- src/platform/3ds/compose_sprite.v.pica | 2 +- src/platform/3ds/deploy.bat | 2 +- src/platform/3ds/filter_upscale.v.pica | 2 +- src/platform/3ds/gui.v.pica | 2 +- 7 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/gapi/c3d.h b/src/gapi/c3d.h index 809ec1b..96b99e9 100644 --- a/src/gapi/c3d.h +++ b/src/gapi/c3d.h @@ -184,13 +184,8 @@ namespace GAPI { C3D_TexEnv *e = env; - GPU_TEVSRC texSrc = GPU_TEXTURE1; - if (src == compose_mirror) { - texSrc = GPU_TEXTURE0; - } - { // texture * vertex color - C3D_TexEnvSrc(e, C3D_Both, texSrc, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR); + C3D_TexEnvSrc(e, C3D_Both, GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR); C3D_TexEnvFunc(e, C3D_Both, GPU_MODULATE); if (pass == Core::passCompose) { C3D_TexEnvScale(e, C3D_RGB, GPU_TEVSCALE_2); @@ -557,11 +552,7 @@ namespace GAPI { void bind(int sampler) { if (opt & OPT_PROXY) return; - if (sampler == sEnvironment) { - sampler = 0; // PICA200 can fetch cubemap only from tex unit 0 - } else if (sampler == sDiffuse) { - sampler = 1; - } else { + if (sampler > 3) { return; } diff --git a/src/platform/3ds/compose_entity.v.pica b/src/platform/3ds/compose_entity.v.pica index 5fd51bf..6809033 100644 --- a/src/platform/3ds/compose_entity.v.pica +++ b/src/platform/3ds/compose_entity.v.pica @@ -41,7 +41,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main diff --git a/src/platform/3ds/compose_room.v.pica b/src/platform/3ds/compose_room.v.pica index 65b2c8b..e270481 100644 --- a/src/platform/3ds/compose_room.v.pica +++ b/src/platform/3ds/compose_room.v.pica @@ -36,7 +36,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main diff --git a/src/platform/3ds/compose_sprite.v.pica b/src/platform/3ds/compose_sprite.v.pica index a7962d2..7e803e6 100644 --- a/src/platform/3ds/compose_sprite.v.pica +++ b/src/platform/3ds/compose_sprite.v.pica @@ -43,7 +43,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main diff --git a/src/platform/3ds/deploy.bat b/src/platform/3ds/deploy.bat index a64a83e..38c128a 100644 --- a/src/platform/3ds/deploy.bat +++ b/src/platform/3ds/deploy.bat @@ -1 +1 @@ -C:\devkitPro\tools\bin\3dslink.exe OpenLara.3dsx -a 192.168.1.68 \ No newline at end of file +C:\devkitPro\tools\bin\3dslink.exe OpenLara.3dsx -a 192.168.1.63 \ No newline at end of file diff --git a/src/platform/3ds/filter_upscale.v.pica b/src/platform/3ds/filter_upscale.v.pica index 5a09ad3..d4b7230 100644 --- a/src/platform/3ds/filter_upscale.v.pica +++ b/src/platform/3ds/filter_upscale.v.pica @@ -11,7 +11,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main diff --git a/src/platform/3ds/gui.v.pica b/src/platform/3ds/gui.v.pica index 4656a47..08c1471 100644 --- a/src/platform/3ds/gui.v.pica +++ b/src/platform/3ds/gui.v.pica @@ -12,7 +12,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main From f2622864e8a24b31df2a59935b6c9eb18cc00eed Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sat, 7 Nov 2020 06:05:38 +0300 Subject: [PATCH 30/58] 3DS move pica files to shaders directory --- src/platform/3ds/Makefile | 2 +- src/{platform/3ds => shaders/pica}/compose_entity.v.pica | 0 src/{platform/3ds => shaders/pica}/compose_flash.v.pica | 0 src/{platform/3ds => shaders/pica}/compose_mirror.v.pica | 0 src/{platform/3ds => shaders/pica}/compose_room.v.pica | 0 src/{platform/3ds => shaders/pica}/compose_sprite.v.pica | 0 src/{platform/3ds => shaders/pica}/dummy.v.pica | 0 src/{platform/3ds => shaders/pica}/filter_upscale.v.pica | 0 src/{platform/3ds => shaders/pica}/gui.v.pica | 0 src/{platform/3ds => shaders/pica}/shadow_entity.v.pica | 0 10 files changed, 1 insertion(+), 1 deletion(-) rename src/{platform/3ds => shaders/pica}/compose_entity.v.pica (100%) rename src/{platform/3ds => shaders/pica}/compose_flash.v.pica (100%) rename src/{platform/3ds => shaders/pica}/compose_mirror.v.pica (100%) rename src/{platform/3ds => shaders/pica}/compose_room.v.pica (100%) rename src/{platform/3ds => shaders/pica}/compose_sprite.v.pica (100%) rename src/{platform/3ds => shaders/pica}/dummy.v.pica (100%) rename src/{platform/3ds => shaders/pica}/filter_upscale.v.pica (100%) rename src/{platform/3ds => shaders/pica}/gui.v.pica (100%) rename src/{platform/3ds => shaders/pica}/shadow_entity.v.pica (100%) diff --git a/src/platform/3ds/Makefile b/src/platform/3ds/Makefile index 33fa335..7eb7a4a 100644 --- a/src/platform/3ds/Makefile +++ b/src/platform/3ds/Makefile @@ -33,7 +33,7 @@ include $(DEVKITARM)/3ds_rules #--------------------------------------------------------------------------------- TARGET := OpenLara BUILD := build -SOURCES := . ../../libs/stb_vorbis ../../libs/tinf +SOURCES := . ../../libs/stb_vorbis ../../libs/tinf ../../shaders/pica DATA := data INCLUDES := ../.. GRAPHICS := gfx diff --git a/src/platform/3ds/compose_entity.v.pica b/src/shaders/pica/compose_entity.v.pica similarity index 100% rename from src/platform/3ds/compose_entity.v.pica rename to src/shaders/pica/compose_entity.v.pica diff --git a/src/platform/3ds/compose_flash.v.pica b/src/shaders/pica/compose_flash.v.pica similarity index 100% rename from src/platform/3ds/compose_flash.v.pica rename to src/shaders/pica/compose_flash.v.pica diff --git a/src/platform/3ds/compose_mirror.v.pica b/src/shaders/pica/compose_mirror.v.pica similarity index 100% rename from src/platform/3ds/compose_mirror.v.pica rename to src/shaders/pica/compose_mirror.v.pica diff --git a/src/platform/3ds/compose_room.v.pica b/src/shaders/pica/compose_room.v.pica similarity index 100% rename from src/platform/3ds/compose_room.v.pica rename to src/shaders/pica/compose_room.v.pica diff --git a/src/platform/3ds/compose_sprite.v.pica b/src/shaders/pica/compose_sprite.v.pica similarity index 100% rename from src/platform/3ds/compose_sprite.v.pica rename to src/shaders/pica/compose_sprite.v.pica diff --git a/src/platform/3ds/dummy.v.pica b/src/shaders/pica/dummy.v.pica similarity index 100% rename from src/platform/3ds/dummy.v.pica rename to src/shaders/pica/dummy.v.pica diff --git a/src/platform/3ds/filter_upscale.v.pica b/src/shaders/pica/filter_upscale.v.pica similarity index 100% rename from src/platform/3ds/filter_upscale.v.pica rename to src/shaders/pica/filter_upscale.v.pica diff --git a/src/platform/3ds/gui.v.pica b/src/shaders/pica/gui.v.pica similarity index 100% rename from src/platform/3ds/gui.v.pica rename to src/shaders/pica/gui.v.pica diff --git a/src/platform/3ds/shadow_entity.v.pica b/src/shaders/pica/shadow_entity.v.pica similarity index 100% rename from src/platform/3ds/shadow_entity.v.pica rename to src/shaders/pica/shadow_entity.v.pica From fa2f98747b05a10eb216bca67db415a77028767e Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Tue, 10 Nov 2020 09:37:31 +0300 Subject: [PATCH 31/58] 3DS fix file access latency, add cubemap reflections, add fog, add underwater vertex caustics --- src/core.h | 2 +- src/gapi/c3d.h | 140 +++++++--- src/level.h | 28 +- src/objects.h | 30 +- src/platform/3ds/Makefile | 2 +- src/platform/3ds/main.cpp | 2 + src/shaders/pica/ambient_room.v.pica | 68 +++++ src/shaders/pica/ambient_sprite.v.pica | 78 ++++++ src/shaders/pica/compose_entity.v.pica | 7 +- src/shaders/pica/compose_entity_u.v.pica | 190 +++++++++++++ src/shaders/pica/compose_flash.v.pica | 14 +- src/shaders/pica/compose_mirror.v.pica | 44 ++- src/shaders/pica/compose_room.v.pica | 7 +- src/shaders/pica/compose_room_u.v.pica | 169 +++++++++++ src/shaders/pica/compose_sprite.v.pica | 6 +- src/shaders/pica/compose_sprite_u.v.pica | 184 ++++++++++++ src/shaders/pica/dummy.v.pica | 8 +- src/utils.h | 339 +++++++++++++++-------- 18 files changed, 1117 insertions(+), 201 deletions(-) create mode 100644 src/shaders/pica/ambient_room.v.pica create mode 100644 src/shaders/pica/ambient_sprite.v.pica create mode 100644 src/shaders/pica/compose_entity_u.v.pica create mode 100644 src/shaders/pica/compose_room_u.v.pica create mode 100644 src/shaders/pica/compose_sprite_u.v.pica diff --git a/src/core.h b/src/core.h index eb712d2..f10a930 100644 --- a/src/core.h +++ b/src/core.h @@ -1221,7 +1221,7 @@ namespace Core { } void setFog(const vec4 ¶ms) { - #ifdef _XBOX + #if defined(_GAPI_D3D8) || defined(_GAPI_C3D) GAPI::setFog(params); #else ASSERT(Core::active.shader); diff --git a/src/gapi/c3d.h b/src/gapi/c3d.h index 96b99e9..cec0d8a 100644 --- a/src/gapi/c3d.h +++ b/src/gapi/c3d.h @@ -84,6 +84,11 @@ namespace GAPI { #include "compose_room_shbin.h" #include "compose_entity_shbin.h" #include "compose_mirror_shbin.h" + #include "compose_sprite_u_shbin.h" + #include "compose_room_u_shbin.h" + #include "compose_entity_u_shbin.h" + #include "ambient_sprite_shbin.h" + #include "ambient_room_shbin.h" #include "shadow_entity_shbin.h" #include "filter_upscale_shbin.h" #include "gui_shbin.h" @@ -91,15 +96,20 @@ namespace GAPI { } #define SHADERS_LIST(E) \ - E( compose_sprite ) \ - E( compose_flash ) \ - E( compose_room ) \ - E( compose_entity ) \ - E( compose_mirror ) \ - E( shadow_entity ) \ - E( filter_upscale ) \ - E( gui ) \ - E( dummy ) + E( compose_sprite ) \ + E( compose_flash ) \ + E( compose_room ) \ + E( compose_entity ) \ + E( compose_mirror ) \ + E( compose_sprite_u ) \ + E( compose_room_u ) \ + E( compose_entity_u ) \ + E( ambient_sprite ) \ + E( ambient_room ) \ + E( shadow_entity ) \ + E( filter_upscale ) \ + E( gui ) \ + E( dummy ) #define SHADER_DECL(v) DVLB_s* v; #define SHADER_INIT(v) v = DVLB_ParseFile((u32*)v##_shbin, v##_shbin_size); @@ -124,6 +134,14 @@ namespace GAPI { SHADERS_LIST(SHADER_DECL); + struct FogLUT { + vec4 params; + uint32 color; + C3D_FogLut table; + } fogLUT[3]; + + vec4 fogParams; + struct Shader { shaderProgram_s program; C3D_TexEnv env[4]; @@ -141,24 +159,6 @@ namespace GAPI { DVLB_s* src = NULL; - switch (pass) { - case Core::passCompose : - switch (type) { - case 0 : src = compose_sprite; break; - case 1 : src = compose_flash; break; - case 2 : src = compose_room; break; - case 3 : src = compose_entity; break; - case 4 : src = compose_mirror; break; - } - break; - case Core::passShadow : src = shadow_entity; break; - case Core::passFilter : src = filter_upscale; break; - case Core::passGUI : src = gui; break; - default : src = dummy; - } - - shaderProgramSetVsh(&program, &src->DVLE[0]); - bool underwater = false; bool grayscale = false; @@ -171,6 +171,44 @@ namespace GAPI { } } + switch (pass) { + case Core::passCompose : + if (underwater) { + switch (type) { + case 0 : src = compose_sprite_u; break; + case 1 : src = compose_flash; break; + case 2 : src = compose_room_u; break; + case 3 : src = compose_entity_u; break; + case 4 : src = compose_mirror; break; + default : src = dummy; + } + } else { + switch (type) { + case 0 : src = compose_sprite; break; + case 1 : src = compose_flash; break; + case 2 : src = compose_room; break; + case 3 : src = compose_entity; break; + case 4 : src = compose_mirror; break; + default : src = dummy; + } + } + break; + case Core::passAmbient : + switch (type) { + case 0 : src = ambient_sprite; break; + case 1 : src = ambient_room; break; + case 2 : src = ambient_room; break; + default : src = dummy; + } + break; + case Core::passShadow : src = shadow_entity; break; + case Core::passFilter : src = filter_upscale; break; + case Core::passGUI : src = gui; break; + default : src = dummy; + } + + shaderProgramSetVsh(&program, &src->DVLE[0]); + for (int ut = 0; ut < uMAX; ut++) { uID[ut] = shaderInstanceGetUniformLocation(program.vertexShader, UniformName[ut]); } @@ -187,13 +225,13 @@ namespace GAPI { { // texture * vertex color C3D_TexEnvSrc(e, C3D_Both, GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR); C3D_TexEnvFunc(e, C3D_Both, GPU_MODULATE); - if (pass == Core::passCompose) { - C3D_TexEnvScale(e, C3D_RGB, GPU_TEVSCALE_2); + if (pass == Core::passCompose || pass == Core::passAmbient) { + C3D_TexEnvScale(e, C3D_Both, GPU_TEVSCALE_4); } e++; } - if (underwater) { // multiply by underwater color + if (pass == Core::passAmbient && underwater) { // multiply by underwater color only for ambient pass C3D_TexEnvSrc(e, C3D_Both, GPU_PREVIOUS, GPU_CONSTANT, GPU_PRIMARY_COLOR); C3D_TexEnvFunc(e, C3D_Both, GPU_MODULATE); C3D_TexEnvColor(e, 0xFFE5E599); @@ -743,7 +781,7 @@ namespace GAPI { LOG("create RT for face:%d %dx%d\n", face, texture->width, texture->height); C3D_FrameBuf &fb = texture->target[face].frameBuf; - fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->texCube.data[face] : texture->tex.data; + fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->tex.cube->data[face] : texture->tex.data; fb.depthBuf = getDepthBuffer(texture->width, texture->height, group, depthFmt); fb.colorFmt = GPU_COLORBUF(formats[texture->fmt].format); fb.depthFmt = depthFmt; @@ -760,6 +798,10 @@ namespace GAPI { void init() { memset(depthBuffers, 0, sizeof(depthBuffers)); + for (int i = 0; i < COUNT(fogLUT); i++) { + fogLUT[i].params = vec4(-2.0f); // initialize with some unique value + } + gfxInitDefault(); vramFree(vramAlloc(0)); // vramInit() @@ -860,6 +902,7 @@ namespace GAPI { } void resetState() { + fogParams = vec4(-1.0f); C3D_SetAttrInfo(&vertexAttribs); } @@ -966,6 +1009,39 @@ namespace GAPI { } } + void setFog(const vec4 ¶ms) { + if (fogParams == params) return; + + fogParams = params; + + int32 index; + + if (fogLUT[0].params == params) { + index = 0; + } else if (fogLUT[1].params == params) { + index = 1; + } else if (fogLUT[2].params == params) { + index = 2; + } else { + index = 2; + fogLUT[0] = fogLUT[1]; + fogLUT[1] = fogLUT[2]; + + // for some reason GPU_NO_FOG breaks depth, blend or texEnv states in some cases, so we use low density fog table (0.0f) as NO_FOG + FogLut_Exp(&fogLUT[index].table, params.w, 1.0f, 32.0f, 45.0f * 1024.0f); + fogLUT[index].params = params; + fogLUT[index].color = 0xFF000000 + | (uint32(clamp(params.x * 255.0f, 0.0f, 255.0f)) << 0) + | (uint32(clamp(params.y * 255.0f, 0.0f, 255.0f)) << 8) + | (uint32(clamp(params.z * 255.0f, 0.0f, 255.0f)) << 16); + } + + + C3D_FogGasMode(GPU_FOG, GPU_PLAIN_DENSITY, false); + C3D_FogColor(fogLUT[index].color); + C3D_FogLutBind(&fogLUT[index].table); + } + void clear(bool color, bool depth) { uint32 mask = 0; if (color) mask |= C3D_CLEAR_COLOR; @@ -973,7 +1049,7 @@ namespace GAPI { if (!mask) return; C3D_FrameSplit(0); - C3D_RenderTargetClear(curTarget, C3D_ClearBits(mask), clearColor, 0); + C3D_FrameBufClear(&curTarget->frameBuf, C3D_ClearBits(mask), clearColor, 0); } void setClearColor(const vec4 &color) { diff --git a/src/level.h b/src/level.h index 8db8b09..ac29740 100644 --- a/src/level.h +++ b/src/level.h @@ -617,11 +617,14 @@ struct Level : IGame { return; #endif - #ifdef _OS_3DS - return; // TODO render to cubemap face + #ifdef _GAPI_C3D GAPI::rotate90 = false; #endif + #ifdef _GAPI_D3D8 + GAPI::setFrontFace(false); + #endif + PROFILE_MARKER("ENVIRONMENT"); setupBinding(); float tmpEye = Core::eye; @@ -631,10 +634,6 @@ struct Level : IGame { int16 rIndex = roomIndex; level.getSector(rIndex, pos); // fix room index for overlapped blocks - #ifdef _GAPI_D3D8 - GAPI::setFrontFace(false); - #endif - // render level into cube faces or texture images for (int i = 0; i < 6; i++) { setupCubeCamera(pos, i); @@ -651,7 +650,7 @@ struct Level : IGame { GAPI::setFrontFace(true); #endif - #ifdef _OS_3DS + #ifdef _GAPI_C3D GAPI::rotate90 = true; #endif @@ -1801,12 +1800,18 @@ struct Level : IGame { TR::Entity &e = level.entities[i]; if (e.type == TR::Entity::CRYSTAL) { Crystal *c = (Crystal*)e.controller; - renderEnvironment(c->getRoomIndex(), c->pos - vec3(0, 512, 0), &c->environment); - #ifdef USE_CUBEMAP_MIPS - c->environment->generateMipMap(); - #endif + if (c->environment) { // already initialized and baked + continue; + } + c->bake(); + + #ifdef _GAPI_C3D + // C3D has a limit of GX commands for buffers clearing (GX_MemoryFill), so we limit render to one cubemap per frame + return; + #endif } } + needRedrawReflections = false; } void setMainLight(Controller *controller) { @@ -3178,7 +3183,6 @@ struct Level : IGame { if (needRedrawReflections) { initReflections(); - needRedrawReflections = false; } if (ambientCache) { diff --git a/src/objects.h b/src/objects.h index 7e5dfc3..1c86287 100644 --- a/src/objects.h +++ b/src/objects.h @@ -865,12 +865,7 @@ struct Drawbridge : Controller { struct Crystal : Controller { Texture *environment; - Crystal(IGame *game, int entity) : Controller(game, entity) { - uint32 opt = OPT_CUBEMAP | OPT_TARGET; - #ifdef USE_CUBEMAP_MIPS - opt |= OPT_MIPMAPS; - #endif - environment = new Texture(CRYSTAL_CUBEMAP_SIZE, CRYSTAL_CUBEMAP_SIZE, 1, FMT_RGB16, opt); + Crystal(IGame *game, int entity) : Controller(game, entity), environment(NULL) { activate(); } @@ -895,12 +890,31 @@ struct Crystal : Controller { } virtual void render(Frustum *frustum, MeshBuilder *mesh, Shader::Type type, bool caustics) { - Core::setMaterial(0.5, 0.5, 3.0, 1.0f); + Core::setMaterial(0.5, 0.5, 3.0, 0.0f); // 0.0f - use vertex normal as texcoord GAPI::Texture *dtex = Core::active.textures[sDiffuse]; - environment->bind(sDiffuse); + if (environment) { + environment->bind(sDiffuse); + } else { + Core::whiteCube->bind(sDiffuse); + } Controller::render(frustum, mesh, type, caustics); if (dtex) dtex->bind(sDiffuse); } + + void bake() { + ASSERT(!environment); + + uint32 opt = OPT_CUBEMAP | OPT_TARGET; + #ifdef USE_CUBEMAP_MIPS + opt |= OPT_MIPMAPS; + #endif + + environment = new Texture(CRYSTAL_CUBEMAP_SIZE, CRYSTAL_CUBEMAP_SIZE, 1, FMT_RGB16, opt); + game->renderEnvironment(getRoomIndex(), pos - vec3(0, 512, 0), &environment); + if (opt & OPT_MIPMAPS) { + environment->generateMipMap(); + } + } }; diff --git a/src/platform/3ds/Makefile b/src/platform/3ds/Makefile index 7eb7a4a..efec6dc 100644 --- a/src/platform/3ds/Makefile +++ b/src/platform/3ds/Makefile @@ -48,7 +48,7 @@ APP_DESCRIPTION := Classic Tomb Raider open-source engine #--------------------------------------------------------------------------------- ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft -CFLAGS := $(ARCH) -g0 -w -Ofast -ffast-math -mword-relocations -fomit-frame-pointer -ffunction-sections +CFLAGS := $(ARCH) -g0 -w -O3 -mword-relocations -fomit-frame-pointer -ffunction-sections CFLAGS += $(INCLUDE) -DARM11 -D_3DS CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 diff --git a/src/platform/3ds/main.cpp b/src/platform/3ds/main.cpp index 8ac8b51..72af624 100644 --- a/src/platform/3ds/main.cpp +++ b/src/platform/3ds/main.cpp @@ -193,6 +193,8 @@ int main() { return 0; } + Stream::init(); + sndInit(); inputInit(); diff --git a/src/shaders/pica/ambient_room.v.pica b/src/shaders/pica/ambient_room.v.pica new file mode 100644 index 0000000..ed53a72 --- /dev/null +++ b/src/shaders/pica/ambient_room.v.pica @@ -0,0 +1,68 @@ +; constants +.constf const0(0.0, 0.5, 1.0, 2.0) +.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.00787401574) + +.alias ZERO const0.x +.alias HALF const0.y +.alias ONE const0.z +.alias TWO const0.w +.alias INV_BYTE const1.x +.alias INV_SHORT const1.y +.alias EPS const1.z +.alias INV_127 const1.w + +; uniforms +.fvec uViewProj[4] +.fvec uBasis[2] +.fvec uLightPos[4] +.fvec uLightColor[4] + +; in +.alias aCoord v0 +.alias aNormal v1 +.alias aTexCoord v2 +.alias aColor v3 +.alias aLight v4 + +; variables +.alias lv1 r1 +.alias lv2 r2 +.alias lv3 r3 +.alias normal r4 +.alias att r5 +.alias light r6 +.alias pos r7 +.alias tmp r8 + +; out +.out vPosition position +.out vTexCoord texcoord0 +.out vColor color + +.proc main +; pos = mulQuatPos(uBasis, aCoord) + mul pos.xyz, uBasis[0], aCoord.zxyw + mad pos.xyz, aCoord, uBasis[0].zxyw, -pos + mad pos.xyz, aCoord.yzxw, uBasis[0].w, pos + mul tmp.xyz, uBasis[0].zxyw, pos + mad pos.xyz, pos.yzxw, uBasis[0].yzxw, -tmp + mad pos.xyz, pos, TWO, aCoord + add pos.xyz, uBasis[1], pos + mov pos.w, ONE + +; vPosition = uViewProj * pos + mul tmp, uViewProj[0], pos.x + mad tmp, pos.y, uViewProj[1], tmp + mad tmp, pos.z, uViewProj[2], tmp + mad vPosition, pos.w, uViewProj[3], tmp + +; vColor = aColor/255 * aLight/255 + mul tmp, INV_BYTE, aColor + mul att, INV_BYTE, aLight + mul vColor, tmp, att + +; vTecCoord = aTexCoord/32767 + mul vTexCoord, INV_SHORT, aTexCoord + + end +.end diff --git a/src/shaders/pica/ambient_sprite.v.pica b/src/shaders/pica/ambient_sprite.v.pica new file mode 100644 index 0000000..6340cb6 --- /dev/null +++ b/src/shaders/pica/ambient_sprite.v.pica @@ -0,0 +1,78 @@ +; constants +.constf const0(0.0, 0.5, 1.0, 2.0) +.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.00787401574) + +.alias ZERO const0.x +.alias HALF const0.y +.alias ONE const0.z +.alias TWO const0.w +.alias INV_BYTE const1.x +.alias INV_SHORT const1.y +.alias EPS const1.z +.alias INV_127 const1.w + +; uniforms +.fvec uViewPos +.fvec uViewProj[4] +.fvec uBasis[2] +.fvec uLightPos[4] +.fvec uLightColor[4] +.fvec uMaterial +.alias MAT_AMBIENT uMaterial.y +.alias MAT_ALPHA uMaterial.w + +; in +.alias aCoord v0 +.alias aNormal v1 +.alias aTexCoord v2 +.alias aColor v3 +.alias aLight v4 + +; variables +.alias lv0 r0 +.alias lv1 r1 +.alias lv2 r2 +.alias lv3 r3 +.alias normal r4 +.alias att r5 +.alias light r6 +.alias pos r7 +.alias tmp r8 +.alias size r4 +.alias vv r6 + +; out +.out vPosition position +.out vTexCoord texcoord0 +.out vColor color + +.proc main +; pos = aCoord + mulQuatPos(uBasis, aTexCoord.zw) + mov pos.z, ZERO + mov pos.xy, aTexCoord.zw + mul size.xyz, uBasis[0], pos.zxy + mad size.xyz, pos.xyz, uBasis[0].zxy, -size + mad size.xyz, pos.yzx, uBasis[0].w, size + mul tmp.xyz, uBasis[0].zxy, size.xyz + mad size.xyz, size.yzx, uBasis[0].yzx, -tmp + mad pos.xyz, size, TWO, pos + add size.xyz, uBasis[1], aCoord + add pos.xyz, pos, size + mov pos.w, ONE + +; vPosition = uViewProj * pos + mul tmp, uViewProj[0], pos.x + mad tmp, pos.y, uViewProj[1], tmp + mad tmp, pos.z, uViewProj[2], tmp + mad vPosition, pos.w, uViewProj[3], tmp + +; vColor = premultAlpha(aLight / 255) + mul tmp, INV_BYTE, aLight + mul tmp.xyz, tmp, tmp.w + mov vColor, tmp + +; vTecCoord = aTexCoord/32767 + mul vTexCoord, INV_SHORT, aTexCoord + + end +.end diff --git a/src/shaders/pica/compose_entity.v.pica b/src/shaders/pica/compose_entity.v.pica index 6809033..40e5aa3 100644 --- a/src/shaders/pica/compose_entity.v.pica +++ b/src/shaders/pica/compose_entity.v.pica @@ -13,8 +13,8 @@ ; uniforms .fvec uViewProj[4] -.fvec uLightPos[4]; -.fvec uLightColor[4]; +.fvec uLightPos[4] +.fvec uLightColor[4] .fvec uMaterial .fvec uBasis[32*2] @@ -120,7 +120,8 @@ mad tmp.xyz, light.y, uLightColor[1], tmp mad tmp.xyz, light.z, uLightColor[2], tmp mad tmp.xyz, light.w, uLightColor[3], tmp - mul vColor, pos, tmp + mul tmp, pos, tmp + mul vColor, HALF, tmp ; vTecCoord = aTexCoord/32767 mul vTexCoord, INV_SHORT, aTexCoord diff --git a/src/shaders/pica/compose_entity_u.v.pica b/src/shaders/pica/compose_entity_u.v.pica new file mode 100644 index 0000000..33b22e4 --- /dev/null +++ b/src/shaders/pica/compose_entity_u.v.pica @@ -0,0 +1,190 @@ +; constants +.constf const0(0.0, 0.5, 1.0, 2.0) +.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.00787401574) + +.alias ZERO const0.x +.alias HALF const0.y +.alias ONE const0.z +.alias TWO const0.w +.alias INV_BYTE const1.x +.alias INV_SHORT const1.y +.alias EPS const1.z +.alias INV_127 const1.w + +; uniforms +.fvec uViewProj[4] +.fvec uLightPos[4] +.fvec uLightColor[4] +.fvec uMaterial +.fvec uBasis[32*2] + +.alias MAT_AMBIENT uMaterial.y +.alias MAT_ALPHA uMaterial.w + +; in +.alias aCoord v0 +.alias aNormal v1 +.alias aTexCoord v2 +.alias aColor v3 +.alias aLight v4 + +; variables +.alias lv0 r0 +.alias lv1 r1 +.alias lv2 r2 +.alias lv3 r3 +.alias normal r4 +.alias att r5 +.alias light r6 +.alias pos r7 +.alias tmp r8 +.alias diffuse r5 + +; out +.out vPosition position +.out vTexCoord texcoord0 +.out vColor color + + +; underwater block -------------------------------------------------- +.constf const2(6.28318530718, 0.15915494309, 0.63661977236, 0.0) +.constf const3(1.0, 3.0, 0.0009765625, 0.75) +.constf const4(0.6, 0.9, 0.9, 1.0) + +.alias TWO_PI const2.x +.alias INV_TWO_PI const2.y +.alias INV_HALF_PI const2.z +.alias ONE_THREE const3.xy +.alias WAVE_SIZE const3.z +.alias WAVE_LUM const3.w +.alias UW_COLOR const4 + +.fvec uParam +.alias TIME uParam.x + +; tmp.x = abs(tmp.x) +.proc abs + max tmp.x, tmp.x, -tmp.x +.end + +; tmp.x = mod(tmp.x, TWO_PI) +.proc mod2pi + mul tmp.y, INV_TWO_PI, tmp.x + flr tmp.y, tmp.y + mul tmp.y, TWO_PI, tmp.y + add tmp.x, tmp.x, -tmp.y +.end + +; tmp.x = sin(tmp.x) +.proc sin + mul tmp.x, INV_HALF_PI, tmp.x + add tmp.xy, -ONE_THREE, tmp.xx + mad tmp.xy, tmp.xy, -tmp.xy, ONE_THREE.xx + max tmp.xy, ZERO, tmp.xy + add tmp.x, tmp.x, tmp.y +.end + +.proc applyUnderwater + ; k = dot(pos, 1/1024) + time + dp3 tmp.x, WAVE_SIZE, pos + add tmp.x, TIME, tmp.x + + call mod2pi + call sin + call abs + + mul tmp.x, WAVE_LUM, tmp.x + add tmp.x, HALF, tmp.x + mul tmp.xyz, UW_COLOR, tmp.xxx + mul diffuse.xyz, diffuse.xyz, tmp.xyz + mul vColor, HALF, diffuse +.end +; ------------------------------------------------------------------- + + +.proc main +; joint = int(aCoord.w) + mova a0.x, aCoord.w + +; pos = mulQuatPos(uBasis[joint], aCoord) + mul pos.xyz, uBasis[a0.x], aCoord.zxyw + mad pos.xyz, aCoord, uBasis[a0.x].zxyw, -pos + mad pos.xyz, aCoord.yzxw, uBasis[a0.x].w, pos + mul tmp.xyz, uBasis[a0.x].zxyw, pos + mad pos.xyz, pos.yzxw, uBasis[a0.x].yzxw, -tmp + mad pos.xyz, pos, TWO, aCoord + add pos.xyz, uBasis[a0.x + 1], pos + mov pos.w, uBasis[a0.x + 1].w + +; vPosition = uViewProj * pos + mul tmp, uViewProj[0], pos.x + mad tmp, pos.y, uViewProj[1], tmp + mad tmp, pos.z, uViewProj[2], tmp + mad vPosition, pos.w, uViewProj[3], tmp + +; lighting + ; lv[0..3] = (uLightPos[0..3].xyz - pos) * uLightColor[0..3].w; + add lv0.xyz, uLightPos[0], -pos + add lv1.xyz, uLightPos[1], -pos + add lv2.xyz, uLightPos[2], -pos + add lv3.xyz, uLightPos[3], -pos + mul lv0.xyz, uLightColor[0].w, lv0 + mul lv1.xyz, uLightColor[1].w, lv1 + mul lv2.xyz, uLightColor[2].w, lv2 + mul lv3.xyz, uLightColor[3].w, lv3 + + ; att[0..3] = dot(lv[0..3], lv[0..3]) + dp3 att.x, lv0, lv0 + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.x, att.x + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; normal = mulQuat(uBasis[joint], aNormal/127 - 1) + mul normal.xyz, INV_127, aNormal + add normal.xyz, -ONE, normal + mul pos.xyz, uBasis[a0.x], normal.zxyw + mad pos.xyz, normal, uBasis[a0.x].zxyw, -pos + mad pos.xyz, normal.yzxw, uBasis[a0.x].w, pos + mul tmp.xyz, uBasis[a0.x].zxyw, pos + mad pos.xyz, pos.yzxw, uBasis[a0.x].yzxw, -tmp + mad normal.xyz, pos, TWO, normal + + ; light = max(0, dot(normal, lv[0..3])) + dp3 light.x, lv0, normal + dp3 light.y, lv1, normal + dp3 light.z, lv2, normal + dp3 light.w, lv3, normal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; vColor = aColor/255 * material.alpha * (material.ambient + light[0..3] * uLightColor[0..3]) + mul diffuse, INV_BYTE, aColor + mul diffuse, MAT_ALPHA, diffuse + mov tmp.xyz, MAT_AMBIENT + mov tmp.w, ONE + mad tmp.xyz, light.x, uLightColor[0], tmp + mad tmp.xyz, light.y, uLightColor[1], tmp + mad tmp.xyz, light.z, uLightColor[2], tmp + mad tmp.xyz, light.w, uLightColor[3], tmp + mul diffuse, diffuse, tmp + +; vColor = applyUnderwater(diffuse, pos) + call applyUnderwater + +; vTecCoord = aTexCoord/32767 + mul vTexCoord, INV_SHORT, aTexCoord + + end +.end diff --git a/src/shaders/pica/compose_flash.v.pica b/src/shaders/pica/compose_flash.v.pica index fce085f..b5ef788 100644 --- a/src/shaders/pica/compose_flash.v.pica +++ b/src/shaders/pica/compose_flash.v.pica @@ -1,6 +1,6 @@ ; constants .constf const0(0.0, 0.5, 1.0, 2.0) -.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.1) +.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.25) .alias ZERO const0.x .alias HALF const0.y .alias ONE const0.z @@ -8,6 +8,7 @@ .alias INV_BYTE const1.x .alias INV_SHORT const1.y .alias EPS const1.z +.alias QUART const1.w ; uniforms .fvec uViewProj[4] @@ -36,7 +37,7 @@ ; out .out vPosition position -.out vTexCoord texcoord1 +.out vTexCoord texcoord0 .out vColor color .proc main @@ -58,10 +59,11 @@ ; vColor = aColor/255 * material.diffuse + material.emissive * 0.5 mul tmp, INV_BYTE, aColor - mul tmp.xyz, MAT_DIFFUSE, tmp - mov pos.xyz, MAT_EMISSIVE - mad tmp.xyz, pos, HALF, tmp - mov vColor, tmp + mul tmp, MAT_DIFFUSE, tmp + add tmp, tmp, tmp + add tmp, MAT_EMISSIVE, tmp + mov tmp.w, MAT_EMISSIVE + mul vColor, QUART, tmp ; vTecCoord = aTexCoord/32767 mul vTexCoord, INV_SHORT, aTexCoord diff --git a/src/shaders/pica/compose_mirror.v.pica b/src/shaders/pica/compose_mirror.v.pica index 20ee476..a9e9dc0 100644 --- a/src/shaders/pica/compose_mirror.v.pica +++ b/src/shaders/pica/compose_mirror.v.pica @@ -1,6 +1,6 @@ ; constants .constf const0(0.0, 0.5, 1.0, 2.0) -.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.00787401574) +.constf const1(0.00392156886, 3.05185094e-005, 0.25, 0.00787401574) .alias ZERO const0.x .alias HALF const0.y @@ -8,13 +8,14 @@ .alias TWO const0.w .alias INV_BYTE const1.x .alias INV_SHORT const1.y -.alias EPS const1.z +.alias QUART const1.z .alias INV_127 const1.w ; uniforms .fvec uViewProj[4] .fvec uBasis[32*2] .fvec uMaterial +.fvec uViewPos ; in .alias aCoord v0 @@ -29,8 +30,8 @@ .alias lv2 r2 .alias lv3 r3 .alias normal r4 -.alias att r5 -.alias light r6 +.alias refl r5 +.alias view r6 .alias pos r7 .alias tmp r8 @@ -61,18 +62,35 @@ mad tmp, pos.z, uViewProj[2], tmp mad vPosition, pos.w, uViewProj[3], tmp -; vColor = uMaterial - mov vColor.xyzw, ONE +; view = normalize(uViewPos - pos) + add view, uViewPos, pos + dp3 tmp.x, view, view + rsq tmp.x, tmp.x + mul view, view, tmp.xxxx -; normal = mulQuat(uBasis, aNormal/127 - 1) +; normal = mulQuat(uBasis[joint], aNormal/127 - 1) mul normal, INV_127, aNormal add normal, -ONE, normal - mul pos.xyz, uBasis[0], normal.zxyw - mad pos.xyz, normal, uBasis[0].zxyw, -pos - mad pos.xyz, normal.yzxw, uBasis[0].w, pos - mul tmp.xyz, uBasis[0].zxyw, pos - mad pos.xyz, pos.yzxw, uBasis[0].yzxw, -tmp - mad vTexCoord, pos, TWO, normal + mul pos.xyz, uBasis[a0.x], normal.zxyw + mad pos.xyz, normal, uBasis[a0.x].zxyw, -pos + mad pos.xyz, normal.yzxw, uBasis[a0.x].w, pos + mul tmp.xyz, uBasis[a0.x].zxyw, pos + mad pos.xyz, pos.yzxw, uBasis[a0.x].yzxw, -tmp + mad normal, pos, TWO, normal +; refl = reflect(-view, normal) + dp3 tmp.x, -view, normal + add tmp.x, tmp.x, tmp.x + mad refl, -tmp.xxxx, normal, -view + +; vTexCoord = lerp(normal, refl, uMaterial.w) + add tmp, -normal, refl + mad vTexCoord, tmp, uMaterial.wwww, normal + +; vColor = uMaterial + mov tmp.xyz, uMaterial + mov tmp.w, ONE + mul vColor, QUART, tmp + end .end diff --git a/src/shaders/pica/compose_room.v.pica b/src/shaders/pica/compose_room.v.pica index e270481..25f4547 100644 --- a/src/shaders/pica/compose_room.v.pica +++ b/src/shaders/pica/compose_room.v.pica @@ -14,8 +14,8 @@ ; uniforms .fvec uViewProj[4] .fvec uBasis[2] -.fvec uLightPos[4]; -.fvec uLightColor[4]; +.fvec uLightPos[4] +.fvec uLightColor[4] ; in .alias aCoord v0 @@ -100,7 +100,8 @@ mad tmp.xyz, light.y, uLightColor[1], tmp mad tmp.xyz, light.z, uLightColor[2], tmp mad tmp.xyz, light.w, uLightColor[3], tmp - mul vColor, pos, tmp + mul tmp, pos, tmp + mul vColor, HALF, tmp ; vTecCoord = aTexCoord/32767 mul vTexCoord, INV_SHORT, aTexCoord diff --git a/src/shaders/pica/compose_room_u.v.pica b/src/shaders/pica/compose_room_u.v.pica new file mode 100644 index 0000000..467789d --- /dev/null +++ b/src/shaders/pica/compose_room_u.v.pica @@ -0,0 +1,169 @@ +; constants +.constf const0(0.0, 0.5, 1.0, 2.0) +.constf const1(0.00392156886, 3.05185094e-005, 0.0009765625, 0.00787401574) + +.alias ZERO const0.x +.alias HALF const0.y +.alias ONE const0.z +.alias TWO const0.w +.alias INV_BYTE const1.x +.alias INV_SHORT const1.y +.alias INV_127 const1.w + +; uniforms +.fvec uViewProj[4] +.fvec uBasis[2] +.fvec uLightPos[4] +.fvec uLightColor[4] + +; in +.alias aCoord v0 +.alias aNormal v1 +.alias aTexCoord v2 +.alias aColor v3 +.alias aLight v4 + +; variables +.alias lv1 r1 +.alias lv2 r2 +.alias lv3 r3 +.alias normal r4 +.alias att r5 +.alias light r6 +.alias pos r7 +.alias tmp r8 +.alias diffuse r5 + +; out +.out vPosition position +.out vTexCoord texcoord0 +.out vColor color + + +; underwater block -------------------------------------------------- +.constf const2(6.28318530718, 0.15915494309, 0.63661977236, 0.0) +.constf const3(1.0, 3.0, 0.0009765625, 0.75) +.constf const4(0.6, 0.9, 0.9, 1.0) + +.alias TWO_PI const2.x +.alias INV_TWO_PI const2.y +.alias INV_HALF_PI const2.z +.alias ONE_THREE const3.xy +.alias WAVE_SIZE const3.z +.alias WAVE_LUM const3.w +.alias UW_COLOR const4 + +.fvec uParam +.alias TIME uParam.x + +; tmp.x = abs(tmp.x) +.proc abs + max tmp.x, tmp.x, -tmp.x +.end + +; tmp.x = mod(tmp.x, TWO_PI) +.proc mod2pi + mul tmp.y, INV_TWO_PI, tmp.x + flr tmp.y, tmp.y + mul tmp.y, TWO_PI, tmp.y + add tmp.x, tmp.x, -tmp.y +.end + +; tmp.x = sin(tmp.x) +.proc sin + mul tmp.x, INV_HALF_PI, tmp.x + add tmp.xy, -ONE_THREE, tmp.xx + mad tmp.xy, tmp.xy, -tmp.xy, ONE_THREE.xx + max tmp.xy, ZERO, tmp.xy + add tmp.x, tmp.x, tmp.y +.end + +.proc applyUnderwater + ; k = dot(pos, 1/1024) + time + dp3 tmp.x, WAVE_SIZE, pos + add tmp.x, TIME, tmp.x + + call mod2pi + call sin + call abs + + mul tmp.x, WAVE_LUM, tmp.x + add tmp.x, HALF, tmp.x + mul tmp.xyz, UW_COLOR, tmp.xxx + mul diffuse.xyz, diffuse.xyz, tmp.xyz + mul vColor, HALF, diffuse +.end +; ------------------------------------------------------------------- + + +.proc main +; pos = mulQuatPos(uBasis, aCoord) + mul pos.xyz, uBasis[0], aCoord.zxyw + mad pos.xyz, aCoord, uBasis[0].zxyw, -pos + mad pos.xyz, aCoord.yzxw, uBasis[0].w, pos + mul tmp.xyz, uBasis[0].zxyw, pos + mad pos.xyz, pos.yzxw, uBasis[0].yzxw, -tmp + mad pos.xyz, pos, TWO, aCoord + add pos.xyz, uBasis[1], pos + mov pos.w, ONE + +; vPosition = uViewProj * pos + mul tmp, uViewProj[0], pos.x + mad tmp, pos.y, uViewProj[1], tmp + mad tmp, pos.z, uViewProj[2], tmp + mad vPosition, pos.w, uViewProj[3], tmp + +; lighting + ; lv[1..3] = (uLightPos[1..3].xyz - pos) * uLightColor[1..3].w; + add lv1.xyz, uLightPos[1], -pos + add lv2.xyz, uLightPos[2], -pos + add lv3.xyz, uLightPos[3], -pos + mul lv1.xyz, uLightColor[1].w, lv1 + mul lv2.xyz, uLightColor[2].w, lv2 + mul lv3.xyz, uLightColor[3].w, lv3 + + ; att[1..3] = dot(lv[1..3], lv[1..3]) + mov att.x, ONE + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; normal = aNormal/127 - 1 + mul normal.xyz, INV_127, aNormal + add normal.xyz, -ONE, normal + + ; light = max(0, dot(normal, lv[1..3])) + mov light.x, ZERO + dp3 light.y, lv1, normal + dp3 light.z, lv2, normal + dp3 light.w, lv3, normal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; color = (aLight/255 + light[1..3] * uLightColor[1..3]) * aColor/255 + mul tmp, INV_BYTE, aLight + mad tmp.xyz, light.y, uLightColor[1], tmp + mad tmp.xyz, light.z, uLightColor[2], tmp + mad tmp.xyz, light.w, uLightColor[3], tmp + mul diffuse, INV_BYTE, aColor + mul diffuse, diffuse, tmp + +; vColor = applyUnderwater(diffuse, pos) + call applyUnderwater + +; vTecCoord = aTexCoord/32767 + mul vTexCoord, INV_SHORT, aTexCoord + + end +.end diff --git a/src/shaders/pica/compose_sprite.v.pica b/src/shaders/pica/compose_sprite.v.pica index 7e803e6..1d46fb3 100644 --- a/src/shaders/pica/compose_sprite.v.pica +++ b/src/shaders/pica/compose_sprite.v.pica @@ -15,8 +15,8 @@ .fvec uViewPos .fvec uViewProj[4] .fvec uBasis[2] -.fvec uLightPos[4]; -.fvec uLightColor[4]; +.fvec uLightPos[4] +.fvec uLightColor[4] .fvec uMaterial .alias MAT_AMBIENT uMaterial.y .alias MAT_ALPHA uMaterial.w @@ -115,7 +115,7 @@ mad tmp.xyz, light.z, uLightColor[2], tmp mad tmp.xyz, light.w, uLightColor[3], tmp mul tmp.xyz, tmp, tmp.w - mov vColor, tmp + mul vColor, HALF, tmp ; vTecCoord = aTexCoord/32767 mul vTexCoord, INV_SHORT, aTexCoord diff --git a/src/shaders/pica/compose_sprite_u.v.pica b/src/shaders/pica/compose_sprite_u.v.pica new file mode 100644 index 0000000..13d1d88 --- /dev/null +++ b/src/shaders/pica/compose_sprite_u.v.pica @@ -0,0 +1,184 @@ +; constants +.constf const0(0.0, 0.5, 1.0, 2.0) +.constf const1(0.00392156886, 3.05185094e-005, 0.00001, 0.00787401574) + +.alias ZERO const0.x +.alias HALF const0.y +.alias ONE const0.z +.alias TWO const0.w +.alias INV_BYTE const1.x +.alias INV_SHORT const1.y +.alias EPS const1.z +.alias INV_127 const1.w + +; uniforms +.fvec uViewPos +.fvec uViewProj[4] +.fvec uBasis[2] +.fvec uLightPos[4] +.fvec uLightColor[4] +.fvec uMaterial +.alias MAT_AMBIENT uMaterial.y +.alias MAT_ALPHA uMaterial.w + +; in +.alias aCoord v0 +.alias aNormal v1 +.alias aTexCoord v2 +.alias aColor v3 +.alias aLight v4 + +; variables +.alias lv0 r0 +.alias lv1 r1 +.alias lv2 r2 +.alias lv3 r3 +.alias normal r4 +.alias att r5 +.alias light r6 +.alias pos r7 +.alias tmp r8 +.alias size r4 +.alias vv r6 +.alias diffuse r5 + +; out +.out vPosition position +.out vTexCoord texcoord0 +.out vColor color + + +; underwater block -------------------------------------------------- +.constf const2(6.28318530718, 0.15915494309, 0.63661977236, 0.0) +.constf const3(1.0, 3.0, 0.0009765625, 0.75) +.constf const4(0.6, 0.9, 0.9, 1.0) + +.alias TWO_PI const2.x +.alias INV_TWO_PI const2.y +.alias INV_HALF_PI const2.z +.alias ONE_THREE const3.xy +.alias WAVE_SIZE const3.z +.alias WAVE_LUM const3.w +.alias UW_COLOR const4 + +.fvec uParam +.alias TIME uParam.x + +; tmp.x = abs(tmp.x) +.proc abs + max tmp.x, tmp.x, -tmp.x +.end + +; tmp.x = mod(tmp.x, TWO_PI) +.proc mod2pi + mul tmp.y, INV_TWO_PI, tmp.x + flr tmp.y, tmp.y + mul tmp.y, TWO_PI, tmp.y + add tmp.x, tmp.x, -tmp.y +.end + +; tmp.x = sin(tmp.x) +.proc sin + mul tmp.x, INV_HALF_PI, tmp.x + add tmp.xy, -ONE_THREE, tmp.xx + mad tmp.xy, tmp.xy, -tmp.xy, ONE_THREE.xx + max tmp.xy, ZERO, tmp.xy + add tmp.x, tmp.x, tmp.y +.end + +.proc applyUnderwater + ; k = dot(pos, 1/1024) + time + dp3 tmp.x, WAVE_SIZE, pos + add tmp.x, TIME, tmp.x + + call mod2pi + call sin + call abs + + mul tmp.x, WAVE_LUM, tmp.x + add tmp.x, HALF, tmp.x + mul tmp.xyz, UW_COLOR, tmp.xxx + mul diffuse.xyz, diffuse.xyz, tmp.xyz + mul vColor, HALF, diffuse +.end +; ------------------------------------------------------------------- + + +.proc main +; pos = aCoord + mulQuatPos(uBasis, aTexCoord.zw) + mov pos.z, ZERO + mov pos.xy, aTexCoord.zw + mul size.xyz, uBasis[0], pos.zxy + mad size.xyz, pos.xyz, uBasis[0].zxy, -size + mad size.xyz, pos.yzx, uBasis[0].w, size + mul tmp.xyz, uBasis[0].zxy, size.xyz + mad size.xyz, size.yzx, uBasis[0].yzx, -tmp + mad pos.xyz, size, TWO, pos + add size.xyz, uBasis[1], aCoord + add pos.xyz, pos, size + mov pos.w, ONE + +; vPosition = uViewProj * pos + mul tmp, uViewProj[0], pos.x + mad tmp, pos.y, uViewProj[1], tmp + mad tmp, pos.z, uViewProj[2], tmp + mad vPosition, pos.w, uViewProj[3], tmp + +; lighting + ; lv[1..3] = (uLightPos[1..3].xyz - pos) * uLightColor[1..3].w; + add lv1.xyz, uLightPos[1], -pos + add lv2.xyz, uLightPos[2], -pos + add lv3.xyz, uLightPos[3], -pos + mul lv1.xyz, uLightColor[1].w, lv1 + mul lv2.xyz, uLightColor[2].w, lv2 + mul lv3.xyz, uLightColor[3].w, lv3 + + ; att[1..3] = dot(lv[1..3], lv[1..3]) + mov att.x, ONE + dp3 att.y, lv1, lv1 + dp3 att.z, lv2, lv2 + dp3 att.w, lv3, lv3 + + ; att = max(0, 1 - att) / sqrt(att) + rsq tmp.y, att.y + rsq tmp.z, att.z + rsq tmp.w, att.w + + add att, ONE, -att + max att, ZERO, att + mul att, tmp, att + + ; viewVec = uViewPos - pos + add vv.xyz, uViewPos, -pos + + ; normal = normalize(viewVec) + dp3 tmp.x, vv, vv + rsq tmp.x, tmp.x + mul normal, vv, tmp.x + + ; light = max(0, dot(normal, lv[1..3])) + mov light.x, MAT_AMBIENT + dp3 light.y, lv1, normal + dp3 light.z, lv2, normal + dp3 light.w, lv3, normal + + ; light = max(0, light) * att + max light, ZERO, light + mul light, light, att + +; vColor = vec4(aLight.rgb * aLight.a, aLight.a) + mul diffuse, INV_BYTE, aLight + mad diffuse.xyz, light.x, uLightColor[0], diffuse + mad diffuse.xyz, light.y, uLightColor[1], diffuse + mad diffuse.xyz, light.z, uLightColor[2], diffuse + mad diffuse.xyz, light.w, uLightColor[3], diffuse + mul diffuse.xyz, diffuse, diffuse.w + +; vColor = applyUnderwater(diffuse, pos) + call applyUnderwater + +; vTecCoord = aTexCoord/32767 + mul vTexCoord, INV_SHORT, aTexCoord + + end +.end diff --git a/src/shaders/pica/dummy.v.pica b/src/shaders/pica/dummy.v.pica index 6a14c97..7e2f80b 100644 --- a/src/shaders/pica/dummy.v.pica +++ b/src/shaders/pica/dummy.v.pica @@ -1,5 +1,5 @@ ; constants -.constf const0(0.0, 0.0, 0.0, 0.0) +.constf const0(0.0, 0.0, 0.0, 1.0) ; out .out vPosition position @@ -7,8 +7,8 @@ .out vColor color .proc main - mov vPosition, const0.xxxx - mov vTexCoord, const0.xxxx - mov vColor, const0.xxxx + mov vPosition, const0 + mov vTexCoord, const0 + mov vColor, const0 end .end diff --git a/src/utils.h b/src/utils.h index 2ec5854..bff2d02 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1551,9 +1551,101 @@ namespace String { strcpy(res, str); return res; } + + int32 length(uint16 *str) { + if (!str || !str[0]) return 0; + int32 len = 0; + while (*str++) { + len++; + } + return len; + } } +template +struct Array { + int capacity; + int length; + T *items; + + Array(int capacity = 32) : capacity(capacity), length(0), items(NULL) {} + + ~Array() { + clear(); + } + + void reserve(int capacity) { + this->capacity = capacity; + if (items) + items = (T*)realloc(items, capacity * sizeof(T)); + else + items = (T*)malloc(capacity * sizeof(T)); + } + + int push(const T &item) { + if (!items) + items = (T*)malloc(capacity * sizeof(T)); + + if (length == capacity) + reserve(capacity + capacity / 2); + + items[length] = item; + return length++; + } + + int pop() { + ASSERT(length > 0); + return --length; + } + + void removeFast(int index) { + (*this)[index] = (*this)[length - 1]; + length--; + } + + void remove(int index) { + length--; + ASSERT(length >= 0); + for (int i = index; i < length; i++) + items[i] = items[i + 1]; + } + + void resize(int length) { + if (capacity < length) + reserve(length); + this->length = length; + } + + void reset() { + length = 0; + } + + void clear() { + reset(); + free(items); + items = NULL; + } + + int find(const T &item) { + for (int i = 0; i < length; i++) { + if (items[i] == item) + return i; + } + return -1; + } + + void sort() { + ::sort(items, length); + } + + T& operator[] (int index) { + ASSERT(index >= 0 && index < length); + return items[index]; + }; +}; + + struct Stream; extern void osCacheWrite (Stream *stream); @@ -1693,6 +1785,8 @@ struct Stream { static Pack* packs[MAX_PACKS]; + static Array fileList; + static bool addPack(const char *name) { if (!existsContent(name)) { @@ -1710,6 +1804,10 @@ struct Stream { return false; } + static void init() { + readFileList(); + } + static void deinit() { for (int i = 0; i < MAX_PACKS; i++) @@ -1717,8 +1815,58 @@ struct Stream { if (!packs[i]) break; delete packs[i]; } + + for (int i = 0; i < fileList.length; i++) { + delete[] fileList[i]; + } + fileList.clear(); } +private: +#ifdef _OS_3DS + static void streamThread(void *arg) { + Stream* stream = (Stream*)arg; + stream->openFile(); + } +#endif + + void openFile() { + char path[255]; + + path[0] = 0; + if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) { + strcpy(path, contentDir); + } + strcat(path, name); + fixBackslash(path); + + f = fopen(path, "rb"); + + if (!f) { + #ifdef _OS_WEB + osDownload(this); + #else + LOG("error loading file \"%s\"\n", name); + if (callback) { + callback(NULL, userData); + delete this; + } else { + ASSERT(false); + } + #endif + } else { + fseek(f, 0, SEEK_END); + size = (int32)ftell(f); + fseek(f, 0, SEEK_SET); + + fpos = 0; + bufferIndex = -1; + + if (callback) callback(this, userData); + } + } +public: + Stream(const char *name, const void *data, int size, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data((char*)data), name(NULL), size(size), pos(0), buffer(NULL) { this->name = String::copy(name); } @@ -1770,39 +1918,18 @@ struct Stream { } } - path[0] = 0; - if (contentDir[0] && (!cacheDir[0] || !strstr(name, cacheDir))) { - strcpy(path, contentDir); - } - strcat(path, name); - fixBackslash(path); + this->name = String::copy(name); - f = fopen(path, "rb"); + #ifdef _OS_3DS /* TODO + if (callback) { + s32 priority = 0; + svcGetThreadPriority(&priority, CUR_THREAD_HANDLE); + threadCreate(streamThread, this, 64 * 1024, priority - 1, -2, false); + return; + }*/ + #endif - if (!f) { - #ifdef _OS_WEB - this->name = String::copy(name); - osDownload(this); - #else - LOG("error loading file \"%s\"\n", name); - if (callback) { - callback(NULL, userData); - delete this; - } else { - ASSERT(false); - } - #endif - } else { - fseek(f, 0, SEEK_END); - size = (int32)ftell(f); - fseek(f, 0, SEEK_SET); - - fpos = 0; - bufferIndex = -1; - - this->name = String::copy(name); - if (callback) callback(this, userData); - } + openFile(); } ~Stream() { @@ -1811,6 +1938,62 @@ struct Stream { if (f) fclose(f); } +#ifdef _OS_3DS + static void readDirectory(const FS_Archive &archive, const char* path) { + char buf[255]; + strcpy(buf, contentDir + 5); // 5 to skip "sdmc:" + strcat(buf, path); + + FS_Path fsPath = fsMakePath(FS_PathType::PATH_ASCII, buf); + + Handle dir; + if (FSUSER_OpenDirectory(&dir, archive, fsPath) != 0) { + return; + } + + int32 pathLen = strlen(path); + strcpy(buf, path); + + while (1) { + FS_DirectoryEntry entry; + + u32 entriesRead = 0; + FSDIR_Read(dir, &entriesRead, 1, &entry); + + if (entriesRead == 0) { + break; + } + + int32 len = utf16_to_utf8((uint8*)buf + pathLen, entry.name, String::length(entry.name)); + buf[pathLen + len] = 0; + + if (entry.attributes & FS_ATTRIBUTE_DIRECTORY) { + strcat(buf, "/"); + readDirectory(archive, buf); + } else { + fileList.push(String::copy(buf)); + } + } + + FSDIR_Close(dir); + } + + static void readFileList() { + FS_Archive sdmc; + FS_Path fsRoot = fsMakePath(FS_PathType::PATH_ASCII, ""); + + if (FSUSER_OpenArchive(&sdmc, FS_ArchiveID::ARCHIVE_SDMC, fsRoot) != 0) { + return; + } + + readDirectory(sdmc, ""); + + FSUSER_CloseArchive(sdmc); + } +#else + static void readFileList() {}; +#endif + static void cacheRead(const char *name, Callback *callback = NULL, void *userData = NULL) { Stream *stream = new Stream(name, NULL, 0, callback, userData); #ifdef _OS_ANDROID // use saveDir for settings on android devices @@ -1861,6 +2044,15 @@ struct Stream { return true; } + if (fileList.length) { + for (int i = 0; i < fileList.length; i++) { + if (strcmp(fileList[i], name) == 0) { + return true; + } + } + return false; + } + char fileName[1024]; strcpy(fileName, contentDir); strcat(fileName, name); @@ -2018,6 +2210,7 @@ struct Stream { }; Stream::Pack* Stream::packs[MAX_PACKS]; +Array Stream::fileList; #ifdef OS_FILEIO_CACHE void osDataWrite(Stream *stream, const char *dir) { @@ -2287,88 +2480,4 @@ struct FixedStr { typedef FixedStr<16> str16; - -template -struct Array { - int capacity; - int length; - T *items; - - Array(int capacity = 32) : capacity(capacity), length(0), items(NULL) {} - - ~Array() { - clear(); - } - - void reserve(int capacity) { - this->capacity = capacity; - if (items) - items = (T*)realloc(items, capacity * sizeof(T)); - else - items = (T*)malloc(capacity * sizeof(T)); - } - - int push(const T &item) { - if (!items) - items = (T*)malloc(capacity * sizeof(T)); - - if (length == capacity) - reserve(capacity + capacity / 2); - - items[length] = item; - return length++; - } - - int pop() { - ASSERT(length > 0); - return --length; - } - - void removeFast(int index) { - (*this)[index] = (*this)[length - 1]; - length--; - } - - void remove(int index) { - length--; - ASSERT(length >= 0); - for (int i = index; i < length; i++) - items[i] = items[i + 1]; - } - - void resize(int length) { - if (capacity < length) - reserve(length); - this->length = length; - } - - void reset() { - length = 0; - } - - void clear() { - reset(); - free(items); - items = NULL; - } - - int find(const T &item) { - for (int i = 0; i < length; i++) { - if (items[i] == item) - return i; - } - return -1; - } - - void sort() { - ::sort(items, length); - } - - T& operator[] (int index) { - ASSERT(index >= 0 && index < length); - return items[index]; - }; -}; - - #endif From 8292ae6a42811da529b373357e41021313df2531 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Sun, 15 Nov 2020 14:59:54 +0300 Subject: [PATCH 32/58] fix Sega Saturn format support for 3DS and XBOX --- src/format.h | 168 ++++++++++++++++++++++++++++++++----------------- src/gapi/c3d.h | 6 +- src/level.h | 2 +- src/texture.h | 2 +- 4 files changed, 115 insertions(+), 63 deletions(-) diff --git a/src/format.h b/src/format.h index 0ac234a..7a1448d 100644 --- a/src/format.h +++ b/src/format.h @@ -3909,8 +3909,62 @@ namespace TR { #define CHUNK(str) ((uint64)((const char*)(str))[0] | ((uint64)((const char*)(str))[1] << 8) | ((uint64)((const char*)(str))[2] << 16) | ((uint64)((const char*)(str))[3] << 24) | \ ((uint64)((const char*)(str))[4] << 32) | ((uint64)((const char*)(str))[5] << 40) | ((uint64)((const char*)(str))[6] << 48) | ((uint64)((const char*)(str))[7] << 56)) + #define SAT_ROOMFILE 0x454C49464D4F4F52ULL /* CHUNK("ROOMFILE") */ + #define SAT_ROOMTINF 0x464E49544D4F4F52ULL /* CHUNK("ROOMTINF") */ + #define SAT_ROOMTQTR 0x525451544D4F4F52ULL /* CHUNK("ROOMTQTR") */ + #define SAT_ROOMTSUB 0x425553544D4F4F52ULL /* CHUNK("ROOMTSUB") */ + #define SAT_ROOMTPAL 0x4C4150544D4F4F52ULL /* CHUNK("ROOMTPAL") */ + #define SAT_ROOMSPAL 0x4C4150534D4F4F52ULL /* CHUNK("ROOMSPAL") */ + #define SAT_ROOMDATA 0x415441444D4F4F52ULL /* CHUNK("ROOMDATA") */ + #define SAT_ROOMNUMB 0x424D554E4D4F4F52ULL /* CHUNK("ROOMNUMB") */ + #define SAT_MESHPOS_ 0x20534F504853454DULL /* CHUNK("MESHPOS ") */ + #define SAT_MESHSIZE 0x455A49534853454DULL /* CHUNK("MESHSIZE") */ + #define SAT_DOORDATA 0x41544144524F4F44ULL /* CHUNK("DOORDATA") */ + #define SAT_FLOORDAT 0x544144524F4F4C46ULL /* CHUNK("FLOORDAT") */ + #define SAT_FLOORSIZ 0x5A4953524F4F4C46ULL /* CHUNK("FLOORSIZ") */ + #define SAT_FLORDATA 0x41544144524F4C46ULL /* CHUNK("FLORDATA") */ + #define SAT_LIGHTAMB 0x424D41544847494CULL /* CHUNK("LIGHTAMB") */ + #define SAT_RM_FLIP_ 0x2050494C465F4D52ULL /* CHUNK("RM_FLIP ") */ + #define SAT_RM_FLAGS 0x5347414C465F4D52ULL /* CHUNK("RM_FLAGS") */ + #define SAT_LIGHTSIZ 0x5A4953544847494CULL /* CHUNK("LIGHTSIZ") */ + #define SAT_CAMERAS_ 0x20534152454D4143ULL /* CHUNK("CAMERAS ") */ + #define SAT_SOUNDFX_ 0x205846444E554F53ULL /* CHUNK("SOUNDFX ") */ + #define SAT_BOXES___ 0x2020205345584F42ULL /* CHUNK("BOXES ") */ + #define SAT_OVERLAPS 0x5350414C5245564FULL /* CHUNK("OVERLAPS") */ + #define SAT_GND_ZONE 0x454E4F5A5F444E47ULL /* CHUNK("GND_ZONE") */ + #define SAT_GND_ZON2 0x324E4F5A5F444E47ULL /* CHUNK("GND_ZON2") */ + #define SAT_FLY_ZONE 0x454E4F5A5F594C46ULL /* CHUNK("FLY_ZONE") */ + #define SAT_ARANGES_ 0x205345474E415241ULL /* CHUNK("ARANGES ") */ + #define SAT_ITEMDATA 0x415441444D455449ULL /* CHUNK("ITEMDATA") */ + #define SAT_ROOMEND_ 0x20444E454D4F4F52ULL /* CHUNK("ROOMEND ") */ + #define SAD_OBJFILE_ 0x20454C49464A424FULL /* CHUNK("OBJFILE ") */ + #define SAD_ANIMS___ 0x202020534D494E41ULL /* CHUNK("ANIMS ") */ + #define SAD_CHANGES_ 0x205345474E414843ULL /* CHUNK("CHANGES ") */ + #define SAD_RANGES_z 0x00205345474E4152ULL /* CHUNK("RANGES \0") */ + #define SAD_COMMANDS 0x53444E414D4D4F43ULL /* CHUNK("COMMANDS") */ + #define SAD_ANIBONES 0x53454E4F42494E41ULL /* CHUNK("ANIBONES") */ + #define SAD_ANIMOBJ_ 0x204A424F4D494E41ULL /* CHUNK("ANIMOBJ ") */ + #define SAD_STATOBJ_ 0x204A424F54415453ULL /* CHUNK("STATOBJ ") */ + #define SAD_FRAMES__ 0x202053454D415246ULL /* CHUNK("FRAMES ") */ + #define SAD_MESHPTRS 0x535254504853454DULL /* CHUNK("MESHPTRS") */ + #define SAD_MESHDATA 0x415441444853454DULL /* CHUNK("MESHDATA") */ + #define SAD_OTEXTINF 0x464E49545845544FULL /* CHUNK("OTEXTINF") */ + #define SAD_OTEXTDAT 0x544144545845544FULL /* CHUNK("OTEXTDAT") */ + #define SAD_ITEXTINF 0x464E495458455449ULL /* CHUNK("ITEXTINF") */ + #define SAD_ITEXTDAT 0x5441445458455449ULL /* CHUNK("ITEXTDAT") */ + #define SAD_OBJEND__ 0x2020444E454A424FULL /* CHUNK("OBJEND ") */ + #define SPR_SPRFILE_ 0x20454C4946525053ULL /* CHUNK("SPRFILE ") */ + #define SPR_SPRITINF 0x464E495449525053ULL /* CHUNK("SPRITINF") */ + #define SPR_SPRITDAT 0x5441445449525053ULL /* CHUNK("SPRITDAT") */ + #define SPR_OBJECTS_ 0x20535443454A424FULL /* CHUNK("OBJECTS ") */ + #define SPR_SPRITEND 0x444E455449525053ULL /* CHUNK("SPRITEND") */ + #define SND_SAMPLUT_ 0x2054554C504D4153ULL /* CHUNK("SAMPLUT ") */ + #define SND_SAMPINFS 0x53464E49504D4153ULL /* CHUNK("SAMPINFS") */ + #define SND_SAMPLE__ 0x2020454C504D4153ULL /* CHUNK("SAMPLE ") */ + #define SND_ENDFILEz 0x00454C4946444E45ULL /* CHUNK("ENDFILE\0") */ + void readSAT(Stream &stream) { - #if !defined(_OS_PSP) && !defined(_OS_3DS) && !defined(_OS_XBOX) + #if !defined(_OS_PSP) Room *room = NULL; while (stream.pos < stream.size) { @@ -3926,18 +3980,18 @@ namespace TR { switch (chunkType) { // SAT - case CHUNK("ROOMFILE") : + case SAT_ROOMFILE : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000020); break; - case CHUNK("ROOMTINF") : + case SAT_ROOMTINF : ASSERTV(stream.readBE32() == 0x00000010); roomTexturesCount = stream.readBE32(); roomTextures = roomTexturesCount ? new TextureInfo[roomTexturesCount] : NULL; for (int i = 0; i < roomTexturesCount; i++) readObjectTex(stream, roomTextures[i], TEX_TYPE_ROOM); break; - case CHUNK("ROOMTQTR") : { + case SAT_ROOMTQTR : { ASSERTV(stream.readBE32() == 0x00000001); roomTexturesDataSize = stream.readBE32(); roomTexturesData = roomTexturesDataSize ? new uint8[roomTexturesDataSize] : NULL; @@ -3948,7 +4002,7 @@ namespace TR { */ break; } - case CHUNK("ROOMTSUB") : + case SAT_ROOMTSUB : ASSERTV(stream.readBE32() == 0x00000001); /* roomTexturesDataSize = stream.readBE32(); @@ -3961,34 +4015,34 @@ namespace TR { stream.raw(tsub, sizeof(uint8) * tsubCount); break; - case CHUNK("ROOMTPAL") : { + case SAT_ROOMTPAL : { ASSERTV(stream.readBE32() == 0x00000003); stream.seek(stream.readBE32() * 3); break; } - case CHUNK("ROOMSPAL") : { + case SAT_ROOMSPAL : { ASSERTV(stream.readLE32() == 0x02000000); stream.seek(stream.readBE32() * 2); break; } - case CHUNK("ROOMDATA") : + case SAT_ROOMDATA : ASSERTV(stream.readBE32() == 0x00000044); roomsCount = stream.readBE32(); rooms = new Room[roomsCount]; memset(rooms, 0, sizeof(Room) * roomsCount); break; - case CHUNK("ROOMNUMB") : + case SAT_ROOMNUMB : ASSERTV(stream.readBE32() == 0x00000000); room = &rooms[stream.readBE32()]; break; - case CHUNK("MESHPOS ") : + case SAT_MESHPOS_ : ASSERT(room); room->info.x = stream.readBE32(); room->info.z = stream.readBE32(); room->info.yBottom = stream.readBE32(); room->info.yTop = stream.readBE32(); break; - case CHUNK("MESHSIZE") : { + case SAT_MESHSIZE : { ASSERT(room); uint32 flag = stream.readBE32(); if (flag == 0x00000014) { @@ -4109,7 +4163,7 @@ namespace TR { data.fCount = fIndex; break; } - case CHUNK("DOORDATA") : { + case SAT_DOORDATA : { int32 roomIndex = stream.readBE32(); ASSERT(roomIndex < roomsCount); Room *room = &rooms[roomIndex]; @@ -4132,12 +4186,12 @@ namespace TR { } break; } - case CHUNK("FLOORDAT") : + case SAT_FLOORDAT : ASSERT(room); room->zSectors = stream.readBE32(); room->xSectors = stream.readBE32(); break; - case CHUNK("FLOORSIZ") : { + case SAT_FLOORSIZ : { ASSERTV(stream.readBE32() == 0x00000008); ASSERT(room && room->sectors == NULL); @@ -4158,7 +4212,7 @@ namespace TR { } break; } - case CHUNK("FLORDATA") : + case SAT_FLORDATA : ASSERTV(stream.readBE32() == 0x00000002); ASSERT(floors == NULL); floorsCount = stream.readBE32(); @@ -4166,25 +4220,25 @@ namespace TR { for (int i = 0; i < floorsCount; i++) floors[i].value = stream.readBE16(); break; - case CHUNK("LIGHTAMB") : + case SAT_LIGHTAMB : ASSERT(room); room->ambient = stream.readBE32(); room->ambient2 = stream.readBE32(); break; - case CHUNK("RM_FLIP ") : { + case SAT_RM_FLIP_ : { ASSERTV(stream.readBE32() == 0x00000002); uint32 value = stream.readBE32(); room->alternateRoom = value == 0xFFFFFFFF ? -1 : value; break; } - case CHUNK("RM_FLAGS") : { + case SAT_RM_FLAGS : { ASSERT(room); ASSERTV(stream.readBE32() == 0x00000002); uint32 value = stream.readBE32(); room->flags.water = (value & 0x01) != 0; break; } - case CHUNK("LIGHTSIZ") : { + case SAT_LIGHTSIZ : { ASSERTV(stream.readBE32() == 0x00000014); ASSERT(room && room->lights == NULL); room->lightsCount = stream.readBE32(); @@ -4206,7 +4260,7 @@ namespace TR { } break; } - case CHUNK("CAMERAS ") : + case SAT_CAMERAS_ : ASSERTV(stream.readBE32() == 0x00000010); ASSERT(cameras == NULL); camerasCount = stream.readBE32(); @@ -4220,7 +4274,7 @@ namespace TR { cam.flags.boxIndex = stream.readBE16(); } break; - case CHUNK("SOUNDFX ") : { + case SAT_SOUNDFX_ : { uint32 flag = stream.readBE32(); if (flag == 0x00000000) { // SND ASSERTV(stream.readBE32() == 0x00000000); @@ -4254,7 +4308,7 @@ namespace TR { } break; } - case CHUNK("BOXES ") : + case SAT_BOXES___ : ASSERTV(stream.readBE32() == 0x00000014); ASSERT(boxes == NULL); boxesCount = stream.readBE32(); @@ -4269,7 +4323,7 @@ namespace TR { b.overlap.value = stream.readBE16(); } break; - case CHUNK("OVERLAPS") : + case SAT_OVERLAPS : ASSERTV(stream.readBE32() == 0x00000002); ASSERT(overlaps == NULL); overlapsCount = stream.readBE32(); @@ -4277,16 +4331,16 @@ namespace TR { for (int i = 0; i < overlapsCount; i++) overlaps[i].value = stream.readBE16(); break; - case CHUNK("GND_ZONE") : - case CHUNK("GND_ZON2") : - case CHUNK("FLY_ZONE") : { + case SAT_GND_ZONE : + case SAT_GND_ZON2 : + case SAT_FLY_ZONE : { ASSERTV(stream.readBE32() == 0x00000002); uint16 **ptr; switch (chunkType) { - case CHUNK("GND_ZONE") : ptr = zones[0].ground1 ? &zones[1].ground1 : &zones[0].ground1; break; - case CHUNK("GND_ZON2") : ptr = zones[0].ground2 ? &zones[1].ground2 : &zones[0].ground2; break; - case CHUNK("FLY_ZONE") : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break; + case SAT_GND_ZONE : ptr = zones[0].ground1 ? &zones[1].ground1 : &zones[0].ground1; break; + case SAT_GND_ZON2 : ptr = zones[0].ground2 ? &zones[1].ground2 : &zones[0].ground2; break; + case SAT_FLY_ZONE : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break; default : ptr = NULL; } @@ -4299,7 +4353,7 @@ namespace TR { (*ptr)[i] = stream.readBE16(); break; } - case CHUNK("ARANGES ") : { + case SAT_ARANGES_ : { ASSERTV(stream.readBE32() == 0x00000008); animTexturesCount = stream.readBE32(); animTextures = new AnimTexture[animTexturesCount]; @@ -4314,7 +4368,7 @@ namespace TR { } break; } - case CHUNK("ITEMDATA") : { + case SAT_ITEMDATA : { ASSERTV(stream.readBE32() == 0x00000014); entitiesBaseCount = stream.readBE32(); entitiesCount = entitiesBaseCount + MAX_RESERVED_ENTITIES; @@ -4333,16 +4387,16 @@ namespace TR { } break; } - case CHUNK("ROOMEND ") : + case SAT_ROOMEND_ : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000000); break; // SAD - case CHUNK("OBJFILE ") : + case SAD_OBJFILE_ : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000020); break; - case CHUNK("ANIMS ") : + case SAD_ANIMS___ : ASSERTV(stream.readBE32() == 0x00000022); ASSERT(anims == NULL); animsCount = stream.readBE32(); @@ -4367,7 +4421,7 @@ namespace TR { anim.animCommand = stream.readBE16(); } break; - case CHUNK("CHANGES ") : + case SAD_CHANGES_ : ASSERTV(stream.readBE32() == 0x00000008); ASSERT(states == NULL); statesCount = stream.readBE32(); @@ -4380,7 +4434,7 @@ namespace TR { ASSERTV(stream.readBE16() == state.rangesOffset); // dummy } break; - case CHUNK("RANGES \0") : + case SAD_RANGES_z : ASSERTV(stream.readBE32() == 0x00000008); ASSERT(ranges == NULL); rangesCount = stream.readBE32(); @@ -4393,7 +4447,7 @@ namespace TR { range.nextFrame = stream.readBE16(); } break; - case CHUNK("COMMANDS") : + case SAD_COMMANDS : ASSERTV(stream.readBE32() == 0x00000002); ASSERT(commands == NULL); commandsCount = stream.readBE32(); @@ -4401,7 +4455,7 @@ namespace TR { for (int i = 0; i < commandsCount; i++) commands[i] = stream.readBE16(); break; - case CHUNK("ANIBONES") : + case SAD_ANIBONES : ASSERTV(stream.readBE32() == 0x00000004); ASSERT(nodesData == NULL); nodesDataSize = stream.readBE32(); @@ -4409,7 +4463,7 @@ namespace TR { for (int i = 0; i < nodesDataSize; i++) nodesData[i] = stream.readBE32(); break; - case CHUNK("ANIMOBJ ") : + case SAD_ANIMOBJ_ : ASSERTV(stream.readBE32() == 0x00000038); ASSERT(models == NULL); modelsCount = stream.readBE32(); @@ -4427,7 +4481,7 @@ namespace TR { ASSERTV(stream.readBE16() == model.animation); } break; - case CHUNK("STATOBJ ") : + case SAD_STATOBJ_ : ASSERTV(stream.readBE32() == 0x00000020); ASSERT(staticMeshes == NULL); staticMeshesCount = stream.readBE32(); @@ -4451,7 +4505,7 @@ namespace TR { mesh.flags = stream.readBE16(); } break; - case CHUNK("FRAMES ") : + case SAD_FRAMES__ : ASSERTV(stream.readBE32() == 0x00000002); ASSERT(frameData == NULL); frameDataSize = stream.readBE32(); @@ -4459,7 +4513,7 @@ namespace TR { for (int i = 0; i < frameDataSize; i++) frameData[i] = stream.readBE16(); break; - case CHUNK("MESHPTRS") : + case SAD_MESHPTRS : ASSERTV(stream.readBE32() == 0x00000004); ASSERT(meshOffsets == NULL); meshOffsetsCount = stream.readBE32(); @@ -4467,14 +4521,14 @@ namespace TR { for (int i = 0; i < meshOffsetsCount; i++) meshOffsets[i] = stream.readBE32(); break; - case CHUNK("MESHDATA") : + case SAD_MESHDATA : ASSERTV(stream.readBE32() == 0x00000002); ASSERT(meshData == NULL); meshDataSize = stream.readBE32(); meshData = meshDataSize ? new uint16[meshDataSize] : NULL; stream.raw(meshData, sizeof(uint16) * meshDataSize); break; - case CHUNK("OTEXTINF") : + case SAD_OTEXTINF : ASSERTV(stream.readBE32() == 0x00000010); ASSERT(objectTextures == NULL); objectTexturesCount = stream.readBE32(); @@ -4484,14 +4538,14 @@ namespace TR { objectTexturesBaseCount = objectTexturesCount; expandObjectTex(objectTextures, objectTexturesCount); break; - case CHUNK("OTEXTDAT") : { + case SAD_OTEXTDAT : { ASSERTV(stream.readBE32() == 0x00000001); objectTexturesDataSize = stream.readBE32(); objectTexturesData = objectTexturesDataSize ? new uint8[objectTexturesDataSize] : NULL; stream.raw(objectTexturesData, objectTexturesDataSize); break; } - case CHUNK("ITEXTINF") : { + case SAD_ITEXTINF : { ASSERTV(stream.readBE32() == 0x00000014); itemTexturesCount = stream.readBE32(); itemTextures = itemTexturesCount ? new TextureInfo[itemTexturesCount * 5] : NULL; @@ -4501,23 +4555,23 @@ namespace TR { expandObjectTex(itemTextures, itemTexturesCount); break; } - case CHUNK("ITEXTDAT") : { + case SAD_ITEXTDAT : { ASSERTV(stream.readBE32() == 0x00000001); itemTexturesDataSize = stream.readBE32(); itemTexturesData = itemTexturesDataSize ? new uint8[itemTexturesDataSize] : NULL; stream.raw(itemTexturesData, itemTexturesDataSize); break; } - case CHUNK("OBJEND ") : + case SAD_OBJEND__ : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000000); break; // SPR - case CHUNK("SPRFILE ") : + case SPR_SPRFILE_ : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000020); break; - case CHUNK("SPRITINF") : { + case SPR_SPRITINF : { ASSERTV(stream.readBE32() == 0x00000010); spriteTexturesCount = stream.readBE32(); spriteTextures = spriteTexturesCount ? new TextureInfo[spriteTexturesCount] : NULL; @@ -4525,14 +4579,14 @@ namespace TR { readSpriteTex(stream, spriteTextures[i]); break; } - case CHUNK("SPRITDAT") : { + case SPR_SPRITDAT : { ASSERTV(stream.readBE32() == 0x00000001); spriteTexturesDataSize = stream.readBE32(); spriteTexturesData = spriteTexturesDataSize ? new uint8[spriteTexturesDataSize] : NULL; stream.raw(spriteTexturesData, spriteTexturesDataSize); break; } - case CHUNK("OBJECTS ") : { + case SPR_OBJECTS_ : { ASSERTV(stream.readBE32() == 0x00000000); spriteSequencesCount = stream.readBE32(); spriteSequences = spriteSequencesCount ? new SpriteSequence[spriteSequencesCount] : NULL; @@ -4546,12 +4600,12 @@ namespace TR { } break; } - case CHUNK("SPRITEND") : + case SPR_SPRITEND : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000000); break; // SND - case CHUNK("SAMPLUT ") : { + case SND_SAMPLUT_ : { ASSERTV(stream.readBE32() == 0x00000002); int count = stream.readBE32(); soundsMap = new int16[count]; @@ -4559,7 +4613,7 @@ namespace TR { soundsMap[i] = stream.readBE16(); break; } - case CHUNK("SAMPINFS") : { + case SND_SAMPINFS : { ASSERTV(stream.readBE32() == 0x00000008); soundsInfoCount = stream.readBE32(); soundsInfo = soundsInfoCount ? new SoundInfo[soundsInfoCount] : NULL; @@ -4574,7 +4628,7 @@ namespace TR { } break; } - case CHUNK("SAMPLE ") : { + case SND_SAMPLE__ : { int32 index = stream.readBE32(); int32 size = stream.readBE32(); ASSERT(index < soundOffsetsCount); @@ -4584,7 +4638,7 @@ namespace TR { stream.seek(size); break; } - case CHUNK("ENDFILE\0") : + case SND_ENDFILEz : ASSERTV(stream.readBE32() == 0x00000000); ASSERTV(stream.readBE32() == 0x00000000); break; diff --git a/src/gapi/c3d.h b/src/gapi/c3d.h index cec0d8a..5f2c736 100644 --- a/src/gapi/c3d.h +++ b/src/gapi/c3d.h @@ -27,7 +27,7 @@ namespace GAPI { struct Vertex { short4 coord; ubyte4 normal; - short4 texCoord; + short2 texCoord; ubyte4 color; ubyte4 light; }; @@ -778,8 +778,6 @@ namespace GAPI { C3D_RenderTarget* checkRenderTarget(Texture *texture, int face, int group, GPU_DEPTHBUF depthFmt) { if (!texture->target[face].frameBuf.colorBuf) { - LOG("create RT for face:%d %dx%d\n", face, texture->width, texture->height); - C3D_FrameBuf &fb = texture->target[face].frameBuf; fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->tex.cube->data[face] : texture->tex.data; fb.depthBuf = getDepthBuffer(texture->width, texture->height, group, depthFmt); @@ -826,7 +824,7 @@ namespace GAPI { AttrInfo_Init(&vertexAttribs); AttrInfo_AddLoader(&vertexAttribs, aCoord , GPU_SHORT , 4); AttrInfo_AddLoader(&vertexAttribs, aNormal , GPU_UNSIGNED_BYTE , 4); - AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 4); + AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 2); AttrInfo_AddLoader(&vertexAttribs, aColor , GPU_UNSIGNED_BYTE , 4); AttrInfo_AddLoader(&vertexAttribs, aLight , GPU_UNSIGNED_BYTE , 4); diff --git a/src/level.h b/src/level.h index ac29740..7333e8f 100644 --- a/src/level.h +++ b/src/level.h @@ -1655,7 +1655,7 @@ struct Level : IGame { tileData = new AtlasTile(); atlasRooms = rAtlas->pack(OPT_MIPMAPS | OPT_VRAM_3DS); - atlasObjects = oAtlas->pack(OPT_MIPMAPS | OPT_VRAM_3DS); + atlasObjects = oAtlas->pack(OPT_MIPMAPS); atlasSprites = sAtlas->pack(OPT_MIPMAPS); atlasGlyphs = gAtlas->pack(0); diff --git a/src/texture.h b/src/texture.h index c3686fd..a9c8d3a 100644 --- a/src/texture.h +++ b/src/texture.h @@ -647,7 +647,7 @@ struct Texture : GAPI::Texture { } static uint8* LoadBIN(Stream &stream, uint32 &width, uint32 &height) { - if (strstr(stream.name, "224.")) { + if (strstr(stream.name, "224.") || stream.size == 157696) { height = 224; } else { height = 256; From a94937ae40135b3058b731d3fba9becdffd0dae8 Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 15 Nov 2020 16:12:00 +0400 Subject: [PATCH 33/58] XBOX turn off MSAA for 720p for stable 60 fps --- src/platform/xbox/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/xbox/main.cpp b/src/platform/xbox/main.cpp index 2fcf139..c5a9269 100644 --- a/src/platform/xbox/main.cpp +++ b/src/platform/xbox/main.cpp @@ -268,7 +268,7 @@ HRESULT ContextCreate() { if (d3dpp.BackBufferHeight == 480) { d3dpp.MultiSampleType = D3DMULTISAMPLE_4_SAMPLES_MULTISAMPLE_GAUSSIAN; } else if (d3dpp.BackBufferHeight == 720) { - d3dpp.MultiSampleType = D3DMULTISAMPLE_2_SAMPLES_MULTISAMPLE_QUINCUNX; + d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; //D3DMULTISAMPLE_2_SAMPLES_MULTISAMPLE_QUINCUNX; // unstable 60 fps } else if (d3dpp.BackBufferHeight == 1080) { d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; } From 23cf124c2bd8f2daa8cfebcfa0042412c385ca7a Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 25 Nov 2020 02:06:40 +0300 Subject: [PATCH 34/58] 3DS turn off bottom screen by default, downscale atlas to 1024x1024 if it's necessary (SAT version only), fix sprites rendering, add notification if no content data is available, fix floating point precision bugs --- src/core.h | 4 ++-- src/gapi/c3d.h | 29 ++++++++++++++++++------ src/gapi/gl.h | 4 ++++ src/gapi/sw.h | 16 ++++++++------ src/lara.h | 9 ++++++++ src/platform/3ds/Makefile | 2 +- src/platform/3ds/main.cpp | 46 ++++++++++++++++++++++++--------------- 7 files changed, 76 insertions(+), 34 deletions(-) diff --git a/src/core.h b/src/core.h index f10a930..f0d52fa 100644 --- a/src/core.h +++ b/src/core.h @@ -706,7 +706,7 @@ namespace Core { void stop() { if (fpsTime < Core::getTime()) { - LOG("FPS: %d DIP: %d TRI: %d RT: %d CB: %d\n", fps, dips, tris, rt, cb); + LOG("FPS: %d DIP: %d TRI: %d RT: %d\n", fps, dips, tris, rt); #ifdef PROFILE LOG("frame time: %d mcs\n", tFrame / 1000); LOG("sound: mix %d rev %d ren %d/%d ogg %d\n", Sound::stats.mixer, Sound::stats.reverb, Sound::stats.render[0], Sound::stats.render[1], Sound::stats.ogg); @@ -1221,7 +1221,7 @@ namespace Core { } void setFog(const vec4 ¶ms) { - #if defined(_GAPI_D3D8) || defined(_GAPI_C3D) + #if defined(_GAPI_D3D8) || defined(_GAPI_C3D) || defined(_GAPI_SW) || defined(FFP) GAPI::setFog(params); #else ASSERT(Core::active.shader); diff --git a/src/gapi/c3d.h b/src/gapi/c3d.h index 5f2c736..8f1be38 100644 --- a/src/gapi/c3d.h +++ b/src/gapi/c3d.h @@ -27,7 +27,7 @@ namespace GAPI { struct Vertex { short4 coord; ubyte4 normal; - short2 texCoord; + short4 texCoord; ubyte4 color; ubyte4 light; }; @@ -461,17 +461,28 @@ namespace GAPI { FormatDesc desc = formats[fmt]; if (width < 8 || height < 8) { - LOG("texture too small %dx%d [%d %d]!\n", width, height, fmt, opt); + LOG("\ntexture too small %dx%d [%d %d]!\n\n", width, height, fmt, opt); width = 8; height = 8; data = NULL; } + void* tmpData = NULL; + if (width > 1024 || height > 1024) { - LOG("texture too large %dx%d [%d %d]!\n", width, height, fmt, opt); - width = 8; - height = 8; - data = NULL; + LOG("\ntexture too large %dx%d [%d %d]!\n", width, height, fmt, opt); + + origWidth >>= 1; + origHeight >>= 1; + width >>= 1; + height >>= 1; + + LOG("downsample to %dx%d\n\n", width, height); + + tmpData = linearAlloc(width * height * desc.bpp / 8); + downsampleImage(tmpData, data, width << 1, height << 1); + + data = tmpData; } bool isCube = (opt & OPT_CUBEMAP) != 0; @@ -508,6 +519,10 @@ namespace GAPI { update(data); } + if (tmpData) { + linearFree(tmpData); + } + GPU_TEXTURE_FILTER_PARAM filter = (opt & OPT_NEAREST) ? GPU_NEAREST : GPU_LINEAR; C3D_TexSetFilter(&tex, filter, filter); C3D_TexSetFilterMipmap(&tex, filter); @@ -824,7 +839,7 @@ namespace GAPI { AttrInfo_Init(&vertexAttribs); AttrInfo_AddLoader(&vertexAttribs, aCoord , GPU_SHORT , 4); AttrInfo_AddLoader(&vertexAttribs, aNormal , GPU_UNSIGNED_BYTE , 4); - AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 2); + AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 4); AttrInfo_AddLoader(&vertexAttribs, aColor , GPU_UNSIGNED_BYTE , 4); AttrInfo_AddLoader(&vertexAttribs, aLight , GPU_UNSIGNED_BYTE , 4); diff --git a/src/gapi/gl.h b/src/gapi/gl.h index 360d316..f1afed3 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -1697,6 +1697,10 @@ namespace GAPI { #endif } + void setFog(const vec4 ¶ms) { + // FFP TODO + } + void DIP(Mesh *mesh, const MeshRange &range) { #ifdef FFP mat4 m = mView * mModel; diff --git a/src/gapi/sw.h b/src/gapi/sw.h index 4800313..b15c681 100644 --- a/src/gapi/sw.h +++ b/src/gapi/sw.h @@ -335,6 +335,8 @@ namespace GAPI { } } + void setFog(const vec4 ¶ms) {} + bool checkBackface(const VertexSW *a, const VertexSW *b, const VertexSW *c) { return ((b->x - a->x) >> 16) * (c->y - a->y) - ((c->x - a->x) >> 16) * (b->y - a->y) <= 0; @@ -474,9 +476,9 @@ namespace GAPI { b */ VertexSW _n; - VertexSW *t = swVertices + indices[0]; - VertexSW *m = swVertices + indices[1]; - VertexSW *b = swVertices + indices[2]; + VertexSW *t = swVertices.items + indices[0]; + VertexSW *m = swVertices.items + indices[1]; + VertexSW *b = swVertices.items + indices[2]; VertexSW *n = &_n; if (checkBackface(t, m, b)) @@ -521,10 +523,10 @@ namespace GAPI { */ VertexSW _n; VertexSW _p; - VertexSW *t = swVertices + indices[0]; - VertexSW *m = swVertices + indices[1]; - VertexSW *b = swVertices + indices[2]; - VertexSW *o = swVertices + indices[3]; + VertexSW *t = swVertices.items + indices[0]; + VertexSW *m = swVertices.items + indices[1]; + VertexSW *b = swVertices.items + indices[2]; + VertexSW *o = swVertices.items + indices[3]; VertexSW *n = &_n; VertexSW *p = &_p; diff --git a/src/lara.h b/src/lara.h index 1c0859c..34e3a12 100644 --- a/src/lara.h +++ b/src/lara.h @@ -3625,6 +3625,11 @@ struct Lara : Character { return false; } + #ifdef _OS_3DS // for some reason move() math works incorrect on 3DS + #pragma GCC push_options + #pragma GCC optimize ("O0") + #endif + void move() { vec3 vel = (velocity + flowVelocity) * Core::deltaTime * 30.0f + collisionOffset; vec3 opos(pos), offset(0.0f); @@ -3775,6 +3780,10 @@ struct Lara : Character { if (dozy) stand = STAND_UNDERWATER; } + #ifdef _OS_3DS + #pragma GCC pop_options + #endif + virtual void applyFlow(TR::Camera &sink) { if (stand != STAND_UNDERWATER && stand != STAND_ONWATER) return; diff --git a/src/platform/3ds/Makefile b/src/platform/3ds/Makefile index efec6dc..7eb7a4a 100644 --- a/src/platform/3ds/Makefile +++ b/src/platform/3ds/Makefile @@ -48,7 +48,7 @@ APP_DESCRIPTION := Classic Tomb Raider open-source engine #--------------------------------------------------------------------------------- ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft -CFLAGS := $(ARCH) -g0 -w -O3 -mword-relocations -fomit-frame-pointer -ffunction-sections +CFLAGS := $(ARCH) -g0 -w -Ofast -ffast-math -mword-relocations -fomit-frame-pointer -ffunction-sections CFLAGS += $(INCLUDE) -DARM11 -D_3DS CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 diff --git a/src/platform/3ds/main.cpp b/src/platform/3ds/main.cpp index 72af624..131c898 100644 --- a/src/platform/3ds/main.cpp +++ b/src/platform/3ds/main.cpp @@ -33,7 +33,7 @@ int osGetTimeMS() { } // backlight -bool bottomScreenOn = true; +bool bottomScreenOn = false; void setBottomScreen(bool enable) { gspLcdInit(); @@ -46,10 +46,10 @@ aptHookCookie(cookie); void checkAptHook(APT_HookType hook, void *param) { if (!bottomScreenOn) { switch(hook) { - case APTHOOK_ONSUSPEND : setBottomScreen(1); + case APTHOOK_ONSUSPEND : setBottomScreen(true); break; case APTHOOK_ONRESTORE : - case APTHOOK_ONWAKEUP : setBottomScreen(0); + case APTHOOK_ONWAKEUP : setBottomScreen(false); break; default: break; @@ -97,13 +97,13 @@ void inputUpdate() { if (down & KEY_TOUCH) { bottomScreenOn = !bottomScreenOn; - bottomScreenOn ? setBottomScreen(1) : setBottomScreen(0); + bottomScreenOn ? setBottomScreen(true) : setBottomScreen(false); } } void inputFree() { if (!bottomScreenOn) - setBottomScreen(1); + setBottomScreen(true); hidExit(); } @@ -117,7 +117,6 @@ int sndBufIndex; bool sndReady; void sndFill(void *arg) { - LOG("thread start\n"); memset(sndWaveBuf, 0, sizeof(sndWaveBuf)); sndWaveBuf[0].data_vaddr = sndBuffer + 0; sndWaveBuf[0].nsamples = SND_FRAMES; @@ -177,6 +176,8 @@ void sndFree() { } int main() { + setBottomScreen(false); + { bool isNew3DS; APT_CheckNew3DS(&isNew3DS); @@ -189,10 +190,6 @@ int main() { strcpy(saveDir, "sdmc:/3ds/OpenLara/"); strcpy(contentDir, "sdmc:/3ds/OpenLara/"); - if(chdir(contentDir) != 0) { - return 0; - } - Stream::init(); sndInit(); @@ -202,16 +199,31 @@ int main() { Game::init(); - while (aptMainLoop() && !Core::isQuit) { - inputUpdate(); + if (Core::isQuit) { + bottomScreenOn = true; + setBottomScreen(true); + consoleClear(); + LOG("\n\nCopy the original game content to:\n\n %s\n\nPress A to exit", contentDir); + while (aptMainLoop()) { + hidScanInput(); + u64 mask = hidKeysDown() | hidKeysHeld(); + if (mask & KEY_A) { + break; + } - if (Input::joy[0].down[jkStart]) - Core::quit(); + gfxFlushBuffers(); + gfxSwapBuffers(); + gspWaitForVBlank(); + } + } else { + while (aptMainLoop() && !Core::isQuit) { + inputUpdate(); - Game::update(); - Game::render(); + Game::update(); + Game::render(); - GAPI::present(); + GAPI::present(); + } } inputFree(); From 1d07147e725df2abb7c241d2ef00657bf357380d Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 25 Nov 2020 02:08:40 +0300 Subject: [PATCH 35/58] use Windows 10 SDK by default --- src/platform/win/OpenLara.sln | 10 ++-- src/platform/win/OpenLara.vcxproj | 65 ++++------------------- src/platform/win/OpenLara.vcxproj.filters | 3 ++ src/shaders/compose.glsl | 4 +- 4 files changed, 21 insertions(+), 61 deletions(-) diff --git a/src/platform/win/OpenLara.sln b/src/platform/win/OpenLara.sln index c49f444..2079fe9 100644 --- a/src/platform/win/OpenLara.sln +++ b/src/platform/win/OpenLara.sln @@ -1,25 +1,25 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2013 for Windows Desktop -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1022 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenLara", "OpenLara.vcxproj", "{6935E070-59B8-418A-9241-70BACB4217B5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 - Profile|Win32 = Profile|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6935E070-59B8-418A-9241-70BACB4217B5}.Debug|Win32.ActiveCfg = Debug|Win32 {6935E070-59B8-418A-9241-70BACB4217B5}.Debug|Win32.Build.0 = Debug|Win32 - {6935E070-59B8-418A-9241-70BACB4217B5}.Profile|Win32.ActiveCfg = Profile|Win32 - {6935E070-59B8-418A-9241-70BACB4217B5}.Profile|Win32.Build.0 = Profile|Win32 {6935E070-59B8-418A-9241-70BACB4217B5}.Release|Win32.ActiveCfg = Release|Win32 {6935E070-59B8-418A-9241-70BACB4217B5}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {969CCE82-3511-4643-9273-4B4554C4E782} + EndGlobalSection EndGlobal diff --git a/src/platform/win/OpenLara.vcxproj b/src/platform/win/OpenLara.vcxproj index 2c9aeb9..b4c093c 100644 --- a/src/platform/win/OpenLara.vcxproj +++ b/src/platform/win/OpenLara.vcxproj @@ -5,10 +5,6 @@ Debug Win32 - - Profile - Win32 - Release Win32 @@ -30,14 +26,7 @@ Application false - v141_xp - true - NotSet - - - Application - false - v141_xp + v141 true NotSet @@ -50,29 +39,23 @@ - - - true ..\..\..\bin\ - ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath); - ..\..\libs\openvr\;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86); + ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath); + ..\..\libs\openvr\;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86); + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(FxCopDir);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86);$(SystemRoot) + $(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH); false ..\..\..\bin\ false - ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath); - ..\..\libs\openvr\;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86); - - - false - ..\..\..\bin\ - false - ..\..\;$(VC_IncludePath);$(WindowsSdk_71A_IncludePath); - ..\..\libs\openvr\;$(VC_LibraryPath_x86);$(WindowsSdk_71A_LibraryPath_x86); + ..\..\libs\openvr\;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86); + ..\..\libs\;..\..\;$(VC_IncludePath);$(WindowsSDK_IncludePath); + $(VC_IncludePath);$(WindowsSDK_IncludePath);$(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(FxCopDir);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86);$(SystemRoot) + $(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH); @@ -121,35 +104,6 @@ true - - - Level3 - - - Full - true - true - PROFILE;MINIMAL;NOMINMAX;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) - false - false - MultiThreaded - Strict - false - Speed - /d2noftol3 %(AdditionalOptions) - true - - - Console - true - true - true - wcrt.lib;wsock32.lib;opengl32.lib;d3d11.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - true - false - false - - @@ -173,6 +127,7 @@ + diff --git a/src/platform/win/OpenLara.vcxproj.filters b/src/platform/win/OpenLara.vcxproj.filters index d20ce2b..52a1913 100644 --- a/src/platform/win/OpenLara.vcxproj.filters +++ b/src/platform/win/OpenLara.vcxproj.filters @@ -128,6 +128,9 @@ lang + + gapi + diff --git a/src/shaders/compose.glsl b/src/shaders/compose.glsl index 16264ff..4a47b76 100644 --- a/src/shaders/compose.glsl +++ b/src/shaders/compose.glsl @@ -148,7 +148,9 @@ varying vec4 vTexCoord; // xy - atlas coords, zw - trapezoidal correction #ifdef TYPE_FLASH vDiffuse.xyz += uMaterial.w; - #else + #endif + + #ifdef TYPE_ENTITY vDiffuse *= uMaterial.w; #endif From 960f2ad6e9090e2b073f13f5f3636f7a22b39878 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 25 Nov 2020 04:25:17 +0300 Subject: [PATCH 36/58] fix windows project settings --- src/platform/win/OpenLara.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/win/OpenLara.vcxproj b/src/platform/win/OpenLara.vcxproj index b4c093c..bd624dd 100644 --- a/src/platform/win/OpenLara.vcxproj +++ b/src/platform/win/OpenLara.vcxproj @@ -14,13 +14,13 @@ {6935E070-59B8-418A-9241-70BACB4217B5} Win32Proj OpenLara - 8.1 + 10.0.10240.0 Application true - v141_xp + v141 NotSet From e8b55939aa4262f0f22e8669a792c164dcbcdead Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 25 Nov 2020 05:32:02 +0300 Subject: [PATCH 37/58] merge OGL 3.2 support from Vulkan branch --- src/gapi/gl.h | 104 ++--- src/libs/gl/wglext.h | 840 ++++++++++++++++++++++++++++++++++++++ src/platform/win/main.cpp | 65 ++- 3 files changed, 954 insertions(+), 55 deletions(-) create mode 100644 src/libs/gl/wglext.h diff --git a/src/gapi/gl.h b/src/gapi/gl.h index f1afed3..4b79342 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -10,6 +10,7 @@ #ifdef _OS_WIN #include #include + #include #elif _OS_ANDROID #include @@ -343,6 +344,7 @@ #ifdef _OS_WIN PFNGLTEXIMAGE3DPROC glTexImage3D; #endif + PFNGLGETSTRINGIPROC glGetStringi; // Profiling #ifdef PROFILE PFNGLOBJECTLABELPROC glObjectLabel; @@ -379,16 +381,17 @@ PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; PFNGLGETPROGRAMIVPROC glGetProgramiv; // Render to texture - PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; - PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; - PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; - PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; - PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; - PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; - PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; - PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; - PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; - PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; + PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; + PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; + PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers; + PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer; + PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; + PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; + PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage; + PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; + PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; + PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv; // Mesh PFNGLGENBUFFERSARBPROC glGenBuffers; PFNGLDELETEBUFFERSARBPROC glDeleteBuffers; @@ -1139,9 +1142,26 @@ namespace GAPI { }; Array rtCache[2]; - bool extSupport(const char *str, const char *ext) { - if (!str) return false; - return strstr(str, ext) != NULL; + + bool extSupport(const char *str) { + if (glGetStringi != NULL) { + GLint count = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &count); + for (int i = 0; i < count; i++) { + const char *ext = (const char*)glGetStringi(GL_EXTENSIONS, i); + if (strstr(ext, str) != NULL) { + return true; + } + } + } else { + const char *ext = (const char*)glGetString(GL_EXTENSIONS); + if (!ext) { + return false; + } + return strstr(ext, str) != NULL; + } + + return false; } void init() { @@ -1170,6 +1190,8 @@ namespace GAPI { GetProcOGL(glTexImage3D); #endif + GetProcOGL(glGetStringi); + #ifdef PROFILE GetProcOGL(glObjectLabel); GetProcOGL(glPushDebugGroup); @@ -1215,6 +1237,7 @@ namespace GAPI { GetProcOGL(glCheckFramebufferStatus); GetProcOGL(glDeleteFramebuffers); GetProcOGL(glDeleteRenderbuffers); + GetProcOGL(glGetFramebufferAttachmentParameteriv); GetProcOGL(glGenBuffers); GetProcOGL(glDeleteBuffers); @@ -1239,21 +1262,6 @@ namespace GAPI { LOG("Renderer : %s\n", (char*)glGetString(GL_RENDERER)); LOG("Version : %s\n", (char*)glGetString(GL_VERSION)); - char *ext = (char*)glGetString(GL_EXTENSIONS); -/* - if (ext != NULL) { - char buf[255]; - int len = strlen(ext); - int start = 0; - for (int i = 0; i < len; i++) - if (ext[i] == ' ' || (i == len - 1)) { - memcpy(buf, &ext[start], i - start); - buf[i - start] = 0; - LOG("%s\n", buf); - start = i + 1; - } - } -*/ #ifndef FFP bool GLES3 = false; #ifdef _OS_WEB @@ -1274,19 +1282,19 @@ namespace GAPI { #endif #endif - bool _GL_EXT_shadow_samplers = extSupport(ext, "GL_EXT_shadow_samplers"); - bool _GL_ARB_shadow = extSupport(ext, "GL_ARB_shadow"); - bool _GL_OES_standard_derivatives = extSupport(ext, "GL_OES_standard_derivatives"); + bool _GL_EXT_shadow_samplers = extSupport("GL_EXT_shadow_samplers"); + bool _GL_ARB_shadow = extSupport("GL_ARB_shadow"); + bool _GL_OES_standard_derivatives = extSupport("GL_OES_standard_derivatives"); - support.shaderBinary = extSupport(ext, "_program_binary"); - support.VAO = GLES3 || extSupport(ext, "_vertex_array_object"); + support.shaderBinary = extSupport("_program_binary"); + support.VAO = GLES3 || extSupport("_vertex_array_object"); support.VBO = glGenBuffers != NULL; - support.depthTexture = GLES3 || extSupport(ext, "_depth_texture"); + support.depthTexture = GLES3 || extSupport("_depth_texture"); support.shadowSampler = _GL_EXT_shadow_samplers || _GL_ARB_shadow; - support.discardFrame = extSupport(ext, "_discard_framebuffer"); - support.texNPOT = GLES3 || extSupport(ext, "_texture_npot") || extSupport(ext, "_texture_non_power_of_two"); - support.texRG = GLES3 || extSupport(ext, "_texture_rg "); // hope that isn't last extension in string ;) - support.texMaxLevel = GLES3 || extSupport(ext, "_texture_max_level"); + support.discardFrame = extSupport("_discard_framebuffer"); + support.texNPOT = GLES3 || extSupport("_texture_npot") || extSupport("_texture_non_power_of_two"); + support.texRG = GLES3 || extSupport("_texture_rg "); // hope that isn't last extension in string ;) + support.texMaxLevel = GLES3 || extSupport("_texture_max_level"); #ifdef _GAPI_GLES2 // TODO support.shaderBinary = false; @@ -1301,15 +1309,15 @@ namespace GAPI { support.derivatives = true; support.tex3D = glTexImage3D != NULL; #endif - support.texBorder = extSupport(ext, "_texture_border_clamp"); - support.maxAniso = extSupport(ext, "_texture_filter_anisotropic"); - support.colorFloat = extSupport(ext, "_color_buffer_float"); - support.colorHalf = extSupport(ext, "_color_buffer_half_float") || extSupport(ext, "GL_ARB_half_float_pixel"); - support.texFloatLinear = support.colorFloat || extSupport(ext, "GL_ARB_texture_float") || extSupport(ext, "_texture_float_linear"); - support.texFloat = support.texFloatLinear || extSupport(ext, "_texture_float"); - support.texHalfLinear = support.colorHalf || extSupport(ext, "GL_ARB_texture_float") || extSupport(ext, "_texture_half_float_linear") || extSupport(ext, "_color_buffer_half_float"); + support.texBorder = extSupport("_texture_border_clamp"); + support.maxAniso = extSupport("_texture_filter_anisotropic"); + support.colorFloat = extSupport("_color_buffer_float"); + support.colorHalf = extSupport("_color_buffer_half_float") || extSupport("GL_ARB_half_float_pixel"); + support.texFloatLinear = support.colorFloat || extSupport("GL_ARB_texture_float") || extSupport("_texture_float_linear"); + support.texFloat = support.texFloatLinear || extSupport("_texture_float"); + support.texHalfLinear = support.colorHalf || extSupport("GL_ARB_texture_float") || extSupport("_texture_half_float_linear") || extSupport("_color_buffer_half_float"); - support.texHalf = support.texHalfLinear || extSupport(ext, "_texture_half_float"); + support.texHalf = support.texHalfLinear || extSupport("_texture_half_float"); #ifdef SDL2_GLES support.shaderBinary = false; // TODO @@ -1318,8 +1326,8 @@ namespace GAPI { #endif #ifdef PROFILE - support.profMarker = extSupport(ext, "_KHR_debug"); - support.profTiming = extSupport(ext, "_timer_query"); + support.profMarker = extSupport("_KHR_debug"); + support.profTiming = extSupport("_timer_query"); #endif if (support.maxAniso) diff --git a/src/libs/gl/wglext.h b/src/libs/gl/wglext.h new file mode 100644 index 0000000..1f447dc --- /dev/null +++ b/src/libs/gl/wglext.h @@ -0,0 +1,840 @@ +#ifndef __wglext_h_ +#define __wglext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2015 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 31597 $ on $Date: 2015-06-25 16:32:35 -0400 (Thu, 25 Jun 2015) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#define WIN32_LEAN_AND_MEAN 1 +#include +#endif + +#define WGL_WGLEXT_VERSION 20150623 + +/* Generated C header for: + * API: wgl + * Versions considered: .* + * Versions emitted: _nomatch_^ + * Default extensions included: wgl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef WGL_ARB_buffer_region +#define WGL_ARB_buffer_region 1 +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 +typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); +typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); +typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); +typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +#ifdef WGL_WGLEXT_PROTOTYPES +HANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType); +VOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion); +BOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height); +BOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +#endif +#endif /* WGL_ARB_buffer_region */ + +#ifndef WGL_ARB_context_flush_control +#define WGL_ARB_context_flush_control 1 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#endif /* WGL_ARB_context_flush_control */ + +#ifndef WGL_ARB_create_context +#define WGL_ARB_create_context 1 +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); +#ifdef WGL_WGLEXT_PROTOTYPES +HGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList); +#endif +#endif /* WGL_ARB_create_context */ + +#ifndef WGL_ARB_create_context_profile +#define WGL_ARB_create_context_profile 1 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#endif /* WGL_ARB_create_context_profile */ + +#ifndef WGL_ARB_create_context_robustness +#define WGL_ARB_create_context_robustness 1 +#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 +#endif /* WGL_ARB_create_context_robustness */ + +#ifndef WGL_ARB_extensions_string +#define WGL_ARB_extensions_string 1 +typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); +#ifdef WGL_WGLEXT_PROTOTYPES +const char *WINAPI wglGetExtensionsStringARB (HDC hdc); +#endif +#endif /* WGL_ARB_extensions_string */ + +#ifndef WGL_ARB_framebuffer_sRGB +#define WGL_ARB_framebuffer_sRGB 1 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#endif /* WGL_ARB_framebuffer_sRGB */ + +#ifndef WGL_ARB_make_current_read +#define WGL_ARB_make_current_read 1 +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +HDC WINAPI wglGetCurrentReadDCARB (void); +#endif +#endif /* WGL_ARB_make_current_read */ + +#ifndef WGL_ARB_multisample +#define WGL_ARB_multisample 1 +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLES_ARB 0x2042 +#endif /* WGL_ARB_multisample */ + +#ifndef WGL_ARB_pbuffer +#define WGL_ARB_pbuffer 1 +DECLARE_HANDLE(HPBUFFERARB); +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 +typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +HPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer); +int WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC); +BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer); +BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); +#endif +#endif /* WGL_ARB_pbuffer */ + +#ifndef WGL_ARB_pixel_format +#define WGL_ARB_pixel_format 1 +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#endif +#endif /* WGL_ARB_pixel_format */ + +#ifndef WGL_ARB_pixel_format_float +#define WGL_ARB_pixel_format_float 1 +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#endif /* WGL_ARB_pixel_format_float */ + +#ifndef WGL_ARB_render_texture +#define WGL_ARB_render_texture 1 +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 +typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); +BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer); +BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList); +#endif +#endif /* WGL_ARB_render_texture */ + +#ifndef WGL_ARB_robustness_application_isolation +#define WGL_ARB_robustness_application_isolation 1 +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#endif /* WGL_ARB_robustness_application_isolation */ + +#ifndef WGL_ARB_robustness_share_group_isolation +#define WGL_ARB_robustness_share_group_isolation 1 +#endif /* WGL_ARB_robustness_share_group_isolation */ + +#ifndef WGL_3DFX_multisample +#define WGL_3DFX_multisample 1 +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 +#endif /* WGL_3DFX_multisample */ + +#ifndef WGL_3DL_stereo_control +#define WGL_3DL_stereo_control 1 +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 +typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState); +#endif +#endif /* WGL_3DL_stereo_control */ + +#ifndef WGL_AMD_gpu_association +#define WGL_AMD_gpu_association 1 +#define WGL_GPU_VENDOR_AMD 0x1F00 +#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 +#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define WGL_GPU_RAM_AMD 0x21A3 +#define WGL_GPU_CLOCK_AMD 0x21A4 +#define WGL_GPU_NUM_PIPES_AMD 0x21A5 +#define WGL_GPU_NUM_SIMD_AMD 0x21A6 +#define WGL_GPU_NUM_RB_AMD 0x21A7 +#define WGL_GPU_NUM_SPI_AMD 0x21A8 +typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); +typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data); +typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); +typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); +typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); +typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); +typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); +typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef WGL_WGLEXT_PROTOTYPES +UINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids); +INT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data); +UINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc); +HGLRC WINAPI wglCreateAssociatedContextAMD (UINT id); +HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList); +BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc); +BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc); +HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); +VOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* WGL_AMD_gpu_association */ + +#ifndef WGL_ATI_pixel_format_float +#define WGL_ATI_pixel_format_float 1 +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#endif /* WGL_ATI_pixel_format_float */ + +#ifndef WGL_EXT_create_context_es2_profile +#define WGL_EXT_create_context_es2_profile 1 +#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#endif /* WGL_EXT_create_context_es2_profile */ + +#ifndef WGL_EXT_create_context_es_profile +#define WGL_EXT_create_context_es_profile 1 +#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#endif /* WGL_EXT_create_context_es_profile */ + +#ifndef WGL_EXT_depth_float +#define WGL_EXT_depth_float 1 +#define WGL_DEPTH_FLOAT_EXT 0x2040 +#endif /* WGL_EXT_depth_float */ + +#ifndef WGL_EXT_display_color_table +#define WGL_EXT_display_color_table 1 +typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); +typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); +typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); +#ifdef WGL_WGLEXT_PROTOTYPES +GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id); +GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length); +GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id); +VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id); +#endif +#endif /* WGL_EXT_display_color_table */ + +#ifndef WGL_EXT_extensions_string +#define WGL_EXT_extensions_string 1 +typedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +const char *WINAPI wglGetExtensionsStringEXT (void); +#endif +#endif /* WGL_EXT_extensions_string */ + +#ifndef WGL_EXT_framebuffer_sRGB +#define WGL_EXT_framebuffer_sRGB 1 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 +#endif /* WGL_EXT_framebuffer_sRGB */ + +#ifndef WGL_EXT_make_current_read +#define WGL_EXT_make_current_read 1 +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 +typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +HDC WINAPI wglGetCurrentReadDCEXT (void); +#endif +#endif /* WGL_EXT_make_current_read */ + +#ifndef WGL_EXT_multisample +#define WGL_EXT_multisample 1 +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_SAMPLES_EXT 0x2042 +#endif /* WGL_EXT_multisample */ + +#ifndef WGL_EXT_pbuffer +#define WGL_EXT_pbuffer 1 +DECLARE_HANDLE(HPBUFFEREXT); +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 +typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); +typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); +typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); +typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); +HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer); +int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC); +BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer); +BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); +#endif +#endif /* WGL_EXT_pbuffer */ + +#ifndef WGL_EXT_pixel_format +#define WGL_EXT_pixel_format 1 +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_EXT 0x202C +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); +BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); +BOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); +#endif +#endif /* WGL_EXT_pixel_format */ + +#ifndef WGL_EXT_pixel_format_packed_float +#define WGL_EXT_pixel_format_packed_float 1 +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 +#endif /* WGL_EXT_pixel_format_packed_float */ + +#ifndef WGL_EXT_swap_control +#define WGL_EXT_swap_control 1 +typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); +typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglSwapIntervalEXT (int interval); +int WINAPI wglGetSwapIntervalEXT (void); +#endif +#endif /* WGL_EXT_swap_control */ + +#ifndef WGL_EXT_swap_control_tear +#define WGL_EXT_swap_control_tear 1 +#endif /* WGL_EXT_swap_control_tear */ + +#ifndef WGL_I3D_digital_video_control +#define WGL_I3D_digital_video_control 1 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 +typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue); +BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue); +#endif +#endif /* WGL_I3D_digital_video_control */ + +#ifndef WGL_I3D_gamma +#define WGL_I3D_gamma 1 +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); +typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); +typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue); +BOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue); +BOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); +BOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); +#endif +#endif /* WGL_I3D_gamma */ + +#ifndef WGL_I3D_genlock +#define WGL_I3D_genlock 1 +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C +typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); +typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); +typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); +typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); +typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); +typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnableGenlockI3D (HDC hDC); +BOOL WINAPI wglDisableGenlockI3D (HDC hDC); +BOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag); +BOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource); +BOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource); +BOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge); +BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge); +BOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate); +BOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate); +BOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay); +BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay); +BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); +#endif +#endif /* WGL_I3D_genlock */ + +#ifndef WGL_I3D_image_buffer +#define WGL_I3D_image_buffer 1 +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 +typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); +typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); +typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); +#ifdef WGL_WGLEXT_PROTOTYPES +LPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags); +BOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress); +BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); +BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count); +#endif +#endif /* WGL_I3D_image_buffer */ + +#ifndef WGL_I3D_swap_frame_lock +#define WGL_I3D_swap_frame_lock 1 +typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnableFrameLockI3D (void); +BOOL WINAPI wglDisableFrameLockI3D (void); +BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag); +BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag); +#endif +#endif /* WGL_I3D_swap_frame_lock */ + +#ifndef WGL_I3D_swap_frame_usage +#define WGL_I3D_swap_frame_usage 1 +typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); +typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetFrameUsageI3D (float *pUsage); +BOOL WINAPI wglBeginFrameTrackingI3D (void); +BOOL WINAPI wglEndFrameTrackingI3D (void); +BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); +#endif +#endif /* WGL_I3D_swap_frame_usage */ + +#ifndef WGL_NV_DX_interop +#define WGL_NV_DX_interop 1 +#define WGL_ACCESS_READ_ONLY_NV 0x00000000 +#define WGL_ACCESS_READ_WRITE_NV 0x00000001 +#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 +typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle); +typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice); +typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); +typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); +typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); +typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); +typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); +typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle); +HANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice); +BOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice); +HANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access); +BOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject); +BOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access); +BOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); +BOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects); +#endif +#endif /* WGL_NV_DX_interop */ + +#ifndef WGL_NV_DX_interop2 +#define WGL_NV_DX_interop2 1 +#endif /* WGL_NV_DX_interop2 */ + +#ifndef WGL_NV_copy_image +#define WGL_NV_copy_image 1 +typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* WGL_NV_copy_image */ + +#ifndef WGL_NV_delay_before_swap +#define WGL_NV_delay_before_swap 1 +typedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds); +#endif +#endif /* WGL_NV_delay_before_swap */ + +#ifndef WGL_NV_float_buffer +#define WGL_NV_float_buffer 1 +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 +#endif /* WGL_NV_float_buffer */ + +#ifndef WGL_NV_gpu_affinity +#define WGL_NV_gpu_affinity 1 +DECLARE_HANDLE(HGPUNV); +struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +}; +typedef struct _GPU_DEVICE *PGPU_DEVICE; +#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 +typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); +typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); +typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu); +BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList); +BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); +BOOL WINAPI wglDeleteDCNV (HDC hdc); +#endif +#endif /* WGL_NV_gpu_affinity */ + +#ifndef WGL_NV_multisample_coverage +#define WGL_NV_multisample_coverage 1 +#define WGL_COVERAGE_SAMPLES_NV 0x2042 +#define WGL_COLOR_SAMPLES_NV 0x20B9 +#endif /* WGL_NV_multisample_coverage */ + +#ifndef WGL_NV_present_video +#define WGL_NV_present_video 1 +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 +typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); +typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); +typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue); +#ifdef WGL_WGLEXT_PROTOTYPES +int WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); +BOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); +BOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue); +#endif +#endif /* WGL_NV_present_video */ + +#ifndef WGL_NV_render_depth_texture +#define WGL_NV_render_depth_texture 1 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 +#endif /* WGL_NV_render_depth_texture */ + +#ifndef WGL_NV_render_texture_rectangle +#define WGL_NV_render_texture_rectangle 1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 +#endif /* WGL_NV_render_texture_rectangle */ + +#ifndef WGL_NV_swap_group +#define WGL_NV_swap_group 1 +typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); +typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); +typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier); +typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); +typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count); +typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group); +BOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier); +BOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier); +BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); +BOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count); +BOOL WINAPI wglResetFrameCountNV (HDC hDC); +#endif +#endif /* WGL_NV_swap_group */ + +#ifndef WGL_NV_vertex_array_range +#define WGL_NV_vertex_array_range 1 +typedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); +#ifdef WGL_WGLEXT_PROTOTYPES +void *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +void WINAPI wglFreeMemoryNV (void *pointer); +#endif +#endif /* WGL_NV_vertex_array_range */ + +#ifndef WGL_NV_video_capture +#define WGL_NV_video_capture 1 +DECLARE_HANDLE(HVIDEOINPUTDEVICENV); +#define WGL_UNIQUE_ID_NV 0x20CE +#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +UINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList); +BOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +BOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue); +BOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice); +#endif +#endif /* WGL_NV_video_capture */ + +#ifndef WGL_NV_video_output +#define WGL_NV_video_output 1 +DECLARE_HANDLE(HPVIDEODEV); +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC +typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); +typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); +typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); +BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice); +BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer); +BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); +BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); +#endif +#endif /* WGL_NV_video_output */ + +#ifndef WGL_OML_sync_control +#define WGL_OML_sync_control 1 +typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); +typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); +typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); +#ifdef WGL_WGLEXT_PROTOTYPES +BOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); +BOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator); +INT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +INT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +BOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); +BOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); +#endif +#endif /* WGL_OML_sync_control */ + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/src/platform/win/main.cpp b/src/platform/win/main.cpp index dc1cf6e..daf66a3 100644 --- a/src/platform/win/main.cpp +++ b/src/platform/win/main.cpp @@ -404,15 +404,13 @@ HWND hWnd; void ContextSwap() { const BITMAPINFO bmi = { sizeof(BITMAPINFOHEADER), Core::width, -Core::height, 1, sizeof(GAPI::ColorSW) * 8, BI_RGB, 0, 0, 0, 0, 0 }; - SetDIBitsToDevice(hDC, 0, 0, Core::width, Core::height, 0, 0, 0, Core::height, GAPI::swColor, &bmi, 0); + SetDIBitsToDevice(hDC, 0, 0, Core::width, Core::height, 0, 0, 0, Core::height, GAPI::swColor, &bmi, DIB_RGB_COLORS); } #elif _GAPI_GL HDC hDC; HGLRC hRC; void ContextCreate() { - hDC = GetDC(hWnd); - PIXELFORMATDESCRIPTOR pfd; memset(&pfd, 0, sizeof(pfd)); pfd.nSize = sizeof(pfd); @@ -424,11 +422,64 @@ HWND hWnd; pfd.cBlueBits = 8; pfd.cAlphaBits = 8; pfd.cDepthBits = 24; - pfd.cStencilBits = 8; - int format = ChoosePixelFormat(hDC, &pfd); - SetPixelFormat(hDC, format, &pfd); - hRC = wglCreateContext(hDC); + PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB = NULL; + PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL; + + { + HWND fWnd = CreateWindow("static", NULL, WS_POPUP, 0, 0, 0, 0, 0, 0, 0, 0); + HDC fDC = GetDC(fWnd); + + int format = ChoosePixelFormat(fDC, &pfd); + SetPixelFormat(fDC, format, &pfd); + HGLRC fRC = wglCreateContext(fDC); + wglMakeCurrent(fDC, fRC); + + wglChoosePixelFormatARB = GetProcOGL(wglChoosePixelFormatARB); + wglCreateContextAttribsARB = GetProcOGL(wglCreateContextAttribsARB); + + wglMakeCurrent(0, 0); + ReleaseDC(fWnd, fDC); + wglDeleteContext(fRC); + DestroyWindow(fWnd); + } + + hDC = GetDC(hWnd); + + if (wglChoosePixelFormatARB && wglCreateContextAttribsARB) { + const int pixelAttribs[] = { + WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, + WGL_SUPPORT_OPENGL_ARB, GL_TRUE, + WGL_DOUBLE_BUFFER_ARB, GL_TRUE, + WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_ARB, + WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB, + WGL_COLOR_BITS_ARB, 32, + WGL_ALPHA_BITS_ARB, 8, + 0 + }; + + int format; + UINT numFormats; + bool status = wglChoosePixelFormatARB(hDC, pixelAttribs, NULL, 1, &format, &numFormats); + ASSERT(status && numFormats > 0); + + DescribePixelFormat(hDC, format, sizeof(pfd), &pfd); + SetPixelFormat(hDC, format, &pfd); + + int contextAttribs[] = { + WGL_CONTEXT_MAJOR_VERSION_ARB, 3, + WGL_CONTEXT_MINOR_VERSION_ARB, 2, + WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_CORE_PROFILE_BIT_ARB, + 0 + }; + + hRC = wglCreateContextAttribsARB(hDC, 0, contextAttribs); + } else { + int format = ChoosePixelFormat(hDC, &pfd); + SetPixelFormat(hDC, format, &pfd); + hRC = wglCreateContext(hDC); + } + wglMakeCurrent(hDC, hRC); } From cee187309322fa3a5a9b450d0dfd91e6d736d045 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 25 Nov 2020 06:28:11 +0300 Subject: [PATCH 38/58] fix luminance format for textures --- src/gapi/gl.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gapi/gl.h b/src/gapi/gl.h index 4b79342..8baf60f 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -890,6 +890,11 @@ namespace GAPI { desc.fmt = GL_RGBA; } + if (fmt == FMT_LUMINANCE && Core::support.texRG) { + desc.ifmt = GL_R8; + desc.fmt = GL_RED; + } + #ifdef _OS_WEB // fucking firefox! if (WEBGL_VERSION == 1) { if (fmt == FMT_RG_FLOAT) { @@ -1293,7 +1298,7 @@ namespace GAPI { support.shadowSampler = _GL_EXT_shadow_samplers || _GL_ARB_shadow; support.discardFrame = extSupport("_discard_framebuffer"); support.texNPOT = GLES3 || extSupport("_texture_npot") || extSupport("_texture_non_power_of_two"); - support.texRG = GLES3 || extSupport("_texture_rg "); // hope that isn't last extension in string ;) + support.texRG = GLES3 || extSupport("_texture_rg"); support.texMaxLevel = GLES3 || extSupport("_texture_max_level"); #ifdef _GAPI_GLES2 // TODO From 8a3126a7c36ff31b76881cfced858d12f9e0a77b Mon Sep 17 00:00:00 2001 From: Sergey Ukolov Date: Wed, 16 Dec 2020 18:00:52 +0300 Subject: [PATCH 39/58] Adjusted sound buffer size for nix platform (#286) Fixes possible audio stutters https://github.com/XProger/OpenLara/issues/285 --- src/platform/nix/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/nix/main.cpp b/src/platform/nix/main.cpp index 7592edf..46e1749 100644 --- a/src/platform/nix/main.cpp +++ b/src/platform/nix/main.cpp @@ -27,7 +27,7 @@ int osGetTimeMS() { // sound #define SND_FRAME_SIZE 4 -#define SND_DATA_SIZE (1024 * SND_FRAME_SIZE) +#define SND_DATA_SIZE (2352 * SND_FRAME_SIZE) pa_simple *sndOut; pthread_t sndThread; From 6d9304d96a77dd2beb9dfa14203e37b71d5df319 Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 27 Dec 2020 18:00:36 +0300 Subject: [PATCH 40/58] TI-Nspire port --- src/core.h | 8 ++- src/format.h | 9 ++- src/gameflow.h | 4 +- src/gapi/sw.h | 23 ++++-- src/objects.h | 14 ++-- src/platform/tns/Makefile | 49 +++++++++++++ src/platform/tns/main.cpp | 145 ++++++++++++++++++++++++++++++++++++++ src/sound.h | 25 ++++--- src/ui.h | 2 +- src/utils.h | 12 ++-- src/video.h | 20 ++++++ 11 files changed, 278 insertions(+), 33 deletions(-) create mode 100644 src/platform/tns/Makefile create mode 100644 src/platform/tns/main.cpp diff --git a/src/core.h b/src/core.h index f0d52fa..603f8c1 100644 --- a/src/core.h +++ b/src/core.h @@ -150,9 +150,15 @@ #elif _X360 #define _OS_X360 1 // TODO +#elif __NDLESS__ + #define _OS_TNS 1 + #define _GAPI_SW 1 + #include + + #undef OS_PTHREAD_MT #endif -#ifndef _OS_PSP +#if !defined(_OS_PSP) && !defined(_OS_TNS) #define USE_INFLATE #endif diff --git a/src/format.h b/src/format.h index 7a1448d..e1160d5 100644 --- a/src/format.h +++ b/src/format.h @@ -3233,7 +3233,9 @@ namespace TR { case VER_TR2_PSX : loadTR2_PSX (stream); break; case VER_TR3_PC : loadTR3_PC (stream); break; case VER_TR3_PSX : loadTR3_PSX (stream); break; + #ifdef USE_INFLATE case VER_TR4_PC : loadTR4_PC (stream); break; + #endif case VER_TR4_PSX : loadTR4_PSX (stream); break; case VER_TR4_SDC : loadTR4_SDC (stream); break; case VER_TR5_PC : loadTR5_PC (stream); break; @@ -3609,6 +3611,7 @@ namespace TR { readCameraFrames(stream); } + #ifdef USE_INFLATE void loadTR4_PC (Stream &stream) { uint16 roomTilesCount, objTilesCount, bumpTilesCount; uint32 sizeD, sizeC, sizeR; @@ -3686,6 +3689,7 @@ namespace TR { soundDataSize += sizeC; } } + #endif void loadTR4_PSX (Stream &stream) { @@ -5895,10 +5899,13 @@ namespace TR { break; } case VER_TR3_PSX : { + mesh.tCount = 0; + mesh.rCount = 0; + mesh.fCount = 0; + if (!mesh.vCount) { mesh.vertices = NULL; mesh.faces = NULL; - mesh.tCount = mesh.rCount = mesh.fCount = 0; break; } diff --git a/src/gameflow.h b/src/gameflow.h index 4b63918..b631469 100644 --- a/src/gameflow.h +++ b/src/gameflow.h @@ -1087,7 +1087,7 @@ namespace TR { id == LVL_TR2_CUT_4 || id == LVL_TR2_XIAN || id == LVL_TR2_HOUSE) { char buf[64]; strcpy(buf, LEVEL_INFO[id].name); - String::toLower(buf); + StrUtils::toLower(buf); sprintf(dst, "DATA/%s.TR2", buf); } else if (id == LVL_TR2_TITLE) { sprintf(dst, "DATA/%s.tr2", LEVEL_INFO[id].name); @@ -1098,7 +1098,7 @@ namespace TR { } if (Stream::existsContent(dst)) break; strcpy(dst, LEVEL_INFO[id].name); - String::toLower(dst); + StrUtils::toLower(dst); strcat(dst, ".TR2"); break; } diff --git a/src/gapi/sw.h b/src/gapi/sw.h index b15c681..8957373 100644 --- a/src/gapi/sw.h +++ b/src/gapi/sw.h @@ -7,12 +7,14 @@ #define PROFILE_LABEL(id, name, label) #define PROFILE_TIMING(time) -#ifdef _OS_LINUX +//#define DITHER_FILTER + +#if defined(_OS_LINUX) || defined(_OS_TNS) #define COLOR_16 #endif #ifdef COLOR_16 - #ifdef _OS_LINUX + #if defined(_OS_LINUX) || defined(_OS_TNS) #define COLOR_FMT_565 #define CONV_COLOR(r,g,b) (((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3)) #else @@ -290,7 +292,7 @@ namespace GAPI { } if (depth) { - memset(swDepth, 0xFF, Core::width * Core::height * sizeof(DepthSW)); + //memset(swDepth, 0xFF, Core::width * Core::height * sizeof(DepthSW)); } } @@ -396,18 +398,25 @@ namespace GAPI { int32 i = y * Core::width; + #ifdef DITHER_FILTER const int *dithY = uvDither + ((y & 1) * 4); + #endif for (int x = i + x1; x < i + x2; x++) { S.z += dS.z; DepthSW z = DepthSW(uint32(S.z) >> 16); - if (swDepth[x] >= z) { + {//if (swDepth[x] >= z) { + #ifdef DITHER_FILTER const int *dithX = dithY + (x & 1); uint32 u = uint32(S.u + dithX[0]) >> 16; uint32 v = uint32(S.v + dithX[2]) >> 16; + #else + uint32 u = uint32(S.u) >> 16; + uint32 v = uint32(S.v) >> 16; + #endif uint8 index = curTile->index[(v << 8) + u]; @@ -415,7 +424,7 @@ namespace GAPI { index = swLightmap[((S.l >> (16 + 3)) << 8) + index]; swColor[x] = swPalette[index]; - swDepth[x] = z; + //swDepth[x] = z; } } @@ -580,8 +589,8 @@ namespace GAPI { } void applyLighting(VertexSW &result, const Vertex &vertex, float depth) { - vec3 coord = vec3(vertex.coord); - vec3 normal = vec3(vertex.normal).normal(); + vec3 coord = vec3(float(vertex.coord.x), float(vertex.coord.y), float(vertex.coord.z)); + vec3 normal = vec3(float(vertex.normal.x), float(vertex.normal.y), float(vertex.normal.z)).normal(); float lighting = 0.0f; for (int i = 0; i < lightsCount; i++) { LightSW &light = lightsRel[i]; diff --git a/src/objects.h b/src/objects.h index 1c86287..ce631f1 100644 --- a/src/objects.h +++ b/src/objects.h @@ -153,9 +153,9 @@ struct Flame : Sprite { Controller *owner; int32 jointIndex; - float sleep; + float sleepTime; - Flame(IGame *game, int entity) : Sprite(game, entity, false, Sprite::FRAME_ANIMATED), owner(NULL), jointIndex(0), sleep(0.0f) { + Flame(IGame *game, int entity) : Sprite(game, entity, false, Sprite::FRAME_ANIMATED), owner(NULL), jointIndex(0), sleepTime(0.0f) { time = randf() * 3.0f; activate(); } @@ -186,15 +186,15 @@ struct Flame : Sprite { lara->hit(FLAME_BURN_DAMAGE * Core::deltaTime, this); } else if (lara->health > 0.0f) { - if (sleep > 0.0f) - sleep = max(0.0f, sleep - Core::deltaTime); + if (sleepTime > 0.0f) + sleepTime = max(0.0f, sleepTime - Core::deltaTime); - if (sleep == 0.0f && !lara->burn && lara->collide(Sphere(pos, 600.0f))) { + if (sleepTime == 0.0f && !lara->burn && lara->collide(Sphere(pos, 600.0f))) { lara->hit(FLAME_HEAT_DAMAGE * Core::deltaTime, this); if (lara->collide(Sphere(pos, 300.0f))) { Flame::add(game, lara, 0); - sleep = 3.0f; // stay inactive for 3 seconds + sleepTime = 3.0f; // stay inactive for 3 seconds } } } @@ -1838,4 +1838,4 @@ struct Bullet : Controller { } }; -#endif \ No newline at end of file +#endif diff --git a/src/platform/tns/Makefile b/src/platform/tns/Makefile new file mode 100644 index 0000000..b4b9d14 --- /dev/null +++ b/src/platform/tns/Makefile @@ -0,0 +1,49 @@ +DEBUG = FALSE + +GCC = nspire-gcc +AS = nspire-as +GXX = nspire-g++ +LD = nspire-ld +GENZEHN = genzehn + +GCCFLAGS = -marm -march=armv5te -mtune=arm926ej-s -std=c++11 -flto -fomit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -D__NDLESS__ -I../../ +LDFLAGS = -Wl,--gc-sections -Wl,--as-needed -flto -Wno-alloc-size-larger-than +ZEHNFLAGS = --name "OpenLara" + +ifeq ($(DEBUG),FALSE) + GCCFLAGS += -Ofast +else + GCCFLAGS += -O0 -g +endif + +OBJS = $(patsubst %.c, %.o, $(shell find . -name \*.c)) +OBJS += $(patsubst %.cpp, %.o, $(shell find . -name \*.cpp)) +OBJS += $(patsubst %.S, %.o, $(shell find . -name \*.S)) +EXE = OpenLara +DISTDIR = . +vpath %.tns $(DISTDIR) +vpath %.elf $(DISTDIR) + +all: $(EXE).prg.tns + +%.o: %.c + $(GCC) $(GCCFLAGS) -c $< + +%.o: %.cpp + $(GXX) $(GCCFLAGS) -c $< + +%.o: %.S + $(AS) -c $< + +$(EXE).elf: $(OBJS) + mkdir -p $(DISTDIR) + $(LD) $^ -o $(DISTDIR)/$@ $(LDFLAGS) + +$(EXE).tns: $(EXE).elf + $(GENZEHN) --input $(DISTDIR)/$^ --output $(DISTDIR)/$@ $(ZEHNFLAGS) + +$(EXE).prg.tns: $(EXE).tns + make-prg $(DISTDIR)/$^ $(DISTDIR)/$@ + +clean: + rm -f *.o $(DISTDIR)/$(EXE).tns $(DISTDIR)/$(EXE).elf $(DISTDIR)/$(EXE).prg.tns diff --git a/src/platform/tns/main.cpp b/src/platform/tns/main.cpp new file mode 100644 index 0000000..04c0e2f --- /dev/null +++ b/src/platform/tns/main.cpp @@ -0,0 +1,145 @@ +#include + +#include + +// multi-threading (no sound - no problem) +void* osMutexInit() { return NULL; } +void osMutexFree(void *obj) {} +void osMutexLock(void *obj) {} +void osMutexUnlock(void *obj) {} + + +// timing +unsigned int osTime; +volatile unsigned int *timerBUS; +volatile unsigned int *timerCLK; +volatile unsigned int *timerCTR; +volatile unsigned int *timerDIV; + +void timerInit() +{ + timerBUS = (unsigned int*)0x900B0018; + timerCLK = (unsigned int*)0x900C0004; + timerCTR = (unsigned int*)0x900C0008; + timerDIV = (unsigned int*)0x900C0080; + + *timerBUS &= ~(1 << 11); + *timerDIV = 0x0A; + *timerCTR = 0x82; + + osTime = *timerCLK; +} + +int osGetTimeMS() +{ + return (osTime - *timerCLK) / 33; +} + + +// input +touchpad_info_t* touchInfo; +touchpad_report_t touchReport; + +void touchInit() +{ + touchInfo = is_touchpad ? touchpad_getinfo() : NULL; +} + +bool osJoyReady(int index) +{ + return (index == 0); +} + +void osJoyVibrate(int index, float L, float R) {} + +void joyUpdate() +{ + Input::setJoyPos(0, jkL, vec2(0.0f, 0.0f)); + Input::setJoyPos(0, jkR, vec2(0.0f, 0.0f)); + Input::setJoyPos(0, jkLT, vec2(0.0f, 0.0f)); + Input::setJoyPos(0, jkRT, vec2(0.0f, 0.0f)); + + if (touchInfo) + { + touchpad_scan(&touchReport); + if (touchReport.contact) + { + float tx = float(touchReport.x) / float(touchInfo->width) * 2.0f - 1.0f; + float ty = float(touchReport.y) / float(touchInfo->height) * 2.0f - 1.0f; + Input::setJoyPos(0, jkL, vec2(tx, -ty)); + } + } + + Input::setJoyDown(0, jkA, isKeyPressed(KEY_NSPIRE_2)); + Input::setJoyDown(0, jkB, isKeyPressed(KEY_NSPIRE_3)); + Input::setJoyDown(0, jkX, isKeyPressed(KEY_NSPIRE_5)); + Input::setJoyDown(0, jkY, isKeyPressed(KEY_NSPIRE_6)); + Input::setJoyDown(0, jkLB, isKeyPressed(KEY_NSPIRE_7)); + Input::setJoyDown(0, jkRB, isKeyPressed(KEY_NSPIRE_9)); + Input::setJoyDown(0, jkL, false); + Input::setJoyDown(0, jkR, false); + Input::setJoyDown(0, jkStart, isKeyPressed(KEY_NSPIRE_ENTER)); + Input::setJoyDown(0, jkSelect, isKeyPressed(KEY_NSPIRE_MENU)); + + Input::setJoyDown(0, jkUp, isKeyPressed(KEY_NSPIRE_UP) || isKeyPressed(KEY_NSPIRE_LEFTUP) || isKeyPressed(KEY_NSPIRE_UPRIGHT)); + Input::setJoyDown(0, jkDown, isKeyPressed(KEY_NSPIRE_DOWN) || isKeyPressed(KEY_NSPIRE_RIGHTDOWN) || isKeyPressed(KEY_NSPIRE_DOWNLEFT)); + Input::setJoyDown(0, jkLeft, isKeyPressed(KEY_NSPIRE_LEFT) || isKeyPressed(KEY_NSPIRE_LEFTUP) || isKeyPressed(KEY_NSPIRE_DOWNLEFT)); + Input::setJoyDown(0, jkRight, isKeyPressed(KEY_NSPIRE_RIGHT) || isKeyPressed(KEY_NSPIRE_RIGHTDOWN) || isKeyPressed(KEY_NSPIRE_UPRIGHT)); +} + +unsigned short* osPalette() +{ + return (unsigned short*)0xC0000200; +} + +int main(void) +{ + if (!has_colors) + return 0; + + lcd_init(SCR_320x240_565); + + timerInit(); + touchInit(); + + contentDir[0] = saveDir[0] = cacheDir[0] = 0; + + strcpy(contentDir, "/documents/Games/OpenLara/"); + strcpy(saveDir, contentDir); + strcpy(cacheDir, contentDir); + + Stream::addPack("content.tns"); + + Core::width = SCREEN_WIDTH; + Core::height = SCREEN_HEIGHT; + + GAPI::swColor = new GAPI::ColorSW[SCREEN_WIDTH * SCREEN_HEIGHT]; + GAPI::resize(); + + Sound::channelsCount = 0; + + Game::init("DATA/LEVEL1.PHD"); + + while (!Core::isQuit) + { + joyUpdate(); + + if (Game::update()) + { + Game::render(); + + lcd_blit(GAPI::swColor, SCR_320x240_565); + } + + if (isKeyPressed(KEY_NSPIRE_ESC)) + { + Core::quit(); + } + } + + delete[] GAPI::swColor; + + //Game::deinit(); + + return 0; +} diff --git a/src/sound.h b/src/sound.h index 29e9c7e..558d8ae 100644 --- a/src/sound.h +++ b/src/sound.h @@ -1,15 +1,20 @@ #ifndef H_SOUND #define H_SOUND -#define DECODE_ADPCM -#define DECODE_IMA -#define DECODE_VAG -#define DECODE_XA +#ifdef _OS_TNS + #define NO_SOUND +#endif -#define DECODE_OGG +#ifndef NO_SOUND + #define DECODE_ADPCM + #define DECODE_IMA + #define DECODE_VAG + #define DECODE_XA + #define DECODE_OGG -#if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) && !defined(_OS_XB1) - #define DECODE_MP3 + #if !defined(_OS_PSP) && !defined(_OS_WEB) && !defined(_OS_PSV) && !defined(_OS_3DS) && !defined(_OS_XBOX) && !defined(_OS_XB1) + #define DECODE_MP3 + #endif #endif #include "utils.h" @@ -846,7 +851,8 @@ namespace Sound { Sample(Stream *stream, const vec3 *pos, float volume, float pitch, int flags, int id) : uniquePtr(pos), decoder(NULL), volume(volume), volumeTarget(volume), volumeDelta(0.0f), pitch(pitch), flags(flags), id(id) { this->pos = pos ? *pos : vec3(0.0f); - + + #ifndef NO_SOUND uint32 fourcc; stream->read(fourcc); if (fourcc == FOURCC("RIFF")) { // wav @@ -898,6 +904,7 @@ namespace Sound { decoder = new VAG(stream); #endif } + #endif if (!decoder) delete stream; @@ -1171,6 +1178,7 @@ namespace Sound { } Sample* play(Stream *stream, const vec3 *pos = NULL, float volume = 1.0f, float pitch = 0.0f, int flags = 0, int id = - 1) { + #ifndef NO_SOUND OS_LOCK(lock); ASSERT(pitch >= 0.0f); @@ -1207,6 +1215,7 @@ namespace Sound { LOG("! no free channels\n"); } + #endif delete stream; return NULL; } diff --git a/src/ui.h b/src/ui.h index 5d08e04..f521d78 100644 --- a/src/ui.h +++ b/src/ui.h @@ -9,7 +9,7 @@ #define SUBTITLES_SPEED 0.1f #define TEXT_LINE_HEIGHT 18 -#ifdef _OS_PSV +#if defined(_OS_PSV) || defined(_OS_TNS) #define UI_SHOW_FPS #endif diff --git a/src/utils.h b/src/utils.h index bff2d02..df41744 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1532,7 +1532,7 @@ struct CLUT { ColorCLUT color[16]; }; -namespace String { +namespace StrUtils { void toLower(char *str) { if (!str) return; @@ -1868,7 +1868,7 @@ private: public: Stream(const char *name, const void *data, int size, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data((char*)data), name(NULL), size(size), pos(0), buffer(NULL) { - this->name = String::copy(name); + this->name = StrUtils::copy(name); } Stream(const char *name, Callback *callback = NULL, void *userData = NULL) : callback(callback), userData(userData), f(NULL), data(NULL), name(NULL), size(-1), pos(0), buffer(NULL), buffering(true), baseOffset(0) { @@ -1912,13 +1912,13 @@ public: fpos = 0; bufferIndex = -1; - this->name = String::copy(name); + this->name = StrUtils::copy(name); if (callback) callback(this, userData); return; } } - this->name = String::copy(name); + this->name = StrUtils::copy(name); #ifdef _OS_3DS /* TODO if (callback) { @@ -1964,14 +1964,14 @@ public: break; } - int32 len = utf16_to_utf8((uint8*)buf + pathLen, entry.name, String::length(entry.name)); + int32 len = utf16_to_utf8((uint8*)buf + pathLen, entry.name, StrUtils::length(entry.name)); buf[pathLen + len] = 0; if (entry.attributes & FS_ATTRIBUTE_DIRECTORY) { strcat(buf, "/"); readDirectory(archive, buf); } else { - fileList.push(String::copy(buf)); + fileList.push(StrUtils::copy(buf)); } } diff --git a/src/video.h b/src/video.h index 2aa3b51..552fcb7 100644 --- a/src/video.h +++ b/src/video.h @@ -5,6 +5,10 @@ #include "texture.h" #include "sound.h" +#ifdef _OS_TNS + #define NO_VIDEO +#endif + struct AC_ENTRY { uint8 code; uint8 skip; @@ -264,6 +268,9 @@ struct Video { nextChunk(0, 0); + #ifdef NO_SOUND + audioDecoder = NULL; + #else if (sfmt == 1) audioDecoder = new Sound::PCM(NULL, channels, rate, 0x7FFFFF, bps); // TR2 else if (sfmt == 101) { @@ -272,6 +279,7 @@ struct Video { else audioDecoder = new Sound::IMA(NULL, channels, rate); // TR3 } + #endif } virtual ~Escape() { @@ -678,6 +686,9 @@ struct Video { } virtual int decode(Sound::Frame *frames, int count) { + #ifdef NO_VIDEO + return 0; + #else if (!audioDecoder) return 0; if (bps != 4 && abs(curAudioChunk - curVideoChunk) > 1) { // sync with video chunk, doesn't work for IMA @@ -718,6 +729,7 @@ struct Video { } return count; + #endif } }; @@ -838,7 +850,11 @@ struct Video { channels = 2; freq = 37800; + #ifdef NO_SOUND + audioDecoder = NULL; + #else audioDecoder = new Sound::XA(NULL); + #endif } virtual ~STR() { @@ -1077,6 +1093,9 @@ struct Video { } virtual int decode(Sound::Frame *frames, int count) { + #ifdef NO_VIDEO + return 0; + #else if (!audioDecoder) return 0; Sound::XA *xa = (Sound::XA*)audioDecoder; @@ -1104,6 +1123,7 @@ struct Video { } return count; + #endif } }; From 0c0e2111b5afcdc85c1880b9d14140cd2f89fbc2 Mon Sep 17 00:00:00 2001 From: XProger Date: Tue, 29 Dec 2020 02:08:34 +0300 Subject: [PATCH 41/58] gba render on tns --- src/gapi/sw.h | 2 +- src/platform/gba/{Makefile => Makefile_gba} | 2 +- src/platform/gba/Makefile_tns | 49 ++++++ src/platform/gba/common.h | 91 +++++++---- src/platform/gba/level.h | 10 +- src/platform/gba/main.cpp | 166 +++++++++++++++++--- src/platform/gba/render.iwram.cpp | 143 ++++++++++++++--- src/platform/tns/main.cpp | 40 ++--- 8 files changed, 406 insertions(+), 97 deletions(-) rename src/platform/gba/{Makefile => Makefile_gba} (99%) create mode 100644 src/platform/gba/Makefile_tns diff --git a/src/gapi/sw.h b/src/gapi/sw.h index 8957373..7086699 100644 --- a/src/gapi/sw.h +++ b/src/gapi/sw.h @@ -249,7 +249,7 @@ namespace GAPI { void resize() { delete[] swDepth; - swDepth = new DepthSW[Core::width * Core::height]; + //swDepth = new DepthSW[Core::width * Core::height]; } inline mat4::ProjRange getProjRange() { diff --git a/src/platform/gba/Makefile b/src/platform/gba/Makefile_gba similarity index 99% rename from src/platform/gba/Makefile rename to src/platform/gba/Makefile_gba index 2c9c2d0..0fdc1ec 100644 --- a/src/platform/gba/Makefile +++ b/src/platform/gba/Makefile_gba @@ -32,7 +32,7 @@ MUSIC := #--------------------------------------------------------------------------------- ARCH := -mthumb -mthumb-interwork -CFLAGS := -g -Wall -O3\ +CFLAGS := -g -Wall -O3 -D__GBA__\ -mcpu=arm7tdmi -mtune=arm7tdmi\ -fomit-frame-pointer\ -ffast-math\ diff --git a/src/platform/gba/Makefile_tns b/src/platform/gba/Makefile_tns new file mode 100644 index 0000000..e60cf91 --- /dev/null +++ b/src/platform/gba/Makefile_tns @@ -0,0 +1,49 @@ +DEBUG = FALSE + +GCC = nspire-gcc +AS = nspire-as +GXX = nspire-g++ +LD = nspire-ld +GENZEHN = genzehn + +GCCFLAGS = -marm -march=armv5te -mtune=arm926ej-s -std=c++11 -flto -ffast-math -fomit-frame-pointer -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -D__TNS__ -I../../ +LDFLAGS = -Wl,--gc-sections -Wl,--as-needed -flto -Wno-alloc-size-larger-than +ZEHNFLAGS = --name "OpenLara" + +ifeq ($(DEBUG),FALSE) + GCCFLAGS += -Ofast +else + GCCFLAGS += -O0 -g +endif + +OBJS = $(patsubst %.c, %.o, $(shell find . -name \*.c)) +OBJS += $(patsubst %.cpp, %.o, $(shell find . -name \*.cpp)) +OBJS += $(patsubst %.s, %.o, $(shell find . -name \*.s)) +EXE = OpenLara +DISTDIR = . +vpath %.tns $(DISTDIR) +vpath %.elf $(DISTDIR) + +all: $(EXE).prg.tns + +%.o: %.c + $(GCC) $(GCCFLAGS) -c $< + +%.o: %.cpp + $(GXX) $(GCCFLAGS) -c $< + +%.o: %.s + $(AS) -c $< + +$(EXE).elf: $(OBJS) + mkdir -p $(DISTDIR) + $(LD) $^ -o $(DISTDIR)/$@ $(LDFLAGS) + +$(EXE).tns: $(EXE).elf + $(GENZEHN) --input $(DISTDIR)/$^ --output $(DISTDIR)/$@ $(ZEHNFLAGS) + +$(EXE).prg.tns: $(EXE).tns + make-prg $(DISTDIR)/$^ $(DISTDIR)/$@ + +clean: + rm -f *.o $(DISTDIR)/$(EXE).tns $(DISTDIR)/$(EXE).elf $(DISTDIR)/$(EXE).prg.tns diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 1632596..8c384db 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -1,19 +1,21 @@ #ifndef H_COMMON #define H_COMMON -#ifdef _WIN32 -#define _CRT_SECURE_NO_WARNINGS -#include -#else -#include -#include -#include -#include -#include -#include -#include -#include -#include +#if defined(_WIN32) + #define _CRT_SECURE_NO_WARNINGS + #include +#elif defined(__GBA__) + #include + #include + #include + #include + #include + #include + #include + #include + #include +#elif defined(__TNS__) + #include #endif #include @@ -22,29 +24,47 @@ #include #include -#define USE_MODE_5 //#define DEBUG_OVERDRAW //#define DEBUG_FACES +//#define USE_MODE_5 +//#define USE_MODE_4 + #define SCALE 1 -#ifdef USE_MODE_5 - #define WIDTH 160 - #define HEIGHT 128 - #define FRAME_WIDTH 160 - #define FRAME_HEIGHT 128 - #define PIXEL_SIZE 1 -#else // MODE_4 - #define WIDTH 240 - #define HEIGHT 160 +#if defined(__TNS__) + #define WIDTH SCREEN_WIDTH + #define HEIGHT SCREEN_HEIGHT #define FRAME_WIDTH (WIDTH/SCALE) #define FRAME_HEIGHT (HEIGHT/SCALE) - #define PIXEL_SIZE 2 + #define FOV_SHIFT 8 +#else + #ifdef USE_MODE_5 + #define WIDTH 160 + #define HEIGHT 128 + #define FRAME_WIDTH 160 + #define FRAME_HEIGHT 128 + #define FOV_SHIFT 7 + #elif USE_MODE_4 + #define WIDTH 240 + #define HEIGHT 160 + #define FRAME_WIDTH (WIDTH/SCALE) + #define FRAME_HEIGHT (HEIGHT/SCALE) + #define FOV_SHIFT 7 + #else + #error + #endif #endif -#ifdef _WIN32 - #define INLINE inline +#ifdef USE_MODE_5 + #define PIXEL_SIZE 1 #else + #define PIXEL_SIZE 2 +#endif + +#if defined(_WIN32) + #define INLINE inline +#elif defined(__GBA__) || defined(__TNS__) #define INLINE __attribute__((always_inline)) inline #endif @@ -63,13 +83,13 @@ typedef int16 Index; #define DEG2RAD (PI / 180.0f) #define RAD2DEG (180.0f / PI) -#ifdef _WIN32 +#if defined(_WIN32) #define IWRAM_CODE #define EWRAM_DATA #define dmaCopy(src,dst,size) memcpy(dst,src,size) #define ALIGN4 -#else +#elif defined(__GBA__) #define ALIGN4 __attribute__ ((aligned (4))) // TODO profiling @@ -91,6 +111,18 @@ typedef int16 Index; REG_TM2CNT= 0; return (REG_TM3D<<16)|REG_TM2D; } +#elif defined(__TNS__) + #define IWRAM_CODE + #define EWRAM_DATA + + #define dmaCopy(src,dst,size) memcpy(dst,src,size) + + #define ALIGN4 __attribute__ ((aligned (4))) + + void SetPalette(unsigned short* palette); + + INLINE void profile_start() {} + INLINE uint32 profile_stop() { return 0; } #endif enum InputKey { @@ -289,7 +321,6 @@ struct Face { }; #define FIXED_SHIFT 14 -#define FOV_SHIFT (7 - (SCALE - 1)) #define MAX_MATRICES 8 #define MAX_MODELS 64 @@ -339,4 +370,4 @@ void readLevel(const uint8 *data); const Room::Sector* getSector(int32 roomIndex, int32 x, int32 z); int32 getRoomIndex(int32 roomIndex, const vec3i &pos); -#endif \ No newline at end of file +#endif diff --git a/src/platform/gba/level.h b/src/platform/gba/level.h index 433833f..ba94611 100644 --- a/src/platform/gba/level.h +++ b/src/platform/gba/level.h @@ -130,16 +130,22 @@ void readLevel(const uint8 *data) { // TODO non-hardcode level loader, added *_O const uint8* p = f_palette; - for (int i = 0; i < 256; i++) { + for (int i = 0; i < 256; i++) + { + #if defined(_WIN32) || defined(__GBA__) palette[i] = (p[0] >> 1) | ((p[1] >> 1) << 5) | ((p[2] >> 1) << 10); + #elif defined(__TNS__) + palette[i] = (p[2] >> 1) | ((p[1] >> 1) << 5) | ((p[0] >> 1) << 10); + #endif p += 3; } -#ifndef _WIN32 +#if defined(__GBA__) || defined(__TNS__) #ifndef USE_MODE_5 SetPalette(palette); #endif #endif + // prepare models for (uint32 i = 0; i < modelsCount; i++) { dmaCopy(modelsPtr, models + i, sizeof(Model)); // sizeof(Model) is faster than FILE_MODEL_SIZE diff --git a/src/platform/gba/main.cpp b/src/platform/gba/main.cpp index b379c72..9ddc25e 100644 --- a/src/platform/gba/main.cpp +++ b/src/platform/gba/main.cpp @@ -1,24 +1,10 @@ -#ifndef _WIN32 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "LEVEL1_PHD.h" -#endif - //#define PROFILE #include "common.h" #include "level.h" #include "camera.h" -#ifdef _WIN32 +#if defined(_WIN32) uint8* LEVEL1_PHD; uint32 SCREEN[WIDTH * HEIGHT]; @@ -26,8 +12,69 @@ extern uint8 fb[WIDTH * HEIGHT * 2]; #define WND_SCALE 4 -#else +#elif defined(__GBA__) + #include "LEVEL1_PHD.h" + extern uint32 fb; +#elif defined(__TNS__) + uint8* LEVEL1_PHD; + + extern uint8 fb[WIDTH * HEIGHT]; + + unsigned int osTime; + volatile unsigned int *timerBUS; + volatile unsigned int *timerCLK; + volatile unsigned int *timerCTR; + volatile unsigned int *timerDIV; + + void timerInit() + { + timerBUS = (unsigned int*)0x900B0018; + timerCLK = (unsigned int*)0x900C0004; + timerCTR = (unsigned int*)0x900C0008; + timerDIV = (unsigned int*)0x900C0080; + + *timerBUS &= ~(1 << 11); + *timerDIV = 0x0A; + *timerCTR = 0x82; + + osTime = *timerCLK; + } + + int GetTickCount() + { + return (osTime - *timerCLK) / 33; + } + + void SetPalette(unsigned short* palette) + { + unsigned short *palReg = (unsigned short*)0xC0000200; + memcpy(palReg, palette, 256 * 2); + } + + touchpad_info_t* touchInfo; + touchpad_report_t touchReport; + uint8 inputData[0x20]; + + void inputInit() + { + touchInfo = is_touchpad ? touchpad_getinfo() : NULL; + } + + void inputUpdate() + { + if (touchInfo) + { + touchpad_scan(&touchReport); + } + + memcpy(inputData, (void*)0x900E0000, 0x20); + } + + bool keyDown(const t_key &key) + { + return (*(short*)(inputData + key.tpad_row)) & key.tpad_col; + } #endif bool keys[IK_MAX] = {}; @@ -42,7 +89,7 @@ void update(int32 frames) { } } -#ifdef WIN32 +#if defined(_WIN32) extern Vertex gVertices[MAX_VERTICES]; INLINE int32 classify(const Vertex* v) { @@ -127,7 +174,7 @@ void render() { drawNumber(fps, FRAME_WIDTH, 16); } -#ifdef _WIN32 +#if defined(_WIN32) HDC hDC; void blit() { @@ -187,9 +234,20 @@ void vblank() { } int main(void) { -#ifdef _WIN32 +#if defined(_WIN32) || defined(__TNS__) { - FILE *f = fopen("data/LEVEL1.PHD", "rb"); + #if defined(_WIN32) + FILE *f = fopen("data/LEVEL1.PHD", "rb"); + #elif defined(__TNS__) + FILE *f = fopen("/documents/OpenLara/LEVEL1.PHD.tns", "rb"); + #else + #error + #endif + + if (!f) { + return 0; + } + fseek(f, 0, SEEK_END); int32 size = ftell(f); fseek(f, 0, SEEK_SET); @@ -197,7 +255,7 @@ int main(void) { fread(LEVEL1_PHD, 1, size, f); fclose(f); } -#else +#elif defined(__GBA__) // set low latency mode via WAITCNT register (thanks to GValiente) #define BIT_SET(y, flag) (y |= (flag)) #define REG_WAITCNT_NV *(u16*)(REG_BASE + 0x0204) @@ -209,7 +267,7 @@ int main(void) { readLevel(LEVEL1_PHD); -#ifdef _WIN32 +#if defined(_WIN32) RECT r = { 0, 0, 240 * WND_SCALE, 160 * WND_SCALE }; AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, false); @@ -243,7 +301,7 @@ int main(void) { } } while (msg.message != WM_QUIT); -#else +#elif defined(__GBA__) irqInit(); irqSet(IRQ_VBLANK, vblank); irqEnable(IRQ_VBLANK); @@ -306,5 +364,67 @@ int main(void) { } } +#elif defined(__TNS__) + if (!has_colors) + return 0; + + lcd_init(SCR_320x240_8); + + timerInit(); + inputInit(); + + int startTime = GetTickCount(); + int lastTime = -15; + int fpsTime = startTime; + + memset(keys, 0, sizeof(keys)); + + while (1) + { + inputUpdate(); + + if (keyDown(KEY_NSPIRE_ESC)) + { + break; + } + + if (touchInfo && touchReport.contact) + { + float tx = float(touchReport.x) / float(touchInfo->width) * 2.0f - 1.0f; + float ty = float(touchReport.y) / float(touchInfo->height) * 2.0f - 1.0f; + + keys[IK_LEFT] = tx < -0.5f; + keys[IK_RIGHT] = tx > 0.5f; + keys[IK_UP] = ty > 0.5f; + keys[IK_DOWN] = ty < -0.5f; + } else { + keys[IK_LEFT] = + keys[IK_RIGHT] = + keys[IK_UP] = + keys[IK_DOWN] = false; + } + + keys[IK_A] = keyDown(KEY_NSPIRE_2); + keys[IK_B] = keyDown(KEY_NSPIRE_3); + keys[IK_L] = keyDown(KEY_NSPIRE_7); + keys[IK_R] = keyDown(KEY_NSPIRE_9); + + int time = GetTickCount() - startTime; + update((time - lastTime) / 16); + lastTime = time; + + render(); + + lcd_blit(fb, SCR_320x240_8); + //msleep(16); + + fpsCounter++; + if (lastTime - fpsTime >= 1000) + { + fps = fpsCounter; + fpsCounter = 0; + fpsTime = lastTime - ((lastTime - fpsTime) - 1000); + } + } #endif } diff --git a/src/platform/gba/render.iwram.cpp b/src/platform/gba/render.iwram.cpp index 03152ba..7313e22 100644 --- a/src/platform/gba/render.iwram.cpp +++ b/src/platform/gba/render.iwram.cpp @@ -4,10 +4,12 @@ uint16 divTable[DIV_TABLE_SIZE]; -#ifdef _WIN32 +#if defined(_WIN32) uint8 fb[WIDTH * HEIGHT * 2]; -#else +#elif defined(__GBA__) uint32 fb = VRAM; +#elif defined(__TNS__) + uint8 fb[WIDTH * HEIGHT]; #endif #define FixedInvS(x) ((x < 0) ? -divTable[abs(x)] : divTable[x]) @@ -194,7 +196,7 @@ Matrix& matrixGet() { } void matrixPush() { -#ifdef _WIN32 +#if defined(_WIN32) if (matrixStackIndex >= MAX_MATRICES - 1) { DebugBreak(); return; @@ -206,7 +208,7 @@ void matrixPush() { } void matrixPop() { -#ifdef _WIN32 +#if defined(_WIN32) if (matrixStackIndex <= 0) { DebugBreak(); return; @@ -292,7 +294,7 @@ INLINE int32 classify(const Vertex* v) { } void transform(const vec3s &v, int32 vg) { -#ifdef _WIN32 +#if defined(_WIN32) if (gVerticesCount >= MAX_VERTICES) { DebugBreak(); return; @@ -326,12 +328,12 @@ void transform(const vec3s &v, int32 vg) { z >>= FOV_SHIFT; -#if 1 +#if 0 x >>= (10 + SCALE); y >>= (10 + SCALE); z >>= (10 + SCALE); - #ifdef WIN32 + #if defined(_WIN32) if (abs(z) >= DIV_TABLE_SIZE) { DebugBreak(); } @@ -593,7 +595,7 @@ struct Edge { }; INLINE void scanlineG(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uint8 palIndex, uint32 g, uint32 dgdx) { - #ifdef USE_MODE_5 + #if defined(USE_MODE_5) uint16* pixel = buffer + x1; if (x1 & 1) { @@ -621,7 +623,7 @@ INLINE void scanlineG(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uin if (x2 & 1) { *pixel++ = FETCH_G_PAL(palIndex); } - #else + #elif defined(USE_MODE_4) if (x1 & 1) { uint16 &p = *(uint16*)((uint8*)buffer + x1 - 1); @@ -671,11 +673,60 @@ INLINE void scanlineG(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uin { *pixel = (*pixel & 0xFF00) | FETCH_G(palIndex); } + #else + if (x1 & 1) + { + *((uint8*)buffer + x1) = FETCH_G(palIndex); + g += dgdx; + x1++; + } + + int32 width = (x2 - x1) >> 1; + uint16* pixel = (uint16*)((uint8*)buffer + x1); + + dgdx <<= 1; + + if (width && (x1 & 3)) + { + uint16 p = FETCH_G(palIndex); + *pixel++ = p | (FETCH_G(palIndex) << 8); + + g += dgdx; + + width--; + } + + while (width-- > 0) + { + uint32 p = FETCH_G(palIndex); + p |= (FETCH_G(palIndex) << 8); + + g += dgdx; + + if (width-- > 0) + { + p |= (FETCH_G(palIndex) << 16); + p |= (FETCH_G(palIndex) << 24); + + g += dgdx; + + *(uint32*)pixel = p; + pixel += 2; + } else { + *(uint16*)pixel = p; + pixel += 1; + } + } + + if (x2 & 1) + { + *((uint8*)pixel) = FETCH_G(palIndex); + } #endif } INLINE void scanlineGT(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, uint32 g, uint32 t, uint32 dgdx, uint32 dtdx) { - #ifdef USE_MODE_5 + #if defined(USE_MODE_5) uint16* pixel = buffer + x1; if (x1 & 1) { @@ -708,7 +759,7 @@ INLINE void scanlineGT(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, ui *pixel++ = FETCH_GT_PAL(); } - #else + #elif defined(USE_MODE_4) if (x1 & 1) { @@ -766,6 +817,62 @@ INLINE void scanlineGT(const uint8 *tile, uint16* buffer, int32 x1, int32 x2, ui { *pixel = (*pixel & 0xFF00) | FETCH_GT(); } + #else + if (x1 & 1) + { + *((uint8*)buffer + x1) = FETCH_GT(); + t += dtdx; + g += dgdx; + x1++; + } + + int32 width = (x2 - x1) >> 1; + uint16* pixel = (uint16*)((uint8*)buffer + x1); + + dgdx <<= 1; + + if (width && (x1 & 3)) + { + uint16 p = FETCH_GT(); + t += dtdx; + *pixel++ = p | (FETCH_GT() << 8); + t += dtdx; + + g += dgdx; + + width--; + } + + while (width-- > 0) + { + uint32 p = FETCH_GT(); + t += dtdx; + p |= (FETCH_GT() << 8); + t += dtdx; + + g += dgdx; + + if (width-- > 0) + { + p |= (FETCH_GT() << 16); + t += dtdx; + p |= (FETCH_GT() << 24); + t += dtdx; + + g += dgdx; + + *(uint32*)pixel = p; + pixel += 2; + } else { + *(uint16*)pixel = p; + pixel += 1; + } + } + + if (x2 & 1) + { + *((uint8*)pixel) = FETCH_GT(); + } #endif } @@ -1066,7 +1173,7 @@ void drawGlyph(const Sprite *sprite, int32 x, int32 y) { } void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { -#ifdef _WIN32 +#if defined(_WIN32) if (gFacesCount >= MAX_FACES) { DebugBreak(); } @@ -1104,7 +1211,7 @@ void faceAddQuad(uint16 flags, const Index* indices, int32 startVertex) { } void faceAddTriangle(uint16 flags, const Index* indices, int32 startVertex) { -#ifdef _WIN32 +#if defined(_WIN32) if (gFacesCount >= MAX_FACES) { DebugBreak(); } @@ -1227,9 +1334,9 @@ void initRender() { } void dmaClear(uint32 *dst, uint32 count) { -#ifdef WIN32 +#if defined(_WIN32) || defined(__TNS__) memset(dst, 0, count * 4); -#else +#elif defined(__GBA__) vu32 value = 0; REG_DMA3SAD = (vu32)&value; REG_DMA3DAD = (vu32)dst; @@ -1238,9 +1345,5 @@ void dmaClear(uint32 *dst, uint32 count) { } void clear() { -#ifdef USE_MODE_5 dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> PIXEL_SIZE); -#else - dmaClear((uint32*)fb, (WIDTH * HEIGHT) >> PIXEL_SIZE); -#endif -} \ No newline at end of file +} diff --git a/src/platform/tns/main.cpp b/src/platform/tns/main.cpp index 04c0e2f..61fa789 100644 --- a/src/platform/tns/main.cpp +++ b/src/platform/tns/main.cpp @@ -52,7 +52,7 @@ bool osJoyReady(int index) void osJoyVibrate(int index, float L, float R) {} -void joyUpdate() +bool inputUpdate() { Input::setJoyPos(0, jkL, vec2(0.0f, 0.0f)); Input::setJoyPos(0, jkR, vec2(0.0f, 0.0f)); @@ -70,21 +70,23 @@ void joyUpdate() } } - Input::setJoyDown(0, jkA, isKeyPressed(KEY_NSPIRE_2)); - Input::setJoyDown(0, jkB, isKeyPressed(KEY_NSPIRE_3)); - Input::setJoyDown(0, jkX, isKeyPressed(KEY_NSPIRE_5)); - Input::setJoyDown(0, jkY, isKeyPressed(KEY_NSPIRE_6)); - Input::setJoyDown(0, jkLB, isKeyPressed(KEY_NSPIRE_7)); - Input::setJoyDown(0, jkRB, isKeyPressed(KEY_NSPIRE_9)); + uint8 inputData[0x20]; + memcpy(inputData, (void*)0x900E0000, 0x20); + + #define IS_KEY_DOWN(key) ((*(short*)(inputData + key.tpad_row)) & key.tpad_col) + + Input::setJoyDown(0, jkA, IS_KEY_DOWN(KEY_NSPIRE_2)); + Input::setJoyDown(0, jkB, IS_KEY_DOWN(KEY_NSPIRE_3)); + Input::setJoyDown(0, jkX, IS_KEY_DOWN(KEY_NSPIRE_5)); + Input::setJoyDown(0, jkY, IS_KEY_DOWN(KEY_NSPIRE_6)); + Input::setJoyDown(0, jkLB, IS_KEY_DOWN(KEY_NSPIRE_7)); + Input::setJoyDown(0, jkRB, IS_KEY_DOWN(KEY_NSPIRE_9)); Input::setJoyDown(0, jkL, false); Input::setJoyDown(0, jkR, false); - Input::setJoyDown(0, jkStart, isKeyPressed(KEY_NSPIRE_ENTER)); - Input::setJoyDown(0, jkSelect, isKeyPressed(KEY_NSPIRE_MENU)); + Input::setJoyDown(0, jkStart, IS_KEY_DOWN(KEY_NSPIRE_ENTER)); + Input::setJoyDown(0, jkSelect, IS_KEY_DOWN(KEY_NSPIRE_MENU)); - Input::setJoyDown(0, jkUp, isKeyPressed(KEY_NSPIRE_UP) || isKeyPressed(KEY_NSPIRE_LEFTUP) || isKeyPressed(KEY_NSPIRE_UPRIGHT)); - Input::setJoyDown(0, jkDown, isKeyPressed(KEY_NSPIRE_DOWN) || isKeyPressed(KEY_NSPIRE_RIGHTDOWN) || isKeyPressed(KEY_NSPIRE_DOWNLEFT)); - Input::setJoyDown(0, jkLeft, isKeyPressed(KEY_NSPIRE_LEFT) || isKeyPressed(KEY_NSPIRE_LEFTUP) || isKeyPressed(KEY_NSPIRE_DOWNLEFT)); - Input::setJoyDown(0, jkRight, isKeyPressed(KEY_NSPIRE_RIGHT) || isKeyPressed(KEY_NSPIRE_RIGHTDOWN) || isKeyPressed(KEY_NSPIRE_UPRIGHT)); + return !IS_KEY_DOWN(KEY_NSPIRE_ESC); } unsigned short* osPalette() @@ -113,7 +115,7 @@ int main(void) Core::width = SCREEN_WIDTH; Core::height = SCREEN_HEIGHT; - GAPI::swColor = new GAPI::ColorSW[SCREEN_WIDTH * SCREEN_HEIGHT]; + GAPI::swColor = new GAPI::ColorSW[Core::width * Core::height]; GAPI::resize(); Sound::channelsCount = 0; @@ -122,7 +124,10 @@ int main(void) while (!Core::isQuit) { - joyUpdate(); + if (!inputUpdate()) + { + Core::quit(); + } if (Game::update()) { @@ -130,11 +135,6 @@ int main(void) lcd_blit(GAPI::swColor, SCR_320x240_565); } - - if (isKeyPressed(KEY_NSPIRE_ESC)) - { - Core::quit(); - } } delete[] GAPI::swColor; From d07808e93c0887c630e7ac0b621d592edfe20d2d Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Tue, 29 Dec 2020 02:24:26 +0300 Subject: [PATCH 42/58] GBA fix build --- src/platform/gba/{Makefile_gba => Makefile} | 0 src/platform/gba/common.h | 8 ++++++-- 2 files changed, 6 insertions(+), 2 deletions(-) rename src/platform/gba/{Makefile_gba => Makefile} (100%) diff --git a/src/platform/gba/Makefile_gba b/src/platform/gba/Makefile similarity index 100% rename from src/platform/gba/Makefile_gba rename to src/platform/gba/Makefile diff --git a/src/platform/gba/common.h b/src/platform/gba/common.h index 8c384db..43e2a84 100644 --- a/src/platform/gba/common.h +++ b/src/platform/gba/common.h @@ -27,8 +27,12 @@ //#define DEBUG_OVERDRAW //#define DEBUG_FACES -//#define USE_MODE_5 -//#define USE_MODE_4 +#if defined(_WIN32) + #define USE_MODE_5 1 +#elif defined(__GBA__) + #define USE_MODE_5 1 + //#define USE_MODE_4 1 +#endif #define SCALE 1 From 608f75e71d73197a1a74c5ea170c7f79e3686e26 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 30 Dec 2020 03:53:43 +0300 Subject: [PATCH 43/58] fixed #282 Switch fix input for new firmware version --- src/platform/nx/main.cpp | 55 +++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/src/platform/nx/main.cpp b/src/platform/nx/main.cpp index e70226d..7070fd6 100644 --- a/src/platform/nx/main.cpp +++ b/src/platform/nx/main.cpp @@ -96,7 +96,7 @@ EGLContext context; NWindow *window; void configureResolution() { - if (appletGetOperationMode() == AppletOperationMode_Docked) { + if (appletGetOperationMode() == AppletOperationMode_Console) { Core::width = 1920; Core::height = 1080; } @@ -184,19 +184,19 @@ void osJoyVibrate(int index, float L, float R) { bool joyIsSplit; int joySplitTime; +PadState pads[2]; void joySplit(bool split) { joyIsSplit = split; joySplitTime = Core::getTime(); + if (split) { - hidSetNpadJoyHoldType(HidJoyHoldType_Horizontal); - hidSetNpadJoyAssignmentModeSingleByDefault(CONTROLLER_PLAYER_1); - hidSetNpadJoyAssignmentModeSingleByDefault(CONTROLLER_PLAYER_2); + hidSetNpadJoyAssignmentModeSingle(HidNpadIdType_No1, HidNpadJoyDeviceType_Left); + hidSetNpadJoyAssignmentModeSingle(HidNpadIdType_No2, HidNpadJoyDeviceType_Right); } else { - hidSetNpadJoyHoldType(HidJoyHoldType_Default); - hidSetNpadJoyAssignmentModeDual(CONTROLLER_PLAYER_1); - hidSetNpadJoyAssignmentModeDual(CONTROLLER_PLAYER_2); - hidMergeSingleJoyAsDualJoy(CONTROLLER_PLAYER_1, CONTROLLER_PLAYER_2); + hidSetNpadJoyAssignmentModeDual(HidNpadIdType_No1); + hidSetNpadJoyAssignmentModeDual(HidNpadIdType_No2); + hidMergeSingleJoyAsDualJoy(HidNpadIdType_No1, HidNpadIdType_No2); if (Game::level && Game::level->players[1]) { Game::level->addPlayer(1); // add existing player == remove player @@ -205,6 +205,12 @@ void joySplit(bool split) { } void joyInit() { + hidSetNpadJoyHoldType(HidNpadJoyHoldType_Horizontal); + + padConfigureInput(2, HidNpadStyleSet_NpadStandard); + padInitialize(&pads[0], HidNpadIdType_No1, HidNpadIdType_Handheld); + padInitialize(&pads[1], HidNpadIdType_No2, HidNpadIdType_Handheld); + joySplit(false); } @@ -215,18 +221,12 @@ void joyUpdate() { KEY_DLEFT, KEY_DRIGHT, KEY_DUP, KEY_DDOWN, }; - if (hidGetHandheldMode() && joyIsSplit) { - joySplit(false); - } - - hidScanInput(); - bool waitForSplit = false; for (int i = 0; i < (joyIsSplit ? 2 : 1); i++) { - HidControllerID ctrl = (i == 0 ? CONTROLLER_P1_AUTO : CONTROLLER_PLAYER_2); + padUpdate(&pads[i]); - u64 mask = hidKeysDown(ctrl) | hidKeysHeld(ctrl); + u64 mask = padGetButtonsDown(&pads[i]) | padGetButtons(&pads[i]); for (int j = 1; j < jkMAX; j++) { if (j != jkSelect && j != jkStart) { @@ -237,15 +237,14 @@ void joyUpdate() { Input::setJoyDown(i, jkSelect, (mask & (KEY_MINUS | KEY_PLUS)) != 0); Input::setJoyDown(i, jkStart, (mask & (KEY_LSTICK | KEY_RSTICK)) != 0); - JoystickPosition sL, sR; + HidAnalogStickState sL = padGetStickPos(&pads[i], 0); + HidAnalogStickState sR = padGetStickPos(&pads[i], 1); - hidJoystickRead(&sL, ctrl, JOYSTICK_LEFT); - hidJoystickRead(&sR, ctrl, JOYSTICK_RIGHT); - Input::setJoyPos(i, jkL, vec2(float(sL.dx), float(-sL.dy)) / 32767.0f); - Input::setJoyPos(i, jkR, vec2(float(sR.dx), float(-sR.dy)) / 32767.0f); + Input::setJoyPos(i, jkL, vec2(float(sL.x), float(-sL.y)) / 32767.0f); + Input::setJoyPos(i, jkR, vec2(float(sR.x), float(-sR.y)) / 32767.0f); if ((mask & (KEY_L | KEY_R)) == (KEY_L | KEY_R)) { // hold L and R to split/merge joy-con's - if (joySplitTime + 1000 < Core::getTime()) { // 1 sec timer + if (Core::getTime() - joySplitTime > 1000) { // 1 sec timer joySplit(!joyIsSplit); } waitForSplit = true; @@ -258,7 +257,8 @@ void joyUpdate() { } void touchUpdate() { - int touchesCount = hidTouchCount(); + HidTouchScreenState state; + hidGetTouchScreenStates(&state, 1); bool touchState[COUNT(Input::touch)]; @@ -266,14 +266,11 @@ void touchUpdate() { touchState[i] = Input::down[ikTouchA + i]; } - for (int i = 0; i < touchesCount; i++) { - touchPosition touch; - hidTouchRead(&touch, i); - - InputKey key = Input::getTouch(touch.id); + for (int i = 0; i < state.count; i++) { + InputKey key = Input::getTouch(state.touches[i].finger_id); if (key == ikNone) continue; - Input::setPos(key, vec2(float(touch.px), float(touch.py))); + Input::setPos(key, vec2(float(state.touches[i].x), float(state.touches[i].y))); Input::setDown(key, true); touchState[key - ikTouchA] = false; From 26d226a6df32985cf2abf0c6597a845b058e1aa3 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Wed, 30 Dec 2020 04:56:03 +0300 Subject: [PATCH 44/58] fix windows build --- src/json.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/json.h b/src/json.h index a433e3f..e569cfc 100644 --- a/src/json.h +++ b/src/json.h @@ -23,7 +23,7 @@ struct JSON { Type type; JSON(Type type, const char *name = NULL) : nodes(NULL), prev(NULL), next(NULL), type(type) { - this->name = String::copy(name); + this->name = StrUtils::copy(name); } ~JSON() { @@ -66,7 +66,7 @@ struct JSON { void add(const char *name, const char *value) { - add(STRING, name)->sValue = String::copy(value); + add(STRING, name)->sValue = StrUtils::copy(value); } void add(const char *name, int value) { From 87bb787032b2f278d9ff8c5f508b6fd40ff47571 Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 3 Jan 2021 16:39:21 +0300 Subject: [PATCH 45/58] Linux AZERTY keyboard layout support --- src/format.h | 2 +- src/platform/nix/main.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/format.h b/src/format.h index e1160d5..3ae93de 100644 --- a/src/format.h +++ b/src/format.h @@ -6301,7 +6301,7 @@ namespace TR { for (int j = 0; j < animTex.count; j++) animTex.textures[j] = *(ptr++); } - delete animTexBlock; + delete[] animTexBlock; } if (version & (VER_TR4 | VER_TR5)) { diff --git a/src/platform/nix/main.cpp b/src/platform/nix/main.cpp index 46e1749..8696566 100644 --- a/src/platform/nix/main.cpp +++ b/src/platform/nix/main.cpp @@ -78,7 +78,7 @@ void sndFree() { } // Input -InputKey keyToInputKey(XKeyEvent event) { +InputKey keyToInputKey(Display *dpy, XKeyEvent event) { KeySym code = XLookupKeysym(&event, 0); if (code == XK_Shift_R) code = XK_Shift_L; @@ -96,7 +96,7 @@ InputKey keyToInputKey(XKeyEvent event) { }; for (int i = 0; i < COUNT(codes); i++) { - if (codes[i] == code) { + if (XKeysymToKeycode(dpy, codes[i]) == event.keycode) { return (InputKey)(ikLeft + i); } } @@ -338,7 +338,7 @@ void toggle_fullscreen(Display* dpy, Window win) { XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureNotifyMask, &xev); } -void WndProc(const XEvent &e,Display*dpy,Window wnd) { +void WndProc(const XEvent &e, Display* dpy, Window wnd) { switch (e.type) { case ConfigureNotify : Core::width = e.xconfigure.width; @@ -350,7 +350,7 @@ void WndProc(const XEvent &e,Display*dpy,Window wnd) { toggle_fullscreen(dpy,wnd); break; } - Input::setDown(keyToInputKey(e.xkey), e.type == KeyPress); + Input::setDown(keyToInputKey(dpy, e.xkey), e.type == KeyPress); break; case ButtonPress : case ButtonRelease : { @@ -455,7 +455,7 @@ int main(int argc, char **argv) { XNextEvent(dpy, &event); if (event.type == ClientMessage && *event.xclient.data.l == WM_DELETE_WINDOW) Core::quit(); - WndProc(event,dpy,wnd); + WndProc(event, dpy, wnd); } else { joyUpdate(); bool updated = Game::update(); From 75118aa874d0018145d5ab33a676b5e9a733a1ae Mon Sep 17 00:00:00 2001 From: Viktor Varga Date: Fri, 8 Jan 2021 02:35:13 +0100 Subject: [PATCH 46/58] Adding hungarian translation (#289) * Adding hungarian translation * mistake in hungarian corrected --- src/inventory.h | 2 +- src/lang.h | 11 +- src/lang/hu.h | 359 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 368 insertions(+), 4 deletions(-) create mode 100644 src/lang/hu.h diff --git a/src/inventory.h b/src/inventory.h index aa5043f..4cb4f34 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -190,7 +190,7 @@ static const OptionItem optSound[] = { OptionItem( OptionItem::TYPE_PARAM, STR_REVERBERATION, SETTINGS( audio.reverb ), STR_OFF, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SUBTITLES, SETTINGS( audio.subtitles ), STR_OFF, 0, 1 ), #ifndef FFP - OptionItem( OptionItem::TYPE_PARAM, STR_OPT_LANGUAGE, SETTINGS( audio.language ), STR_LANG_EN, 0, STR_LANG_CN - STR_LANG_EN ), + OptionItem( OptionItem::TYPE_PARAM, STR_OPT_LANGUAGE, SETTINGS( audio.language ), STR_LANG_EN, 0, STR_LANG_HU - STR_LANG_EN ), #endif }; diff --git a/src/lang.h b/src/lang.h index 96baba1..2c0738e 100644 --- a/src/lang.h +++ b/src/lang.h @@ -38,6 +38,7 @@ enum StringID { , STR_LANG_FI , STR_LANG_CZ , STR_LANG_CN + , STR_LANG_HU , STR_APPLY , STR_GAMEPAD_1 , STR_GAMEPAD_2 @@ -271,9 +272,10 @@ enum StringID { , "\x11\x01\x22\x01\x0F\x01\x0F\x01\x0E\x01\x06\x01\x04\x01\x0C\x01\x0B\xFF\xFF" \ , "Suomi" \ , "{Cesky" \ - , "\x11\x02\x8A\x02\x6C\x01\x54\x03\x02\xFF\xFF" + , "\x11\x02\x8A\x02\x6C\x01\x54\x03\x02\xFF\xFF" \ + , "Magyar" -#define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN" +#define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN", "_HU" #define STR_KEYS \ "NONE", "LEFT", "RIGHT", "UP", "DOWN", "SPACE", "TAB", "ENTER", "ESCAPE", "SHIFT", "CTRL", "ALT" \ @@ -320,6 +322,7 @@ const char *helpText = #include "lang/fi.h" #include "lang/cz.h" #include "lang/cn.h" +#include "lang/hu.h" char **STR = NULL; @@ -337,7 +340,8 @@ void ensureLanguage(int lang) { ASSERT(COUNT(STR_FI) == STR_MAX); ASSERT(COUNT(STR_CZ) == STR_MAX); ASSERT(COUNT(STR_CN) == STR_MAX); - + ASSERT(COUNT(STR_HU) == STR_MAX); + lang += STR_LANG_EN; switch (lang) { @@ -353,6 +357,7 @@ void ensureLanguage(int lang) { case STR_LANG_FI : STR = (char**)STR_FI; break; case STR_LANG_CZ : STR = (char**)STR_CZ; break; case STR_LANG_CN : STR = (char**)STR_CN; break; + case STR_LANG_HU : STR = (char**)STR_HU; break; default : STR = (char**)STR_EN; break; } } diff --git a/src/lang/hu.h b/src/lang/hu.h new file mode 100644 index 0000000..d3fbc52 --- /dev/null +++ b/src/lang/hu.h @@ -0,0 +1,359 @@ +#ifndef H_LANG_HU +#define H_LANG_HU + +// Hungarian translation: Varga Viktor +// Comment: Only tilde was used for double for long and u +// Todo to correct this: +// 1. add the " accent glpyh to the end of Russian charset, +// 2. modify the ui.h + +const char *STR_HU[] = { "" +// help + , "Bet~olt)es..." + , "Nyomj H-t a S)ug)ohoz" + , helpText + , "%s@@@" + "~OL)ESEK %d@@" + "FELVETT %d@@" + "TITKOK %d/%d@@" + "SZ~UKS)EGES ID+O %s" + , "J)at)ek ment)ese..." + , "Ment)es k)esz!" + , "MENT)ESI HIBA!" + , "IGEN" + , "NEM" + , "Ki" + , "Be" + , "Ki" + , "Side-By-Side" + , "Anaglyph" + , "Osztott k)eperny+o" + , "VR" + , "Alacsony" + , "K~ozepes" + , "Magas" + , STR_LANGUAGES + , "Alkalmaz" + , "Gamepad 1" + , "Gamepad 2" + , "Gamepad 3" + , "Gamepad 4" + , "Nincs k)esz" + , "1. j)at)ekos" + , "2. j)at)ekos" + , "Nyomj meg egy gombot" + , "%s - Kiv)alaszt" + , "%s - Vissza" +// inventory pages + , "OPCI)OK" + , "T)ARGYLISTA" + , "T)ARGYAK" +// save game page + , "J)at)ek ment)ese?" + , "Aktu)alis poz)ici)o" +// inventory option + , "J)at)ek" + , "T)erk)ep" + , "Ir)anyt+u" + , "Statisztika" + , "Lara otthona" + , "R)eszletess)egi szintek" + , "Hang" + , "Ir)any)it)as" + , "Gamma" +// passport menu + , "J)at)ek bet~olt)ese" + , ")Uj j)at)ek" + , "Szint )ujraind)it)asa" + , "Kil)ep)es a kezd+ok)eperny+oh~oz" + , "Kil)ep)es a j)at)ekb)ol" + , "Szint kiv)alaszt)asa" +// detail options + , "R)eszletek kiv)alaszt)asa" + , "Sz+ur)es" + , "Vil)ag)it)as" + , ")Arny)ekok" + , "V)iz" + , "VSync" + , "Sztere)o" + , "Egyszer+u t)argyak" + , "Felbont)as" + , STR_SCALE +// sound options + , "Hanger+o be)all)it)asa" + , "Visszaver+od)es" + , "Feliratok" + , "Nyelv" +// controls options + , "Ir)any)it)as be)all)it)asa" + , "Billenty+uzet" + , "Gamepad" + , "Vibr)aci)o" + , ")Uj c)elpont" + , "Multi-c)elz)as" + // controls + , "Bal", "Jobb", "Fut)as", "Vissza", "Ugr)as", "S)eta", "Akci)o", "Fegyver el+ov)etel", "N)ez", "Gugol", "L~ok", "Gurul", "T)argylista", "Kezd)es" + , STR_KEYS +// inventory items + , "Ismeretlen" + , "Robban)oanyag" + , "Pisztolyok" + , "Shotgun" + , "Magnumok" + , "Uzik" + , "Pisztoly t~olt)enyek" + , "Shotgun t~olt)enyek" + , "Magnum t~olt)enyek" + , "Uzi t~olt)enyek" + , "Kis Medi pakk" + , "Nagy Medi pakk" + , ")Olomr)ud" + , "Scion" +// keys + , "Kulcs" + , "Ez~ust kulcs" + , "Rozsd)as kulcs" + , "Arany kulcs" + , "Zaf)ir kulcs" + , "Neptunusz kulcs" + , "Atlasz kulcs" + , "Damokl)esz kulcs" + , "Thor kulcs" + , "D)iszes kulcs" +// puzzles + , "Rejtv)eny" + , "Arany szobor" + , "Arany r)ud" + , "Fogasker)ek" + , "Biztos)it)ek" + , "Ankh" + , "H)orusz szeme" + , "Anubisz pecs)etje" + , "Szkarabeusz" + , "Piramis kulcs" +// TR1 subtitles + /* CAFE */ , + "[43500]Mit kell tennie az embernek, ahhoz,@hogy megkapja azt a bizonyos figyelmet?" + "[47500]Neh)ez pontosan megmondani,@de )ugy t+unik j)ol vagy." + "[50000]Nos, nagyszer+u. B)ar az az igazs)ag,@nem )en akarlak." + "[54500]Nem?" + "[55000]Nem. Miss Jacqueline Natla szeretne,@a Natla Technologies-t)ol." + "[59000]Tudod, minden f)enyes@)es sz)ep alkot)oja?" + "[64500]Z)arja le, Larson." + "[66000]H~olgyem." + "[68000]Ezt figyeld, Lara." + "[70500]Hogyan )erinti ez a p)enzt)arc)ad?" + "[73500]Bocs. )En csak a sport)ert j)atszom." + "[76000]Akkor tetszeni fog egy nagy park." + "[78000]Peru. Hatalmas hegyl)ancok, amit fel kell fedezni.@J)egfalak. )Eles szikl)ak. Vad szelek." + "[87500])Es itt van ez a kis csecsebecse:@+osi id+ok misztikus er+ovel rendelkez+o m+ut)argya" + "[92500]eltemetve Qualopec fel nem lelt s)irj)aban." + "[96000]Ez az ami )erdekel." + "[98000]Holnap elmehetsz.@Elfoglalt vagy holnap?" + /* LIFT */ , + "[49000])Athelyezve Szt. Ferenc kolostor)aba, )uj k)is)ert)esek k)inoznak engem." + "[53500]A testv)erek k~ozt az a h)ir j)arja, hogy a kolostor alatt@ker~ult s)irba Tihocan," + "[60000]egyike az elveszett kontinens, Atlantisz,@ legend)as uralkod)oinak," + "[64500])es vele egy~utt fekszik az +o darabja@az Atlantiszi Scion-nak." + "[68000]A med)alt felosztott)ak a h)arom uralkod)o k~oz~ott@" + "[72500]ami hatalmas er+oket f)ekez meg.@Er+ot, ami meghaladja az alkot)o erej)et is." + "[79000]Izzad a l)abam ezekt+ol a lehet+os)egekt+ol,@amik olyan k~ozel )allnak a haland)o )enemhez." + "[85500]Minden este t)ul teszem magam@ezeken a fant)azi)akon, de ez val)oj)aban egy teszt." + "[92000]" + "[93500]Pierre. Nee. Te szem)et." + /* CANYON */ , + "[13500])Epp most h)uztad a szerencsecsont nagyobb v)eg)et." + "[16500]Mizu." + "[17500]D)elut)an." + "[20000]Ott hagytuk Larson-t szelet aratni, mi?" + "[22500]Ha ez a kifejez)es." + "[24000]Nos, a kis nyaral)asi zavarg)asnak most m)ar v)ege." + "[27000]Itt az ideje visszaadni azt, amit ellopt)al t+olem." + "[30000]Pr)ob)aljuk meg az )eteldobozt." + "[32000]" + "[42500]Nos? ~Old meg!" + "[45000]H)e!" + "[48000]" + "[50500]Debilek!" + "[53000]" + "[62500]Gyer~unk." + "[65000]" + "[136000]Mi a fene volt ez?" + "[138000]Mi?" + "[138500]Egyszer+u." + "[140500]Val)osz)in+uleg csak egy hal." + "[142500]Ez egy hal, k~oly~ok." + "[145000]Ember, meg kell tanulnod laz)itani.@Visszamegyek. J~ossz?" + "[152000]" + "[158000])Alland)o..." + "[160000]Itt van." + "[161500]K)eszen )allsz m)ar?" + /* PRISON */ , + "[00001]Nem tehetik ezt!" + "[01500]El)it)elj~uk ~Ont, atlantiszi Natla a b+unei)ert." + "[06000]Hatalmaddal er+oteljesen vissza)el)esei miatt,@ )es mert kiraboltad a mi..." + "[11500]Nem tehetik! )En..." + "[12500]Megsz~untetve a beleegyez)es szabad k~otel)ek)et@amely alatt n)ep~unket ir)any)itj)ak," + "[18500])es megt)amadva Tihocan-t )es engem a sereg~unkkel." + "[23500]A harcosaink t)avoztak a piramisunkb)ol" + "[27000])igy fel tudod haszn)alni a piramist - annak erej)et@a teremt)esre - az esztelen rombol)asodhoz." + "[33500]Esztelen!? N)ezz magadra!" + "[35500]Egyik+ot~oknek sincs egy lelem)enyes@gondolat se a fej)eben." + "[40500]Pazarl)ok!" + "[41500]Csak csin)alj)atok." + "[44000]Tihocan!" + "[45000]Egy szent helyet haszn)alt)al@saj)at ~or~om~odre," + "[49500]mint valami korcs gy)arat." + "[51000]+Ok a t)ul)el+ok. Egy )uj gener)aci)o." + "[54000]Egy lem)esz)arolt halom most." + "[56000])Es te. A pokol torn)ac)ara z)arunk." + "[60000]Az ereid, a sz)ived, a l)abad," + "[64000])es a beteg agyad szil)ardd)a teszi majd a fagyott v)er." + "[70000]~Udv~oz~old az ~or~ok nyugtalans)agod, Natla." + "[73000]Te sem fogsz nyugodni, ak)ar az @)atkozott kontinensed Atlantisz!" + /* 22 */ , + "[04000])Ujra itt?" + "[05500])Es te - a nagy )ujra megnyit)ora, gondolom." + "[09500]Az evol)uci)o bajban van - a term)eszetes szelekci)o m)ara alig )erv)enyes~ul..." + "[13500]Az )uj h)us megjelen)ese fel fogja ism)et gerjeszteni a ter~uleti vit)akat" + "[17500] - meger+os)it )es el+oseg)it minket..." + "[20500]M)eg )uj fajokat is l)etre hozhat." + "[22500]Az evol)uci)o szteroidokon, akkor." + "[24500]Egy seggber)ug)as...@a nyomorult Qualopec-enk )es Tihocan-nak nem voltak ~otletei" + "[29500] - Atlantisz kataklizm)aja az )ert)ektelen gyeng)ek verseny)et s)ujtotta..." + "[33500]visszazuhan)asra k)enyszer)itve +oket )ujra a t)ul)el)es alapjaihoz..." + "[37000]Nem volna szabad )ugy t~ort)ennie." + "[39000]Vagy )igy." + "[40000]A kikel)es 15 m)asodperc m)ulva kezd+odik." + "[43000]Most m)ar k)es+o le)all)itani!" + "[45000]A m+uvelet sz)ive n)elk~ul nem!" + "[47000]Neee!" + "[50000]T)IZ" + "[54000]~OT..." + "[55500]4...3...2..." + "[60000]EGY..." + /* 23 */ , + "[00001]Nos, most m)ar a teljes figyelmem rajtad" + "[02500]- M)egsem vagyok biztos abban, hogy )en is megkaptam a tied." + "[05000]Hell)o?" + "[06000]Elkaplak )es lel+olek, mint egy kuty)at." + "[09000]Term)eszetesen." + "[10000]Te )es az az idi)ota Scion darabod." + "[13000]Annyira szeretn)ed megtartani, hogy kihaszn)alom ezt..." + "[17000]V)arjunk... itt most a m+ut)argyr)ol besz)el~unk?" + "[20000]Egyenesben vagyunk ... eg)eszen ..." + "[22000]Tarts ki - Sajn)alom" + "[24000]- ez csak egy r)esz, mondtad - hol van a t~obbi?" + "[26500]Ms. Natla Pierre Dupont-ot )all)itotta arra a nyomra." + "[29500])Es hol van az?" + "[30500]H)a)a)a. Nem vagy el)eg gyors, hogy utol)erd." + "[34000]Sz)oval azt gondolod, ez a besz)elget)es csak arra van, hogy feltartson?" + "[37000]Nem tudom, hogy a kis ny)ul-b)eka l)abai hov)a vezetik +ot." + "[42000]Meg kell k)erdezned Ms. Natla-t)ol." + "[46000]" + "[51000]K~osz~on~om. Megteszem." + /* 24 */ , "" + /* 25 */ , + "[03500]Itt nyugszik Tihocan" + "[05000]...Atlantisz k)et ur)anak egyike..." + "[10000]Ki a kontinens )atka ut)an is..." + "[13000]...megpr)ob)alt uralkodni ezeken a kop)ar m)as-f~oldeken..." + "[19000]Ki Gyermek n)elk~ul halt meg )es a tud)as)anak nem volt ~or~ok~ose..." + "[25500]Tekints r)ank j)oindulattal, Tihocan." + /* 26 */ , "K~osz~ontelek az otthonomban!@Vezetett t)ur)ara foglak vinni." + /* 27 */ , "Haszn)ald az ir)any gombokat, hogy a zeneszob)aba menj." + /* 28 */ , "OK. Ugr)aljunk egy kicsit.@Nyomd meg az ugr)as gombot." + /* 29 */ , "Most nyomd meg )ujra )es gyorsan nyomj hozz)a@egy ir)anyt )es abba az ir)anyba fogok ugrani." + /* 30 */ , ")A)a, a nagyterem.@Bocs a l)ad)ak)ert, de n)eh)any dolgot@rakt)arakba vitetek )es sz)all)it)ok m)eg nem j~ottek." + /* 31 */ , "Fuss oda egy l)ad)ahoz, )es am)ig nyomva tartod az el+ore gombot,@nyomj akci)o gombot )es )en felugrok r)a." + /* 32 */ , "Ez kor)abban b)alterem volt, de )atalak)itottam@ a saj)at torna termemnek.@Mi a v)elem)enyed?@Nos csin)aljunk n)eh)any gyakorlatot." + /* 33 */ , "Nem mindenhova rohanok.@Ha )ovatos akarok lenni, s)et)alok@Tartsd nyomva a s)eta gombot, )es s)et)alj a feh)er vonalhoz." + /* 34 */ , "A s)eta gomb nyomva tart)as)aval nem fogok leesni, m)eg akkor sem ha megpr)ob)alod.@Rajta, pr)ob)ald ki." + /* 35 */ , "Ha szeretn)el k~orbe n)ezni, tartsd nyomva a n)ez gombot.@Ut)ana nyomd le az ir)anyt amerre n)ezni szeretn)el." + /* 36 */ , "Ha egy ugr)as t)ul nagy nekem, el tudom kapni a peremet )es megmenteni magam@egy cs)unya zuhan)ast)ol. S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig @m)ar nem megyek tov)abb. Ut)ana nyomj ugr)ast, ut)ana meg r~ogt~on@ el+ore gombot, )es am)ig a leveg+oben vagyok, nyomd le )es tartsd nyomva az akci)o gombot." + /* 37 */ , "Nyomj el+or)et, )es felm)aszom." + /* 38 */ , "Ha fut)o ugr)ast csin)alok, akkor tudok ekkor)at ugrani, nem probl)ema." + /* 39 */ , "S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig m)ar nem megyek tov)abb.@Azt)an engedd el a s)et)at, nyomj h)atr)at, hogy neki tudjak futni.@Nyomj el+or)et, )es r~ogt~on nyomd le )es tartsd nyomva az ugr)as gombot.@Nem fogok elugrani az utols)o pillanatig." + /* 40 */ , "Helyes. Ez egy igaz)an nagy@ Csin)alj egy fut)o ugr)ast, mint kor)abban, de am)ig a leveg+oben@vagyok, nyomd le )es tarts nyomva az akci)o gombot, hogy elkapjam a peremet." + /* 41 */ , "Sz)ep." + /* 42 */ , "Pr)ob)alj meg felm)aszni itt.@Nyomj el+or)et, )es tartsd nyomva az akci)o gombot." + /* 43 */ , "Nem tudok felm)aszni, mert a r)es t)ul kicsi.@Nyomj jobbot, )es oldalra m)aszom,@am)ig el)eg hely lesz, akkor nyomj el+or)et." + /* 44 */ , "Remek!@Ha nagy a m)elys)eg, )es nem szeretn)ek@s)er~ulni a leugr)assal, le tudom magam ereszteni )ovatosan." + /* 45 */ , "Nyomj h)atr)at )es h)atrafel)e ugrok.@Azonnal nyomd meg )es tartsd nyomva az akci)o gombot,@)es elkapom a peremet )utban lefel)e." + /* 46 */ , "Akkor engedd el." + /* 47 */ , "Menj~unk )uszni egyet." + /* 48 */ , "Az ugr)as gomb )es az ir)anyok@navig)alnak engem a v)iz alatt." + /* 49 */ , ")O! Leveg+o!@Csak haszn)ald az el+or)et, balr)at, vagy jobbr)at@a felsz)in k~ozeli man+overez)eshez.@Nyomj ugr)ast egy )ujabb )usz)ashoz lemer~ul)eshez.@Vagy menj a sz)el)ehez, )es nyomj akci)o gombot a kim)asz)ashoz." + /* 50 */ , "Helyes. A legjobb lesz, ha leveszem ezeket a nedves ruh)akat." + /* 51 */ , "Mond: Cs)i)iz!" + /* 52 */ , "Semmi szem)elyes." + /* 53 */ , "M)eg mindig f)aj a fejem t+oled.@)Es m)ok)as ~otleteket ad nekem.@Hogy l+ojelek a pokolra, p)eld)aul!" + /* 54 */ , "Nem tudsz meg~olni engem vagy a fi)ok)aimat olyan k~onnyed)en, Lara." + /* 55 */ , "Egy kicsit elk)esett a d)ij)atad)as, non?@M)eg mindig a r)eszv)etel ami sz)am)it." + /* 56 */ , "R)am l+osz?@R)am l+osz, mi?@Nincs senki m)as itt, csak r)am l+ohetsz!" +// TR1 levels + , "Lara otthona" + , "Barlangok" + , "Vilcabamba v)arosa" + , "Elveszett v~olgy" + , "Qualopec s)irja" + , "Szt. Ferenc kolostor" + , "Colosseum" + , "Mid)asz palota" + , "A Ciszterna" + , "Tihocan s)irja" + , "Khamoon v)arosa" + , "Khamoon obeliszkje" + , "Scion szent)elye" + , "Natla b)any)ai" + , "Atlantisz" + , "A nagy piramis" + , "Visszat)er)es Egyiptomba" + , "Macska templom" + , "Atlantiszi t)amaszpont" + , "A kapt)ar" +// TR2 levels + , "Lara otthona" + , "A nagy fal" + , "Velence" + , "Bartoli rejtekhelye" + , "Operah)az" + , "Tengeri f)ur)otorony" + , "B)uv)arter~ulet" + , "40 ~ol" + , "A Maria Doria roncsa" + , "Lak)okabinok" + , "A fed)elzet" + , "Tibeti hegyl)abak" + , "Barkhang kolostor" + , "Talion katakomb)ai" + , "J)egpalota" + , "Xian temploma" + , ")Usz)o szigetek" + , "A S)ark)anyod)u" + , "Otthon )edes otthon" +// TR3 levels + , "Lara otthona" + , "Dzsungel" + , "Templom romok" + , "A Gangesz foly)o" + , "Kaliya barlangjai" + , "Tengerparti falu" + , "A baleset helysz)ine" + , "Madubu szurdok" + , "Puna temploma" + , "Temze rakpart" + , "Aldwych" + , "Lud kapuja" + , "V)aros" + , "Nevada sivatag" + , "Magas biztons)ag)u )ep~ulet" + , "51-es k~orzet" + , "Antarktisz" + , "RX-Tech b)any)ak" + , "Tinnos elveszett v)arosa" + , "Meteorit barlang" + , "Mindenszentek" +}; + +#endif From dc5ae76016c30b834da80590ab8918e9606d4fae Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 8 Jan 2021 05:44:48 +0300 Subject: [PATCH 47/58] add special glyph for Hungarian translation, fix auto language detection for Hungarian on various platforms --- src/lang/glyph_ru.h | 323 +++++++++------------- src/lang/glyph_ru.png | Bin 3169 -> 2016 bytes src/lang/hu.h | 88 +++--- src/platform/nix/main.cpp | 1 + src/platform/rpi/main.cpp | 1 + src/platform/web/index.php | 2 + src/platform/win/OpenLara.vcxproj | 1 + src/platform/win/OpenLara.vcxproj.filters | 3 + src/platform/win/main.cpp | 1 + src/platform/xb1/main.cpp | 2 + src/ui.h | 15 +- 11 files changed, 186 insertions(+), 251 deletions(-) diff --git a/src/lang/glyph_ru.h b/src/lang/glyph_ru.h index 5b40c24..68d3687 100644 --- a/src/lang/glyph_ru.h +++ b/src/lang/glyph_ru.h @@ -1,207 +1,134 @@ #ifndef __GLYPH_RU__ #define __GLYPH_RU__ -static unsigned int size_GLYPH_RU = 3169; +static unsigned int size_GLYPH_RU = 2016; static unsigned char GLYPH_RU[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x08, 0x03, 0x00, 0x00, 0x00, 0xc9, 0xa1, 0x54, - 0x4d, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, - 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, - 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x00, 0x00, 0x03, 0x66, 0x69, 0x54, 0x58, 0x74, 0x58, 0x4d, - 0x4c, 0x3a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x78, 0x6d, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x62, 0x65, - 0x67, 0x69, 0x6e, 0x3d, 0x22, 0xef, 0xbb, 0xbf, 0x22, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x57, 0x35, - 0x4d, 0x30, 0x4d, 0x70, 0x43, 0x65, 0x68, 0x69, 0x48, 0x7a, 0x72, 0x65, 0x53, 0x7a, 0x4e, 0x54, - 0x63, 0x7a, 0x6b, 0x63, 0x39, 0x64, 0x22, 0x3f, 0x3e, 0x20, 0x3c, 0x78, 0x3a, 0x78, 0x6d, 0x70, - 0x6d, 0x65, 0x74, 0x61, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x3d, 0x22, 0x61, 0x64, - 0x6f, 0x62, 0x65, 0x3a, 0x6e, 0x73, 0x3a, 0x6d, 0x65, 0x74, 0x61, 0x2f, 0x22, 0x20, 0x78, 0x3a, - 0x78, 0x6d, 0x70, 0x74, 0x6b, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x58, 0x4d, 0x50, - 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x35, 0x2e, 0x33, 0x2d, 0x63, 0x30, 0x31, 0x31, 0x20, 0x36, - 0x36, 0x2e, 0x31, 0x34, 0x35, 0x36, 0x36, 0x31, 0x2c, 0x20, 0x32, 0x30, 0x31, 0x32, 0x2f, 0x30, - 0x32, 0x2f, 0x30, 0x36, 0x2d, 0x31, 0x34, 0x3a, 0x35, 0x36, 0x3a, 0x32, 0x37, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x52, 0x44, 0x46, - 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x72, 0x64, 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, - 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x77, 0x33, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x31, 0x39, - 0x39, 0x39, 0x2f, 0x30, 0x32, 0x2f, 0x32, 0x32, 0x2d, 0x72, 0x64, 0x66, 0x2d, 0x73, 0x79, 0x6e, - 0x74, 0x61, 0x78, 0x2d, 0x6e, 0x73, 0x23, 0x22, 0x3e, 0x20, 0x3c, 0x72, 0x64, 0x66, 0x3a, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x64, 0x66, 0x3a, 0x61, - 0x62, 0x6f, 0x75, 0x74, 0x3d, 0x22, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, - 0x70, 0x4d, 0x4d, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, - 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, - 0x2f, 0x6d, 0x6d, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x73, 0x74, 0x52, 0x65, - 0x66, 0x3d, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, - 0x62, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x73, - 0x54, 0x79, 0x70, 0x65, 0x2f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, - 0x23, 0x22, 0x20, 0x78, 0x6d, 0x6c, 0x6e, 0x73, 0x3a, 0x78, 0x6d, 0x70, 0x3d, 0x22, 0x68, 0x74, - 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x6e, 0x73, 0x2e, 0x61, 0x64, 0x6f, 0x62, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x78, 0x61, 0x70, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, - 0x4d, 0x3a, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x42, 0x42, - 0x34, 0x35, 0x44, 0x30, 0x32, 0x41, 0x33, 0x38, 0x33, 0x36, 0x45, 0x39, 0x31, 0x31, 0x41, 0x46, - 0x41, 0x46, 0x45, 0x31, 0x39, 0x34, 0x30, 0x32, 0x31, 0x32, 0x32, 0x37, 0x37, 0x46, 0x22, 0x20, - 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, - 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, 0x64, 0x3a, 0x37, 0x35, 0x38, 0x44, 0x39, 0x41, - 0x36, 0x31, 0x34, 0x32, 0x45, 0x39, 0x31, 0x31, 0x45, 0x39, 0x41, 0x45, 0x35, 0x43, 0x46, 0x35, - 0x46, 0x42, 0x33, 0x44, 0x37, 0x46, 0x44, 0x41, 0x35, 0x41, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x4d, - 0x4d, 0x3a, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, - 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x37, 0x35, 0x38, 0x44, 0x39, 0x41, 0x36, 0x30, 0x34, 0x32, - 0x45, 0x39, 0x31, 0x31, 0x45, 0x39, 0x41, 0x45, 0x35, 0x43, 0x46, 0x35, 0x46, 0x42, 0x33, 0x44, - 0x37, 0x46, 0x44, 0x41, 0x35, 0x41, 0x22, 0x20, 0x78, 0x6d, 0x70, 0x3a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x6f, 0x6c, 0x3d, 0x22, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x50, - 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x43, 0x53, 0x36, 0x20, 0x28, 0x57, 0x69, - 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x29, 0x22, 0x3e, 0x20, 0x3c, 0x78, 0x6d, 0x70, 0x4d, 0x4d, 0x3a, - 0x44, 0x65, 0x72, 0x69, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x20, 0x73, 0x74, 0x52, 0x65, - 0x66, 0x3a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, - 0x70, 0x2e, 0x69, 0x69, 0x64, 0x3a, 0x36, 0x45, 0x42, 0x33, 0x33, 0x37, 0x36, 0x37, 0x45, 0x39, - 0x34, 0x32, 0x45, 0x39, 0x31, 0x31, 0x42, 0x46, 0x32, 0x46, 0x41, 0x35, 0x36, 0x41, 0x42, 0x35, - 0x44, 0x38, 0x43, 0x34, 0x31, 0x38, 0x22, 0x20, 0x73, 0x74, 0x52, 0x65, 0x66, 0x3a, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x3d, 0x22, 0x78, 0x6d, 0x70, 0x2e, 0x64, 0x69, - 0x64, 0x3a, 0x42, 0x42, 0x34, 0x35, 0x44, 0x30, 0x32, 0x41, 0x33, 0x38, 0x33, 0x36, 0x45, 0x39, - 0x31, 0x31, 0x41, 0x46, 0x41, 0x46, 0x45, 0x31, 0x39, 0x34, 0x30, 0x32, 0x31, 0x32, 0x32, 0x37, - 0x37, 0x46, 0x22, 0x2f, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x3e, 0x20, 0x3c, 0x2f, 0x72, 0x64, 0x66, 0x3a, 0x52, - 0x44, 0x46, 0x3e, 0x20, 0x3c, 0x2f, 0x78, 0x3a, 0x78, 0x6d, 0x70, 0x6d, 0x65, 0x74, 0x61, 0x3e, - 0x20, 0x3c, 0x3f, 0x78, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x64, 0x3d, 0x22, - 0x72, 0x22, 0x3f, 0x3e, 0xb9, 0xc4, 0x8c, 0x25, 0x00, 0x00, 0x00, 0x3f, 0x50, 0x4c, 0x54, 0x45, - 0xce, 0x94, 0x5a, 0xff, 0xef, 0x8c, 0xa5, 0x6b, 0x39, 0xff, 0xff, 0x9c, 0xa5, 0x7b, 0x4a, 0xdc, - 0xa0, 0x64, 0x70, 0x5c, 0x2c, 0x30, 0x0c, 0x04, 0xe8, 0xc0, 0x70, 0xff, 0xd6, 0x7b, 0x58, 0x44, - 0x00, 0xc8, 0x90, 0x58, 0xb0, 0x80, 0x50, 0x73, 0x5a, 0x29, 0x8c, 0x5a, 0x29, 0xb5, 0x84, 0x52, - 0xef, 0xc6, 0x73, 0xde, 0xa5, 0x63, 0x31, 0x08, 0x00, 0x5a, 0x42, 0x00, 0xff, 0xff, 0xff, 0xed, - 0xab, 0xcf, 0x9c, 0x00, 0x00, 0x00, 0x15, 0x74, 0x52, 0x4e, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x2b, 0xd9, 0x7d, 0xea, 0x00, 0x00, 0x08, 0x25, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0x9a, - 0x89, 0x72, 0xdb, 0x38, 0x0c, 0x86, 0x29, 0xfa, 0x88, 0x93, 0x5d, 0x9e, 0xd0, 0xfb, 0x3f, 0xeb, - 0x02, 0x20, 0x09, 0x02, 0x94, 0xdd, 0xc6, 0x1d, 0xef, 0x4c, 0x32, 0x8d, 0x26, 0x76, 0x4b, 0xf1, - 0x02, 0x3e, 0x41, 0x14, 0x7f, 0x58, 0x6e, 0xff, 0xcb, 0x0f, 0xf7, 0x03, 0xe0, 0x8b, 0x1f, 0x91, - 0x0e, 0xe0, 0xaf, 0xcf, 0xb7, 0x1f, 0xc7, 0x67, 0x00, 0x04, 0x39, 0xda, 0x89, 0xb0, 0x9e, 0x90, - 0x53, 0xb3, 0xb0, 0xf7, 0x4f, 0x3b, 0x05, 0xc6, 0xb8, 0x31, 0xb3, 0x32, 0xc0, 0x98, 0xb3, 0x9a, - 0xa7, 0x5b, 0xdd, 0x69, 0xbe, 0xc7, 0x6d, 0xcb, 0x09, 0xf8, 0xcb, 0xcc, 0x1f, 0x1e, 0x38, 0x4c, - 0xed, 0x61, 0xcb, 0x1b, 0x7e, 0x4a, 0x1c, 0xc6, 0x1f, 0x00, 0x89, 0x99, 0x08, 0xa0, 0x6c, 0xd8, - 0x05, 0x8f, 0x3e, 0x21, 0x97, 0xf5, 0x89, 0x3d, 0xd0, 0x89, 0xad, 0x0c, 0x00, 0xf4, 0xbf, 0x88, - 0x95, 0x61, 0xcb, 0x7c, 0x2a, 0x66, 0x6c, 0x5d, 0x84, 0x80, 0xa7, 0xc6, 0x9e, 0x4e, 0xe7, 0x14, - 0x87, 0x0b, 0x34, 0x5e, 0xf2, 0xb3, 0x9e, 0x86, 0x9f, 0xb5, 0xa0, 0xff, 0xdd, 0x63, 0xa1, 0x7a, - 0x9c, 0x70, 0x00, 0x22, 0xd7, 0xe9, 0xab, 0x03, 0x38, 0x9d, 0x60, 0x87, 0xd3, 0x49, 0x00, 0x2c, - 0x0e, 0xef, 0x90, 0x3d, 0x40, 0x06, 0xd8, 0x3c, 0x77, 0x08, 0x38, 0x94, 0x01, 0xd0, 0xec, 0x8b, - 0xc3, 0x02, 0x87, 0x2d, 0x70, 0x6c, 0x80, 0x32, 0xfc, 0xf5, 0xad, 0x2c, 0x27, 0xc2, 0x46, 0xe5, - 0x9c, 0xc6, 0x28, 0x29, 0x03, 0x03, 0x88, 0x8d, 0x10, 0xfa, 0x5f, 0xa0, 0x68, 0x02, 0xed, 0x5a, - 0xc5, 0xa2, 0x3c, 0xa4, 0xfe, 0x76, 0x7c, 0x29, 0x43, 0xe9, 0x00, 0xfa, 0x10, 0xbe, 0xa0, 0x43, - 0xd9, 0x01, 0x42, 0x6d, 0xc4, 0x04, 0x40, 0x6f, 0x4f, 0xed, 0xb0, 0x56, 0xe6, 0x5b, 0x1c, 0x96, - 0x72, 0xee, 0xe5, 0x20, 0xd7, 0xce, 0xd8, 0xe7, 0xbb, 0x05, 0x0d, 0x00, 0x07, 0xf2, 0x40, 0xd4, - 0xe7, 0x1a, 0x27, 0x00, 0x01, 0xec, 0x0a, 0x00, 0x20, 0x01, 0x74, 0x7e, 0x34, 0x8b, 0x85, 0x0c, - 0x57, 0x00, 0x5a, 0x05, 0xfa, 0xd3, 0x4d, 0xe6, 0x32, 0x88, 0x03, 0xc7, 0x32, 0x13, 0x88, 0xe8, - 0xf3, 0x2e, 0xe3, 0x65, 0xd7, 0x1c, 0x15, 0x83, 0x57, 0x00, 0xe5, 0x08, 0x20, 0x0b, 0x80, 0xd4, - 0xca, 0xbd, 0x07, 0xda, 0x6f, 0x00, 0xf4, 0xa1, 0xc6, 0x88, 0x0c, 0xc0, 0xac, 0x17, 0xca, 0x36, - 0x03, 0x60, 0xce, 0x98, 0x32, 0x02, 0xb8, 0x8c, 0xf1, 0x01, 0x76, 0x65, 0x5f, 0xef, 0x8f, 0xfe, - 0x0f, 0x00, 0xf0, 0x1b, 0x00, 0xe8, 0x21, 0x8f, 0xe0, 0xf7, 0xfb, 0x00, 0x5a, 0x04, 0x94, 0x09, - 0xc0, 0x11, 0x80, 0x62, 0xe6, 0x33, 0x0e, 0xdf, 0x01, 0xa0, 0x97, 0x81, 0x03, 0x00, 0xc8, 0xea, - 0x8e, 0xfc, 0x0c, 0x00, 0x22, 0x90, 0x2f, 0xba, 0x51, 0x54, 0x11, 0xc9, 0x4d, 0x29, 0x9e, 0x1f, - 0x01, 0x58, 0xcb, 0xe8, 0x1c, 0x99, 0xdb, 0x03, 0x80, 0x00, 0x44, 0x02, 0x10, 0x1f, 0x01, 0x70, - 0x04, 0xc0, 0x3d, 0x05, 0x80, 0x56, 0x1d, 0xdd, 0x9e, 0x57, 0x41, 0x05, 0x80, 0xef, 0x49, 0x59, - 0x03, 0xc4, 0xf2, 0x87, 0x00, 0xc8, 0xe1, 0x8b, 0x6e, 0x83, 0x11, 0x69, 0x22, 0x80, 0x8c, 0x7f, - 0x0c, 0x80, 0x2a, 0xcc, 0x24, 0x3e, 0x3b, 0x37, 0x02, 0x80, 0x00, 0x60, 0x80, 0x39, 0x0a, 0xa1, - 0x47, 0x00, 0xbc, 0xf7, 0xcf, 0x00, 0x28, 0xec, 0x5f, 0x9e, 0xf3, 0xe3, 0x0c, 0xb8, 0x40, 0x4d, - 0x00, 0xa5, 0xdd, 0xb3, 0xe3, 0x4e, 0xf9, 0x3d, 0x00, 0xf2, 0xff, 0x72, 0x89, 0x0f, 0x08, 0x60, - 0xd3, 0x76, 0x9b, 0x2a, 0x03, 0xf4, 0xa0, 0x47, 0x00, 0x18, 0x02, 0x12, 0x00, 0x4c, 0xa0, 0x64, - 0x87, 0xee, 0xc3, 0x7e, 0x0f, 0x00, 0x11, 0xa0, 0xe3, 0x29, 0x00, 0xd8, 0x49, 0x01, 0xc0, 0x08, - 0xc0, 0x1b, 0xb4, 0x3c, 0x03, 0x00, 0x4c, 0xc8, 0xa6, 0x2d, 0x5e, 0x70, 0x0d, 0xd0, 0xcf, 0x71, - 0x13, 0xe2, 0x1c, 0xbc, 0x4f, 0x00, 0xa0, 0x15, 0xd0, 0x9b, 0x27, 0x35, 0xf2, 0x80, 0xb9, 0x48, - 0x5a, 0x00, 0xb4, 0xea, 0x80, 0x3b, 0xcf, 0x22, 0x5d, 0x61, 0x15, 0x71, 0x71, 0x29, 0x43, 0xe1, - 0x7b, 0xc6, 0x99, 0xf9, 0x89, 0xf2, 0x04, 0xe0, 0x17, 0x00, 0xde, 0x84, 0x77, 0xee, 0xc7, 0xb0, - 0x20, 0xe2, 0x1a, 0x88, 0x00, 0x06, 0x81, 0xb6, 0x1e, 0x99, 0x10, 0xe7, 0xf0, 0x54, 0x06, 0x78, - 0xd0, 0x83, 0x1e, 0x80, 0xc0, 0x7c, 0x04, 0x4c, 0x20, 0x3a, 0x3e, 0xe8, 0x9e, 0x2d, 0x09, 0x54, - 0x13, 0x0d, 0x60, 0x75, 0xd8, 0x97, 0x94, 0xf0, 0xf2, 0xa6, 0xd1, 0x83, 0x9f, 0x18, 0x06, 0x80, - 0x3f, 0x00, 0xc0, 0x09, 0xb0, 0x7d, 0x7d, 0x00, 0xa0, 0x54, 0x3a, 0xc4, 0xe2, 0xd4, 0xf7, 0x00, - 0x71, 0x4b, 0x54, 0xac, 0x89, 0x42, 0x0e, 0x6f, 0x81, 0xaa, 0x26, 0x50, 0x11, 0x80, 0xfd, 0x7f, - 0x0d, 0xa0, 0x3a, 0x58, 0xfc, 0x5f, 0x01, 0xb4, 0x43, 0x87, 0x0c, 0x9c, 0x27, 0x80, 0xe9, 0x70, - 0xbb, 0x20, 0xa9, 0x14, 0xd3, 0x83, 0x6e, 0x7f, 0x1d, 0x32, 0xec, 0xaf, 0x73, 0x23, 0xa6, 0x1c, - 0x8c, 0xd6, 0xc3, 0x7f, 0x1a, 0x40, 0xcf, 0xd5, 0xb7, 0x09, 0xc3, 0x80, 0x40, 0xeb, 0x1f, 0x01, - 0xc0, 0x81, 0x43, 0x27, 0x90, 0x67, 0xf7, 0xd1, 0x1f, 0x86, 0x01, 0x3d, 0x00, 0xe6, 0x53, 0x31, - 0xd1, 0x7f, 0xd3, 0x74, 0xa8, 0xea, 0x1b, 0x7a, 0x30, 0x57, 0x26, 0x30, 0xfe, 0x8a, 0x3d, 0xe2, - 0x5d, 0x00, 0xab, 0xc3, 0x75, 0x1c, 0xbd, 0x07, 0x9c, 0x79, 0xc9, 0x38, 0x57, 0xb5, 0x06, 0x3a, - 0xf2, 0xbf, 0xb7, 0x77, 0xad, 0x31, 0x7e, 0xf4, 0x7c, 0xca, 0xa0, 0xda, 0xaa, 0xea, 0x68, 0x11, - 0xe8, 0x3f, 0xfd, 0x13, 0x94, 0x85, 0xbb, 0xed, 0xcf, 0x9b, 0xc9, 0x6e, 0x90, 0x19, 0xb4, 0x4e, - 0x0b, 0x67, 0x0f, 0xab, 0x4f, 0xec, 0x80, 0xc6, 0x8c, 0xe1, 0x85, 0xb5, 0x17, 0xc6, 0x90, 0x06, - 0x23, 0xf0, 0x56, 0x6e, 0xad, 0xaa, 0xd5, 0x5a, 0xf0, 0x23, 0x87, 0x7f, 0x00, 0xbc, 0x4c, 0xb6, - 0x3f, 0x21, 0xf0, 0xbf, 0x12, 0x80, 0x45, 0x2e, 0x2b, 0x45, 0xaf, 0x4a, 0xd6, 0xbf, 0x35, 0xdf, - 0x40, 0x4f, 0x91, 0xa9, 0x9e, 0x7f, 0xe7, 0x3f, 0x89, 0xdd, 0xe8, 0xbf, 0x10, 0x80, 0x29, 0xad, - 0xc7, 0x33, 0x88, 0xe4, 0xba, 0xac, 0xb9, 0xa4, 0x9f, 0x23, 0x6b, 0x5e, 0xe3, 0x82, 0x92, 0x0f, - 0xdc, 0x01, 0xe0, 0x73, 0x09, 0x9b, 0x9d, 0x37, 0x69, 0x5b, 0x8e, 0x5f, 0x07, 0x40, 0x2e, 0x8b, - 0x5a, 0xdc, 0xf0, 0xc1, 0xaf, 0x04, 0x3e, 0x6d, 0x45, 0xf1, 0x9c, 0x20, 0x89, 0x1b, 0x79, 0x0b, - 0xda, 0xff, 0xf4, 0x59, 0xef, 0xdb, 0xbe, 0x07, 0x1f, 0x5d, 0x5f, 0x87, 0xc0, 0x1d, 0x00, 0xe4, - 0xa9, 0x12, 0xdc, 0x0c, 0xa0, 0xcc, 0x13, 0x91, 0x13, 0x18, 0x73, 0xeb, 0x17, 0xb7, 0x04, 0xcf, - 0xce, 0x8a, 0x04, 0xbe, 0x14, 0x00, 0x23, 0x97, 0x63, 0xd4, 0x09, 0x1a, 0x06, 0xc0, 0x3b, 0x9b, - 0x11, 0x02, 0x31, 0x1b, 0x00, 0xa4, 0xdf, 0x41, 0xdd, 0x00, 0x4b, 0x3e, 0x71, 0x5f, 0x13, 0x8c, - 0x6d, 0x2f, 0x0f, 0x45, 0x12, 0x4e, 0x58, 0x75, 0xbd, 0x5e, 0xf9, 0xa3, 0x7a, 0x98, 0xfe, 0xb8, - 0xcc, 0xe8, 0xdd, 0x29, 0x9d, 0x9a, 0x33, 0xf6, 0xb6, 0x92, 0xb3, 0x44, 0xad, 0xd8, 0xbe, 0xfa, - 0x6c, 0x6d, 0x7a, 0x69, 0xdf, 0x52, 0x8a, 0x33, 0xab, 0x88, 0x00, 0xf2, 0xe9, 0x74, 0xca, 0xb0, - 0x2e, 0x83, 0x02, 0x00, 0x3a, 0x80, 0x22, 0x00, 0x32, 0xa5, 0x41, 0x35, 0x80, 0xa2, 0xc4, 0x20, - 0xae, 0x29, 0x66, 0x3c, 0x1c, 0x9f, 0x26, 0x08, 0x4a, 0x5c, 0x91, 0xd2, 0x1d, 0x09, 0xb3, 0xfd, - 0x6d, 0xbb, 0x5d, 0xaf, 0xf8, 0xb7, 0xdd, 0xde, 0x46, 0x3d, 0x1e, 0xef, 0xb3, 0xff, 0x09, 0x23, - 0xce, 0x9f, 0xd4, 0xe6, 0x34, 0x6c, 0x5b, 0x79, 0x7f, 0x1f, 0x33, 0x84, 0x96, 0xf2, 0x0b, 0x23, - 0xef, 0xc3, 0x39, 0x43, 0xfe, 0x52, 0xc3, 0x95, 0x22, 0xed, 0xb1, 0x1c, 0xf8, 0xaf, 0x77, 0x70, - 0xc1, 0x39, 0x23, 0x97, 0xbb, 0x8f, 0x59, 0x01, 0x18, 0x7b, 0x5b, 0x50, 0xb5, 0x79, 0xaa, 0xcd, - 0x42, 0x6b, 0x86, 0xec, 0x6c, 0x03, 0xe5, 0x02, 0xd4, 0x1d, 0x14, 0x4a, 0x39, 0x87, 0x7a, 0x0e, - 0xd3, 0x7f, 0xdb, 0x7e, 0x7f, 0xbb, 0xdc, 0x10, 0xc0, 0xed, 0x22, 0xfe, 0x67, 0xdc, 0xa3, 0x4d, - 0xbd, 0x4f, 0xa6, 0x19, 0xff, 0xd1, 0x57, 0x80, 0x2a, 0x13, 0x10, 0x60, 0xbc, 0xa0, 0xdb, 0x7b, - 0x0e, 0xd2, 0x9e, 0x26, 0x55, 0xd2, 0x83, 0xa5, 0x8c, 0x00, 0x40, 0xcb, 0xf9, 0xe8, 0x1d, 0x18, - 0x80, 0x96, 0xcb, 0xec, 0x22, 0x67, 0x48, 0x0e, 0x11, 0x30, 0x05, 0x2a, 0x56, 0x2a, 0x00, 0xb4, - 0xd7, 0x9d, 0x00, 0x70, 0xbc, 0x6a, 0x01, 0xf0, 0x5e, 0x58, 0x01, 0xe0, 0xf6, 0x45, 0xce, 0x20, - 0x81, 0x9b, 0xf8, 0x4f, 0xbb, 0x5c, 0xbc, 0x49, 0x94, 0x78, 0xcb, 0x25, 0x1b, 0xff, 0x71, 0x01, - 0x01, 0xea, 0x3f, 0x53, 0x64, 0x29, 0xe3, 0xf5, 0x9f, 0x00, 0x8a, 0xf7, 0x0b, 0x80, 0xdd, 0xb6, - 0x07, 0x20, 0x81, 0x2f, 0x00, 0x16, 0xb9, 0xdc, 0xd7, 0x80, 0xe9, 0x2f, 0x8e, 0xb0, 0x00, 0x20, - 0x38, 0x02, 0xa0, 0x5a, 0xf5, 0xbf, 0xd3, 0x78, 0x5e, 0xe5, 0x2c, 0xb1, 0x5c, 0x17, 0xa5, 0x03, - 0xc3, 0xac, 0x76, 0x7c, 0xdc, 0x2e, 0xb7, 0xcb, 0xe5, 0x43, 0xa7, 0x57, 0x74, 0xbe, 0xa3, 0x38, - 0x9f, 0xb3, 0xde, 0x37, 0x80, 0x5b, 0x00, 0x00, 0x09, 0xd2, 0xf7, 0xbe, 0x96, 0xd3, 0xfd, 0x78, - 0x3a, 0x69, 0x00, 0xee, 0x00, 0x60, 0x27, 0x81, 0xdc, 0x3b, 0x38, 0x76, 0x4c, 0x03, 0x28, 0xed, - 0x29, 0xa0, 0x46, 0x88, 0xed, 0x3e, 0x9f, 0x27, 0xb2, 0x4e, 0x11, 0x41, 0x6b, 0x3f, 0xd5, 0x74, - 0xc1, 0x08, 0x98, 0x11, 0x85, 0x11, 0x71, 0x07, 0x40, 0x9c, 0xd7, 0xf4, 0xe3, 0xf6, 0x0f, 0xde, - 0x02, 0x42, 0x80, 0x16, 0x27, 0xbc, 0x05, 0x94, 0x7c, 0x77, 0xb4, 0x64, 0x0a, 0x01, 0x5c, 0xce, - 0x08, 0x80, 0xc8, 0x5b, 0x74, 0x08, 0x85, 0x1f, 0xd4, 0x11, 0xb1, 0xa8, 0xfe, 0x28, 0xe2, 0x95, - 0xb5, 0x1c, 0x71, 0xa6, 0x3d, 0x01, 0x18, 0x1d, 0x10, 0x1f, 0xad, 0x01, 0x6e, 0xca, 0xf5, 0xc4, - 0x09, 0x3d, 0x9b, 0xc3, 0xc3, 0x73, 0xca, 0x61, 0xf2, 0x7f, 0x02, 0xc0, 0x78, 0x8f, 0x74, 0x4e, - 0xe4, 0xb4, 0x1d, 0xef, 0x00, 0x80, 0x08, 0xa0, 0xff, 0xe3, 0xe4, 0xc7, 0xf6, 0xcf, 0xf5, 0x7a, - 0xc1, 0xbf, 0xed, 0xa3, 0xf7, 0xa7, 0xf8, 0x4c, 0x2a, 0x5d, 0x80, 0xfd, 0xeb, 0x24, 0x10, 0x1c, - 0x64, 0x0d, 0xa0, 0x92, 0x43, 0x2a, 0x24, 0x50, 0x29, 0x63, 0x7b, 0xa7, 0xcc, 0xcf, 0x06, 0x40, - 0x1d, 0x00, 0x7a, 0x07, 0x57, 0x7d, 0x42, 0x79, 0xac, 0x9e, 0x32, 0xa8, 0xef, 0xcb, 0xa2, 0xef, - 0x81, 0xb2, 0x1e, 0x72, 0x85, 0xfb, 0x2f, 0x13, 0x8a, 0x00, 0x2d, 0xeb, 0x22, 0x4f, 0x97, 0xf1, - 0x70, 0x3d, 0xb3, 0xca, 0xb6, 0x52, 0x90, 0xc2, 0xbc, 0x01, 0xfe, 0xc5, 0x47, 0xe0, 0x85, 0x3e, - 0x1f, 0xd2, 0x41, 0x67, 0x3f, 0x6a, 0x6a, 0x21, 0x3c, 0x30, 0x02, 0xa7, 0x0f, 0xaa, 0x24, 0x04, - 0x6a, 0x62, 0xcb, 0xea, 0x40, 0xc6, 0xa9, 0x02, 0x48, 0xd3, 0x7e, 0xbe, 0x00, 0x4b, 0x7b, 0x5a, - 0x45, 0x7a, 0x07, 0x77, 0x54, 0xd2, 0x77, 0xf4, 0xf3, 0xbe, 0xe4, 0x0b, 0xf6, 0x55, 0xd0, 0x1f, - 0xf4, 0xf6, 0x03, 0x21, 0x7f, 0x68, 0xbe, 0xbf, 0xbd, 0xbd, 0xc9, 0xe7, 0x5e, 0xfd, 0xcc, 0x47, - 0xe8, 0x72, 0x5d, 0xca, 0xf3, 0x84, 0x98, 0xb7, 0xff, 0xa2, 0xbd, 0x6a, 0xf2, 0x23, 0x87, 0x7f, - 0x00, 0x7c, 0xff, 0x83, 0x9e, 0xdc, 0xe1, 0x4f, 0x93, 0x0c, 0xdf, 0x1f, 0x40, 0x88, 0x27, 0x87, - 0xa2, 0xde, 0xb9, 0xbf, 0x16, 0x00, 0xee, 0x7d, 0x1d, 0x25, 0x24, 0xfe, 0x1c, 0xc0, 0x31, 0x29, - 0xf4, 0x9d, 0x0e, 0xd2, 0x79, 0xf0, 0xa7, 0xee, 0x33, 0x80, 0x40, 0xef, 0x5b, 0x98, 0xf7, 0x61, - 0x9e, 0x41, 0xa2, 0xde, 0x98, 0xf9, 0xa6, 0x8b, 0x20, 0x6c, 0xb8, 0xb5, 0x98, 0xfa, 0xb5, 0xff, - 0x98, 0x9b, 0x87, 0x3b, 0xab, 0xbe, 0x5e, 0x1d, 0x0e, 0xef, 0xa9, 0xa2, 0x3e, 0xab, 0xe3, 0xa7, - 0xb5, 0xf5, 0x9d, 0x9c, 0x5e, 0x94, 0xb3, 0x47, 0xb6, 0xf7, 0xf4, 0xbf, 0x3e, 0x77, 0x78, 0x61, - 0x09, 0x5e, 0x0a, 0x80, 0xd4, 0x99, 0xf3, 0x35, 0x4f, 0xbd, 0x9c, 0xe6, 0x46, 0xf9, 0x8e, 0xbe, - 0x5e, 0x1d, 0xc6, 0xf6, 0x35, 0x14, 0x05, 0xe0, 0x64, 0x93, 0x8c, 0x3d, 0xe7, 0x28, 0x23, 0x1c, - 0x72, 0x90, 0x7e, 0xd5, 0xff, 0x34, 0x5f, 0xc6, 0x73, 0x5d, 0x42, 0x73, 0xfd, 0xbc, 0x40, 0xc1, - 0x4a, 0xc3, 0x17, 0x00, 0x40, 0xf9, 0xed, 0x3d, 0x6e, 0x67, 0xab, 0x89, 0x00, 0xa7, 0xf5, 0xb8, - 0xd1, 0xd7, 0x8b, 0xc3, 0x07, 0x00, 0xc0, 0x29, 0x26, 0x2d, 0x7e, 0x38, 0x60, 0x44, 0xac, 0xd8, - 0xea, 0x83, 0xfe, 0xa7, 0x86, 0xc1, 0x51, 0xda, 0x31, 0xf3, 0xee, 0x15, 0xeb, 0x83, 0x16, 0x47, - 0x21, 0xff, 0x1f, 0x00, 0x92, 0x06, 0xe0, 0x16, 0x00, 0x8b, 0xbe, 0x7e, 0x08, 0x60, 0xbe, 0xc1, - 0xa0, 0x33, 0x42, 0xbd, 0x28, 0x23, 0x2c, 0xd5, 0x07, 0xfd, 0x4f, 0x0d, 0xdb, 0x5b, 0x20, 0xcd, - 0x06, 0xba, 0x1b, 0xad, 0x3a, 0x4c, 0x2f, 0x06, 0xe0, 0x1d, 0xe9, 0x0d, 0xbc, 0x0b, 0xd4, 0x04, - 0x75, 0x13, 0x09, 0x47, 0xe2, 0xde, 0xe8, 0xeb, 0xc5, 0xe1, 0x51, 0x56, 0x19, 0x11, 0x8a, 0x27, - 0x25, 0x87, 0x5b, 0x71, 0x8c, 0xb0, 0x54, 0x0f, 0xfd, 0xef, 0xf4, 0x0b, 0x1c, 0x85, 0x73, 0x14, - 0xb9, 0xa9, 0x28, 0x70, 0x29, 0x98, 0x5f, 0xb7, 0xcf, 0xaf, 0x05, 0x80, 0xf2, 0x8d, 0x7e, 0x3d, - 0xf5, 0x55, 0x11, 0x26, 0xb1, 0x5b, 0xe7, 0xef, 0xf7, 0x60, 0xf4, 0xf5, 0xe2, 0x30, 0xbf, 0x90, - 0xc1, 0x3f, 0xcf, 0x57, 0x79, 0x1f, 0x00, 0xaf, 0x98, 0x7a, 0x21, 0xa3, 0x15, 0x25, 0x02, 0x6c, - 0x35, 0x3f, 0xc1, 0xec, 0x15, 0xa6, 0xc1, 0x5a, 0x04, 0xd4, 0x61, 0x51, 0x9a, 0x9a, 0x1a, 0x01, - 0xd4, 0x17, 0x6f, 0x85, 0x2b, 0xa7, 0xcd, 0x44, 0x7d, 0x15, 0x94, 0xa3, 0x94, 0x37, 0x33, 0x02, - 0xd1, 0x99, 0x77, 0x9c, 0xf4, 0xfb, 0x08, 0x35, 0xf7, 0xdf, 0xa6, 0x47, 0x0f, 0x48, 0x78, 0x89, - 0x75, 0x7e, 0x81, 0x8b, 0x32, 0xc2, 0x52, 0xdd, 0x81, 0x27, 0xf5, 0x06, 0x0c, 0x1a, 0x43, 0x49, - 0x90, 0xe1, 0x29, 0x27, 0x19, 0x9d, 0x98, 0x53, 0x5f, 0x0f, 0xc0, 0xe4, 0xa7, 0xc6, 0xcf, 0xf1, - 0x60, 0x00, 0x28, 0x7d, 0x3d, 0x1d, 0xae, 0x5a, 0xfe, 0xd2, 0xef, 0xf1, 0x75, 0x26, 0x04, 0xfc, - 0x04, 0xda, 0x8a, 0x32, 0xc2, 0x52, 0x7d, 0xd0, 0xff, 0xdc, 0x90, 0xaf, 0xc2, 0xf0, 0x9f, 0x12, - 0x1e, 0x2a, 0x41, 0xe2, 0x5f, 0x4b, 0xc0, 0xed, 0xe6, 0xd7, 0x76, 0xcd, 0x61, 0x91, 0xf0, 0x56, - 0xef, 0xdf, 0x95, 0xf9, 0x77, 0xd2, 0x09, 0xa3, 0x58, 0x1f, 0x54, 0x3f, 0xd0, 0xff, 0x55, 0xbf, - 0x8f, 0x40, 0x41, 0x6a, 0x13, 0x0e, 0x2f, 0x04, 0xf0, 0x9f, 0x00, 0x03, 0x00, 0x78, 0x70, 0x66, - 0x8d, 0x8a, 0xcc, 0xf4, 0x08, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, - 0x82, + 0x4d, 0x00, 0x00, 0x00, 0x3f, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0x5a, 0x42, 0x00, 0xef, + 0xc6, 0x73, 0xde, 0xa5, 0x63, 0xa5, 0x6b, 0x39, 0xb5, 0x84, 0x52, 0xce, 0x94, 0x5a, 0x73, 0x5a, + 0x29, 0x31, 0x08, 0x00, 0x8c, 0x5a, 0x29, 0xff, 0xef, 0x8c, 0x70, 0x5c, 0x2c, 0xa5, 0x7b, 0x4a, + 0xdc, 0xa0, 0x64, 0xff, 0xff, 0x9c, 0xff, 0xd6, 0x7b, 0x30, 0x0c, 0x04, 0xe8, 0xc0, 0x70, 0x58, + 0x44, 0x00, 0xc8, 0x90, 0x58, 0xb0, 0x80, 0x50, 0xfb, 0xc4, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x07, 0x4f, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x5e, 0xed, 0x9a, 0xdb, 0x72, 0x1b, 0x39, 0x0c, 0x44, 0xd5, 0x00, 0xaf, 0xa3, 0x8b, + 0xed, 0xec, 0xfe, 0xff, 0xb7, 0x2e, 0x41, 0x0d, 0xd8, 0xa4, 0x3c, 0xae, 0xd8, 0x55, 0x7a, 0x70, + 0x36, 0x46, 0x99, 0x52, 0x1a, 0x04, 0x48, 0xe2, 0x84, 0x51, 0x84, 0x49, 0x4e, 0xdf, 0xdb, 0x7e, + 0xec, 0xc7, 0xaa, 0x19, 0xfa, 0xcb, 0x67, 0xe3, 0x69, 0x9f, 0x49, 0xc8, 0xc3, 0xa8, 0xe9, 0x98, + 0x5d, 0x14, 0x27, 0x1b, 0xc3, 0x85, 0xe5, 0x70, 0xbe, 0xf3, 0x74, 0x00, 0x1e, 0x87, 0x82, 0x9a, + 0x51, 0x73, 0x38, 0xd5, 0xb6, 0x49, 0x44, 0x7f, 0x59, 0xf6, 0xcf, 0xc7, 0x05, 0xf7, 0x78, 0x6c, + 0xb2, 0xb5, 0xa1, 0xa6, 0x59, 0xc9, 0x72, 0x3e, 0x02, 0xca, 0xba, 0xb5, 0x94, 0x66, 0xa6, 0x5c, + 0xd3, 0x61, 0x9e, 0xcd, 0x4c, 0x1d, 0x80, 0xfd, 0xaa, 0x4a, 0x6d, 0x6e, 0xe9, 0xae, 0x2a, 0x2d, + 0x5a, 0x07, 0x81, 0x60, 0xc1, 0xc1, 0xdc, 0x12, 0xf7, 0x12, 0xef, 0xeb, 0xc5, 0xc0, 0x79, 0x91, + 0x79, 0x16, 0x7c, 0x37, 0x87, 0xda, 0x7c, 0xdb, 0xd0, 0x01, 0x59, 0xe9, 0xf6, 0xb2, 0x03, 0xb8, + 0xdd, 0x70, 0xc2, 0xed, 0xe6, 0x00, 0x1e, 0x0b, 0x3e, 0x41, 0x02, 0x20, 0xc0, 0x16, 0xd0, 0xe3, + 0xdb, 0x52, 0x0b, 0x80, 0xfb, 0xf9, 0x2a, 0x4f, 0x90, 0x6d, 0x6d, 0x40, 0xbd, 0xde, 0xd0, 0x35, + 0x1d, 0x79, 0x33, 0x2d, 0xd1, 0x31, 0x46, 0x81, 0x01, 0xb0, 0xb1, 0xd7, 0xaf, 0xd0, 0x4e, 0x80, + 0xf9, 0xe6, 0x57, 0x56, 0xd8, 0xf3, 0x97, 0xf5, 0xa9, 0xa1, 0x3b, 0x80, 0x1d, 0x62, 0xd0, 0x4d, + 0x20, 0x09, 0x22, 0x7a, 0x27, 0x36, 0x00, 0xec, 0xf1, 0x16, 0x07, 0x91, 0x2e, 0xdf, 0x15, 0x4c, + 0x6d, 0x6e, 0xfe, 0x8e, 0xb9, 0xf1, 0x7c, 0x61, 0x9c, 0x20, 0xdf, 0x1d, 0x68, 0x92, 0x1b, 0x4e, + 0x0e, 0x6c, 0x4d, 0x4f, 0x00, 0x10, 0x05, 0x55, 0xaa, 0x87, 0x55, 0xb5, 0xda, 0x77, 0x00, 0xcc, + 0xaf, 0xa2, 0x11, 0xd4, 0xe8, 0xce, 0x63, 0xdd, 0x09, 0x54, 0x49, 0x38, 0x8d, 0xf5, 0x24, 0xf5, + 0x42, 0x09, 0xf4, 0x11, 0x80, 0xbe, 0x07, 0x20, 0x03, 0x40, 0xec, 0xda, 0x33, 0xb0, 0xf9, 0xd1, + 0xb9, 0xbf, 0xbf, 0x39, 0x80, 0xe5, 0xf3, 0x82, 0x67, 0x5b, 0x01, 0x10, 0x79, 0x94, 0x2a, 0xf5, + 0xea, 0xeb, 0x03, 0x03, 0x1a, 0xf3, 0xab, 0xa8, 0x03, 0xc0, 0x6f, 0x00, 0xb4, 0x0a, 0x3b, 0x80, + 0x60, 0x62, 0x05, 0xc0, 0xf8, 0xaa, 0x04, 0x90, 0x0c, 0x00, 0x81, 0xb3, 0xe0, 0x8f, 0x01, 0x34, + 0xfb, 0x18, 0x00, 0xc4, 0x2c, 0xd6, 0x4f, 0x00, 0x20, 0x01, 0xe9, 0xf5, 0x13, 0xaa, 0x60, 0x01, + 0x58, 0x45, 0x71, 0x08, 0x60, 0xd5, 0x5e, 0xb2, 0xc0, 0xca, 0x72, 0xa5, 0xd5, 0x00, 0xd4, 0x8f, + 0x00, 0x24, 0x03, 0x90, 0xbe, 0x04, 0xc0, 0x3e, 0x75, 0xe6, 0xf8, 0x5a, 0xab, 0x03, 0xf0, 0x04, + 0x88, 0x3a, 0x01, 0xe8, 0xc7, 0x00, 0x58, 0xf0, 0x95, 0xd2, 0x52, 0xd6, 0x1b, 0x60, 0xf5, 0x1f, + 0x00, 0xe0, 0xfa, 0xeb, 0x26, 0x41, 0x52, 0x92, 0x30, 0x70, 0xa8, 0x54, 0x49, 0x55, 0xf4, 0x43, + 0x00, 0x21, 0x84, 0xaf, 0x00, 0xd0, 0x5e, 0x9f, 0x70, 0x7f, 0x55, 0xd1, 0xe8, 0x00, 0xbc, 0xe0, + 0xa6, 0xf3, 0xef, 0x01, 0xb0, 0xfe, 0xeb, 0xb5, 0x3e, 0x12, 0x20, 0x00, 0x51, 0x96, 0xb8, 0x16, + 0xbc, 0x6a, 0x5e, 0x01, 0x49, 0xa0, 0x52, 0x95, 0xa4, 0x8a, 0xdd, 0x43, 0x00, 0x4e, 0xa0, 0xdb, + 0x97, 0x00, 0xb4, 0xa4, 0x09, 0x40, 0xac, 0x55, 0x35, 0xea, 0x57, 0x00, 0x60, 0xb9, 0xb2, 0x71, + 0xab, 0xd7, 0x7a, 0x8d, 0xf3, 0xdf, 0xe3, 0x98, 0x01, 0x58, 0xfd, 0x9f, 0x02, 0x40, 0xa2, 0x29, + 0x4c, 0xaa, 0x36, 0x0d, 0xc0, 0xa5, 0x12, 0x40, 0x37, 0x00, 0x48, 0x17, 0x4a, 0x8d, 0xc0, 0x74, + 0xe3, 0xea, 0x83, 0x86, 0x26, 0x18, 0xb5, 0x65, 0x7f, 0xa3, 0x4c, 0x00, 0xc1, 0x01, 0x50, 0xd3, + 0x20, 0xbb, 0x79, 0x7c, 0x8d, 0x52, 0x1b, 0x00, 0x27, 0x00, 0x55, 0x10, 0x80, 0x3b, 0x16, 0x00, + 0x01, 0x5c, 0xf4, 0x00, 0x08, 0x0c, 0xc0, 0xc2, 0xdc, 0xb5, 0x03, 0xa8, 0xb5, 0x57, 0xc5, 0x00, + 0x07, 0x70, 0x54, 0x70, 0xd0, 0x18, 0x63, 0x1b, 0x9e, 0x01, 0x95, 0x07, 0x00, 0xe1, 0x1d, 0x80, + 0xc6, 0xbc, 0xc5, 0x97, 0x0f, 0x00, 0x68, 0x31, 0x1b, 0xf1, 0x71, 0xff, 0x0e, 0x50, 0xb7, 0x68, + 0xb2, 0x44, 0x31, 0xe2, 0xd2, 0xd2, 0x99, 0x0f, 0x02, 0x80, 0xfc, 0x06, 0x40, 0x49, 0x60, 0xbd, + 0x87, 0x00, 0xba, 0x2d, 0x57, 0x06, 0x17, 0x02, 0x60, 0xc1, 0xd5, 0x24, 0xa2, 0xba, 0xf9, 0x01, + 0xc4, 0xaf, 0x0c, 0xeb, 0x4d, 0xa9, 0xf2, 0x86, 0x74, 0x63, 0xfd, 0xb6, 0x80, 0x07, 0xf3, 0x72, + 0x0f, 0xc0, 0x59, 0xae, 0xe8, 0x00, 0x20, 0x92, 0x77, 0x02, 0xe2, 0xe9, 0xcc, 0x87, 0x23, 0x86, + 0x06, 0x57, 0x63, 0x3e, 0xde, 0x5f, 0x1c, 0x80, 0x5f, 0x4f, 0x32, 0x9f, 0x8f, 0x50, 0xba, 0x21, + 0x6a, 0x3d, 0x04, 0xb0, 0x16, 0xec, 0xe1, 0xcc, 0xc0, 0x25, 0x99, 0x5d, 0x0a, 0x2f, 0xa8, 0x36, + 0xcd, 0x2b, 0x70, 0x0f, 0x6e, 0xa3, 0x09, 0x6a, 0x13, 0xd4, 0xfe, 0x66, 0x96, 0x4d, 0xef, 0x23, + 0x7b, 0x84, 0xe9, 0x35, 0x1f, 0xdd, 0xee, 0xda, 0x9d, 0x9c, 0x5f, 0x36, 0x61, 0x32, 0x1d, 0x87, + 0x3e, 0x2a, 0x50, 0xf9, 0xf1, 0xdf, 0xe5, 0x00, 0xa8, 0x04, 0xb2, 0x9c, 0x8f, 0x27, 0x78, 0xa2, + 0xfd, 0xd8, 0x4f, 0xdb, 0xfe, 0xf9, 0xc8, 0xfa, 0x9d, 0x00, 0xb0, 0x5d, 0x5e, 0x3b, 0xe6, 0x45, + 0xb1, 0x3e, 0x06, 0xd0, 0x15, 0x9a, 0x10, 0xf9, 0x2d, 0x00, 0xb6, 0xaf, 0x52, 0xc3, 0x37, 0x02, + 0xc0, 0xd6, 0xba, 0x99, 0xf7, 0xf7, 0xa2, 0x95, 0x07, 0xde, 0x6a, 0xf3, 0x29, 0xa6, 0x12, 0xbc, + 0x7d, 0x60, 0x02, 0x80, 0xcf, 0x01, 0x80, 0x00, 0x2d, 0xa1, 0x7e, 0x1f, 0x00, 0xa2, 0xf9, 0xa1, + 0x7e, 0x2d, 0x45, 0x45, 0xe7, 0xee, 0xad, 0xf9, 0x06, 0x92, 0xba, 0x09, 0x00, 0xcc, 0xf5, 0x47, + 0xe0, 0xd3, 0xc0, 0x2d, 0x14, 0x91, 0x04, 0xbe, 0x21, 0x00, 0xab, 0x14, 0x2a, 0x0b, 0x00, 0xa5, + 0xa3, 0x6e, 0x60, 0xcf, 0xd8, 0x75, 0xc4, 0x17, 0xa1, 0x1b, 0x81, 0xef, 0x04, 0x60, 0x6d, 0x97, + 0x6b, 0xdd, 0x39, 0xb0, 0x19, 0x51, 0xc5, 0x09, 0xa2, 0x75, 0xd7, 0x0b, 0x80, 0xaa, 0x0a, 0xb3, + 0xc3, 0x07, 0x88, 0xd4, 0x13, 0x64, 0x98, 0xa9, 0xd6, 0x31, 0x7f, 0x3a, 0x9f, 0xcf, 0x36, 0x98, + 0xb1, 0xe4, 0x9b, 0x08, 0x01, 0x26, 0xe8, 0x02, 0x30, 0x14, 0xdf, 0x4c, 0x86, 0x10, 0xfa, 0x8b, + 0xb3, 0xce, 0xdd, 0x00, 0x70, 0xbf, 0xfe, 0x33, 0x12, 0x44, 0x6e, 0xb7, 0x9b, 0xa0, 0x0b, 0x42, + 0x20, 0x00, 0xec, 0x00, 0x74, 0x00, 0x10, 0xd8, 0x3c, 0x01, 0x40, 0xb5, 0x29, 0x7e, 0xa6, 0x2c, + 0xeb, 0x65, 0xe9, 0x1b, 0x10, 0x00, 0x36, 0xb1, 0x14, 0xff, 0x13, 0xf4, 0xba, 0xbd, 0x9d, 0xcf, + 0xed, 0x67, 0x7b, 0x7b, 0xf5, 0xf9, 0x66, 0x2f, 0xcc, 0xbf, 0x6d, 0x38, 0x85, 0x9b, 0x82, 0x48, + 0xb6, 0x4d, 0x5f, 0x5e, 0x04, 0x43, 0xe5, 0xee, 0x8c, 0xd9, 0xf7, 0xc7, 0xfd, 0x65, 0x5a, 0x4e, + 0xd5, 0xe2, 0x5d, 0xe7, 0xfe, 0x33, 0x12, 0x52, 0x62, 0xbb, 0xcc, 0x7e, 0x57, 0x26, 0x00, 0xba, + 0x03, 0x00, 0x67, 0xd9, 0x1c, 0x41, 0x55, 0x4b, 0x61, 0x6b, 0x91, 0x45, 0x01, 0xa8, 0x0c, 0x20, + 0xaa, 0x97, 0x5c, 0x2e, 0x99, 0xf5, 0x33, 0xfe, 0x4e, 0xe0, 0xfa, 0xd6, 0x00, 0xbc, 0x5d, 0x47, + 0xfd, 0x52, 0x4a, 0x61, 0xbf, 0x0f, 0x11, 0x78, 0xfd, 0x0e, 0x00, 0x28, 0x2a, 0x20, 0xe0, 0xdc, + 0x7c, 0x2f, 0x92, 0x47, 0xbc, 0x6d, 0x3a, 0xb5, 0x1e, 0xa5, 0x14, 0xc6, 0x43, 0x24, 0x76, 0x7b, + 0x11, 0x02, 0x38, 0x21, 0xad, 0x00, 0x00, 0x1c, 0xdc, 0x00, 0xb0, 0x7f, 0x57, 0x4c, 0x00, 0xec, + 0xbb, 0x2e, 0x01, 0xa4, 0x84, 0xb2, 0x02, 0xb0, 0xf9, 0x42, 0x00, 0x5d, 0x9b, 0x97, 0x04, 0xde, + 0x46, 0xfd, 0x27, 0xb4, 0x50, 0xcc, 0xcd, 0x9b, 0xa8, 0x58, 0xfd, 0x34, 0x44, 0xb4, 0x7c, 0x1e, + 0x2f, 0x45, 0xc9, 0x5b, 0x24, 0x00, 0x0d, 0xe1, 0x01, 0xc0, 0x69, 0x8d, 0x07, 0x22, 0x80, 0x01, + 0x80, 0xed, 0xf2, 0xfc, 0x19, 0x00, 0x66, 0xe8, 0x23, 0x00, 0x83, 0x33, 0x00, 0x14, 0x76, 0xff, + 0x63, 0xbd, 0xc0, 0xfa, 0x4d, 0xaf, 0x5f, 0xd1, 0x3d, 0x7e, 0x78, 0x7f, 0xbd, 0x5d, 0xdf, 0xae, + 0xd7, 0x5f, 0x0c, 0x81, 0x5a, 0xfd, 0x14, 0x41, 0x24, 0xcc, 0x00, 0xd2, 0x03, 0x00, 0x44, 0x89, + 0x78, 0xd1, 0xec, 0x37, 0x52, 0x6e, 0xb7, 0x19, 0x40, 0x7a, 0x07, 0xe0, 0x24, 0x38, 0xcd, 0x09, + 0x2b, 0x00, 0xd5, 0xda, 0xbd, 0x44, 0x58, 0x9b, 0x6f, 0x71, 0x58, 0xbe, 0x44, 0x8c, 0x79, 0xe7, + 0xec, 0xe4, 0xca, 0x74, 0xa3, 0x72, 0x3a, 0x02, 0x50, 0x15, 0xac, 0xff, 0x9f, 0xf6, 0x47, 0xa0, + 0x11, 0xe0, 0x87, 0x54, 0x29, 0x24, 0x00, 0x4d, 0x80, 0xea, 0x20, 0x90, 0xd1, 0x01, 0xa4, 0x0b, + 0x01, 0x14, 0x44, 0x14, 0xbf, 0xb1, 0xb8, 0xa4, 0x52, 0x9c, 0x0f, 0x6f, 0xe8, 0x12, 0x6f, 0x00, + 0x98, 0x10, 0x13, 0x80, 0xc4, 0x76, 0x3d, 0x8a, 0x02, 0xba, 0x3e, 0xc3, 0x8b, 0xe2, 0x0e, 0xaf, + 0x9f, 0x00, 0x0a, 0xb4, 0x9a, 0xcf, 0x01, 0x70, 0xbd, 0x63, 0x00, 0x46, 0xa0, 0x2a, 0x8a, 0xd7, + 0xbf, 0xfd, 0x73, 0x3e, 0x5f, 0xdb, 0xcf, 0xf6, 0x6b, 0xcf, 0x8f, 0x00, 0xe2, 0xd8, 0xbe, 0x58, + 0x7e, 0x21, 0x81, 0x9c, 0x20, 0x33, 0x80, 0x62, 0x05, 0xf1, 0x4a, 0x58, 0xa7, 0xdc, 0xe2, 0xd3, + 0x74, 0x7c, 0x71, 0x00, 0x8c, 0x97, 0x29, 0xa1, 0x84, 0x98, 0x12, 0xeb, 0xef, 0xfd, 0xbd, 0x3e, + 0xf4, 0xf7, 0x68, 0x3e, 0x77, 0x40, 0x0d, 0x1d, 0x44, 0x48, 0x00, 0xa2, 0x2c, 0x88, 0xeb, 0x79, + 0x01, 0xea, 0x53, 0x03, 0x18, 0x71, 0x35, 0x00, 0xff, 0x9e, 0x4f, 0xe7, 0xab, 0x8d, 0x5f, 0x23, + 0x41, 0x35, 0x32, 0x3f, 0xde, 0xaf, 0xb0, 0x63, 0x44, 0x7f, 0x7c, 0x50, 0x2e, 0x03, 0x40, 0x8c, + 0xe5, 0xfe, 0x06, 0x3e, 0x2a, 0x40, 0xe4, 0xf9, 0x0d, 0xe0, 0x63, 0x7c, 0x04, 0x13, 0xd6, 0x76, + 0x99, 0x9e, 0x45, 0x99, 0xef, 0x51, 0xb3, 0x9d, 0x66, 0xfc, 0xc1, 0x7a, 0x2e, 0x68, 0xeb, 0xfc, + 0xeb, 0xeb, 0xab, 0x8f, 0xc3, 0x79, 0x3e, 0x8f, 0xa0, 0x76, 0x2f, 0x35, 0x1d, 0xa6, 0xa9, 0x3e, + 0x88, 0x67, 0xc8, 0xff, 0xd1, 0x7e, 0x2c, 0x03, 0x36, 0xfe, 0xae, 0x67, 0x11, 0xb9, 0x0d, 0x7e, + 0x53, 0x84, 0x8d, 0xbf, 0x05, 0x40, 0xae, 0xb7, 0x94, 0x72, 0x1b, 0x04, 0x80, 0x3e, 0xfe, 0x16, + 0xcb, 0x22, 0x48, 0x6d, 0x60, 0x38, 0xae, 0xb0, 0xf1, 0xd5, 0x87, 0x42, 0x7f, 0xac, 0x01, 0xb0, + 0x31, 0x3b, 0x6c, 0x7c, 0x05, 0x21, 0x6e, 0x37, 0x12, 0xe0, 0x7f, 0x41, 0xf9, 0x34, 0xbd, 0x31, + 0xfe, 0x4c, 0xc3, 0x96, 0x52, 0xba, 0xc9, 0xc3, 0xbf, 0x5e, 0x8b, 0x03, 0x60, 0x7f, 0x7d, 0x5c, + 0x70, 0x7e, 0x89, 0x25, 0x6f, 0x28, 0x12, 0x77, 0x4d, 0x78, 0x43, 0xfb, 0x1b, 0x35, 0x8d, 0x19, + 0x54, 0xab, 0x2f, 0xbb, 0x70, 0x85, 0x27, 0xd7, 0xaf, 0x25, 0x85, 0x22, 0x02, 0xd7, 0x91, 0x5f, + 0x94, 0xd7, 0xfe, 0xfa, 0xb0, 0x60, 0x6c, 0x4d, 0x2b, 0x75, 0x66, 0xf3, 0xef, 0x3a, 0xfb, 0x32, + 0xd4, 0x93, 0x05, 0xf6, 0xff, 0xdc, 0x4f, 0x9a, 0xef, 0x92, 0x39, 0x7f, 0x13, 0x9e, 0x47, 0x9f, + 0x0c, 0x40, 0x4a, 0x09, 0xa1, 0x40, 0xca, 0x72, 0x03, 0xd8, 0x8c, 0xb0, 0xbf, 0x9e, 0x0b, 0xfe, + 0x18, 0x00, 0x44, 0xe7, 0x3b, 0xb0, 0xcb, 0xec, 0x48, 0x39, 0x7d, 0xdc, 0xff, 0x5b, 0x60, 0x4e, + 0x02, 0x40, 0x2e, 0xb8, 0xcf, 0x67, 0x6f, 0x8e, 0x7c, 0xfe, 0xf9, 0x00, 0xe2, 0x0c, 0x20, 0x11, + 0x00, 0xfb, 0xeb, 0x4f, 0x00, 0xe0, 0xff, 0x60, 0x18, 0x4f, 0x84, 0x28, 0x07, 0x42, 0x4e, 0x1f, + 0xf7, 0xff, 0x16, 0x88, 0xc4, 0x33, 0x40, 0x56, 0x00, 0xd0, 0xf8, 0x64, 0x00, 0x21, 0x59, 0xbf, + 0x91, 0x42, 0x99, 0x36, 0x28, 0x5b, 0x2a, 0x63, 0x9e, 0xfd, 0xf5, 0xbb, 0x82, 0xa9, 0xe7, 0x27, + 0x22, 0xa1, 0xf4, 0x6b, 0xb3, 0x4a, 0x07, 0xc0, 0xe9, 0xa5, 0xff, 0x27, 0x70, 0x35, 0xeb, 0x00, + 0xb4, 0xdc, 0x89, 0xc5, 0x8c, 0x79, 0xfe, 0x82, 0xd3, 0x53, 0xad, 0x84, 0xd4, 0x2c, 0x14, 0x12, + 0x06, 0x20, 0xb1, 0x0c, 0xe4, 0x80, 0xf7, 0xd7, 0x47, 0x05, 0x43, 0x22, 0xa0, 0x80, 0x7a, 0x06, + 0x34, 0x94, 0x92, 0xc4, 0x04, 0xe5, 0x00, 0xc0, 0x69, 0x2e, 0xff, 0xd0, 0xff, 0x2b, 0x70, 0x07, + 0x90, 0x8a, 0x9f, 0x28, 0xa6, 0x54, 0x08, 0xe0, 0xd9, 0x4d, 0x4c, 0xb1, 0xc3, 0x97, 0xa1, 0x34, + 0xa9, 0x8a, 0x58, 0xd3, 0x48, 0x63, 0x7f, 0xcd, 0x82, 0xf9, 0x44, 0xa8, 0x5b, 0xf4, 0x0c, 0xc4, + 0x50, 0xfc, 0x79, 0x00, 0xa5, 0xaf, 0xc0, 0xe9, 0x05, 0x78, 0xe4, 0xfa, 0x29, 0x96, 0xa2, 0x09, + 0xf0, 0x4a, 0xb3, 0x28, 0xcc, 0xe9, 0x47, 0x79, 0x3e, 0x00, 0x3e, 0xce, 0x61, 0x3b, 0x0b, 0x2c, + 0x00, 0x40, 0x1e, 0x2c, 0xb8, 0x30, 0xde, 0x0c, 0xee, 0x08, 0x71, 0x5c, 0x28, 0x4a, 0xc4, 0xc3, + 0x69, 0xf6, 0xff, 0xcb, 0x56, 0x45, 0x93, 0x8e, 0xfa, 0x53, 0x31, 0x27, 0xc6, 0x7a, 0xcf, 0x27, + 0x80, 0x83, 0xd6, 0x78, 0x75, 0x15, 0xca, 0x42, 0x3b, 0xce, 0xe0, 0xdc, 0x2c, 0xcb, 0xe1, 0x34, + 0x3d, 0x8b, 0x9a, 0x7d, 0xb9, 0x4b, 0x30, 0xe2, 0xc9, 0x8d, 0xfc, 0x7f, 0x9d, 0xc7, 0x50, 0x97, + 0x60, 0x51, 0x26, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, }; #endif diff --git a/src/lang/glyph_ru.png b/src/lang/glyph_ru.png index 0c819065d64c4151d0cffd24f370a1d0214cc22d..003556f591e907c596d549daf39bf055bf3f8d20 100644 GIT binary patch delta 2002 zcmV;@2QB#F7~l_(B!53pOjJbx003G-0Pn_g-lb!uYdN)qQqGiGb6P1e2mp*)DgW<` za9k{b2!zuNko5H_Rq%!_jqiwwV|e2 z$#Omd%DT0bW~N-zVV=!Q9f19+N^NfGt|~2B2Z3P0!Q2w}67TE9z<^UcGK0yK?z!uQs+foaF`}rzQkZo;1z249@9eFb?(J@AW0kE;x zuh33_`Q}$v*z=e5si8Z79b(W;APFLRCpG}=@fHV>F5eYQZEpUKx$%5qoFLyFXp$RF z4s1bH2W9;#4OfN z03ZSB^%JUK0a!(G2w>G-vcSr6rPTn`j{qbCkiG=KK6U2!TB`%_1c*8T=*Iw9@Rib1 z)*E2;AAbPg`s*e^Qj#!ms8mT+^g{q4gs%Y5UY~G(Rnh1Gyx^wu?*Xv>>$N@-AOKO8 zxE8!>UI9s`|dX4kn;;T?d+yv3If0BA8A@p1nSP`7BZL^0yh(wPqe zfcyqPNnpK)0J<$#1{VTg!PO+9y7>XbuMF!=sq%(&WBs;(2lH|dz*(;703ecg0^;e+ zhkql623KP~-d`MmUr#chk5IZHYCQz77VP27z$KYo3NNTO%`0#ZZleim6V(1@mQC*? zdxYsVAKmWSot$4bVKN{IXN8r=IEfkRiz99gs6e;QBC5ZF8cK(#4;rY!4a=^GFLHn9}{6ZE>hozLxOdwccyW-rXYZ8(LSf=ISa zUtR=5jHj%zjrU0J;MJXW1M*z-f&K zB7gya?ehE?0A}bT0E06C6n6h(y}Z*f?@M2vao?BvRHqjEX|P!+8IpY}(f5#WbZ zDI@?*fa)NS(E+3j0Te_Ozp=QaQk)NO=n`)Lm=F_y#CAQ30=hoKi{cKip8yK9n$H1n zy<-4Ipel;jzx{JQU)#_2Yk$v=0OHubSbiaaoFFrRVg>O^Sf||L({y}s0F0L@p@f(c z>+k)&KJ@o!K6gM39Yja~qAZB(c>(HE0~m2N0RNs(=c|ohBSAGXKi;pfV?=*^P%Z;N zjOG3YJ}N-u`3>M>d;}BLcA1_0kAPUY)y)phw!1ivwVPeOz#Ui6w6+5_e5_L;D*wjTuy{FS~GsC)ckf zg(3pikzbV8{`#X7Iepy!TVPHCKrXn?XK#*t{`mmn3?LBz`|D2t;QwG4PlPB3LQWs| z{}zbEGeA}V(D-BkAz8nXLYX!wTPkCo{q?(osplsmq4aCBN`D8y>81ZCa5d`ywA_is zjCuZo(^IX4)GQPd1|YEv zVLJ;f06-orxJxkJ4DJYVTqsJ!!)f;a%T`5`j`~wEC&qfuCxC<2cy$%ZLOagj+$_uC kG(C%&eYs08;>nHtf1SrrmtavQ>i_@%07*qoM6N<$f`uxjW&i*H literal 3169 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 IbHoq-2A8EilK=n! diff --git a/src/lang/hu.h b/src/lang/hu.h index d3fbc52..2640232 100644 --- a/src/lang/hu.h +++ b/src/lang/hu.h @@ -1,11 +1,7 @@ #ifndef H_LANG_HU #define H_LANG_HU -// Hungarian translation: Varga Viktor -// Comment: Only tilde was used for double for long and u -// Todo to correct this: -// 1. add the " accent glpyh to the end of Russian charset, -// 2. modify the ui.h +// Thanks: Varga Viktor const char *STR_HU[] = { "" // help @@ -16,7 +12,7 @@ const char *STR_HU[] = { "" "~OL)ESEK %d@@" "FELVETT %d@@" "TITKOK %d/%d@@" - "SZ~UKS)EGES ID+O %s" + "SZ~UKS)EGES ID\"O %s" , "J)at)ek ment)ese..." , "Ment)es k)esz!" , "MENT)ESI HIBA!" @@ -27,7 +23,7 @@ const char *STR_HU[] = { "" , "Ki" , "Side-By-Side" , "Anaglyph" - , "Osztott k)eperny+o" + , "Osztott k)eperny\"o" , "VR" , "Alacsony" , "K~ozepes" @@ -54,7 +50,7 @@ const char *STR_HU[] = { "" // inventory option , "J)at)ek" , "T)erk)ep" - , "Ir)anyt+u" + , "Ir)anyt\"u" , "Statisztika" , "Lara otthona" , "R)eszletess)egi szintek" @@ -65,34 +61,34 @@ const char *STR_HU[] = { "" , "J)at)ek bet~olt)ese" , ")Uj j)at)ek" , "Szint )ujraind)it)asa" - , "Kil)ep)es a kezd+ok)eperny+oh~oz" + , "Kil)ep)es a kezd\"ok)eperny\"oh~oz" , "Kil)ep)es a j)at)ekb)ol" , "Szint kiv)alaszt)asa" // detail options , "R)eszletek kiv)alaszt)asa" - , "Sz+ur)es" + , "Sz\"ur)es" , "Vil)ag)it)as" , ")Arny)ekok" , "V)iz" , "VSync" , "Sztere)o" - , "Egyszer+u t)argyak" + , "Egyszer\"u t)argyak" , "Felbont)as" , STR_SCALE // sound options - , "Hanger+o be)all)it)asa" - , "Visszaver+od)es" + , "Hanger\"o be)all)it)asa" + , "Visszaver\"od)es" , "Feliratok" , "Nyelv" // controls options , "Ir)any)it)as be)all)it)asa" - , "Billenty+uzet" + , "Billenty\"uzet" , "Gamepad" , "Vibr)aci)o" , ")Uj c)elpont" , "Multi-c)elz)as" // controls - , "Bal", "Jobb", "Fut)as", "Vissza", "Ugr)as", "S)eta", "Akci)o", "Fegyver el+ov)etel", "N)ez", "Gugol", "L~ok", "Gurul", "T)argylista", "Kezd)es" + , "Bal", "Jobb", "Fut)as", "Vissza", "Ugr)as", "S)eta", "Akci)o", "Fegyver el\"ov)etel", "N)ez", "Gugol", "L~ok", "Gurul", "T)argylista", "Kezd)es" , STR_KEYS // inventory items , "Ismeretlen" @@ -134,8 +130,8 @@ const char *STR_HU[] = { "" // TR1 subtitles /* CAFE */ , "[43500]Mit kell tennie az embernek, ahhoz,@hogy megkapja azt a bizonyos figyelmet?" - "[47500]Neh)ez pontosan megmondani,@de )ugy t+unik j)ol vagy." - "[50000]Nos, nagyszer+u. B)ar az az igazs)ag,@nem )en akarlak." + "[47500]Neh)ez pontosan megmondani,@de )ugy t\"unik j)ol vagy." + "[50000]Nos, nagyszer\"u. B)ar az az igazs)ag,@nem )en akarlak." "[54500]Nem?" "[55000]Nem. Miss Jacqueline Natla szeretne,@a Natla Technologies-t)ol." "[59000]Tudod, minden f)enyes@)es sz)ep alkot)oja?" @@ -146,7 +142,7 @@ const char *STR_HU[] = { "" "[73500]Bocs. )En csak a sport)ert j)atszom." "[76000]Akkor tetszeni fog egy nagy park." "[78000]Peru. Hatalmas hegyl)ancok, amit fel kell fedezni.@J)egfalak. )Eles szikl)ak. Vad szelek." - "[87500])Es itt van ez a kis csecsebecse:@+osi id+ok misztikus er+ovel rendelkez+o m+ut)argya" + "[87500])Es itt van ez a kis csecsebecse:@\"osi id\"ok misztikus er\"ovel rendelkez\"o m\"ut)argya" "[92500]eltemetve Qualopec fel nem lelt s)irj)aban." "[96000]Ez az ami )erdekel." "[98000]Holnap elmehetsz.@Elfoglalt vagy holnap?" @@ -154,10 +150,10 @@ const char *STR_HU[] = { "" "[49000])Athelyezve Szt. Ferenc kolostor)aba, )uj k)is)ert)esek k)inoznak engem." "[53500]A testv)erek k~ozt az a h)ir j)arja, hogy a kolostor alatt@ker~ult s)irba Tihocan," "[60000]egyike az elveszett kontinens, Atlantisz,@ legend)as uralkod)oinak," - "[64500])es vele egy~utt fekszik az +o darabja@az Atlantiszi Scion-nak." + "[64500])es vele egy~utt fekszik az \"o darabja@az Atlantiszi Scion-nak." "[68000]A med)alt felosztott)ak a h)arom uralkod)o k~oz~ott@" - "[72500]ami hatalmas er+oket f)ekez meg.@Er+ot, ami meghaladja az alkot)o erej)et is." - "[79000]Izzad a l)abam ezekt+ol a lehet+os)egekt+ol,@amik olyan k~ozel )allnak a haland)o )enemhez." + "[72500]ami hatalmas er\"oket f)ekez meg.@Er\"ot, ami meghaladja az alkot)o erej)et is." + "[79000]Izzad a l)abam ezekt\"ol a lehet\"os)egekt\"ol,@amik olyan k~ozel )allnak a haland)o )enemhez." "[85500]Minden este t)ul teszem magam@ezeken a fant)azi)akon, de ez val)oj)aban egy teszt." "[92000]" "[93500]Pierre. Nee. Te szem)et." @@ -168,7 +164,7 @@ const char *STR_HU[] = { "" "[20000]Ott hagytuk Larson-t szelet aratni, mi?" "[22500]Ha ez a kifejez)es." "[24000]Nos, a kis nyaral)asi zavarg)asnak most m)ar v)ege." - "[27000]Itt az ideje visszaadni azt, amit ellopt)al t+olem." + "[27000]Itt az ideje visszaadni azt, amit ellopt)al t\"olem." "[30000]Pr)ob)aljuk meg az )eteldobozt." "[32000]" "[42500]Nos? ~Old meg!" @@ -180,8 +176,8 @@ const char *STR_HU[] = { "" "[65000]" "[136000]Mi a fene volt ez?" "[138000]Mi?" - "[138500]Egyszer+u." - "[140500]Val)osz)in+uleg csak egy hal." + "[138500]Egyszer\"u." + "[140500]Val)osz)in\"uleg csak egy hal." "[142500]Ez egy hal, k~oly~ok." "[145000]Ember, meg kell tanulnod laz)itani.@Visszamegyek. J~ossz?" "[152000]" @@ -190,21 +186,21 @@ const char *STR_HU[] = { "" "[161500]K)eszen )allsz m)ar?" /* PRISON */ , "[00001]Nem tehetik ezt!" - "[01500]El)it)elj~uk ~Ont, atlantiszi Natla a b+unei)ert." - "[06000]Hatalmaddal er+oteljesen vissza)el)esei miatt,@ )es mert kiraboltad a mi..." + "[01500]El)it)elj~uk ~Ont, atlantiszi Natla a b\"unei)ert." + "[06000]Hatalmaddal er\"oteljesen vissza)el)esei miatt,@ )es mert kiraboltad a mi..." "[11500]Nem tehetik! )En..." "[12500]Megsz~untetve a beleegyez)es szabad k~otel)ek)et@amely alatt n)ep~unket ir)any)itj)ak," "[18500])es megt)amadva Tihocan-t )es engem a sereg~unkkel." "[23500]A harcosaink t)avoztak a piramisunkb)ol" "[27000])igy fel tudod haszn)alni a piramist - annak erej)et@a teremt)esre - az esztelen rombol)asodhoz." "[33500]Esztelen!? N)ezz magadra!" - "[35500]Egyik+ot~oknek sincs egy lelem)enyes@gondolat se a fej)eben." + "[35500]Egyik\"ot~oknek sincs egy lelem)enyes@gondolat se a fej)eben." "[40500]Pazarl)ok!" "[41500]Csak csin)alj)atok." "[44000]Tihocan!" "[45000]Egy szent helyet haszn)alt)al@saj)at ~or~om~odre," "[49500]mint valami korcs gy)arat." - "[51000]+Ok a t)ul)el+ok. Egy )uj gener)aci)o." + "[51000]\"Ok a t)ul)el\"ok. Egy )uj gener)aci)o." "[54000]Egy lem)esz)arolt halom most." "[56000])Es te. A pokol torn)ac)ara z)arunk." "[60000]Az ereid, a sz)ived, a l)abad," @@ -216,17 +212,17 @@ const char *STR_HU[] = { "" "[05500])Es te - a nagy )ujra megnyit)ora, gondolom." "[09500]Az evol)uci)o bajban van - a term)eszetes szelekci)o m)ara alig )erv)enyes~ul..." "[13500]Az )uj h)us megjelen)ese fel fogja ism)et gerjeszteni a ter~uleti vit)akat" - "[17500] - meger+os)it )es el+oseg)it minket..." + "[17500] - meger\"os)it )es el\"oseg)it minket..." "[20500]M)eg )uj fajokat is l)etre hozhat." "[22500]Az evol)uci)o szteroidokon, akkor." "[24500]Egy seggber)ug)as...@a nyomorult Qualopec-enk )es Tihocan-nak nem voltak ~otletei" "[29500] - Atlantisz kataklizm)aja az )ert)ektelen gyeng)ek verseny)et s)ujtotta..." - "[33500]visszazuhan)asra k)enyszer)itve +oket )ujra a t)ul)el)es alapjaihoz..." + "[33500]visszazuhan)asra k)enyszer)itve \"oket )ujra a t)ul)el)es alapjaihoz..." "[37000]Nem volna szabad )ugy t~ort)ennie." "[39000]Vagy )igy." - "[40000]A kikel)es 15 m)asodperc m)ulva kezd+odik." - "[43000]Most m)ar k)es+o le)all)itani!" - "[45000]A m+uvelet sz)ive n)elk~ul nem!" + "[40000]A kikel)es 15 m)asodperc m)ulva kezd\"odik." + "[43000]Most m)ar k)es\"o le)all)itani!" + "[45000]A m\"uvelet sz)ive n)elk~ul nem!" "[47000]Neee!" "[50000]T)IZ" "[54000]~OT..." @@ -236,11 +232,11 @@ const char *STR_HU[] = { "" "[00001]Nos, most m)ar a teljes figyelmem rajtad" "[02500]- M)egsem vagyok biztos abban, hogy )en is megkaptam a tied." "[05000]Hell)o?" - "[06000]Elkaplak )es lel+olek, mint egy kuty)at." + "[06000]Elkaplak )es lel\"olek, mint egy kuty)at." "[09000]Term)eszetesen." "[10000]Te )es az az idi)ota Scion darabod." "[13000]Annyira szeretn)ed megtartani, hogy kihaszn)alom ezt..." - "[17000]V)arjunk... itt most a m+ut)argyr)ol besz)el~unk?" + "[17000]V)arjunk... itt most a m\"ut)argyr)ol besz)el~unk?" "[20000]Egyenesben vagyunk ... eg)eszen ..." "[22000]Tarts ki - Sajn)alom" "[24000]- ez csak egy r)esz, mondtad - hol van a t~obbi?" @@ -248,7 +244,7 @@ const char *STR_HU[] = { "" "[29500])Es hol van az?" "[30500]H)a)a)a. Nem vagy el)eg gyors, hogy utol)erd." "[34000]Sz)oval azt gondolod, ez a besz)elget)es csak arra van, hogy feltartson?" - "[37000]Nem tudom, hogy a kis ny)ul-b)eka l)abai hov)a vezetik +ot." + "[37000]Nem tudom, hogy a kis ny)ul-b)eka l)abai hov)a vezetik \"ot." "[42000]Meg kell k)erdezned Ms. Natla-t)ol." "[46000]" "[51000]K~osz~on~om. Megteszem." @@ -265,32 +261,32 @@ const char *STR_HU[] = { "" /* 28 */ , "OK. Ugr)aljunk egy kicsit.@Nyomd meg az ugr)as gombot." /* 29 */ , "Most nyomd meg )ujra )es gyorsan nyomj hozz)a@egy ir)anyt )es abba az ir)anyba fogok ugrani." /* 30 */ , ")A)a, a nagyterem.@Bocs a l)ad)ak)ert, de n)eh)any dolgot@rakt)arakba vitetek )es sz)all)it)ok m)eg nem j~ottek." - /* 31 */ , "Fuss oda egy l)ad)ahoz, )es am)ig nyomva tartod az el+ore gombot,@nyomj akci)o gombot )es )en felugrok r)a." + /* 31 */ , "Fuss oda egy l)ad)ahoz, )es am)ig nyomva tartod az el\"ore gombot,@nyomj akci)o gombot )es )en felugrok r)a." /* 32 */ , "Ez kor)abban b)alterem volt, de )atalak)itottam@ a saj)at torna termemnek.@Mi a v)elem)enyed?@Nos csin)aljunk n)eh)any gyakorlatot." /* 33 */ , "Nem mindenhova rohanok.@Ha )ovatos akarok lenni, s)et)alok@Tartsd nyomva a s)eta gombot, )es s)et)alj a feh)er vonalhoz." /* 34 */ , "A s)eta gomb nyomva tart)as)aval nem fogok leesni, m)eg akkor sem ha megpr)ob)alod.@Rajta, pr)ob)ald ki." /* 35 */ , "Ha szeretn)el k~orbe n)ezni, tartsd nyomva a n)ez gombot.@Ut)ana nyomd le az ir)anyt amerre n)ezni szeretn)el." - /* 36 */ , "Ha egy ugr)as t)ul nagy nekem, el tudom kapni a peremet )es megmenteni magam@egy cs)unya zuhan)ast)ol. S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig @m)ar nem megyek tov)abb. Ut)ana nyomj ugr)ast, ut)ana meg r~ogt~on@ el+ore gombot, )es am)ig a leveg+oben vagyok, nyomd le )es tartsd nyomva az akci)o gombot." - /* 37 */ , "Nyomj el+or)et, )es felm)aszom." + /* 36 */ , "Ha egy ugr)as t)ul nagy nekem, el tudom kapni a peremet )es megmenteni magam@egy cs)unya zuhan)ast)ol. S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig @m)ar nem megyek tov)abb. Ut)ana nyomj ugr)ast, ut)ana meg r~ogt~on@ el\"ore gombot, )es am)ig a leveg\"oben vagyok, nyomd le )es tartsd nyomva az akci)o gombot." + /* 37 */ , "Nyomj el\"or)et, )es felm)aszom." /* 38 */ , "Ha fut)o ugr)ast csin)alok, akkor tudok ekkor)at ugrani, nem probl)ema." - /* 39 */ , "S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig m)ar nem megyek tov)abb.@Azt)an engedd el a s)et)at, nyomj h)atr)at, hogy neki tudjak futni.@Nyomj el+or)et, )es r~ogt~on nyomd le )es tartsd nyomva az ugr)as gombot.@Nem fogok elugrani az utols)o pillanatig." - /* 40 */ , "Helyes. Ez egy igaz)an nagy@ Csin)alj egy fut)o ugr)ast, mint kor)abban, de am)ig a leveg+oben@vagyok, nyomd le )es tarts nyomva az akci)o gombot, hogy elkapjam a peremet." + /* 39 */ , "S)et)alj a sz)el)ehez a feh)er vonallal, addig, am)ig m)ar nem megyek tov)abb.@Azt)an engedd el a s)et)at, nyomj h)atr)at, hogy neki tudjak futni.@Nyomj el\"or)et, )es r~ogt~on nyomd le )es tartsd nyomva az ugr)as gombot.@Nem fogok elugrani az utols)o pillanatig." + /* 40 */ , "Helyes. Ez egy igaz)an nagy@ Csin)alj egy fut)o ugr)ast, mint kor)abban, de am)ig a leveg\"oben@vagyok, nyomd le )es tarts nyomva az akci)o gombot, hogy elkapjam a peremet." /* 41 */ , "Sz)ep." - /* 42 */ , "Pr)ob)alj meg felm)aszni itt.@Nyomj el+or)et, )es tartsd nyomva az akci)o gombot." - /* 43 */ , "Nem tudok felm)aszni, mert a r)es t)ul kicsi.@Nyomj jobbot, )es oldalra m)aszom,@am)ig el)eg hely lesz, akkor nyomj el+or)et." + /* 42 */ , "Pr)ob)alj meg felm)aszni itt.@Nyomj el\"or)et, )es tartsd nyomva az akci)o gombot." + /* 43 */ , "Nem tudok felm)aszni, mert a r)es t)ul kicsi.@Nyomj jobbot, )es oldalra m)aszom,@am)ig el)eg hely lesz, akkor nyomj el\"or)et." /* 44 */ , "Remek!@Ha nagy a m)elys)eg, )es nem szeretn)ek@s)er~ulni a leugr)assal, le tudom magam ereszteni )ovatosan." /* 45 */ , "Nyomj h)atr)at )es h)atrafel)e ugrok.@Azonnal nyomd meg )es tartsd nyomva az akci)o gombot,@)es elkapom a peremet )utban lefel)e." /* 46 */ , "Akkor engedd el." /* 47 */ , "Menj~unk )uszni egyet." /* 48 */ , "Az ugr)as gomb )es az ir)anyok@navig)alnak engem a v)iz alatt." - /* 49 */ , ")O! Leveg+o!@Csak haszn)ald az el+or)et, balr)at, vagy jobbr)at@a felsz)in k~ozeli man+overez)eshez.@Nyomj ugr)ast egy )ujabb )usz)ashoz lemer~ul)eshez.@Vagy menj a sz)el)ehez, )es nyomj akci)o gombot a kim)asz)ashoz." + /* 49 */ , ")O! Leveg\"o!@Csak haszn)ald az el\"or)et, balr)at, vagy jobbr)at@a felsz)in k~ozeli man\"overez)eshez.@Nyomj ugr)ast egy )ujabb )usz)ashoz lemer~ul)eshez.@Vagy menj a sz)el)ehez, )es nyomj akci)o gombot a kim)asz)ashoz." /* 50 */ , "Helyes. A legjobb lesz, ha leveszem ezeket a nedves ruh)akat." /* 51 */ , "Mond: Cs)i)iz!" /* 52 */ , "Semmi szem)elyes." - /* 53 */ , "M)eg mindig f)aj a fejem t+oled.@)Es m)ok)as ~otleteket ad nekem.@Hogy l+ojelek a pokolra, p)eld)aul!" + /* 53 */ , "M)eg mindig f)aj a fejem t\"oled.@)Es m)ok)as ~otleteket ad nekem.@Hogy l\"ojelek a pokolra, p)eld)aul!" /* 54 */ , "Nem tudsz meg~olni engem vagy a fi)ok)aimat olyan k~onnyed)en, Lara." /* 55 */ , "Egy kicsit elk)esett a d)ij)atad)as, non?@M)eg mindig a r)eszv)etel ami sz)am)it." - /* 56 */ , "R)am l+osz?@R)am l+osz, mi?@Nincs senki m)as itt, csak r)am l+ohetsz!" + /* 56 */ , "R)am l\"osz?@R)am l\"osz, mi?@Nincs senki m)as itt, csak r)am l\"ohetsz!" // TR1 levels , "Lara otthona" , "Barlangok" diff --git a/src/platform/nix/main.cpp b/src/platform/nix/main.cpp index 8696566..ddc4701 100644 --- a/src/platform/nix/main.cpp +++ b/src/platform/nix/main.cpp @@ -387,6 +387,7 @@ int checkLanguage() { if (id == TWOCC("fi")) return STR_LANG_FI - STR_LANG_EN; if (id == TWOCC("cs")) return STR_LANG_CZ - STR_LANG_EN; if (id == TWOCC("zh")) return STR_LANG_CN - STR_LANG_EN; + if (id == TWOCC("hu")) return STR_LANG_HU - STR_LANG_EN; return 0; } diff --git a/src/platform/rpi/main.cpp b/src/platform/rpi/main.cpp index 2612820..295ece5 100644 --- a/src/platform/rpi/main.cpp +++ b/src/platform/rpi/main.cpp @@ -491,6 +491,7 @@ int checkLanguage() { if (id == TWOCC("fi")) return STR_LANG_FI - STR_LANG_EN; if (id == TWOCC("cs")) return STR_LANG_CZ - STR_LANG_EN; if (id == TWOCC("zh")) return STR_LANG_CN - STR_LANG_EN; + if (id == TWOCC("hu")) return STR_LANG_HU - STR_LANG_EN; return 0; } diff --git a/src/platform/web/index.php b/src/platform/web/index.php index 0855075..591ade6 100644 --- a/src/platform/web/index.php +++ b/src/platform/web/index.php @@ -142,6 +142,8 @@ id = 11; } else if (lang == "zh") { id = 12; + } else if (lang == "hu") { + id = 13; } Module.ccall('set_def_lang', 'null', ['number'], [id]); } diff --git a/src/platform/win/OpenLara.vcxproj b/src/platform/win/OpenLara.vcxproj index bd624dd..1735d65 100644 --- a/src/platform/win/OpenLara.vcxproj +++ b/src/platform/win/OpenLara.vcxproj @@ -149,6 +149,7 @@ + diff --git a/src/platform/win/OpenLara.vcxproj.filters b/src/platform/win/OpenLara.vcxproj.filters index 52a1913..bb27acf 100644 --- a/src/platform/win/OpenLara.vcxproj.filters +++ b/src/platform/win/OpenLara.vcxproj.filters @@ -131,6 +131,9 @@ gapi + + lang + diff --git a/src/platform/win/main.cpp b/src/platform/win/main.cpp index daf66a3..2fc987a 100644 --- a/src/platform/win/main.cpp +++ b/src/platform/win/main.cpp @@ -632,6 +632,7 @@ int checkLanguage() { case LANG_FINNISH : str = STR_LANG_FI; break; case LANG_CZECH : str = STR_LANG_CZ; break; case LANG_CHINESE : str = STR_LANG_CN; break; + case LANG_HUNGARIAN : str = STR_LANG_HU; break; } return str - STR_LANG_EN; } diff --git a/src/platform/xb1/main.cpp b/src/platform/xb1/main.cpp index 1207fb1..ac66ab9 100644 --- a/src/platform/xb1/main.cpp +++ b/src/platform/xb1/main.cpp @@ -380,6 +380,8 @@ public: str = STR_LANG_CZ; } else if (CHECK("zh")) { str = STR_LANG_CN; + } else if (CHECK("hu")) { + str = STR_LANG_HU; } return str - STR_LANG_EN; diff --git a/src/ui.h b/src/ui.h index f521d78..48c8b39 100644 --- a/src/ui.h +++ b/src/ui.h @@ -47,13 +47,13 @@ namespace UI { int advGlyphsStart; - #define RU_MAP "" "i~" + #define RU_MAP "" "i~\"" #define RU_GLYPH_COUNT (COUNT(RU_MAP) - 1) #define RU_GLYPH_START 102 #define RU_GLYPH_UPPERCASE 20 - #define CHAR_SPR_TILDA (110 + RU_GLYPH_COUNT - 1) + #define CHAR_SPR_TILDA (110 + RU_GLYPH_COUNT - 2) #define CHAR_SPR_I (CHAR_SPR_TILDA - 1) - + #define CHAR_SPR_QUOTE (CHAR_SPR_TILDA + 1) const static uint8 char_width[110 + RU_GLYPH_COUNT] = { 14, 11, 11, 11, 11, 11, 11, 13, 8, 11, 12, 11, 13, 13, 12, 11, 12, 12, 11, 12, 13, 13, 13, 12, 12, 11, // A-Z @@ -65,8 +65,8 @@ namespace UI { 11, 11, 11, 13, 10, 13, 11, 11, 12, 12, 11, 9, 13, 13, 10, 13, // 9, 11, 12, 11, 10, 9, 8, 10, 11, 9, 10, 10, 11, 9, 10, 12, // 10, 10, 9, 11, 12, 9, 11, 8, 9, 13, 9, // - // additional latin (i~) - 5, 10 + // additional + 5, 10, 10 // i~" }; static const uint8 char_map[102 + 33*2] = { @@ -95,7 +95,7 @@ namespace UI { } inline bool skipChar(char c) { - return c == '~' || c == '$' || c == '(' || c == ')' || c == '|' || c == '}' || c == '*' || c == '{' || c == '+'; + return c == '~' || c == '\"' || c == '$' || c == '(' || c == ')' || c == '|' || c == '}' || c == '*' || c == '{' || c == '+'; } inline bool upperCase(int index) { @@ -119,7 +119,7 @@ namespace UI { int o = 0; char c = RU_MAP[i]; - if (c == '' || c == '' || c == '~') h = 14; + if (c == '' || c == '' || c == '~' || c == '\"') h = 14; if (c == '' || c == '' || c == '' || c == '') { o = 1; h++; } if (c == '') { o = 2; h += 2; } @@ -422,6 +422,7 @@ namespace UI { int frame = charRemap(charFrame); if (c == '+' && *text && *text != '@') frame = CHAR_SPR_TILDA; if (c == 'i' && skipChar(lastChar)) frame = CHAR_SPR_I; + if (c == '\"') frame = CHAR_SPR_QUOTE; lastChar = c; if (isShadow) { From 764b1899e4d27b464d648fcfdf4bfefad22fb8f0 Mon Sep 17 00:00:00 2001 From: Timur Gagiev Date: Fri, 8 Jan 2021 05:54:05 +0300 Subject: [PATCH 48/58] minor fix for " glyph --- src/lang/glyph_ru.h | 241 +++++++++++++++++++++--------------------- src/lang/glyph_ru.png | Bin 2016 -> 2018 bytes 2 files changed, 121 insertions(+), 120 deletions(-) diff --git a/src/lang/glyph_ru.h b/src/lang/glyph_ru.h index 68d3687..64d1db2 100644 --- a/src/lang/glyph_ru.h +++ b/src/lang/glyph_ru.h @@ -1,7 +1,7 @@ #ifndef __GLYPH_RU__ #define __GLYPH_RU__ -static unsigned int size_GLYPH_RU = 2016; +static unsigned int size_GLYPH_RU = 2018; static unsigned char GLYPH_RU[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x08, 0x03, 0x00, 0x00, 0x00, 0xc9, 0xa1, 0x54, @@ -10,125 +10,126 @@ static unsigned char GLYPH_RU[] = { 0x29, 0x31, 0x08, 0x00, 0x8c, 0x5a, 0x29, 0xff, 0xef, 0x8c, 0x70, 0x5c, 0x2c, 0xa5, 0x7b, 0x4a, 0xdc, 0xa0, 0x64, 0xff, 0xff, 0x9c, 0xff, 0xd6, 0x7b, 0x30, 0x0c, 0x04, 0xe8, 0xc0, 0x70, 0x58, 0x44, 0x00, 0xc8, 0x90, 0x58, 0xb0, 0x80, 0x50, 0xfb, 0xc4, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x07, 0x4f, 0x49, 0x44, 0x41, - 0x54, 0x78, 0x5e, 0xed, 0x9a, 0xdb, 0x72, 0x1b, 0x39, 0x0c, 0x44, 0xd5, 0x00, 0xaf, 0xa3, 0x8b, - 0xed, 0xec, 0xfe, 0xff, 0xb7, 0x2e, 0x41, 0x0d, 0xd8, 0xa4, 0x3c, 0xae, 0xd8, 0x55, 0x7a, 0x70, - 0x36, 0x46, 0x99, 0x52, 0x1a, 0x04, 0x48, 0xe2, 0x84, 0x51, 0x84, 0x49, 0x4e, 0xdf, 0xdb, 0x7e, - 0xec, 0xc7, 0xaa, 0x19, 0xfa, 0xcb, 0x67, 0xe3, 0x69, 0x9f, 0x49, 0xc8, 0xc3, 0xa8, 0xe9, 0x98, - 0x5d, 0x14, 0x27, 0x1b, 0xc3, 0x85, 0xe5, 0x70, 0xbe, 0xf3, 0x74, 0x00, 0x1e, 0x87, 0x82, 0x9a, - 0x51, 0x73, 0x38, 0xd5, 0xb6, 0x49, 0x44, 0x7f, 0x59, 0xf6, 0xcf, 0xc7, 0x05, 0xf7, 0x78, 0x6c, - 0xb2, 0xb5, 0xa1, 0xa6, 0x59, 0xc9, 0x72, 0x3e, 0x02, 0xca, 0xba, 0xb5, 0x94, 0x66, 0xa6, 0x5c, - 0xd3, 0x61, 0x9e, 0xcd, 0x4c, 0x1d, 0x80, 0xfd, 0xaa, 0x4a, 0x6d, 0x6e, 0xe9, 0xae, 0x2a, 0x2d, - 0x5a, 0x07, 0x81, 0x60, 0xc1, 0xc1, 0xdc, 0x12, 0xf7, 0x12, 0xef, 0xeb, 0xc5, 0xc0, 0x79, 0x91, - 0x79, 0x16, 0x7c, 0x37, 0x87, 0xda, 0x7c, 0xdb, 0xd0, 0x01, 0x59, 0xe9, 0xf6, 0xb2, 0x03, 0xb8, - 0xdd, 0x70, 0xc2, 0xed, 0xe6, 0x00, 0x1e, 0x0b, 0x3e, 0x41, 0x02, 0x20, 0xc0, 0x16, 0xd0, 0xe3, - 0xdb, 0x52, 0x0b, 0x80, 0xfb, 0xf9, 0x2a, 0x4f, 0x90, 0x6d, 0x6d, 0x40, 0xbd, 0xde, 0xd0, 0x35, - 0x1d, 0x79, 0x33, 0x2d, 0xd1, 0x31, 0x46, 0x81, 0x01, 0xb0, 0xb1, 0xd7, 0xaf, 0xd0, 0x4e, 0x80, - 0xf9, 0xe6, 0x57, 0x56, 0xd8, 0xf3, 0x97, 0xf5, 0xa9, 0xa1, 0x3b, 0x80, 0x1d, 0x62, 0xd0, 0x4d, - 0x20, 0x09, 0x22, 0x7a, 0x27, 0x36, 0x00, 0xec, 0xf1, 0x16, 0x07, 0x91, 0x2e, 0xdf, 0x15, 0x4c, - 0x6d, 0x6e, 0xfe, 0x8e, 0xb9, 0xf1, 0x7c, 0x61, 0x9c, 0x20, 0xdf, 0x1d, 0x68, 0x92, 0x1b, 0x4e, - 0x0e, 0x6c, 0x4d, 0x4f, 0x00, 0x10, 0x05, 0x55, 0xaa, 0x87, 0x55, 0xb5, 0xda, 0x77, 0x00, 0xcc, - 0xaf, 0xa2, 0x11, 0xd4, 0xe8, 0xce, 0x63, 0xdd, 0x09, 0x54, 0x49, 0x38, 0x8d, 0xf5, 0x24, 0xf5, - 0x42, 0x09, 0xf4, 0x11, 0x80, 0xbe, 0x07, 0x20, 0x03, 0x40, 0xec, 0xda, 0x33, 0xb0, 0xf9, 0xd1, - 0xb9, 0xbf, 0xbf, 0x39, 0x80, 0xe5, 0xf3, 0x82, 0x67, 0x5b, 0x01, 0x10, 0x79, 0x94, 0x2a, 0xf5, - 0xea, 0xeb, 0x03, 0x03, 0x1a, 0xf3, 0xab, 0xa8, 0x03, 0xc0, 0x6f, 0x00, 0xb4, 0x0a, 0x3b, 0x80, - 0x60, 0x62, 0x05, 0xc0, 0xf8, 0xaa, 0x04, 0x90, 0x0c, 0x00, 0x81, 0xb3, 0xe0, 0x8f, 0x01, 0x34, - 0xfb, 0x18, 0x00, 0xc4, 0x2c, 0xd6, 0x4f, 0x00, 0x20, 0x01, 0xe9, 0xf5, 0x13, 0xaa, 0x60, 0x01, - 0x58, 0x45, 0x71, 0x08, 0x60, 0xd5, 0x5e, 0xb2, 0xc0, 0xca, 0x72, 0xa5, 0xd5, 0x00, 0xd4, 0x8f, - 0x00, 0x24, 0x03, 0x90, 0xbe, 0x04, 0xc0, 0x3e, 0x75, 0xe6, 0xf8, 0x5a, 0xab, 0x03, 0xf0, 0x04, - 0x88, 0x3a, 0x01, 0xe8, 0xc7, 0x00, 0x58, 0xf0, 0x95, 0xd2, 0x52, 0xd6, 0x1b, 0x60, 0xf5, 0x1f, - 0x00, 0xe0, 0xfa, 0xeb, 0x26, 0x41, 0x52, 0x92, 0x30, 0x70, 0xa8, 0x54, 0x49, 0x55, 0xf4, 0x43, - 0x00, 0x21, 0x84, 0xaf, 0x00, 0xd0, 0x5e, 0x9f, 0x70, 0x7f, 0x55, 0xd1, 0xe8, 0x00, 0xbc, 0xe0, - 0xa6, 0xf3, 0xef, 0x01, 0xb0, 0xfe, 0xeb, 0xb5, 0x3e, 0x12, 0x20, 0x00, 0x51, 0x96, 0xb8, 0x16, - 0xbc, 0x6a, 0x5e, 0x01, 0x49, 0xa0, 0x52, 0x95, 0xa4, 0x8a, 0xdd, 0x43, 0x00, 0x4e, 0xa0, 0xdb, - 0x97, 0x00, 0xb4, 0xa4, 0x09, 0x40, 0xac, 0x55, 0x35, 0xea, 0x57, 0x00, 0x60, 0xb9, 0xb2, 0x71, - 0xab, 0xd7, 0x7a, 0x8d, 0xf3, 0xdf, 0xe3, 0x98, 0x01, 0x58, 0xfd, 0x9f, 0x02, 0x40, 0xa2, 0x29, - 0x4c, 0xaa, 0x36, 0x0d, 0xc0, 0xa5, 0x12, 0x40, 0x37, 0x00, 0x48, 0x17, 0x4a, 0x8d, 0xc0, 0x74, - 0xe3, 0xea, 0x83, 0x86, 0x26, 0x18, 0xb5, 0x65, 0x7f, 0xa3, 0x4c, 0x00, 0xc1, 0x01, 0x50, 0xd3, - 0x20, 0xbb, 0x79, 0x7c, 0x8d, 0x52, 0x1b, 0x00, 0x27, 0x00, 0x55, 0x10, 0x80, 0x3b, 0x16, 0x00, - 0x01, 0x5c, 0xf4, 0x00, 0x08, 0x0c, 0xc0, 0xc2, 0xdc, 0xb5, 0x03, 0xa8, 0xb5, 0x57, 0xc5, 0x00, - 0x07, 0x70, 0x54, 0x70, 0xd0, 0x18, 0x63, 0x1b, 0x9e, 0x01, 0x95, 0x07, 0x00, 0xe1, 0x1d, 0x80, - 0xc6, 0xbc, 0xc5, 0x97, 0x0f, 0x00, 0x68, 0x31, 0x1b, 0xf1, 0x71, 0xff, 0x0e, 0x50, 0xb7, 0x68, - 0xb2, 0x44, 0x31, 0xe2, 0xd2, 0xd2, 0x99, 0x0f, 0x02, 0x80, 0xfc, 0x06, 0x40, 0x49, 0x60, 0xbd, - 0x87, 0x00, 0xba, 0x2d, 0x57, 0x06, 0x17, 0x02, 0x60, 0xc1, 0xd5, 0x24, 0xa2, 0xba, 0xf9, 0x01, - 0xc4, 0xaf, 0x0c, 0xeb, 0x4d, 0xa9, 0xf2, 0x86, 0x74, 0x63, 0xfd, 0xb6, 0x80, 0x07, 0xf3, 0x72, - 0x0f, 0xc0, 0x59, 0xae, 0xe8, 0x00, 0x20, 0x92, 0x77, 0x02, 0xe2, 0xe9, 0xcc, 0x87, 0x23, 0x86, - 0x06, 0x57, 0x63, 0x3e, 0xde, 0x5f, 0x1c, 0x80, 0x5f, 0x4f, 0x32, 0x9f, 0x8f, 0x50, 0xba, 0x21, - 0x6a, 0x3d, 0x04, 0xb0, 0x16, 0xec, 0xe1, 0xcc, 0xc0, 0x25, 0x99, 0x5d, 0x0a, 0x2f, 0xa8, 0x36, - 0xcd, 0x2b, 0x70, 0x0f, 0x6e, 0xa3, 0x09, 0x6a, 0x13, 0xd4, 0xfe, 0x66, 0x96, 0x4d, 0xef, 0x23, - 0x7b, 0x84, 0xe9, 0x35, 0x1f, 0xdd, 0xee, 0xda, 0x9d, 0x9c, 0x5f, 0x36, 0x61, 0x32, 0x1d, 0x87, - 0x3e, 0x2a, 0x50, 0xf9, 0xf1, 0xdf, 0xe5, 0x00, 0xa8, 0x04, 0xb2, 0x9c, 0x8f, 0x27, 0x78, 0xa2, - 0xfd, 0xd8, 0x4f, 0xdb, 0xfe, 0xf9, 0xc8, 0xfa, 0x9d, 0x00, 0xb0, 0x5d, 0x5e, 0x3b, 0xe6, 0x45, - 0xb1, 0x3e, 0x06, 0xd0, 0x15, 0x9a, 0x10, 0xf9, 0x2d, 0x00, 0xb6, 0xaf, 0x52, 0xc3, 0x37, 0x02, - 0xc0, 0xd6, 0xba, 0x99, 0xf7, 0xf7, 0xa2, 0x95, 0x07, 0xde, 0x6a, 0xf3, 0x29, 0xa6, 0x12, 0xbc, - 0x7d, 0x60, 0x02, 0x80, 0xcf, 0x01, 0x80, 0x00, 0x2d, 0xa1, 0x7e, 0x1f, 0x00, 0xa2, 0xf9, 0xa1, - 0x7e, 0x2d, 0x45, 0x45, 0xe7, 0xee, 0xad, 0xf9, 0x06, 0x92, 0xba, 0x09, 0x00, 0xcc, 0xf5, 0x47, - 0xe0, 0xd3, 0xc0, 0x2d, 0x14, 0x91, 0x04, 0xbe, 0x21, 0x00, 0xab, 0x14, 0x2a, 0x0b, 0x00, 0xa5, - 0xa3, 0x6e, 0x60, 0xcf, 0xd8, 0x75, 0xc4, 0x17, 0xa1, 0x1b, 0x81, 0xef, 0x04, 0x60, 0x6d, 0x97, - 0x6b, 0xdd, 0x39, 0xb0, 0x19, 0x51, 0xc5, 0x09, 0xa2, 0x75, 0xd7, 0x0b, 0x80, 0xaa, 0x0a, 0xb3, - 0xc3, 0x07, 0x88, 0xd4, 0x13, 0x64, 0x98, 0xa9, 0xd6, 0x31, 0x7f, 0x3a, 0x9f, 0xcf, 0x36, 0x98, - 0xb1, 0xe4, 0x9b, 0x08, 0x01, 0x26, 0xe8, 0x02, 0x30, 0x14, 0xdf, 0x4c, 0x86, 0x10, 0xfa, 0x8b, - 0xb3, 0xce, 0xdd, 0x00, 0x70, 0xbf, 0xfe, 0x33, 0x12, 0x44, 0x6e, 0xb7, 0x9b, 0xa0, 0x0b, 0x42, - 0x20, 0x00, 0xec, 0x00, 0x74, 0x00, 0x10, 0xd8, 0x3c, 0x01, 0x40, 0xb5, 0x29, 0x7e, 0xa6, 0x2c, - 0xeb, 0x65, 0xe9, 0x1b, 0x10, 0x00, 0x36, 0xb1, 0x14, 0xff, 0x13, 0xf4, 0xba, 0xbd, 0x9d, 0xcf, - 0xed, 0x67, 0x7b, 0x7b, 0xf5, 0xf9, 0x66, 0x2f, 0xcc, 0xbf, 0x6d, 0x38, 0x85, 0x9b, 0x82, 0x48, - 0xb6, 0x4d, 0x5f, 0x5e, 0x04, 0x43, 0xe5, 0xee, 0x8c, 0xd9, 0xf7, 0xc7, 0xfd, 0x65, 0x5a, 0x4e, - 0xd5, 0xe2, 0x5d, 0xe7, 0xfe, 0x33, 0x12, 0x52, 0x62, 0xbb, 0xcc, 0x7e, 0x57, 0x26, 0x00, 0xba, - 0x03, 0x00, 0x67, 0xd9, 0x1c, 0x41, 0x55, 0x4b, 0x61, 0x6b, 0x91, 0x45, 0x01, 0xa8, 0x0c, 0x20, - 0xaa, 0x97, 0x5c, 0x2e, 0x99, 0xf5, 0x33, 0xfe, 0x4e, 0xe0, 0xfa, 0xd6, 0x00, 0xbc, 0x5d, 0x47, - 0xfd, 0x52, 0x4a, 0x61, 0xbf, 0x0f, 0x11, 0x78, 0xfd, 0x0e, 0x00, 0x28, 0x2a, 0x20, 0xe0, 0xdc, - 0x7c, 0x2f, 0x92, 0x47, 0xbc, 0x6d, 0x3a, 0xb5, 0x1e, 0xa5, 0x14, 0xc6, 0x43, 0x24, 0x76, 0x7b, - 0x11, 0x02, 0x38, 0x21, 0xad, 0x00, 0x00, 0x1c, 0xdc, 0x00, 0xb0, 0x7f, 0x57, 0x4c, 0x00, 0xec, - 0xbb, 0x2e, 0x01, 0xa4, 0x84, 0xb2, 0x02, 0xb0, 0xf9, 0x42, 0x00, 0x5d, 0x9b, 0x97, 0x04, 0xde, - 0x46, 0xfd, 0x27, 0xb4, 0x50, 0xcc, 0xcd, 0x9b, 0xa8, 0x58, 0xfd, 0x34, 0x44, 0xb4, 0x7c, 0x1e, - 0x2f, 0x45, 0xc9, 0x5b, 0x24, 0x00, 0x0d, 0xe1, 0x01, 0xc0, 0x69, 0x8d, 0x07, 0x22, 0x80, 0x01, - 0x80, 0xed, 0xf2, 0xfc, 0x19, 0x00, 0x66, 0xe8, 0x23, 0x00, 0x83, 0x33, 0x00, 0x14, 0x76, 0xff, - 0x63, 0xbd, 0xc0, 0xfa, 0x4d, 0xaf, 0x5f, 0xd1, 0x3d, 0x7e, 0x78, 0x7f, 0xbd, 0x5d, 0xdf, 0xae, - 0xd7, 0x5f, 0x0c, 0x81, 0x5a, 0xfd, 0x14, 0x41, 0x24, 0xcc, 0x00, 0xd2, 0x03, 0x00, 0x44, 0x89, - 0x78, 0xd1, 0xec, 0x37, 0x52, 0x6e, 0xb7, 0x19, 0x40, 0x7a, 0x07, 0xe0, 0x24, 0x38, 0xcd, 0x09, - 0x2b, 0x00, 0xd5, 0xda, 0xbd, 0x44, 0x58, 0x9b, 0x6f, 0x71, 0x58, 0xbe, 0x44, 0x8c, 0x79, 0xe7, - 0xec, 0xe4, 0xca, 0x74, 0xa3, 0x72, 0x3a, 0x02, 0x50, 0x15, 0xac, 0xff, 0x9f, 0xf6, 0x47, 0xa0, - 0x11, 0xe0, 0x87, 0x54, 0x29, 0x24, 0x00, 0x4d, 0x80, 0xea, 0x20, 0x90, 0xd1, 0x01, 0xa4, 0x0b, - 0x01, 0x14, 0x44, 0x14, 0xbf, 0xb1, 0xb8, 0xa4, 0x52, 0x9c, 0x0f, 0x6f, 0xe8, 0x12, 0x6f, 0x00, - 0x98, 0x10, 0x13, 0x80, 0xc4, 0x76, 0x3d, 0x8a, 0x02, 0xba, 0x3e, 0xc3, 0x8b, 0xe2, 0x0e, 0xaf, - 0x9f, 0x00, 0x0a, 0xb4, 0x9a, 0xcf, 0x01, 0x70, 0xbd, 0x63, 0x00, 0x46, 0xa0, 0x2a, 0x8a, 0xd7, - 0xbf, 0xfd, 0x73, 0x3e, 0x5f, 0xdb, 0xcf, 0xf6, 0x6b, 0xcf, 0x8f, 0x00, 0xe2, 0xd8, 0xbe, 0x58, - 0x7e, 0x21, 0x81, 0x9c, 0x20, 0x33, 0x80, 0x62, 0x05, 0xf1, 0x4a, 0x58, 0xa7, 0xdc, 0xe2, 0xd3, - 0x74, 0x7c, 0x71, 0x00, 0x8c, 0x97, 0x29, 0xa1, 0x84, 0x98, 0x12, 0xeb, 0xef, 0xfd, 0xbd, 0x3e, - 0xf4, 0xf7, 0x68, 0x3e, 0x77, 0x40, 0x0d, 0x1d, 0x44, 0x48, 0x00, 0xa2, 0x2c, 0x88, 0xeb, 0x79, - 0x01, 0xea, 0x53, 0x03, 0x18, 0x71, 0x35, 0x00, 0xff, 0x9e, 0x4f, 0xe7, 0xab, 0x8d, 0x5f, 0x23, - 0x41, 0x35, 0x32, 0x3f, 0xde, 0xaf, 0xb0, 0x63, 0x44, 0x7f, 0x7c, 0x50, 0x2e, 0x03, 0x40, 0x8c, - 0xe5, 0xfe, 0x06, 0x3e, 0x2a, 0x40, 0xe4, 0xf9, 0x0d, 0xe0, 0x63, 0x7c, 0x04, 0x13, 0xd6, 0x76, - 0x99, 0x9e, 0x45, 0x99, 0xef, 0x51, 0xb3, 0x9d, 0x66, 0xfc, 0xc1, 0x7a, 0x2e, 0x68, 0xeb, 0xfc, - 0xeb, 0xeb, 0xab, 0x8f, 0xc3, 0x79, 0x3e, 0x8f, 0xa0, 0x76, 0x2f, 0x35, 0x1d, 0xa6, 0xa9, 0x3e, - 0x88, 0x67, 0xc8, 0xff, 0xd1, 0x7e, 0x2c, 0x03, 0x36, 0xfe, 0xae, 0x67, 0x11, 0xb9, 0x0d, 0x7e, - 0x53, 0x84, 0x8d, 0xbf, 0x05, 0x40, 0xae, 0xb7, 0x94, 0x72, 0x1b, 0x04, 0x80, 0x3e, 0xfe, 0x16, - 0xcb, 0x22, 0x48, 0x6d, 0x60, 0x38, 0xae, 0xb0, 0xf1, 0xd5, 0x87, 0x42, 0x7f, 0xac, 0x01, 0xb0, - 0x31, 0x3b, 0x6c, 0x7c, 0x05, 0x21, 0x6e, 0x37, 0x12, 0xe0, 0x7f, 0x41, 0xf9, 0x34, 0xbd, 0x31, - 0xfe, 0x4c, 0xc3, 0x96, 0x52, 0xba, 0xc9, 0xc3, 0xbf, 0x5e, 0x8b, 0x03, 0x60, 0x7f, 0x7d, 0x5c, - 0x70, 0x7e, 0x89, 0x25, 0x6f, 0x28, 0x12, 0x77, 0x4d, 0x78, 0x43, 0xfb, 0x1b, 0x35, 0x8d, 0x19, - 0x54, 0xab, 0x2f, 0xbb, 0x70, 0x85, 0x27, 0xd7, 0xaf, 0x25, 0x85, 0x22, 0x02, 0xd7, 0x91, 0x5f, - 0x94, 0xd7, 0xfe, 0xfa, 0xb0, 0x60, 0x6c, 0x4d, 0x2b, 0x75, 0x66, 0xf3, 0xef, 0x3a, 0xfb, 0x32, - 0xd4, 0x93, 0x05, 0xf6, 0xff, 0xdc, 0x4f, 0x9a, 0xef, 0x92, 0x39, 0x7f, 0x13, 0x9e, 0x47, 0x9f, - 0x0c, 0x40, 0x4a, 0x09, 0xa1, 0x40, 0xca, 0x72, 0x03, 0xd8, 0x8c, 0xb0, 0xbf, 0x9e, 0x0b, 0xfe, - 0x18, 0x00, 0x44, 0xe7, 0x3b, 0xb0, 0xcb, 0xec, 0x48, 0x39, 0x7d, 0xdc, 0xff, 0x5b, 0x60, 0x4e, - 0x02, 0x40, 0x2e, 0xb8, 0xcf, 0x67, 0x6f, 0x8e, 0x7c, 0xfe, 0xf9, 0x00, 0xe2, 0x0c, 0x20, 0x11, - 0x00, 0xfb, 0xeb, 0x4f, 0x00, 0xe0, 0xff, 0x60, 0x18, 0x4f, 0x84, 0x28, 0x07, 0x42, 0x4e, 0x1f, - 0xf7, 0xff, 0x16, 0x88, 0xc4, 0x33, 0x40, 0x56, 0x00, 0xd0, 0xf8, 0x64, 0x00, 0x21, 0x59, 0xbf, - 0x91, 0x42, 0x99, 0x36, 0x28, 0x5b, 0x2a, 0x63, 0x9e, 0xfd, 0xf5, 0xbb, 0x82, 0xa9, 0xe7, 0x27, - 0x22, 0xa1, 0xf4, 0x6b, 0xb3, 0x4a, 0x07, 0xc0, 0xe9, 0xa5, 0xff, 0x27, 0x70, 0x35, 0xeb, 0x00, - 0xb4, 0xdc, 0x89, 0xc5, 0x8c, 0x79, 0xfe, 0x82, 0xd3, 0x53, 0xad, 0x84, 0xd4, 0x2c, 0x14, 0x12, - 0x06, 0x20, 0xb1, 0x0c, 0xe4, 0x80, 0xf7, 0xd7, 0x47, 0x05, 0x43, 0x22, 0xa0, 0x80, 0x7a, 0x06, - 0x34, 0x94, 0x92, 0xc4, 0x04, 0xe5, 0x00, 0xc0, 0x69, 0x2e, 0xff, 0xd0, 0xff, 0x2b, 0x70, 0x07, - 0x90, 0x8a, 0x9f, 0x28, 0xa6, 0x54, 0x08, 0xe0, 0xd9, 0x4d, 0x4c, 0xb1, 0xc3, 0x97, 0xa1, 0x34, - 0xa9, 0x8a, 0x58, 0xd3, 0x48, 0x63, 0x7f, 0xcd, 0x82, 0xf9, 0x44, 0xa8, 0x5b, 0xf4, 0x0c, 0xc4, - 0x50, 0xfc, 0x79, 0x00, 0xa5, 0xaf, 0xc0, 0xe9, 0x05, 0x78, 0xe4, 0xfa, 0x29, 0x96, 0xa2, 0x09, - 0xf0, 0x4a, 0xb3, 0x28, 0xcc, 0xe9, 0x47, 0x79, 0x3e, 0x00, 0x3e, 0xce, 0x61, 0x3b, 0x0b, 0x2c, - 0x00, 0x40, 0x1e, 0x2c, 0xb8, 0x30, 0xde, 0x0c, 0xee, 0x08, 0x71, 0x5c, 0x28, 0x4a, 0xc4, 0xc3, - 0x69, 0xf6, 0xff, 0xcb, 0x56, 0x45, 0x93, 0x8e, 0xfa, 0x53, 0x31, 0x27, 0xc6, 0x7a, 0xcf, 0x27, - 0x80, 0x83, 0xd6, 0x78, 0x75, 0x15, 0xca, 0x42, 0x3b, 0xce, 0xe0, 0xdc, 0x2c, 0xcb, 0xe1, 0x34, - 0x3d, 0x8b, 0x9a, 0x7d, 0xb9, 0x4b, 0x30, 0xe2, 0xc9, 0x8d, 0xfc, 0x7f, 0x9d, 0xc7, 0x50, 0x97, - 0x60, 0x51, 0x26, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x07, 0x51, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x5e, 0xed, 0x9a, 0xe9, 0x92, 0xdb, 0x38, 0x0c, 0x84, 0xdd, 0x00, 0x4f, 0xf9, 0x98, + 0x23, 0xfb, 0xfe, 0xcf, 0xba, 0x04, 0x2d, 0xa8, 0x49, 0x45, 0xae, 0x78, 0x6a, 0xfd, 0x63, 0x6a, + 0x33, 0xc8, 0xd0, 0x4a, 0x83, 0x00, 0x45, 0x7c, 0xa1, 0x1d, 0x43, 0xc9, 0xe9, 0x7b, 0xdb, 0x8f, + 0xfd, 0x58, 0x35, 0x43, 0x7f, 0x79, 0x36, 0x9e, 0xf6, 0x4c, 0x42, 0xde, 0x8c, 0x9a, 0x8e, 0xd1, + 0x45, 0x71, 0xea, 0xc3, 0x5d, 0x98, 0x36, 0xe7, 0x77, 0x1e, 0x36, 0xc0, 0xed, 0x50, 0x50, 0x33, + 0x6a, 0x0c, 0xa7, 0x5a, 0x16, 0x89, 0xe8, 0x2f, 0xd3, 0xfd, 0xf3, 0x71, 0xc1, 0x3d, 0x1e, 0x8b, + 0x2c, 0x6d, 0xa8, 0x69, 0x56, 0x32, 0xed, 0x8f, 0x80, 0xb2, 0x2e, 0x2d, 0xa5, 0x99, 0x29, 0xd7, + 0x74, 0x98, 0x67, 0x31, 0x53, 0x07, 0x60, 0xbf, 0xab, 0x52, 0x9b, 0x5b, 0xba, 0xab, 0x4a, 0x8b, + 0xd6, 0x8d, 0x40, 0xb0, 0xe0, 0x60, 0x6e, 0x89, 0x6b, 0x89, 0xf7, 0xf5, 0x62, 0xe0, 0xbc, 0xc8, + 0x38, 0x0b, 0x5e, 0xcd, 0xa1, 0x36, 0xbf, 0x2c, 0xea, 0x80, 0xac, 0x74, 0x7b, 0x59, 0x01, 0xdc, + 0x6e, 0x38, 0xe1, 0x76, 0x73, 0x00, 0xfb, 0x82, 0x4f, 0x90, 0x00, 0x08, 0xb0, 0x04, 0xf4, 0xf8, + 0xb6, 0xd4, 0x04, 0xe0, 0xbe, 0xbf, 0xca, 0x1d, 0x64, 0x5b, 0x1b, 0x50, 0xaf, 0x37, 0x74, 0x4d, + 0x47, 0x5e, 0x4c, 0x4b, 0x74, 0x8c, 0x51, 0x60, 0x00, 0x6c, 0xac, 0xf5, 0x2b, 0xb4, 0x13, 0x60, + 0xbe, 0xf9, 0x95, 0x15, 0xf6, 0xfc, 0x69, 0x7d, 0x6a, 0xe8, 0x0a, 0x60, 0x85, 0x18, 0x74, 0x11, + 0x48, 0x82, 0x88, 0xde, 0x89, 0x6d, 0x00, 0xd6, 0x78, 0x8b, 0x83, 0xc8, 0x2a, 0x77, 0x05, 0x53, + 0xdb, 0x85, 0x7f, 0x62, 0x6e, 0xdc, 0x5f, 0xbb, 0x78, 0x81, 0x77, 0x07, 0x9a, 0xe4, 0x0d, 0x07, + 0x07, 0x96, 0xa6, 0x07, 0x00, 0x88, 0x82, 0x2a, 0xd5, 0xc3, 0xaa, 0x5a, 0xed, 0x2b, 0x00, 0xe6, + 0x57, 0xd1, 0x08, 0x6a, 0x74, 0xe7, 0xb1, 0xee, 0x04, 0xaa, 0x24, 0x9c, 0xb6, 0xf5, 0x24, 0xf5, + 0x42, 0x09, 0x74, 0x0f, 0x40, 0x09, 0x60, 0x5f, 0x30, 0x24, 0x76, 0xed, 0x19, 0x58, 0x7c, 0xeb, + 0xac, 0xcf, 0x2f, 0x0e, 0x60, 0xfa, 0xbc, 0xe0, 0xde, 0x66, 0x00, 0x44, 0x1e, 0xa5, 0x4a, 0xbd, + 0xfa, 0xfa, 0x80, 0x43, 0x63, 0xbe, 0xd5, 0xef, 0x00, 0xf0, 0x08, 0x00, 0x8f, 0x4c, 0x07, 0x10, + 0x4c, 0xcc, 0x00, 0x18, 0x5f, 0x95, 0x00, 0x92, 0x01, 0x20, 0x70, 0x16, 0xfc, 0x18, 0x40, 0xb3, + 0xc7, 0x00, 0x20, 0x66, 0xb1, 0x3e, 0x01, 0x80, 0x04, 0xa4, 0xd7, 0x4f, 0xa8, 0x82, 0x09, 0x60, + 0x15, 0xc5, 0x23, 0x00, 0xd4, 0x9e, 0xad, 0x02, 0x2b, 0xcb, 0x95, 0x56, 0x03, 0x50, 0x1f, 0x01, + 0x48, 0x06, 0x20, 0x7d, 0x09, 0x80, 0x7d, 0xea, 0x8c, 0xf1, 0xb5, 0x56, 0x07, 0xe0, 0x09, 0x10, + 0x75, 0x02, 0xd0, 0xc7, 0x00, 0x58, 0xf0, 0x95, 0xd2, 0x52, 0xe6, 0x13, 0x60, 0xf5, 0x3f, 0x06, + 0xa0, 0x11, 0xf3, 0x4d, 0x82, 0xa4, 0x24, 0x61, 0xc3, 0xa1, 0x52, 0x25, 0x55, 0xd1, 0x87, 0x00, + 0x42, 0x08, 0x5f, 0x01, 0xa0, 0xbd, 0x3e, 0xe1, 0xfd, 0x55, 0x45, 0xa3, 0x03, 0xf0, 0x82, 0x9b, + 0xce, 0x7f, 0x06, 0xc0, 0xfa, 0xaf, 0xd7, 0xba, 0x27, 0x40, 0x00, 0xa2, 0x2c, 0x71, 0x2e, 0x78, + 0xd6, 0x3c, 0x02, 0x92, 0x40, 0xa5, 0x2a, 0x49, 0x15, 0xab, 0x87, 0x00, 0x9c, 0x40, 0xb7, 0x2f, + 0x01, 0x68, 0x49, 0x03, 0x80, 0x58, 0xab, 0x6a, 0xd4, 0xaf, 0x00, 0xc0, 0x74, 0x64, 0xe3, 0x52, + 0xaf, 0xf5, 0x1a, 0xc7, 0xbf, 0xc7, 0x31, 0x02, 0xb0, 0xfa, 0x9f, 0x02, 0x40, 0xa2, 0x29, 0x0c, + 0xaa, 0x36, 0x0d, 0xc0, 0xa5, 0x12, 0x40, 0x37, 0x00, 0x48, 0x17, 0x4a, 0x8d, 0xc0, 0x70, 0xe2, + 0xea, 0x4e, 0x43, 0x13, 0x8c, 0xda, 0x74, 0x7f, 0xa3, 0x4c, 0x00, 0xc1, 0x01, 0x50, 0xd3, 0x20, + 0xab, 0x79, 0x7c, 0x8d, 0x52, 0x1b, 0x00, 0x27, 0x00, 0x55, 0x10, 0x80, 0x3b, 0x26, 0x00, 0x01, + 0x5c, 0xf4, 0x00, 0x08, 0x0c, 0xc0, 0xc4, 0xdc, 0xb5, 0x03, 0xa8, 0xb5, 0x57, 0xc5, 0x00, 0x07, + 0x70, 0x54, 0x70, 0xd0, 0x18, 0x63, 0x1b, 0x9e, 0x01, 0x95, 0x1d, 0x80, 0xf0, 0x1b, 0x80, 0xc6, + 0xbc, 0xc5, 0x97, 0x07, 0x00, 0xb4, 0x98, 0x6d, 0xf1, 0x71, 0xfd, 0x0e, 0x50, 0x97, 0x68, 0xb2, + 0x44, 0x31, 0xe2, 0xd2, 0xd2, 0x99, 0x0f, 0x02, 0x80, 0xfc, 0x01, 0x40, 0x49, 0x60, 0xbd, 0x87, + 0x00, 0xba, 0x4d, 0x47, 0x06, 0x17, 0x02, 0x60, 0xc1, 0xd5, 0x24, 0xa2, 0xba, 0xf9, 0x06, 0xc4, + 0x8f, 0x0c, 0xeb, 0x4d, 0xa9, 0xf2, 0x84, 0x74, 0x63, 0xfd, 0xb6, 0x80, 0x07, 0xf3, 0x70, 0x6f, + 0x80, 0xb3, 0x5c, 0xd1, 0x01, 0x40, 0x24, 0xaf, 0x04, 0xc4, 0xd3, 0x99, 0x0f, 0x47, 0x6c, 0x3c, + 0x5c, 0xf9, 0x7c, 0x44, 0x64, 0x41, 0x85, 0x6f, 0x68, 0x32, 0x1f, 0xb6, 0x50, 0xba, 0x21, 0x6a, + 0x3d, 0x04, 0x30, 0x17, 0xec, 0xe1, 0xcc, 0xc0, 0x25, 0x99, 0x5d, 0x0a, 0x0f, 0xa8, 0x36, 0xcd, + 0x23, 0x70, 0x0f, 0x6e, 0xa3, 0x09, 0x6a, 0x13, 0xd4, 0x7e, 0x31, 0xcb, 0xa6, 0xd7, 0x91, 0x3d, + 0xc2, 0xf4, 0x9c, 0x8f, 0x6e, 0x77, 0xed, 0x4e, 0xce, 0x4f, 0x37, 0x61, 0x32, 0x1d, 0x87, 0x3e, + 0x2a, 0x50, 0xf9, 0xf6, 0x7f, 0xcb, 0x01, 0x50, 0x09, 0x64, 0xda, 0x1f, 0x77, 0xf0, 0x42, 0xfb, + 0xb1, 0x9f, 0xb6, 0xfd, 0xf9, 0xc8, 0xfa, 0x9d, 0x00, 0xb0, 0x5d, 0x9e, 0x3b, 0xe6, 0x49, 0xb1, + 0x3e, 0x06, 0xd0, 0x15, 0x9a, 0x10, 0xf9, 0x23, 0x00, 0xb6, 0xaf, 0x52, 0xc3, 0x37, 0x02, 0xc0, + 0xd6, 0xba, 0x99, 0xf7, 0xf7, 0xa2, 0x95, 0x1b, 0x5e, 0x6a, 0xf3, 0x29, 0x86, 0x12, 0xbc, 0x7d, + 0x60, 0x02, 0x80, 0xe7, 0x00, 0x40, 0x80, 0x96, 0x50, 0xbf, 0x0f, 0x00, 0xd1, 0xbc, 0xab, 0x5f, + 0x4b, 0x51, 0xd1, 0xb1, 0x7b, 0x6b, 0xbe, 0x0d, 0x49, 0x5d, 0x04, 0x00, 0xc6, 0xfa, 0x23, 0xf0, + 0x34, 0x70, 0x0b, 0x45, 0x24, 0x81, 0x6f, 0x08, 0xc0, 0x2a, 0x85, 0xca, 0x04, 0x40, 0xe9, 0xa8, + 0x0b, 0xd8, 0x33, 0x76, 0x1d, 0xf1, 0x45, 0xe8, 0x46, 0xe0, 0x5b, 0x01, 0x68, 0xb6, 0xff, 0x34, + 0xab, 0xa2, 0x6c, 0x46, 0x54, 0x71, 0x82, 0x68, 0x5d, 0xf5, 0x04, 0xa0, 0xaa, 0xc2, 0xec, 0xf0, + 0x01, 0x22, 0xf5, 0x00, 0x19, 0x66, 0xea, 0x07, 0xca, 0xa6, 0xce, 0xe7, 0xb3, 0x0d, 0x66, 0x4c, + 0xf9, 0x26, 0x42, 0x80, 0x09, 0xba, 0x00, 0x6c, 0x8a, 0x17, 0x93, 0x21, 0x84, 0xfe, 0xe2, 0xac, + 0x73, 0xf6, 0x78, 0x4f, 0xb6, 0x58, 0xd6, 0x9c, 0x45, 0x6e, 0xb7, 0x9b, 0xa0, 0x0b, 0x42, 0x20, + 0x00, 0xac, 0x00, 0x74, 0x03, 0x20, 0xb0, 0x79, 0x02, 0x80, 0x6a, 0x53, 0xfc, 0x4c, 0x99, 0xd6, + 0xcb, 0xd2, 0x6f, 0x40, 0x00, 0x58, 0xc4, 0x52, 0xfc, 0x1d, 0xf4, 0xbe, 0x7c, 0x9c, 0xcf, 0xed, + 0x67, 0xf9, 0x78, 0xf7, 0xf9, 0x66, 0x6f, 0xcc, 0xbf, 0x2d, 0x38, 0x85, 0x9b, 0x82, 0x48, 0x96, + 0x45, 0xdf, 0xde, 0x04, 0x9b, 0xca, 0xfd, 0x12, 0xb3, 0xdf, 0x1f, 0xf7, 0x97, 0x61, 0x39, 0x55, + 0x8b, 0x77, 0x9d, 0xfb, 0xcf, 0x96, 0x90, 0x12, 0xdb, 0x65, 0xf6, 0xbb, 0x32, 0x00, 0xd0, 0x15, + 0x00, 0x38, 0xcb, 0xe6, 0x08, 0xaa, 0x5a, 0x0a, 0x5b, 0x8b, 0x2c, 0x0a, 0x0c, 0xef, 0xa0, 0xac, + 0x7a, 0xc9, 0xe5, 0x92, 0x59, 0x3f, 0xe3, 0xef, 0x04, 0xae, 0x1f, 0xe7, 0xf6, 0xeb, 0xba, 0xd5, + 0x2f, 0xa5, 0x14, 0xf6, 0xfb, 0x10, 0x81, 0xd7, 0xef, 0x00, 0x80, 0xa2, 0x02, 0x02, 0xce, 0xcd, + 0xf7, 0x26, 0x79, 0x8b, 0xb7, 0x9b, 0x0e, 0xad, 0x47, 0x29, 0x85, 0xf1, 0x10, 0x89, 0xdd, 0xde, + 0x84, 0x00, 0x4e, 0x48, 0x33, 0x00, 0x00, 0x07, 0x27, 0x00, 0xec, 0xdf, 0x15, 0x03, 0x00, 0xfb, + 0xae, 0x4b, 0x00, 0x29, 0xa1, 0xcc, 0x00, 0x6c, 0xbe, 0x10, 0x40, 0xd7, 0xe6, 0x25, 0x81, 0x8f, + 0xad, 0xfe, 0x13, 0x5a, 0x28, 0xc6, 0xe6, 0x4d, 0x54, 0xac, 0x7e, 0x1a, 0x22, 0x5a, 0x3e, 0xb7, + 0x97, 0xa2, 0xe4, 0x25, 0x12, 0x80, 0x86, 0xb0, 0x03, 0x70, 0x9a, 0xe3, 0x81, 0x08, 0x60, 0x03, + 0xc0, 0x76, 0x79, 0xfc, 0x0c, 0x00, 0x33, 0x74, 0x0f, 0xc0, 0xe0, 0x6c, 0x00, 0x0a, 0xbb, 0xff, + 0x6d, 0xbd, 0xc0, 0xfa, 0x4d, 0xcf, 0x5f, 0xd1, 0x3d, 0x7e, 0xf3, 0x7e, 0x7e, 0x5c, 0x3f, 0xae, + 0xd7, 0x4f, 0x86, 0x40, 0xad, 0x7e, 0x8a, 0x20, 0x12, 0x46, 0x00, 0x69, 0x07, 0x00, 0x51, 0x22, + 0xde, 0x34, 0xfb, 0x89, 0x94, 0xdb, 0x6d, 0x04, 0x90, 0xf6, 0x00, 0x70, 0x12, 0x9c, 0xc6, 0x84, + 0x19, 0x80, 0x6a, 0xed, 0x5e, 0x22, 0xac, 0xcd, 0x37, 0x39, 0x2c, 0xdf, 0x00, 0xf8, 0xbc, 0x73, + 0x76, 0x72, 0x65, 0x38, 0x51, 0x39, 0x1d, 0x01, 0xa8, 0x0a, 0xd6, 0xff, 0xab, 0xbd, 0x05, 0x1a, + 0x01, 0x7e, 0x48, 0x95, 0x42, 0x02, 0xd0, 0x04, 0xa8, 0x6e, 0x04, 0x32, 0x3a, 0x80, 0x74, 0x21, + 0x80, 0x82, 0x88, 0xe2, 0x27, 0x16, 0x97, 0x54, 0x8a, 0xf3, 0xe1, 0x09, 0x9d, 0xe2, 0x0d, 0x00, + 0x13, 0x62, 0x02, 0x90, 0xd8, 0xae, 0x47, 0x51, 0x40, 0xe7, 0x67, 0x78, 0x51, 0xdc, 0xe1, 0xf5, + 0x13, 0x40, 0x81, 0x56, 0xf3, 0x39, 0x00, 0xae, 0x77, 0x0c, 0xc0, 0x08, 0x54, 0x85, 0x3b, 0x3f, + 0x97, 0x5f, 0xe7, 0xf3, 0xb5, 0xfd, 0x2c, 0x9f, 0x6b, 0x7e, 0x04, 0x10, 0xf9, 0xb8, 0xc0, 0xf2, + 0x0b, 0x09, 0xe4, 0x04, 0x19, 0x01, 0x14, 0x2b, 0x88, 0x47, 0xc2, 0x3a, 0xe5, 0x16, 0x9f, 0x86, + 0xed, 0x8b, 0x03, 0x60, 0xbc, 0x0c, 0x09, 0x25, 0xc4, 0x94, 0x58, 0x7f, 0xef, 0xef, 0x75, 0xd7, + 0xdf, 0xa3, 0xf9, 0xdc, 0x01, 0x35, 0x74, 0x10, 0x21, 0x01, 0x88, 0xb2, 0xa0, 0xfd, 0x7a, 0x25, + 0xa9, 0x4f, 0x6d, 0xc0, 0x88, 0xab, 0x01, 0xf8, 0xe7, 0x7c, 0x3a, 0x5f, 0x6d, 0x7c, 0x6e, 0x09, + 0xaa, 0x91, 0xf9, 0xf1, 0x7e, 0x84, 0x1d, 0x23, 0xfa, 0xe3, 0x83, 0x72, 0xd9, 0x00, 0xc4, 0x58, + 0xee, 0x17, 0xf0, 0x51, 0x01, 0x22, 0xf7, 0x6f, 0x00, 0xf7, 0xf1, 0x11, 0x4c, 0x98, 0xdb, 0x65, + 0x7a, 0x26, 0x65, 0xbe, 0xbd, 0x66, 0x3b, 0xcd, 0xf8, 0x83, 0xf5, 0x5c, 0xd0, 0xe6, 0xf9, 0xf7, + 0xf7, 0x77, 0x1f, 0x87, 0xf3, 0x7c, 0x1e, 0x41, 0xed, 0x5e, 0x6a, 0x3a, 0x4c, 0x53, 0x3d, 0x88, + 0x67, 0xc8, 0xff, 0xc4, 0x7e, 0xec, 0xe7, 0x59, 0x44, 0x6e, 0xc3, 0x2d, 0x03, 0x7d, 0xfc, 0x25, + 0x96, 0xeb, 0x2d, 0xa5, 0xdc, 0xc6, 0xf0, 0x55, 0x19, 0x36, 0xfe, 0x1a, 0x00, 0x22, 0x48, 0x6d, + 0x80, 0x00, 0x60, 0xe3, 0x3f, 0x3d, 0x14, 0xa2, 0x7d, 0x7f, 0x03, 0xd0, 0x07, 0x89, 0x5c, 0xd1, + 0xc7, 0xd3, 0x96, 0x71, 0xbb, 0x91, 0x00, 0xff, 0x0b, 0xca, 0xd3, 0xf4, 0x7c, 0x7c, 0x1b, 0x22, + 0x7d, 0x3c, 0x6d, 0x58, 0x52, 0x4a, 0x37, 0xd9, 0xfd, 0xeb, 0xb5, 0x38, 0x00, 0xf6, 0xd7, 0xc7, + 0x05, 0xe7, 0xb7, 0x58, 0xf2, 0x82, 0x22, 0x71, 0xd5, 0x84, 0xb7, 0x69, 0xbf, 0x50, 0xd3, 0x98, + 0x41, 0x35, 0xfb, 0xb2, 0x0b, 0x57, 0x78, 0x2d, 0xaf, 0x45, 0x4b, 0x0a, 0x45, 0x04, 0xae, 0x23, + 0xbf, 0x28, 0xcf, 0xfd, 0xf5, 0x61, 0xc1, 0x58, 0x9a, 0x56, 0xea, 0xcc, 0xe6, 0xdf, 0x75, 0xf6, + 0x65, 0xa8, 0x07, 0x0b, 0xec, 0xff, 0x79, 0x3f, 0x69, 0xbe, 0x4b, 0xe6, 0xfc, 0x4d, 0xb8, 0x1f, + 0x7d, 0x31, 0x00, 0x29, 0x25, 0x84, 0x02, 0x29, 0xd3, 0x09, 0x60, 0x33, 0xc2, 0xfe, 0x7a, 0x2c, + 0xf8, 0x31, 0x00, 0x88, 0x8e, 0x67, 0x60, 0x95, 0xd9, 0x91, 0x72, 0xfa, 0xb8, 0xff, 0xb7, 0xc0, + 0x9c, 0x04, 0x80, 0x5c, 0x70, 0x9f, 0xcf, 0xde, 0x1c, 0xf9, 0xfc, 0xeb, 0x01, 0xc4, 0x11, 0x40, + 0x22, 0x00, 0xf6, 0xd7, 0x4f, 0x00, 0xe0, 0xff, 0x60, 0xd8, 0x9e, 0x08, 0x51, 0x3a, 0x42, 0x4e, + 0x3f, 0xe8, 0xff, 0x2d, 0x10, 0x89, 0x7b, 0x80, 0xcc, 0x00, 0xa0, 0xf1, 0xc5, 0x00, 0x42, 0xb2, + 0x7e, 0x23, 0x85, 0x32, 0xdc, 0xa0, 0x2c, 0xa9, 0x6c, 0xf3, 0x53, 0x7f, 0x3d, 0x17, 0x4c, 0x3d, + 0x3e, 0x11, 0x09, 0xa5, 0x1f, 0x9b, 0x59, 0x3a, 0x00, 0x4e, 0x4f, 0xfd, 0x3f, 0x81, 0xab, 0x59, + 0x07, 0xa0, 0xe5, 0x4e, 0x2c, 0x66, 0x8c, 0xf3, 0x17, 0x9c, 0x5e, 0x6a, 0x25, 0xa4, 0x66, 0xa1, + 0x90, 0x30, 0x00, 0x89, 0x05, 0xee, 0x00, 0xbc, 0xbf, 0x3e, 0x2a, 0x18, 0x12, 0x01, 0x05, 0xd4, + 0x33, 0xa0, 0xa1, 0x94, 0xb4, 0x02, 0xa0, 0x54, 0xdd, 0x4d, 0x73, 0xf9, 0x5d, 0xff, 0xaf, 0xc0, + 0x1d, 0x40, 0x2a, 0xbe, 0xa3, 0x98, 0x52, 0x21, 0x80, 0x57, 0x37, 0x31, 0xc5, 0x36, 0x5f, 0x36, + 0xa5, 0x49, 0x55, 0xc4, 0x9a, 0x46, 0x1a, 0xfb, 0x6b, 0x16, 0xcc, 0x27, 0x42, 0xdd, 0xa2, 0x67, + 0x20, 0x86, 0xe2, 0xcf, 0x03, 0x28, 0x7d, 0x05, 0x4e, 0x4f, 0xc0, 0x23, 0xd7, 0x4f, 0xb1, 0x14, + 0x4d, 0x80, 0x57, 0x9a, 0x45, 0x61, 0x4e, 0xdf, 0xca, 0xeb, 0x01, 0xf0, 0x71, 0x0e, 0xdb, 0x59, + 0x60, 0x02, 0x00, 0xf2, 0x60, 0xc1, 0x85, 0xf1, 0x66, 0x70, 0x47, 0x88, 0xdb, 0x81, 0xa2, 0x44, + 0x3c, 0x9c, 0x66, 0xff, 0x3f, 0xdd, 0xaa, 0x68, 0x52, 0xaf, 0xdf, 0x0e, 0xc2, 0x00, 0xa8, 0x84, + 0xd7, 0x13, 0xc0, 0x41, 0x6b, 0x3c, 0xbb, 0x0a, 0x65, 0xa1, 0x1d, 0x67, 0x70, 0x6e, 0x94, 0xe5, + 0x68, 0xfa, 0x71, 0xff, 0x4f, 0x5f, 0xee, 0x12, 0x8c, 0x78, 0x71, 0x23, 0xff, 0x2f, 0x01, 0x2b, + 0x50, 0x97, 0xb3, 0xd9, 0x71, 0x34, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, + 0x60, 0x82, }; #endif diff --git a/src/lang/glyph_ru.png b/src/lang/glyph_ru.png index 003556f591e907c596d549daf39bf055bf3f8d20..ed27735962a58b4d1bc1d5acfb8958fd152c2b5e 100644 GIT binary patch delta 1915 zcmV->2ZZ?G58@Aye1B0%L_t(|UhSIclG`{8gxvs7`Isa7{?EDuEvQLFu6SzwV`?+V z&`N^cd@_Hs^O9Ho)yrP%~-_r&<)6E-j^*Dc5wEXE9R;V85$Un}1unt4fR3jX<#AU~Y+P ziTCwl;JnB<3tr8kHoq+DfUI0EmJr)x)YWuNV zRtMk-5Oo63#{gLHmC{n?6JYf}2A~o1O@gE(VZ)(PB~{Uf073{~0ieA;;r&%bqXY1Q zo6dg*!1}M(x+g#YqAYPPc-A}ul0c;@NfoPy0GvR#F9B#t1AthoYSga)z;tBeQm^$I z$G^uh0)Mdjp8`OlDGaJM4Zx)mKsNwL7fOx5aN_DtLlcbJbbq5v0KoxJ(;%yPe2r2Y z04D%d5P&--00CU|00<1g#N4$5sI^zc00(eXaL^cI8=e7`9f0r~fX2MVmj?i}m~HWK z{SHuuKqRjO#M7A%M{GP?`FuoVL4|KUTX6xh7!DeU;=>W06>72 zP`?iV(Y&i)OHt9WduzT8NnHd0#`+`hG;j+=B!O=Tz$%5x1VHJi3)nMu9q~ozM&Mfk zXtw_}tD1B>0V4GP8GmN#2g;_-=d%rFO!+24fC;()Y>F3?A%y;iHQ~XSs*2~gwKmb_8Qv4nCzI>d|?PvLT z_xWaT%)c!-g`0v%mPOy*1e?nJ60_eQ_m^QgRf~6>`_Gn;65D0=yD|XK6#zKP=6?vP zS_)f>ED8+opsaey<&s%H04br&0BpVxK-cCafsd{J6Iv+7=1o+rei|ZL zKDU>m3Vt)dV*se!W zK<8(8QQYD66F`Ah^Em*ncMQM?RE0Y~mtW`ewf!ugYkmX}`MALH3kl=|837b4h)2RY z`$T+rtE_xE=n zhx2?MLG4~@I!seNh-b+E#D47OSwwEbEdzc0C6?dfZfb@pYb2Mg@~c|U2sOXmDd zxF3Bn04XJe0x8o8U^Bx0dMx-c0EmufV3paCa{9Rcx4@hPfLw5&&)yvQ{ObY45kMjU z_Sa7U;QwIQo(NGoLVr#_=>IJciF<&|0HE>3079~UBZV^Dpe(6u^HYC47fd}q5ecOq zn^`&lPEY+mfvZ^upyf_1W{mR}oL*`rq-LRzFaU`K?f|^MJ}MXz0R_}EprMqs0-#jg zO>_BO|F6IuKq|hYm{K8tS2r=mHeWWSNmay}MjHET7R)C?-E^X7Aco@411Nn3PEWui z*H5t&O@LRLMPW|g%Ig8}aSq#AU;+U0V8Mm)W^hM{+kv7)Je+3#Ki#TmQm@|*!T_j* z*Au`&YdpIOWuYBsaBh_4X!>#gPhaj5jCgS)|1SY6P?xjWaWnt`002ovPDHLkV1i5A Bd#wNf delta 1913 zcmV-<2Zs3K58w}we1A_#L_t(|UhSIOavM1eMAZPVql@kA{{OcwK@HfXJg(SPdT=&I znNk`ANaBQ1gh@`{+kWiFsu}vrXX9y~Nyx*f>6l#gUZGUd*t|~2B2Z3P0!Q2w} z67TE9z{Ga7SQ9{QVW3l`6^G4ZEZlk z-q1B2c{451F-Cy_u(8*#&`yB)=2uqO^OyChp*w&bV$e+>2_kwYHURAL76*|o-xW-4 zZvKwB@qA&NAb;N-Xp$RF4s1KBGqCy5xxc?TfaUXoXIlXfd6X*k>gxjo8uP2D1Hf+pvn1@`k}z_qpKyOw(dYoY z;HLBM0kHn-wLTIc08y5>7QAX+0ZE`zm86Q@LjX>o+m`^eqzOQ*RW<5Y0ARVYajVyQ zjq~5*n12CS{htCrqA5(OHVwd~5g^!PO+9y7>XbuMF!=sq%(&WBs;( z2lH|dz*(;703ecg0^;e+ha-jtS7ScjUmSp6Pcom6P`V*%Jp`~8?BUG7C7E3cFQ_)n zD{v2PqX}vg)c$6cP46Rngy}UO-R|0*oL@F!G98CLDp2|H-{k zd-eHdFU-GfIE9;nNVZL1UIats?u^;@$NgnmPSxUF=l(MiQewNzepe;{x&r`b*?$~C zRZC%OkwpQh3?QnPTrQdQGyYEC`qluvT}S;=N@2eb5qSL$04ORT;M{yKl1IF4I<+39 z6vjg&c6$*5I3cY7036%^uzy!f0PMRi0i=Yo0$`F$y+1<4dDU6X^jUWfB}H*@_+mp0A}bT0E06C6n6h(y}L8HO0i+876hsuivACpCoDXm45^n&Q5PuVZ#CAQ3 z0=hoKi{cKip8yK9n$H1ny<-4Ipel;jzx{JQU)#_2YtN4W;@G}eej$OJATxks1@TH) zr`+PxbbN6DjF%~)gqRZR@BO_#^!I2!cR&ptL`VRlEQsrQ0qRo&7;!ZK|DI3htBqeH zK{YZz-mkD@M1OoxE(1V}<$wMLJ}N-u`3>M>d;}BLcA1_rVjS|6mwTgeV6>PJbWw{}zbEGeA}V(D-BkAz8nXLYX!wTPkCo{q?(osplsmq4aCB zN(aE{rT-^zHR}Mh+=<1EdH#aaQ>}#5EEEz3Ah8VOfcMu&1w$gBfO-Zrl#;{*VLJ;f06-orxG>%f?g(*QC`!b`Y4-oiRz;JJ`cp9{#(K{u zfP>a}brs4&JI>(TEX(0EJ&T%sxl1tO$&LJfoySm@U{NOP00000NkvXXu0mjfg}{LN From a25e42e65f46f2f2d31b74dc101c52956ed2dfc2 Mon Sep 17 00:00:00 2001 From: XProger Date: Fri, 8 Jan 2021 09:00:55 +0300 Subject: [PATCH 49/58] rooms export to GLTF (WIP) --- src/core.h | 8 +- src/extension.h | 262 +++++++++++++++++++++++++++++++++++++++++------- src/gapi/gl.h | 88 ++++++++-------- src/gltf.h | 19 +++- src/lang.h | 4 +- src/mesh.h | 26 ++--- 6 files changed, 306 insertions(+), 101 deletions(-) diff --git a/src/core.h b/src/core.h index 603f8c1..777ea9b 100644 --- a/src/core.h +++ b/src/core.h @@ -151,11 +151,11 @@ #define _OS_X360 1 // TODO #elif __NDLESS__ - #define _OS_TNS 1 - #define _GAPI_SW 1 - #include + #define _OS_TNS 1 + #define _GAPI_SW 1 + #include - #undef OS_PTHREAD_MT + #undef OS_PTHREAD_MT #endif #if !defined(_OS_PSP) && !defined(_OS_TNS) diff --git a/src/extension.h b/src/extension.h index d44dea3..b787842 100644 --- a/src/extension.h +++ b/src/extension.h @@ -12,35 +12,226 @@ namespace Extension { + const float MESH_SCALE = 1.0f / 256.0f; + #ifdef GEOMETRY_EXPORT - void exportTexture(const char *name, Texture *tex) { + void exportTexture(const char *dir, const char *name, Texture *tex) { char *data32 = new char[tex->width * tex->height * 4]; tex->bind(sDiffuse); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, data32); - Texture::SaveBMP(name, data32, tex->width, tex->height); + char path[256]; + sprintf(path, "%s/%s", dir, name); + Texture::SaveBMP(path, data32, tex->width, tex->height); delete[] data32; } - void exportModel(IGame *game, TR::Model &model) { + void exportRooms(IGame *game, const char *dir) { TR::Level *level = game->getLevel(); MeshBuilder *mesh = game->getMesh(); + typedef uint32 MeshIndex; + + struct MeshVertex { + vec3 coord; + vec3 normal; + vec2 texCoord; + ubyte4 color; + }; + + char name[256]; + sprintf(name, "%s/rooms.glb", dir); + + LOG("export rooms: %s\n", name); + + FILE *file = fopen(name, "wb"); + if (!file) { + LOG("dump: can't dump rooms to file \"%s\"!\n", name); + return; + } + + Index *indices = new Index[1024 * 1024]; + Vertex *vertices = new Vertex[1024 * 1024]; + + mat4 flip = mat4( + -1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + ); + mat4 flipInv = flip.inverseOrtho(); + + struct RoomParams { + int iStart; + int vStart; + int iCount; + int vCount; + } roomParams[1024]; + + int iCount = 0, vCount = 0; + + // get geometry data + for (int roomIndex = 0; roomIndex < level->roomsCount; roomIndex++) { + RoomParams ¶ms = roomParams[roomIndex]; + params.iStart = iCount; + params.vStart = vCount; + + MeshBuilder::Geometry geom; + + for (int transp = 0; transp < 3; transp++) { + int blendMask = mesh->getBlendMask(transp); + + TR::Room &room = level->rooms[roomIndex]; + + // room geometry + mesh->buildRoom(geom, NULL, blendMask, room, level, indices, vertices, iCount, vCount, params.vStart); + + // static meshes + for (int j = 0; j < room.meshesCount; j++) { + TR::Room::Mesh &m = room.meshes[j]; + TR::StaticMesh *s = &level->staticMeshes[m.meshIndex]; + if (!level->meshOffsets[s->mesh]) continue; + TR::Mesh &staticMesh = level->meshes[level->meshOffsets[s->mesh]]; + + int x = m.x - room.info.x; + int y = m.y; + int z = m.z - room.info.z; + int d = m.rotation.value / 0x4000; + mesh->buildMesh(geom, blendMask, staticMesh, level, indices, vertices, iCount, vCount, params.vStart, 0, x, y, z, d, m.color, true, false); + } + } + + params.iCount = iCount - params.iStart; + params.vCount = vCount - params.vStart; + } + + for (int i = 0; i < iCount; i += 3) { // CCW -> CW + swap(indices[i], indices[i + 2]); + } + + // get model geometry + int verticesOffset = 0; + int indicesOffset = verticesOffset + vCount * sizeof(MeshVertex); + int bufferSize = indicesOffset + iCount * sizeof(MeshIndex); + + char *bufferData = new char[bufferSize]; + + MeshVertex *gVertices = (MeshVertex*)(bufferData + verticesOffset); + for (int i = 0; i < vCount; i++) { + Vertex &src = vertices[i]; + MeshVertex &dst = gVertices[i]; + + dst.coord = src.coord; + + dst.normal = src.normal; + dst.texCoord = src.texCoord; + dst.normal = dst.normal.normal(); + + dst.coord = flip * (dst.coord * MESH_SCALE); + dst.normal = flip * dst.normal; + + dst.texCoord *= (1.0f / 32767.0f); + dst.color = src.light; + } + + for (int i = 0; i < iCount; i++) { + MeshIndex &dst = ((MeshIndex*)(bufferData + indicesOffset))[i]; + dst = indices[i]; + } + + GLTF *gltf = new GLTF(); + + JSON *nodes; + gltf->addScene("Scene", &nodes); + + int accessorIndex = 0; + int nodeIndex = 0; + + for (int roomIndex = 0; roomIndex < level->roomsCount; roomIndex++) { + TR::Room &room = level->rooms[roomIndex]; + + RoomParams ¶ms = roomParams[roomIndex]; + if (params.iCount == 0) { + continue; + } + + sprintf(name, "%d_mesh", roomIndex); + gltf->addMesh(name, 0, accessorIndex + 0, accessorIndex + 1, accessorIndex + 2, accessorIndex + 3, accessorIndex + 4, -1, -1); + + sprintf(name, "%d", roomIndex); + gltf->addNode(name, nodeIndex, -1, vec3(float(-room.info.x), 0, float(room.info.z)) * MESH_SCALE, quat(0, 0, 0, 1)); + nodes->add(NULL, nodeIndex); // mesh + nodeIndex++; + + vec4 vMin(+INF), vMax(-INF); + + for (int i = params.vStart; i < params.vStart + params.vCount; i++) { + MeshVertex &v = gVertices[i]; + + vMin.x = min(vMin.x, v.coord.x); + vMin.y = min(vMin.y, v.coord.y); + vMin.z = min(vMin.z, v.coord.z); + + vMax.x = max(vMax.x, v.coord.x); + vMax.y = max(vMax.y, v.coord.y); + vMax.z = max(vMax.z, v.coord.z); + } + + gltf->addAccessor(0, sizeof(MeshIndex), params.iStart * sizeof(MeshIndex), params.iCount, GLTF::SCALAR, GL_UNSIGNED_INT); // 0 + gltf->addAccessor(1, sizeof(MeshVertex), params.vStart * sizeof(MeshVertex) + (int)OFFSETOF(MeshVertex, coord), params.vCount, GLTF::VEC3, GL_FLOAT, false, vMin, vMax); // 1 + gltf->addAccessor(1, sizeof(MeshVertex), params.vStart * sizeof(MeshVertex) + (int)OFFSETOF(MeshVertex, normal), params.vCount, GLTF::VEC3, GL_FLOAT); // 2 + gltf->addAccessor(1, sizeof(MeshVertex), params.vStart * sizeof(MeshVertex) + (int)OFFSETOF(MeshVertex, texCoord), params.vCount, GLTF::VEC2, GL_FLOAT); // 3 + gltf->addAccessor(1, sizeof(MeshVertex), params.vStart * sizeof(MeshVertex) + (int)OFFSETOF(MeshVertex, color), params.vCount, GLTF::VEC4, GL_UNSIGNED_BYTE, true); // 4 + + accessorIndex += 5; + } + + gltf->addSampler(GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, GL_REPEAT, GL_REPEAT); + gltf->addImage("rooms.bmp"); + gltf->addTexture("texture", 0, 0); + gltf->addMaterial("material", 0, 0, 1.0f, 0.0f); + + delete[] vertices; + delete[] indices; + + gltf->addBufferView(0, 0, indicesOffset, sizeof(MeshIndex) * iCount); // 0 + gltf->addBufferView(0, sizeof(MeshVertex), verticesOffset, sizeof(MeshVertex) * vCount); // 1 + + gltf->addBuffer(bufferData, bufferSize); // 0 + + delete[] bufferData; + + char *buffer = new char[gltf->getBufferSize()]; + int size = gltf->save(buffer); + delete gltf; + + fwrite(buffer, 1, size, file); + + delete[] buffer; + + fclose(file); + } + + void exportModel(IGame *game, const char *dir, TR::Model &model) { + TR::Level *level = game->getLevel(); + MeshBuilder *mesh = game->getMesh(); + + typedef uint32 MeshIndex; + struct ModelVertex { vec3 coord; vec3 normal; vec2 texCoord; - ubyte4 color; ubyte4 joints; ubyte4 weights; }; - typedef uint32 ModelIndex; - char name[256]; - sprintf(name, "models/dump/%d.glb", int(model.type)); + sprintf(name, "%s/model_%d.glb", dir, int(model.type)); + + LOG("export model: %s\n", name); FILE *file = fopen(name, "wb"); if (!file) { @@ -61,6 +252,7 @@ namespace Extension { anim->setAnim(0); animRate = max((int)(anim->anims + anim->index)->frameRate, 1); animFrames = anim->framesCount / animRate; + ASSERT(animFrames > 0); } // get model geometry @@ -89,7 +281,7 @@ namespace Extension { int rotationOffset = translationOffset + animFrames * sizeof(vec3); int verticesOffset = rotationOffset + model.mCount * animFrames * sizeof(quat); int indicesOffset = verticesOffset + vCount * sizeof(ModelVertex); - int bufferSize = indicesOffset + iCount * sizeof(ModelIndex); + int bufferSize = indicesOffset + iCount * sizeof(MeshIndex); char *bufferData = new char[bufferSize]; @@ -113,11 +305,10 @@ namespace Extension { dst.texCoord = src.texCoord; dst.normal = dst.normal.normal(); - dst.coord = flip * dst.coord; + dst.coord = flip * (dst.coord * MESH_SCALE); dst.normal = flip * dst.normal; dst.texCoord *= (1.0f / 32767.0f); - dst.color = src.color; dst.joints = ubyte4(uint8(src.coord.w / 2), 0, 0, 0); dst.weights = ubyte4(255, 0, 0, 0); @@ -131,29 +322,28 @@ namespace Extension { } for (int i = 0; i < iCount; i++) { - ModelIndex &dst = ((ModelIndex*)(bufferData + indicesOffset))[i]; + MeshIndex &dst = ((MeshIndex*)(bufferData + indicesOffset))[i]; dst = indices[i]; } GLTF *gltf = new GLTF(); gltf->addSampler(GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, GL_REPEAT, GL_REPEAT); - gltf->addImage("objects.bmp"); + gltf->addImage("models.bmp"); gltf->addTexture("texture", 0, 0); gltf->addMaterial("material", 0, 0, 1.0f, 0.0f); delete[] vertices; delete[] indices; - gltf->addAccessor(0, 0, iCount, GLTF::SCALAR, GL_UNSIGNED_INT); // 0 - gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, coord), vCount, GLTF::VEC3, GL_FLOAT, false, vMin, vMax); // 1 - gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, normal), vCount, GLTF::VEC3, GL_FLOAT); // 2 - gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, texCoord), vCount, GLTF::VEC2, GL_FLOAT); // 3 - //gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, color), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE); // TODO - gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, joints), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE); // 4 - gltf->addAccessor(1, (int)OFFSETOF(ModelVertex, weights), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE, true); // 5 + gltf->addAccessor(0, sizeof(MeshIndex), 0, iCount, GLTF::SCALAR, GL_UNSIGNED_INT); // 0 + gltf->addAccessor(1, sizeof(ModelVertex), (int)OFFSETOF(ModelVertex, coord), vCount, GLTF::VEC3, GL_FLOAT, false, vMin, vMax); // 1 + gltf->addAccessor(1, sizeof(ModelVertex), (int)OFFSETOF(ModelVertex, normal), vCount, GLTF::VEC3, GL_FLOAT); // 2 + gltf->addAccessor(1, sizeof(ModelVertex), (int)OFFSETOF(ModelVertex, texCoord), vCount, GLTF::VEC2, GL_FLOAT); // 3 + gltf->addAccessor(1, sizeof(ModelVertex), (int)OFFSETOF(ModelVertex, joints), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE); // 4 + gltf->addAccessor(1, sizeof(ModelVertex), (int)OFFSETOF(ModelVertex, weights), vCount, GLTF::VEC4, GL_UNSIGNED_BYTE, true); // 5 - gltf->addBufferView(0, 0, indicesOffset, sizeof(ModelIndex) * iCount); // 0 + gltf->addBufferView(0, 0, indicesOffset, sizeof(MeshIndex) * iCount); // 0 gltf->addBufferView(0, sizeof(ModelVertex), verticesOffset, sizeof(ModelVertex) * vCount); // 1 sprintf(name, "%d_mesh", int(model.type)); @@ -182,13 +372,13 @@ namespace Extension { timeline[i] = i * animRate / 30.0f; } gltf->addBufferView(0, 0, timelineOffset, animFrames * sizeof(float)); // 2 - gltf->addAccessor(2, 0, animFrames, GLTF::SCALAR, GL_FLOAT, false, vec4(timeline[0], 0, 0, 0), vec4(timeline[animFrames - 1], 0, 0, 1)); // 6 + gltf->addAccessor(2, 0, 0, animFrames, GLTF::SCALAR, GL_FLOAT, false, vec4(timeline[0], 0, 0, 0), vec4(timeline[animFrames - 1], 0, 0, 1)); // 6 } { // root translation (output) vec3 *translation = (vec3*)(bufferData + translationOffset); gltf->addBufferView(0, 0, translationOffset, animFrames * sizeof(vec3)); // 3 - gltf->addAccessor(3, 0, animFrames, GLTF::VEC3, GL_FLOAT); // 7+ + gltf->addAccessor(3, 0, 0, animFrames, GLTF::VEC3, GL_FLOAT); // 7+ JSON *sampler = samplers->add(JSON::OBJECT); // 0 sampler->add("input", 6); // timeline @@ -203,8 +393,7 @@ namespace Extension { for (int j = 0; j < animFrames; j++) { TR::AnimFrame *frame = anim->getFrame(anim->anims + anim->index, j); - translation[j] = frame->pos; - translation[j] = flip * translation[j]; + translation[j] = flip * (vec3((float)frame->pos.x, (float)frame->pos.y, (float)frame->pos.z) * MESH_SCALE); } } @@ -227,7 +416,7 @@ namespace Extension { *ptr = matrix.getRot(); ptr++; } - gltf->addAccessor(4, i * animFrames * sizeof(quat), animFrames, GLTF::VEC4, GL_FLOAT); // 8+ + gltf->addAccessor(4, 0, i * animFrames * sizeof(quat), animFrames, GLTF::VEC4, GL_FLOAT); // 8+ JSON *sampler = samplers->add(JSON::OBJECT); // 1+ sampler->add("input", 6); // timeline @@ -271,7 +460,7 @@ namespace Extension { for (int i = 0; i < model.mCount; i++) { sprintf(name, "joint_%d", i + 1); - JSON* node = gltf->addNode(name, -1, -1, jointPos, quat(0, 0, 0, 1)); + JSON* node = gltf->addNode(name, -1, -1, jointPos * MESH_SCALE, quat(0, 0, 0, 1)); JSON* children = new JSON(JSON::ARRAY, "children"); for (int j = 0; j < model.mCount; j++) { @@ -287,13 +476,13 @@ namespace Extension { } joints[i] = i + 1; + TR::Node &t = *((TR::Node*)&level->nodesData[model.node] + i); jointPos = flip * vec3((float)t.x, (float)t.y, (float)t.z); } gltf->addSkin("skin", -1, 1, joints, model.mCount); - char *buffer = new char[gltf->getBufferSize()]; int size = gltf->save(buffer); delete gltf; @@ -302,24 +491,27 @@ namespace Extension { delete[] buffer; - LOG("export model: %s\n", name); - fclose(file); } void exportGeometry(IGame *game, Texture *atlasRooms, Texture *atlasObjects, Texture *atlasSprites) { - CreateDirectory("models", NULL); - CreateDirectory("models/dump/", NULL); - exportTexture("models/dump/rooms", atlasRooms); - exportTexture("models/dump/objects", atlasObjects); - exportTexture("models/dump/sprites", atlasSprites); + char dir[256]; + sprintf(dir, "dump/%s", TR::LEVEL_INFO[game->getLevel()->id].name); + + CreateDirectory("dump", NULL); + CreateDirectory(dir, NULL); + + exportTexture(dir, "rooms", atlasRooms); + exportTexture(dir, "models", atlasObjects); TR::Level *level = game->getLevel(); MeshBuilder *mesh = game->getMesh(); + exportRooms(game, dir); + for (int i = 0; i < level->modelsCount; i++) { - exportModel(game, level->models[i]); + exportModel(game, dir, level->models[i]); } } #endif diff --git a/src/gapi/gl.h b/src/gapi/gl.h index 8baf60f..64e635d 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -67,61 +67,61 @@ #include #if defined(_GAPI_GLES) // Default in SDL2 is GLES3. If we want GLES2, pass -D_GAPI_GLES2. - #if defined (_GAPI_GLES2) // We want GLES2 on SDL2 - #include - #include + #if defined (_GAPI_GLES2) // We want GLES2 on SDL2 + #include + #include - #define GL_CLAMP_TO_BORDER 0x812D - #define GL_TEXTURE_BORDER_COLOR 0x1004 + #define GL_CLAMP_TO_BORDER 0x812D + #define GL_TEXTURE_BORDER_COLOR 0x1004 - #define GL_TEXTURE_COMPARE_MODE 0x884C - #define GL_TEXTURE_COMPARE_FUNC 0x884D - #define GL_COMPARE_REF_TO_TEXTURE 0x884E + #define GL_TEXTURE_COMPARE_MODE 0x884C + #define GL_TEXTURE_COMPARE_FUNC 0x884D + #define GL_COMPARE_REF_TO_TEXTURE 0x884E - #undef GL_RG - #undef GL_RG32F - #undef GL_RG16F - #undef GL_RGBA32F - #undef GL_RGBA16F - #undef GL_HALF_FLOAT + #undef GL_RG + #undef GL_RG32F + #undef GL_RG16F + #undef GL_RGBA32F + #undef GL_RGBA16F + #undef GL_HALF_FLOAT - #define GL_RG GL_RGBA - #define GL_RGBA32F GL_RGBA - #define GL_RGBA16F GL_RGBA - #define GL_RG32F GL_RGBA - #define GL_RG16F GL_RGBA - #define GL_HALF_FLOAT GL_HALF_FLOAT_OES + #define GL_RG GL_RGBA + #define GL_RGBA32F GL_RGBA + #define GL_RGBA16F GL_RGBA + #define GL_RG32F GL_RGBA + #define GL_RG16F GL_RGBA + #define GL_HALF_FLOAT GL_HALF_FLOAT_OES - #define GL_TEXTURE_WRAP_R 0 - #define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES - #define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES - //We need this on GLES2, too. - #define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE + #define GL_TEXTURE_WRAP_R 0 + #define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES + #define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES + //We need this on GLES2, too. + #define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE - #define glTexImage3D(...) 0 - #ifndef GL_TEXTURE_3D // WUUUUUT!? - #define GL_TEXTURE_3D GL_TEXTURE_3D_OES - #endif + #define glTexImage3D(...) 0 + #ifndef GL_TEXTURE_3D // WUUUUUT!? + #define GL_TEXTURE_3D GL_TEXTURE_3D_OES + #endif - #define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES + #define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES #else // We want GLES3 on SDL2 - #include - #include - #include + #include + #include + #include #endif //GAPI_GLES2 - // These are needed for both GLES2 and GLES3 on SDL2 - #define glGenVertexArrays(...) - #define glDeleteVertexArrays(...) - #define glBindVertexArray(...) - #define glGetProgramBinary(...) - #define glProgramBinary(...) + // These are needed for both GLES2 and GLES3 on SDL2 + #define glGenVertexArrays(...) + #define glDeleteVertexArrays(...) + #define glBindVertexArray(...) + #define glGetProgramBinary(...) + #define glProgramBinary(...) - #define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC - #define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC - #define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC - #define PFNGLGETPROGRAMBINARYPROC PFNGLGETPROGRAMBINARYOESPROC - #define PFNGLPROGRAMBINARYPROC PFNGLPROGRAMBINARYOESPROC + #define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC + #define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC + #define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC + #define PFNGLGETPROGRAMBINARYPROC PFNGLGETPROGRAMBINARYOESPROC + #define PFNGLPROGRAMBINARYPROC PFNGLPROGRAMBINARYOESPROC #else // We want OpenGL on SDL2, not GLES #include diff --git a/src/gltf.h b/src/gltf.h index 6430cca..b5e7c8e 100644 --- a/src/gltf.h +++ b/src/gltf.h @@ -26,9 +26,9 @@ struct GLTF { JSON *textures; JSON *materials; JSON *nodes; + JSON *scenes; JSON *skins; JSON *animations; - JSON *scenes; char *binaryData; int binarySize; @@ -46,9 +46,9 @@ struct GLTF { accessors = root->add(JSON::ARRAY, "accessors"); meshes = root->add(JSON::ARRAY, "meshes"); nodes = root->add(JSON::ARRAY, "nodes"); - skins = root->add(JSON::ARRAY, "skins"); - animations = root->add(JSON::ARRAY, "animations"); scenes = root->add(JSON::ARRAY, "scenes"); + skins = NULL;//root->add(JSON::ARRAY, "skins"); + animations = NULL;//root->add(JSON::ARRAY, "animations"); asset->add("generator", "OpenLara"); asset->add("version", "2.0"); @@ -120,13 +120,17 @@ struct GLTF { return header->length; } - JSON* addAccessor(int bufferView, int byteOffset, int count, AccessorType type, int format, bool normalized = false, const vec4 &vMin = vec4(0.0f), const vec4 &vMax = vec4(0.0f)) { + JSON* addAccessor(int bufferView, int byteStride, int byteOffset, int count, AccessorType type, int format, bool normalized = false, const vec4 &vMin = vec4(0.0f), const vec4 &vMax = vec4(0.0f)) { static const char *AccessorTypeName[ACCESSOR_TYPE_MAX] = { ACCESSOR_TYPES(DECL_STR) }; JSON *item = accessors->add(JSON::OBJECT); item->add("bufferView", bufferView); + if (byteStride) { + //item->add("byteStride", byteStride); + } + if (byteOffset) { item->add("byteOffset", byteOffset); } @@ -280,6 +284,10 @@ struct GLTF { } JSON *addSkin(const char *name, int inverseBindMatrices, int skeleton, int *joints, int jointsCount) { + if (!skins) { + skins = root->add(JSON::ARRAY, "skins"); + } + JSON *item = skins->add(JSON::OBJECT); if (name) { @@ -301,6 +309,9 @@ struct GLTF { } JSON* addAnimation(const char *name, JSON **samplers, JSON **channels) { + if (!animations) { + animations = root->add(JSON::ARRAY, "animations"); + } JSON *item = animations->add(JSON::OBJECT); if (name) item->add("name", name); diff --git a/src/lang.h b/src/lang.h index 2c0738e..b57c9fc 100644 --- a/src/lang.h +++ b/src/lang.h @@ -273,7 +273,7 @@ enum StringID { , "Suomi" \ , "{Cesky" \ , "\x11\x02\x8A\x02\x6C\x01\x54\x03\x02\xFF\xFF" \ - , "Magyar" + , "Magyar" #define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN", "_HU" @@ -341,7 +341,7 @@ void ensureLanguage(int lang) { ASSERT(COUNT(STR_CZ) == STR_MAX); ASSERT(COUNT(STR_CN) == STR_MAX); ASSERT(COUNT(STR_HU) == STR_MAX); - + lang += STR_LANG_EN; switch (lang) { diff --git a/src/mesh.h b/src/mesh.h index cf6e17e..20d7edf 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -348,8 +348,8 @@ struct MeshBuilder { Geometry &geom = range.geometry[transp]; - // rooms geometry - buildRoom(geom, range.dynamic[transp], blendMask, room, level, indices, vertices, iCount, vCount, vStartRoom); + // room geometry + buildRoom(geom, range.dynamic + transp, blendMask, room, level, indices, vertices, iCount, vCount, vStartRoom); // static meshes for (int j = 0; j < room.meshesCount; j++) { @@ -1004,11 +1004,13 @@ struct MeshBuilder { return 1 << texAttribute; } - void buildRoom(Geometry &geom, Dynamic &dyn, int blendMask, const TR::Room &room, TR::Level *level, Index *indices, Vertex *vertices, int &iCount, int &vCount, int vStart) { + void buildRoom(Geometry &geom, Dynamic *dyn, int blendMask, const TR::Room &room, TR::Level *level, Index *indices, Vertex *vertices, int &iCount, int &vCount, int vStart) { const TR::Room::Data &d = room.data; - dyn.count = 0; - dyn.faces = NULL; + if (dyn) { + dyn->count = 0; + dyn->faces = NULL; + } for (int j = 0; j < d.fCount; j++) { TR::Face &f = d.faces[j]; @@ -1023,9 +1025,9 @@ struct MeshBuilder { if (!(blendMask & getBlendMask(t.attribute))) continue; - if (t.animated) { - ASSERT(dyn.count < 0xFFFF); - dyn.count++; + if (dyn && t.animated) { + ASSERT(dyn->count < 0xFFFF); + dyn->count++; continue; } @@ -1036,9 +1038,9 @@ struct MeshBuilder { } // if room has non-static polygons, fill the list of dynamic faces - if (dyn.count) { - dyn.faces = new uint16[dyn.count]; - dyn.count = 0; + if (dyn && dyn->count) { + dyn->faces = new uint16[dyn->count]; + dyn->count = 0; for (int j = 0; j < d.fCount; j++) { TR::Face &f = d.faces[j]; TR::TextureInfo &t = level->objectTextures[f.flags.texture]; @@ -1049,7 +1051,7 @@ struct MeshBuilder { continue; if (t.animated) - dyn.faces[dyn.count++] = j; + dyn->faces[dyn->count++] = j; } } } From d98f62cf721d22ea7373370c12aeeacca503a67c Mon Sep 17 00:00:00 2001 From: XProger Date: Tue, 12 Jan 2021 11:59:54 +0300 Subject: [PATCH 50/58] fix depth buffer size on AMD --- src/platform/win/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/platform/win/main.cpp b/src/platform/win/main.cpp index 2fc987a..79e6f41 100644 --- a/src/platform/win/main.cpp +++ b/src/platform/win/main.cpp @@ -455,6 +455,7 @@ HWND hWnd; WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB, WGL_COLOR_BITS_ARB, 32, WGL_ALPHA_BITS_ARB, 8, + WGL_DEPTH_BITS_ARB, 24, 0 }; From 28b336ea3db4f933af5b1349a3ac35d58b3773d3 Mon Sep 17 00:00:00 2001 From: Leo-89 <62290297+Leo-89@users.noreply.github.com> Date: Tue, 12 Jan 2021 10:02:46 +0100 Subject: [PATCH 51/58] Update it.h (#292) Hi, playing and testing the game during these Xmas holidays I thought to make my past translation a bit "smarter". --- src/lang/it.h | 210 +++++++++++++++++++++++++------------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/src/lang/it.h b/src/lang/it.h index 1c540ed..bda883c 100644 --- a/src/lang/it.h +++ b/src/lang/it.h @@ -5,7 +5,7 @@ const char *STR_IT[] = { "" // help - , "Caricamento..." + , "Caricamento in corso" , "Premi H per la lista dei comandi" , helpText , "%s@@@" @@ -13,17 +13,17 @@ const char *STR_IT[] = { "" "OGGETTI RACCOLTI %d@@" "SEGRETI %d di %d@@" "TEMPO IMPIEGATO %s" - , "Salvataggio in corso..." - , "Salvataggio completato!" - , "ERRORE DURANTE IL SALVATAGGIO!" + , "Salvataggio in corso" + , "Salvataggio completato" + , "ERRORE DURANTE IL SALVATAGGIO" , "S$I" , "NO" - , "Off" - , "On" - , "Off" + , "Spento" + , "Acceso" + , "Spento" , "Doppio schermo" , "Anaglifo" - , "Visione compressa" + , "Compressione" , "VR" , "Basso" , "Medio" @@ -65,30 +65,30 @@ const char *STR_IT[] = { "" , "Esci dal gioco" , "Selezione del livello" // detail options - , "Imposta i Dettagli" + , "Livello di Dettaglio" , "Textures" , "Illuminazione" , "Ombre" , "Acqua" , "VSync" , "Stereo" - , "Oggetti Semplificati" + , "Oggetti semplificati" , "Risoluzione" , STR_SCALE // sound options - , "Imposta il Volume" + , "Impostazioni audio" , "Riverbero" , "Sottotitoli" , "Lingua" // controls options - , "Controlli Personalizzati" + , "Personalizzazione comandi" , "Tastiera" , "Gamepad" , "Vibrazione" , "Retargeting" , "Mira multipla" // controls - , "Sinistra", "Destra", "Correre", "Indietro", "Saltare", "Camminare", "Azione", "Estrarre l'Arma", "Guardare", "Accovacciarsi", "Scattare", "Capriola", "Inventario", "Start" + , "Sinistra", "Destra", "Avanti", "Indietro", "Salto", "Camminata", "Azione", "Estrarre l'arma", "Osservare", "Accovacciarsi", "Scatto", "Capriola", "Inventario", "Start" , STR_KEYS // inventory items , "Sconosciuto" @@ -97,8 +97,8 @@ const char *STR_IT[] = { "" , "Fucile" , "Magnum" , "Uzi" - , "Munizioni Pistola" - , "Munizioni Fucile" + , "Munizioni pistola" + , "Munizioni fucile" , "Munizioni Magnum" , "Munizioni Uzi" , "Medikit piccolo" @@ -120,7 +120,7 @@ const char *STR_IT[] = { "" , "Puzzle" , "Idolo d'oro" , "Barra d'oro" - , "Ruota Dentata" + , "Ruota dentata" , "Fusibile" , "Ankh" , "Occhio di Horus" @@ -129,57 +129,57 @@ const char *STR_IT[] = { "" , "Chiave della piramide" // TR1 subtitles /* CAFE */ , - "[43500]Cosa deve fare un uomo per ottenere@da te questo tipo di attenzioni?" - "[47500]Difficile dirlo con precisione,@ma sembra che tu sia partito bene." - "[50000]Bene, magnifico. Ma la verit$a@$e che non sono io che ti sto cercando." + "[43500]Che cosa deve fare un uomo@per ricevere da te questo genere di attenzioni?" + "[47500]Difficile dirlo con certezza,@ma forse sei sulla buona strada." + "[50000]Ottimo allora. Anche se a dire il vero@$non sono io che ti sto cercando." "[54500]No?" - "[55000]No. Sono qui per Miss Jacqueline Natla,@della Natla Technologies." - "[59000]Hai presente, creatrice di@cose brillanti e spettacolari?" - "[64500]Sta zitto, Larson." - "[66000]Mmm." + "[55000]No. Sono qui per conto di Miss Jacqueline Natla,@della Natla Technologies." + "[59000]Hai presente la creatrice di cose@brillanti e spettacolari?" + "[64500]Sta' zitto, Larson." + "[66000]Mmm.." "[68000]Rifatti gli occhi, Lara." "[70500]Non senti gi$a il tintinnio del tuo portamonete?" - "[73500]Mi dispiace. Lavoro solo per sport." + "[73500]Mi spiace; Lavoro solo per divertirmi." "[76000]Allora non potrai non amare questo immenso parco giochi." - "[78000]Peru'. Vaste catene montuose da attraversare.@Muri di ghiaccio trasparente. Dirupi rocciosi. Venti selvaggi." - "[87500]E ci sarebbe questo gingillo:@un antichissimo artefatto dai poteri mistici" + "[78000]Peru'. Sterminate catene montuose da valicare.@Muri di ghiaccio trasparente. Dirupi rocciosi. Venti sferzanti." + "[87500]E poi ci sarebbe questo gingillo:@un antichissimo artefatto dai poteri mistici" "[92500]sepolto nella tomba perduta di Qualopec." - "[96000]E' ci$o che mi interessa." - "[98000]Potresti partire gi$a domani.@O hai gi$a altri impegni per domani?" + "[96000]E' tutto ci$o che mi interessa." + "[98000]Potresti partire gi$a domani.@O avevi in previsione altri programmi?" /* LIFT */ , - "[49000]Sono stato riassegnato alle rovine di St. Francis,@nuove tentazioni mi tormentano." + "[49000]Sono stato assegnato alle rovine di St. Francis,@nuove tentazioni mi tormentano." "[53500]Tra i fratelli gira voce che sepolto@sotto il nostro monastero riposi il corpo di Tihocan," "[60000]uno dei tre leggendari sovrani@del continente perduto, Atlantide," - "[64500]e che con lui si trovi il suo frammento@dello Scion di Atlantide." - "[68000]L'amuleto diviso e detenuto tra i tre sovrani" - "[72500]che controlla poteri inimmaginabili.@Poteri che superano quelli dello stesso Creatore." - "[79000]Mi tremano le gambe al solo pensiero@che giaccia cos$i vicino al mio corpo mortale." - "[85500]Ogni notte cerco di rifuggire certe fantasie,@ma $e una sfida ardua." + "[64500]e che con lui si trovi il suo frammento@dello Scion atlantideo." + "[68000]L'amuleto diviso e spartito tra i tre sovrani" + "[72500]capace di controllare poteri inimmaginabili.@Poteri che superano quelli dello stesso Iddio." + "[79000]Mi tremano le gambe al solo pensiero@che giaccia talmente vicino al mio corpo mortale!" + "[85500]Ogni notte provo a rifuggire certe fantasie,@ma $e una sfida estremamente ardua." "[92000]" - "[93500]Pierre. Tsss. Che idiota." + "[93500]Pierre. Tsss. Che idiota!" /* CANYON */ , - "[13500]Sei appena giunta al capolinea." + "[13500]Sei appena giunta al capolinea!" "[16500]Salve." "[17500]Buon pomeriggio." "[20000]E cos$i hai lasciato Larson a bocca asciutta?" "[22500]Se cos$i si pu$o dire." - "[24000]Bene, le tue scorribande sono giunte al termine." + "[24000]Bene, le tue scorribande finiscono qui." "[27000]E' tempo di restituirmi ci$o che mi hai sottratto." "[30000]Diamo un'occhiata nel suo sacchetto per il pranzo." "[32000]" - "[42500]Ottimo! Uccidila!" + "[42500]Ottimo. Sbarazzatene!" "[45000]Hey!" "[48000]" - "[50500]Cretini!" + "[50500]Idioti!" "[53000]" "[62500]Andiamo." "[65000]" - "[136000]Che cavolo era quello?" + "[136000]Che diamine era quello?" "[138000]Cosa?" - "[138500]Quella cosa." - "[140500]Probabilmente era solo un pesce." - "[142500]Deve essere stato un pesce bello grosso, genio." - "[145000]Ragazzo, devi imparare a calmarti.@Torno dentro. Vieni?" + "[138500]Quella cosa.." + "[140500]Sar$a stato solo un pesce." + "[142500]Allora deve essere stato un pesce bello grosso, genio!" + "[145000]Ragazzo, vedi di darti una calmata!@Torno dentro. Vieni con me?" "[152000]" "[158000]Piano..." "[160000]Eccola qui." @@ -191,123 +191,123 @@ const char *STR_IT[] = { "" "[11500]Non ne avete il diritto! Io..." "[12500]Infrangendo le leggi che governano@e tutelano il nostro popolo" "[18500]e sfidando Tihocan e me con il tuo esercito." - "[23500]I nostri guerrieri hanno lasciato la nostra piramide" - "[27000]cosicch)e tu potessi usare - il suo potere creativo -@per la tua dissennata brama di distruzione." + "[23500]I nostri guerrieri hanno lasciato la piramide" + "[27000]cosicch)e tu potessi usare il suo potere creativo@per perseguire la tua dissennata brama di distruzione." "[33500]Dissennata!? Guardatevi!" - "[35500]Nessuno di voi possiede un briciolo@di inventiva nel suo cervello." + "[35500]Nessuno di voi possiede un briciolo di ambizione!" "[40500]Inetti!" "[41500]Facciamolo e basta." "[44000]Tihocan!" - "[45000]Hai usato il luogo sacro@come una fonte di piacere personale," + "[45000]Hai usato il nostro luogo sacro@come fonte di piacere personale," "[49500]come fosse una fabbrica di mostri." - "[51000]Sono dei sopravvissuti. Una nuova generazione." + "[51000]Sono dei sopravvissuti; una nuova generazione!" "[54000]Solo un mucchio di carcasse dilaniate ora." - "[56000]E tu. Verrai imprigionata nel limbo." + "[56000]E tu. Tu verrai imprigionata nel limbo." "[60000]Render$a le tue vene, cuore, gambe," - "[64000]e quella tua mente disturbata un tutt'uno col sangue congelato." - "[70000]Goditi la tua eterna disperazione, Natla." + "[64000]e quella tua mente schizzata un tutt'uno con il sangue gelido." + "[70000]Goditi la tua eterna disperazione, Natla!" "[73000]Neppure tu riposerai bene, o tantomeno il tuo@dannato continente di Atlantide!" /* 22 */ , "[04000]Di nuovo qui?" - "[05500]Anche tu - per la grande riapertura, suppongo." - "[09500]L'evoluzione fluisce - la selezione naturale scorre pi$u lenta che mai..." - "[13500]un rifornimento di carne fresca risveglier$a il nostro orgoglio identitario" + "[05500]Anche tu - per assistere al grande debutto, suppongo." + "[09500]L'evoluzione fluisce ma la selezione naturale scorre pi$u lenta che mai..." + "[13500]Un rifornimento di carne fresca risveglier$a il nostro orgoglio identitario" "[17500] - ci rinforzer$a e ci avvantagger$a..." - "[20500]Dar$a persino origine a nuove razze" + "[20500]..dar$a persino origine a nuove razze." "[22500]Una specie di evoluzione sotto steroidi, quindi." - "[24500]Un calcio nel sedere...@quei poveretti di Qualopec e Tihocan non immaginano neppure" + "[24500]Un bel calcio nel sedere...@quei poveretti di Qualopec e Tihocan non immaginano neppure" "[29500] - il cataclisma che colp$i Atlantide ha spazzato via una razza di rammolliti..." "[33500]facendoli ripiombare alle basi della sopravvivenza..." - "[37000]Non doveva andare in quel modo." + "[37000]..ma non doveva andare in quel modo!" "[39000]O in questo." "[40000]La schiusura avr$a inizio tra 15 secondi." - "[43000]Troppo tardi per tirarsi indietro adesso!" + "[43000]Troppo tardi ormai per tirarsi indietro!" "[45000]Non senza la mente dell'operazione!" "[47000]Noooo!" - "[50000]DIECI" - "[54000]CINQUE..." + "[50000]10" + "[54000]5..." "[55500]4...3...2..." - "[60000]UNO..." + "[60000]1..." /* 23 */ , "[00001]Bene, adesso hai la mia attenzione" "[02500]- Tuttavia, non sono cos$i sicura di avere la tua." "[05000]Hey?" - "[06000]Ti accopper$o e ti sbatter$o dietro la porta di una stalla." + "[06000]Ti accopper$o e ti sbatter$o dentro una stalla." "[09000]Come no." "[10000]Tu e quel dannato pezzo di Scion." - "[13000]Se lo vuoi a tutti i costi, provveder$o immediatamente a..." + "[13000]Se vuoi tenerlo ad ogni costo, provveder$o immediatamente a..." "[17000]Aspetta... stiamo parlando di questo artefatto?" - "[20000]Siamo sulla buona strada ... te lo inf..." - "[22000]Fermo - Scusa un secondo" - "[24000]- hai detto questo pezzo, - dove sono gli altri?" - "[26500]Miss Natla ha messo Pierre Dupont sulle loro tracce." + "[20000]Siamo sulla buona strada ... te lo farò ingoi..." + "[22000]Alt - Scusa un secondo" + "[24000]- hai detto questo pezzo - dove sono gli altri?" + "[26500]Miss Natla ha già messo Pierre Dupont sulle loro tracce." "[29500]E lui dove si trova adesso?" "[30500]Hah. Non sei abbastanza veloce per raggiungerlo." - "[34000]Credi di trattenermi con tutto questo blaterare?" - "[37000]Non so dove lo stiano conducendo le sue gambette da leprotto." + "[34000]Hai forse intenzione di trattenermi blaterando?" + "[37000]Non so dove lo stiano conducendo ora le sue gambette da leprotto." "[42000]Dovresti chiederlo a Miss Natla." "[46000]" "[51000]Grazie. Provveder$o." /* 24 */ , "" /* 25 */ , "[03500]Qui giace Tihocan" - "[05000]...uno dei due indiscussi sovrani di Atlantide..." - "[10000]Che anche dopo la rovina del continente..." - "[13000]...tent$o di stabilire l'ordine in queste lande desolate..." + "[05000]...uno dei leggendari sovrani di Atlantide..." + "[10000]..che anche dopo la rovina del continente..." + "[13000]...tent$o di ristabilire l'ordine in queste lande desolate..." "[19000]Egli mor$i senza un erede e la sua conoscenza non fu tramandata..." "[25500]Veglia su di noi, Tihocan." /* 26 */ , "Benvenuto nella mia casa." - /* 27 */ , "Usa i tasti di controllo per andare nella stanza della musica." + /* 27 */ , "Usa i comandi per andare nella stanza della musica." /* 28 */ , "Ok. Facciamo qualche acrobazia.@Premi il tasto Salto." - /* 29 */ , "Ora fallo di nuovo premendo in una@delle direzioni: salter$o da quella parte." - /* 30 */ , "Ecco l'atrio principale.@Scusa per quelle casse, ho imballato alcune cose@e il fattorino non $e ancora passato." - /* 31 */ , "Corri vicino a una cassa e, continuando a premere in Avanti,@premi Azione e io ci salter$o sopra." - /* 32 */ , "Una volta questa stanza era una sala da ballo,@ma io l'ho trasformata nella mia palestra personale.@Cosa ne pensi?@Ok, facciamo qualche esercizio." - /* 33 */ , "In effetti io non corro sempre.@Quando occorre essere cauta, cammino.@Tieni premuto il tasto Cammina e raggiungi la linea bianca." - /* 34 */ , "Con il tasto Cammina premuto, non cadr$o@nemmeno se mi spingi a farlo.@Avanti, prova pure." - /* 35 */ , "Se vuoi guardarti intorno, premi e tieni premuto il tasto Guarda.@Quindi premi nella direzione in cui vuoi guardare." - /* 36 */ , "Se un salto $e troppo lungo, posso aggrapparmi al@bordo per evitare una brutta caduta.@Cammina verso il bordo con la linea bianca@finch)e non posso pi$u andare avanti.@Quindi premi Salto, immediatamente seguito da Avanti,@e mentre sono in aria premi e tieni premuto il tasto Azione." - /* 37 */ , "Premi Avanti e mi arrampicher$o." - /* 38 */ , "Se faccio un salto con rincorsa, posso arrivare@a quella distanza, senza alcun problema." - /* 39 */ , "Cammina verso il bordo con la linea bianca finch)e non mi fermo.@Quindi rilascia il tasto Cammina e premi una@volta Avanti per farmi prendere la rincorsa.@Premi Avanti e subito dopo premi e tieni premuto il tasto Salto.@Non spiccher$o il salto fino all'ultimo secondo." - /* 40 */ , "Perfetto. Questo $e davvero grande.@Allora, fai un salto con rincorsa esattamente come prima,@ma questa volta, mentre sono in aria premi e tieni premuto@il tasto Azione per farmi aggrappare al bordo." + /* 29 */ , "Ora fallo di nuovo premendo un tasto direzionale;@salter$o verso quella parte." + /* 30 */ , "Ecco l'atrio principale.@Scusa per quelle casse; ho imballato alcune cose@ma come immaginerai il fattorino non $e ancora passato." + /* 31 */ , "Posizionami di fronte a una cassa e continuando a premere Avanti@premi il tasto Azione: mi ci arrampicher$o sopra." + /* 32 */ , "Una volta questa era una sala da ballo@ma io l'ho trasformata nella mia palestra personale. Che te ne pare?@Ok, ora facciamo qualche esercizio." + /* 33 */ , "Come immaginerai io non corro sempre;@quando serve una certa prudenza cammino.@Tieni premuto il tasto Camminata e raggiungi la linea bianca." + /* 34 */ , "Con il tasto Camminata premuto non cadr$o@nemmeno se mi spingi a farlo.@Avanti, prova pure!" + /* 35 */ , "Se vuoi guardarti intorno premi e tieni premuto il tasto Osserva;@infine con i tasti direzionali muovi la visuale verso il punto che vuoi." + /* 36 */ , "Se un salto $e troppo lungo posso aggrapparmi al bordo@per evitarmi una rovinosa caduta.@Cammina verso il bordo con la linea bianca finch)e non posso pi$u andare avanti;@quindi premi Salto, immediatamente seguito da Avanti@e mentre sono in aria premi e tieni premuto il tasto Azione." + /* 37 */ , "Premi il tasto Avanti e mi arrampicher$o." + /* 38 */ , "Facendo un salto con rincorsa arrivare a quella distanza@sarà sicuramente uno scherzo." + /* 39 */ , "Cammina verso il bordo con la linea bianca finch)e non mi fermo.@Quindi rilascia il tasto Cammina e premi una volta Indietro@in modo da farmi prendere la rincorsa.@Premi Avanti e subito dopo premi e tieni premuto il tasto Salto:@non salterò fino all'ultimo secondo." + /* 40 */ , "Perfetto; questo $e davvero un gran bel salto!@Allora: fai un salto con rincorsa esattamente come prima@ma questa volta mentre sono in aria premi e tieni premuto Azione@per permettermi di aggrapparmi al bordo." /* 41 */ , "Bene." - /* 42 */ , "Prova a saltare qui su.@Premi avanti e tieni premuto il tasto Azione." - /* 43 */ , "Non posso tirarmi su perch)e la fessura $e troppo stretta.@Per$o puoi premere verso destra: mi sposter$o@lateralmente finch)e c'$e spazio, poi premi avanti." - /* 44 */ , "Ottimo!@Se c'$e un grosso dislivello e non voglio farmi@male cadendo, posso calarmi gi$u lentamente." - /* 45 */ , "Premi una volta indietro e far$o un salto in quella direzione.@Poi, immediatamente, premi e tieni premuto il@tasto Azione: mi aggrapper$o al bordo per scendere." + /* 42 */ , "Ora prova a sollevarti qui!@Premi Avanti e tieni premuto il tasto Azione." + /* 43 */ , "Come vedi non posso tirarmi su perch)e la fessura $e troppo stretta,@per$o puoi spingere verso destra: mi sposter$o@lateralmente finch)e c'$e spazio. Infine premi Avanti." + /* 44 */ , "Ottimo!@Se c'$e un grosso dislivello e non voglio farmi male cadendo@posso calarmi gi$u lentamente." + /* 45 */ , "Premi una volta Indietro e far$o uno scatto in quella direzione.@Poi, immediatamente, premi e tieni premuto il@tasto Azione: mi aggrapper$o al bordo per scendere." /* 46 */ , "Ora rilascia." - /* 47 */ , "Andiamo a farci una nuotata." - /* 48 */ , "Usa il tasto Salto ed i tasti di controllo@per muovermi sott'acqua." - /* 49 */ , "Ah! Aria!@Usa avanti, sinistra e destra per muoverti quando sei a galla.@Premi Salto per immergerti e fare un'altra nuotata.@Oppure raggiungi il bordo e premi Azione per uscire." - /* 50 */ , "Perfetto. Ora sar$a meglio che mi tolga@questi vestiti bagnati." + /* 47 */ , "Adesso andiamo a farci una bella nuotata!" + /* 48 */ , "Usa il tasto Salto insieme ai tasti direzionali@per farmi muovere quando sono sott'acqua." + /* 49 */ , "Ah! Aria!@Premi Avanti, Indietro Sinistra e Destra per muovermi quando sono a galla.@Premi Salto per farmi immergere di nuovo,@altrimenti raggiungi il bordo e premi Avanti e Azione per farmi uscire." + /* 50 */ , "Perfetto! Ora però sar$a meglio che mi tolga@questi vestiti bagnati.." /* 51 */ , "Sorridi!" /* 52 */ , "Niente di personale." - /* 53 */ , "Maledetto, mi fai ancora venire il mal di testa.@E mi fai venire in mente delle brutte idee@ad esempio spararti!" - /* 54 */ , "Non puoi liberarti di me e della mia@stirpe cos$i facilmente, Lara." - /* 55 */ , "Un po' in ritardo per la premiazione, no?@Ma l'importante $e partecipare, giusto?" + /* 53 */ , "Essere maledetto, mi fai sempre venire il mal di testa.@E mi provochi anche brutti pensieri,@ad esempio quello di spararti!" + /* 54 */ , "Non puoi liberarti di me e della mia stirpe@cos$i facilmente, Lara!" + /* 55 */ , "Un po' in ritardo per la premiazione, no?@Ma l'importante in fin dei conti $e partecipare, sbaglio?" /* 56 */ , "Mi stai sparando?@Ehi, stai sparando a me?@Eh s$i, non c'$e nessun altro, stai proprio sparando a me!" // TR1 levels , "Casa di Lara" , "Caverne" , "Citt$a di Vilcabamba" - , "Valle perduta" + , "La Valle Perduta" , "Tomba di Qualopec" , "Rovine di St. Francis" , "Colosseo" , "Palazzo di Mida" - , "La Cisterna" + , "Cisterna" , "Tomba di Tihocan" , "Citt$a di Khamoon" , "Obelisco di Khamoon" , "Santuario dello Scion" , "Miniere di Natla" , "Atlantide" - , "La grande piramide" + , "La Grande Piramide" , "Ritorno in Egitto" , "Tempio del Gatto" , "Fortezza atlantidea" - , "L'Alveare" + , "L'alveare" // TR2 levels , "Casa di Lara" , "La Grande Muraglia" @@ -323,10 +323,10 @@ const char *STR_IT[] = { "" , "Pendici tibetante" , "Monastero di Barkhang" , "Catacombe di Talion" - , "Palazzo del ghiaccio" + , "Palazzo di ghiaccio" , "Tempio dello Xian" , "Isole galleggianti" - , "La tana del Drago" + , "La tana del drago" , "Casa dolce casa" // TR3 levels , "Casa di Lara" @@ -347,9 +347,9 @@ const char *STR_IT[] = { "" , "Area 51" , "Antartico" , "Miniere RX-Tech" - , "CittГ  perduta di Tinnos" + , "Citt$a perduta di Tinnos" , "Caverna del meteorite" - , "All Hallows" + , "Hallows" }; #endif From e7d84c6bea8a1e04a35bd9047a761df2fa964cac Mon Sep 17 00:00:00 2001 From: XProger Date: Tue, 12 Jan 2021 12:14:22 +0300 Subject: [PATCH 52/58] fix special characters for Italian translation --- src/lang/it.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lang/it.h b/src/lang/it.h index bda883c..0016629 100644 --- a/src/lang/it.h +++ b/src/lang/it.h @@ -237,10 +237,10 @@ const char *STR_IT[] = { "" "[10000]Tu e quel dannato pezzo di Scion." "[13000]Se vuoi tenerlo ad ogni costo, provveder$o immediatamente a..." "[17000]Aspetta... stiamo parlando di questo artefatto?" - "[20000]Siamo sulla buona strada ... te lo farò ingoi..." + "[20000]Siamo sulla buona strada ... te lo far$o ingoi..." "[22000]Alt - Scusa un secondo" "[24000]- hai detto questo pezzo - dove sono gli altri?" - "[26500]Miss Natla ha già messo Pierre Dupont sulle loro tracce." + "[26500]Miss Natla ha gi$a messo Pierre Dupont sulle loro tracce." "[29500]E lui dove si trova adesso?" "[30500]Hah. Non sei abbastanza veloce per raggiungerlo." "[34000]Hai forse intenzione di trattenermi blaterando?" @@ -268,8 +268,8 @@ const char *STR_IT[] = { "" /* 35 */ , "Se vuoi guardarti intorno premi e tieni premuto il tasto Osserva;@infine con i tasti direzionali muovi la visuale verso il punto che vuoi." /* 36 */ , "Se un salto $e troppo lungo posso aggrapparmi al bordo@per evitarmi una rovinosa caduta.@Cammina verso il bordo con la linea bianca finch)e non posso pi$u andare avanti;@quindi premi Salto, immediatamente seguito da Avanti@e mentre sono in aria premi e tieni premuto il tasto Azione." /* 37 */ , "Premi il tasto Avanti e mi arrampicher$o." - /* 38 */ , "Facendo un salto con rincorsa arrivare a quella distanza@sarà sicuramente uno scherzo." - /* 39 */ , "Cammina verso il bordo con la linea bianca finch)e non mi fermo.@Quindi rilascia il tasto Cammina e premi una volta Indietro@in modo da farmi prendere la rincorsa.@Premi Avanti e subito dopo premi e tieni premuto il tasto Salto:@non salterò fino all'ultimo secondo." + /* 38 */ , "Facendo un salto con rincorsa arrivare a quella distanza@sar$a sicuramente uno scherzo." + /* 39 */ , "Cammina verso il bordo con la linea bianca finch)e non mi fermo.@Quindi rilascia il tasto Cammina e premi una volta Indietro@in modo da farmi prendere la rincorsa.@Premi Avanti e subito dopo premi e tieni premuto il tasto Salto:@non salter$o fino all'ultimo secondo." /* 40 */ , "Perfetto; questo $e davvero un gran bel salto!@Allora: fai un salto con rincorsa esattamente come prima@ma questa volta mentre sono in aria premi e tieni premuto Azione@per permettermi di aggrapparmi al bordo." /* 41 */ , "Bene." /* 42 */ , "Ora prova a sollevarti qui!@Premi Avanti e tieni premuto il tasto Azione." @@ -280,7 +280,7 @@ const char *STR_IT[] = { "" /* 47 */ , "Adesso andiamo a farci una bella nuotata!" /* 48 */ , "Usa il tasto Salto insieme ai tasti direzionali@per farmi muovere quando sono sott'acqua." /* 49 */ , "Ah! Aria!@Premi Avanti, Indietro Sinistra e Destra per muovermi quando sono a galla.@Premi Salto per farmi immergere di nuovo,@altrimenti raggiungi il bordo e premi Avanti e Azione per farmi uscire." - /* 50 */ , "Perfetto! Ora però sar$a meglio che mi tolga@questi vestiti bagnati.." + /* 50 */ , "Perfetto! Ora per$o sar$a meglio che mi tolga@questi vestiti bagnati.." /* 51 */ , "Sorridi!" /* 52 */ , "Niente di personale." /* 53 */ , "Essere maledetto, mi fai sempre venire il mal di testa.@E mi provochi anche brutti pensieri,@ad esempio quello di spararti!" From 21f0b07f1b2dd46cec3177e974af1532debb3b5c Mon Sep 17 00:00:00 2001 From: Leo-89 <62290297+Leo-89@users.noreply.github.com> Date: Fri, 15 Jan 2021 04:59:37 +0100 Subject: [PATCH 53/58] Update it.h (#296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Here it is! I swear it's the last change: I read everything 1000 times. 🙄 Thank you very much. 😉👍 --- src/lang/it.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lang/it.h b/src/lang/it.h index 0016629..d97b40f 100644 --- a/src/lang/it.h +++ b/src/lang/it.h @@ -256,22 +256,22 @@ const char *STR_IT[] = { "" "[13000]...tent$o di ristabilire l'ordine in queste lande desolate..." "[19000]Egli mor$i senza un erede e la sua conoscenza non fu tramandata..." "[25500]Veglia su di noi, Tihocan." - /* 26 */ , "Benvenuto nella mia casa." - /* 27 */ , "Usa i comandi per andare nella stanza della musica." - /* 28 */ , "Ok. Facciamo qualche acrobazia.@Premi il tasto Salto." - /* 29 */ , "Ora fallo di nuovo premendo un tasto direzionale;@salter$o verso quella parte." - /* 30 */ , "Ecco l'atrio principale.@Scusa per quelle casse; ho imballato alcune cose@ma come immaginerai il fattorino non $e ancora passato." - /* 31 */ , "Posizionami di fronte a una cassa e continuando a premere Avanti@premi il tasto Azione: mi ci arrampicher$o sopra." - /* 32 */ , "Una volta questa era una sala da ballo@ma io l'ho trasformata nella mia palestra personale. Che te ne pare?@Ok, ora facciamo qualche esercizio." - /* 33 */ , "Come immaginerai io non corro sempre;@quando serve una certa prudenza cammino.@Tieni premuto il tasto Camminata e raggiungi la linea bianca." + /* 26 */ , "Benvenuto nella mia casa! Lascia che ti porti a dare un'occhiata in giro." + /* 27 */ , "Usa i tasti direzionali per spostarti nella sala della musica." + /* 28 */ , "Ok, facciamo qualche acrobazia!@Premi il tasto Salto." + /* 29 */ , "Ora fallo di nuovo premendo un tasto direzionale;@io salter$o da quella parte." + /* 30 */ , "Questo $e l'atrio principale!@Vorrai perdonare il disordine ma ho imballato alcune cose@e come immaginerai il fattorino non si $e ancora fatto vivo." + /* 31 */ , "Posizionami di fronte ad una cassa e continuando a premere Avanti@premi il tasto Azione: mi ci arrampicher$o sopra." + /* 32 */ , "Una volta questa era la sala da ballo@ma io l'ho trasformata nella mia palestra personale; Che te ne pare?@Bene, facciamo qualche esercizio!" + /* 33 */ , "Ovviamente io non corro sempre;@quando serve una certa prudenza cammino.@Tieni premuto il tasto Camminata e raggiungi la linea bianca." /* 34 */ , "Con il tasto Camminata premuto non cadr$o@nemmeno se mi spingi a farlo.@Avanti, prova pure!" /* 35 */ , "Se vuoi guardarti intorno premi e tieni premuto il tasto Osserva;@infine con i tasti direzionali muovi la visuale verso il punto che vuoi." - /* 36 */ , "Se un salto $e troppo lungo posso aggrapparmi al bordo@per evitarmi una rovinosa caduta.@Cammina verso il bordo con la linea bianca finch)e non posso pi$u andare avanti;@quindi premi Salto, immediatamente seguito da Avanti@e mentre sono in aria premi e tieni premuto il tasto Azione." - /* 37 */ , "Premi il tasto Avanti e mi arrampicher$o." - /* 38 */ , "Facendo un salto con rincorsa arrivare a quella distanza@sar$a sicuramente uno scherzo." + /* 36 */ , "Se un salto $e troppo lungo posso aggrapparmi al bordo@evitando una rovinosa caduta.@Cammina verso il bordo con la linea bianca finch)e non posso pi$u andare avanti;@quindi premi Salto, immediatamente seguito da Avanti@e mentre sono in aria premi e tieni premuto il tasto Azione." + /* 37 */ , "Adesso premi il tasto Avanti e mi arrampicher$o." + /* 38 */ , "Facendo un salto con rincorsa arrivare a quella distanza@sar$a sicuramente uno scherzo!" /* 39 */ , "Cammina verso il bordo con la linea bianca finch)e non mi fermo.@Quindi rilascia il tasto Cammina e premi una volta Indietro@in modo da farmi prendere la rincorsa.@Premi Avanti e subito dopo premi e tieni premuto il tasto Salto:@non salter$o fino all'ultimo secondo." - /* 40 */ , "Perfetto; questo $e davvero un gran bel salto!@Allora: fai un salto con rincorsa esattamente come prima@ma questa volta mentre sono in aria premi e tieni premuto Azione@per permettermi di aggrapparmi al bordo." - /* 41 */ , "Bene." + /* 40 */ , "Perfetto; questo $e davvero un gran bel salto!@Allora: fai un salto con rincorsa esattamente come prima@ma questa volta mentre sono in aria premi e tieni premuto Azione@per farmi aggrappare al bordo." + /* 41 */ , "Bene!" /* 42 */ , "Ora prova a sollevarti qui!@Premi Avanti e tieni premuto il tasto Azione." /* 43 */ , "Come vedi non posso tirarmi su perch)e la fessura $e troppo stretta,@per$o puoi spingere verso destra: mi sposter$o@lateralmente finch)e c'$e spazio. Infine premi Avanti." /* 44 */ , "Ottimo!@Se c'$e un grosso dislivello e non voglio farmi male cadendo@posso calarmi gi$u lentamente." @@ -279,7 +279,7 @@ const char *STR_IT[] = { "" /* 46 */ , "Ora rilascia." /* 47 */ , "Adesso andiamo a farci una bella nuotata!" /* 48 */ , "Usa il tasto Salto insieme ai tasti direzionali@per farmi muovere quando sono sott'acqua." - /* 49 */ , "Ah! Aria!@Premi Avanti, Indietro Sinistra e Destra per muovermi quando sono a galla.@Premi Salto per farmi immergere di nuovo,@altrimenti raggiungi il bordo e premi Avanti e Azione per farmi uscire." + /* 49 */ , "Ah! Aria!@Premi i tasti direzionali per muovermi quando sono a galla.@Premi Salto per farmi immergere di nuovo,@altrimenti raggiungi il bordo e premi Avanti e Azione per farmi uscire." /* 50 */ , "Perfetto! Ora per$o sar$a meglio che mi tolga@questi vestiti bagnati.." /* 51 */ , "Sorridi!" /* 52 */ , "Niente di personale." From f19ff9813e78aa04da43e9a19d1412ed4599deba Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 17 Jan 2021 07:34:54 +0300 Subject: [PATCH 54/58] fix GLSL version for OpenGL 3.2 --- src/gapi/gl.h | 36 ++++++++++++++++++++++++++++-------- src/platform/win/main.cpp | 2 ++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/gapi/gl.h b/src/gapi/gl.h index 64e635d..10322f5 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -496,6 +496,8 @@ namespace GAPI { char GLSL_HEADER_VERT[512]; char GLSL_HEADER_FRAG[512]; + bool GL_VER_3 = false; + // Shader #ifndef FFP const char SHADER_COMPOSE[] = @@ -1424,14 +1426,32 @@ namespace GAPI { strcat(GLSL_HEADER_FRAG, "#define sampler2DShadow lowp sampler2DShadow\n"); } #else - // vertex - strcat(GLSL_HEADER_VERT, "#version 110\n" - "#define VERTEX\n"); - // fragment - strcat(GLSL_HEADER_FRAG, "#version 110\n"); - strcat(GLSL_HEADER_FRAG, extHeader); - strcat(GLSL_HEADER_FRAG, "#define FRAGMENT\n" - "#define fragColor gl_FragColor\n"); + if (GL_VER_3) { + strcat(GLSL_HEADER_VERT, "#version 150\n" + "#define VERTEX\n" + "#define varying out\n" + "#define attribute in\n" + "#define texture2D texture\n"); + // fragment + strcat(GLSL_HEADER_FRAG, "#version 150\n"); + strcat(GLSL_HEADER_FRAG, extHeader); + strcat(GLSL_HEADER_FRAG, "#define FRAGMENT\n" + "#define varying in\n" + "#define texture2D texture\n" + "#define texture3D texture\n" + "#define textureCube texture\n" + "#define shadow2DEXT texture\n" + "out vec4 fragColor;\n"); + } else { + // vertex + strcat(GLSL_HEADER_VERT, "#version 110\n" + "#define VERTEX\n"); + // fragment + strcat(GLSL_HEADER_FRAG, "#version 110\n"); + strcat(GLSL_HEADER_FRAG, extHeader); + strcat(GLSL_HEADER_FRAG, "#define FRAGMENT\n" + "#define fragColor gl_FragColor\n"); + } #endif ASSERT(strlen(GLSL_HEADER_VERT) < COUNT(GLSL_HEADER_VERT)); ASSERT(strlen(GLSL_HEADER_FRAG) < COUNT(GLSL_HEADER_FRAG)); diff --git a/src/platform/win/main.cpp b/src/platform/win/main.cpp index 79e6f41..da742b5 100644 --- a/src/platform/win/main.cpp +++ b/src/platform/win/main.cpp @@ -475,6 +475,8 @@ HWND hWnd; }; hRC = wglCreateContextAttribsARB(hDC, 0, contextAttribs); + + GAPI::GL_VER_3 = true; } else { int format = ChoosePixelFormat(hDC, &pfd); SetPixelFormat(hDC, format, &pfd); From 442e9056554c48bd5bfb31b026c317a0927cc737 Mon Sep 17 00:00:00 2001 From: XProger Date: Sun, 17 Jan 2021 18:44:02 +0300 Subject: [PATCH 55/58] fix default ambient audio tracks for some levels --- src/gameflow.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/gameflow.h b/src/gameflow.h index b631469..5eab3e9 100644 --- a/src/gameflow.h +++ b/src/gameflow.h @@ -189,8 +189,8 @@ namespace TR { TRACK_TR1_CAVES = 5, TRACK_TR1_SECRET = 13, TRACK_TR1_CISTERN = 57, - TRACK_TR1_EGYPT = 58, - TRACK_TR1_MINE = 59, + TRACK_TR1_WIND = 58, + TRACK_TR1_PYRAMID = 59, TRACK_TR1_CUT_1 = 23, TRACK_TR1_CUT_2 = 25, TRACK_TR1_CUT_3 = 24, @@ -267,24 +267,24 @@ namespace TR { { "LEVEL3A" , STR_TR1_LEVEL3A , TRACK_TR1_CAVES , 5 }, { "LEVEL3B" , STR_TR1_LEVEL3B , TRACK_TR1_CAVES , 3 }, { "CUT1" , STR_EMPTY , TRACK_TR1_CUT_1 , 0 }, - { "LEVEL4" , STR_TR1_LEVEL4 , TRACK_TR1_CAVES , 4 }, - { "LEVEL5" , STR_TR1_LEVEL5 , TRACK_TR1_CAVES , 3 }, - { "LEVEL6" , STR_TR1_LEVEL6 , TRACK_TR1_CAVES , 3 }, + { "LEVEL4" , STR_TR1_LEVEL4 , TRACK_TR1_WIND , 4 }, + { "LEVEL5" , STR_TR1_LEVEL5 , TRACK_TR1_WIND , 3 }, + { "LEVEL6" , STR_TR1_LEVEL6 , TRACK_TR1_WIND , 3 }, { "LEVEL7A" , STR_TR1_LEVEL7A , TRACK_TR1_CISTERN , 3 }, { "LEVEL7B" , STR_TR1_LEVEL7B , TRACK_TR1_CISTERN , 2 }, { "CUT2" , STR_EMPTY , TRACK_TR1_CUT_2 , 0 }, - { "LEVEL8A" , STR_TR1_LEVEL8A , TRACK_TR1_EGYPT , 3 }, - { "LEVEL8B" , STR_TR1_LEVEL8B , TRACK_TR1_EGYPT , 3 }, - { "LEVEL8C" , STR_TR1_LEVEL8C , TRACK_TR1_EGYPT , 1 }, - { "LEVEL10A" , STR_TR1_LEVEL10A , TRACK_TR1_MINE , 3 }, + { "LEVEL8A" , STR_TR1_LEVEL8A , TRACK_TR1_WIND , 3 }, + { "LEVEL8B" , STR_TR1_LEVEL8B , TRACK_TR1_WIND , 3 }, + { "LEVEL8C" , STR_TR1_LEVEL8C , TRACK_TR1_WIND , 1 }, + { "LEVEL10A" , STR_TR1_LEVEL10A , TRACK_TR1_CISTERN , 3 }, { "CUT3" , STR_EMPTY , TRACK_TR1_CUT_3 , 0 }, - { "LEVEL10B" , STR_TR1_LEVEL10B , TRACK_TR1_MINE , 3 }, + { "LEVEL10B" , STR_TR1_LEVEL10B , TRACK_TR1_PYRAMID , 3 }, { "CUT4" , STR_EMPTY , TRACK_TR1_CUT_4 , 0 }, - { "LEVEL10C" , STR_TR1_LEVEL10C , TRACK_TR1_MINE , 3 }, - { "EGYPT" , STR_TR1_EGYPT , TRACK_TR1_EGYPT , 3 }, - { "CAT" , STR_TR1_CAT , TRACK_TR1_EGYPT , 4 }, - { "END" , STR_TR1_END , TRACK_TR1_EGYPT , 2 }, - { "END2" , STR_TR1_END2 , TRACK_TR1_EGYPT , 1 }, + { "LEVEL10C" , STR_TR1_LEVEL10C , TRACK_TR1_PYRAMID , 3 }, + { "EGYPT" , STR_TR1_EGYPT , TRACK_TR1_WIND , 3 }, + { "CAT" , STR_TR1_CAT , TRACK_TR1_WIND , 4 }, + { "END" , STR_TR1_END , TRACK_TR1_WIND , 2 }, + { "END2" , STR_TR1_END2 , TRACK_TR1_WIND , 1 }, // TR2 { "TITLE" , STR_EMPTY , TRACK_TR2_TITLE , 0 }, { "ASSAULT" , STR_TR2_ASSAULT , NO_TRACK , 0 }, From e69b6ecc5955db8ec3bbaf9ef591c9c430b4bc18 Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 25 Jan 2021 00:22:53 +0300 Subject: [PATCH 56/58] Swedish translation by Carl Lindmark --- src/inventory.h | 2 +- src/lang.h | 9 +- src/lang/glyph_ru.h | 249 +++++++-------- src/lang/glyph_ru.png | Bin 2018 -> 2035 bytes src/lang/sv.h | 355 ++++++++++++++++++++++ src/platform/nix/main.cpp | 1 + src/platform/rpi/main.cpp | 1 + src/platform/web/index.php | 2 + src/platform/win/OpenLara.vcxproj | 1 + src/platform/win/OpenLara.vcxproj.filters | 3 + src/platform/win/main.cpp | 1 + src/platform/xb1/main.cpp | 2 + src/ui.h | 15 +- 13 files changed, 508 insertions(+), 133 deletions(-) create mode 100644 src/lang/sv.h diff --git a/src/inventory.h b/src/inventory.h index 4cb4f34..310a844 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -190,7 +190,7 @@ static const OptionItem optSound[] = { OptionItem( OptionItem::TYPE_PARAM, STR_REVERBERATION, SETTINGS( audio.reverb ), STR_OFF, 0, 1 ), OptionItem( OptionItem::TYPE_PARAM, STR_OPT_SUBTITLES, SETTINGS( audio.subtitles ), STR_OFF, 0, 1 ), #ifndef FFP - OptionItem( OptionItem::TYPE_PARAM, STR_OPT_LANGUAGE, SETTINGS( audio.language ), STR_LANG_EN, 0, STR_LANG_HU - STR_LANG_EN ), + OptionItem( OptionItem::TYPE_PARAM, STR_OPT_LANGUAGE, SETTINGS( audio.language ), STR_LANG_EN, 0, STR_LANG_SV - STR_LANG_EN ), #endif }; diff --git a/src/lang.h b/src/lang.h index b57c9fc..9f813d8 100644 --- a/src/lang.h +++ b/src/lang.h @@ -39,6 +39,7 @@ enum StringID { , STR_LANG_CZ , STR_LANG_CN , STR_LANG_HU + , STR_LANG_SV , STR_APPLY , STR_GAMEPAD_1 , STR_GAMEPAD_2 @@ -273,9 +274,10 @@ enum StringID { , "Suomi" \ , "{Cesky" \ , "\x11\x02\x8A\x02\x6C\x01\x54\x03\x02\xFF\xFF" \ - , "Magyar" + , "Magyar" \ + , "Svenska" -#define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN", "_HU" +#define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA", "_GR", "_FI", "_CZ", "_CN", "_HU", "_SV" #define STR_KEYS \ "NONE", "LEFT", "RIGHT", "UP", "DOWN", "SPACE", "TAB", "ENTER", "ESCAPE", "SHIFT", "CTRL", "ALT" \ @@ -323,6 +325,7 @@ const char *helpText = #include "lang/cz.h" #include "lang/cn.h" #include "lang/hu.h" +#include "lang/sv.h" char **STR = NULL; @@ -341,6 +344,7 @@ void ensureLanguage(int lang) { ASSERT(COUNT(STR_CZ) == STR_MAX); ASSERT(COUNT(STR_CN) == STR_MAX); ASSERT(COUNT(STR_HU) == STR_MAX); + ASSERT(COUNT(STR_SV) == STR_MAX); lang += STR_LANG_EN; @@ -358,6 +362,7 @@ void ensureLanguage(int lang) { case STR_LANG_CZ : STR = (char**)STR_CZ; break; case STR_LANG_CN : STR = (char**)STR_CN; break; case STR_LANG_HU : STR = (char**)STR_HU; break; + case STR_LANG_SV : STR = (char**)STR_SV; break; default : STR = (char**)STR_EN; break; } } diff --git a/src/lang/glyph_ru.h b/src/lang/glyph_ru.h index 64d1db2..8015f55 100644 --- a/src/lang/glyph_ru.h +++ b/src/lang/glyph_ru.h @@ -1,135 +1,136 @@ #ifndef __GLYPH_RU__ #define __GLYPH_RU__ -static unsigned int size_GLYPH_RU = 2018; +static unsigned int size_GLYPH_RU = 2035; static unsigned char GLYPH_RU[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x08, 0x03, 0x00, 0x00, 0x00, 0xc9, 0xa1, 0x54, 0x4d, 0x00, 0x00, 0x00, 0x3f, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0x5a, 0x42, 0x00, 0xef, 0xc6, 0x73, 0xde, 0xa5, 0x63, 0xa5, 0x6b, 0x39, 0xb5, 0x84, 0x52, 0xce, 0x94, 0x5a, 0x73, 0x5a, - 0x29, 0x31, 0x08, 0x00, 0x8c, 0x5a, 0x29, 0xff, 0xef, 0x8c, 0x70, 0x5c, 0x2c, 0xa5, 0x7b, 0x4a, - 0xdc, 0xa0, 0x64, 0xff, 0xff, 0x9c, 0xff, 0xd6, 0x7b, 0x30, 0x0c, 0x04, 0xe8, 0xc0, 0x70, 0x58, - 0x44, 0x00, 0xc8, 0x90, 0x58, 0xb0, 0x80, 0x50, 0xfb, 0xc4, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x07, 0x51, 0x49, 0x44, 0x41, - 0x54, 0x78, 0x5e, 0xed, 0x9a, 0xe9, 0x92, 0xdb, 0x38, 0x0c, 0x84, 0xdd, 0x00, 0x4f, 0xf9, 0x98, - 0x23, 0xfb, 0xfe, 0xcf, 0xba, 0x04, 0x2d, 0xa8, 0x49, 0x45, 0xae, 0x78, 0x6a, 0xfd, 0x63, 0x6a, - 0x33, 0xc8, 0xd0, 0x4a, 0x83, 0x00, 0x45, 0x7c, 0xa1, 0x1d, 0x43, 0xc9, 0xe9, 0x7b, 0xdb, 0x8f, - 0xfd, 0x58, 0x35, 0x43, 0x7f, 0x79, 0x36, 0x9e, 0xf6, 0x4c, 0x42, 0xde, 0x8c, 0x9a, 0x8e, 0xd1, - 0x45, 0x71, 0xea, 0xc3, 0x5d, 0x98, 0x36, 0xe7, 0x77, 0x1e, 0x36, 0xc0, 0xed, 0x50, 0x50, 0x33, - 0x6a, 0x0c, 0xa7, 0x5a, 0x16, 0x89, 0xe8, 0x2f, 0xd3, 0xfd, 0xf3, 0x71, 0xc1, 0x3d, 0x1e, 0x8b, - 0x2c, 0x6d, 0xa8, 0x69, 0x56, 0x32, 0xed, 0x8f, 0x80, 0xb2, 0x2e, 0x2d, 0xa5, 0x99, 0x29, 0xd7, - 0x74, 0x98, 0x67, 0x31, 0x53, 0x07, 0x60, 0xbf, 0xab, 0x52, 0x9b, 0x5b, 0xba, 0xab, 0x4a, 0x8b, - 0xd6, 0x8d, 0x40, 0xb0, 0xe0, 0x60, 0x6e, 0x89, 0x6b, 0x89, 0xf7, 0xf5, 0x62, 0xe0, 0xbc, 0xc8, - 0x38, 0x0b, 0x5e, 0xcd, 0xa1, 0x36, 0xbf, 0x2c, 0xea, 0x80, 0xac, 0x74, 0x7b, 0x59, 0x01, 0xdc, - 0x6e, 0x38, 0xe1, 0x76, 0x73, 0x00, 0xfb, 0x82, 0x4f, 0x90, 0x00, 0x08, 0xb0, 0x04, 0xf4, 0xf8, - 0xb6, 0xd4, 0x04, 0xe0, 0xbe, 0xbf, 0xca, 0x1d, 0x64, 0x5b, 0x1b, 0x50, 0xaf, 0x37, 0x74, 0x4d, - 0x47, 0x5e, 0x4c, 0x4b, 0x74, 0x8c, 0x51, 0x60, 0x00, 0x6c, 0xac, 0xf5, 0x2b, 0xb4, 0x13, 0x60, - 0xbe, 0xf9, 0x95, 0x15, 0xf6, 0xfc, 0x69, 0x7d, 0x6a, 0xe8, 0x0a, 0x60, 0x85, 0x18, 0x74, 0x11, - 0x48, 0x82, 0x88, 0xde, 0x89, 0x6d, 0x00, 0xd6, 0x78, 0x8b, 0x83, 0xc8, 0x2a, 0x77, 0x05, 0x53, - 0xdb, 0x85, 0x7f, 0x62, 0x6e, 0xdc, 0x5f, 0xbb, 0x78, 0x81, 0x77, 0x07, 0x9a, 0xe4, 0x0d, 0x07, - 0x07, 0x96, 0xa6, 0x07, 0x00, 0x88, 0x82, 0x2a, 0xd5, 0xc3, 0xaa, 0x5a, 0xed, 0x2b, 0x00, 0xe6, - 0x57, 0xd1, 0x08, 0x6a, 0x74, 0xe7, 0xb1, 0xee, 0x04, 0xaa, 0x24, 0x9c, 0xb6, 0xf5, 0x24, 0xf5, - 0x42, 0x09, 0x74, 0x0f, 0x40, 0x09, 0x60, 0x5f, 0x30, 0x24, 0x76, 0xed, 0x19, 0x58, 0x7c, 0xeb, - 0xac, 0xcf, 0x2f, 0x0e, 0x60, 0xfa, 0xbc, 0xe0, 0xde, 0x66, 0x00, 0x44, 0x1e, 0xa5, 0x4a, 0xbd, - 0xfa, 0xfa, 0x80, 0x43, 0x63, 0xbe, 0xd5, 0xef, 0x00, 0xf0, 0x08, 0x00, 0x8f, 0x4c, 0x07, 0x10, - 0x4c, 0xcc, 0x00, 0x18, 0x5f, 0x95, 0x00, 0x92, 0x01, 0x20, 0x70, 0x16, 0xfc, 0x18, 0x40, 0xb3, - 0xc7, 0x00, 0x20, 0x66, 0xb1, 0x3e, 0x01, 0x80, 0x04, 0xa4, 0xd7, 0x4f, 0xa8, 0x82, 0x09, 0x60, - 0x15, 0xc5, 0x23, 0x00, 0xd4, 0x9e, 0xad, 0x02, 0x2b, 0xcb, 0x95, 0x56, 0x03, 0x50, 0x1f, 0x01, - 0x48, 0x06, 0x20, 0x7d, 0x09, 0x80, 0x7d, 0xea, 0x8c, 0xf1, 0xb5, 0x56, 0x07, 0xe0, 0x09, 0x10, - 0x75, 0x02, 0xd0, 0xc7, 0x00, 0x58, 0xf0, 0x95, 0xd2, 0x52, 0xe6, 0x13, 0x60, 0xf5, 0x3f, 0x06, - 0xa0, 0x11, 0xf3, 0x4d, 0x82, 0xa4, 0x24, 0x61, 0xc3, 0xa1, 0x52, 0x25, 0x55, 0xd1, 0x87, 0x00, - 0x42, 0x08, 0x5f, 0x01, 0xa0, 0xbd, 0x3e, 0xe1, 0xfd, 0x55, 0x45, 0xa3, 0x03, 0xf0, 0x82, 0x9b, - 0xce, 0x7f, 0x06, 0xc0, 0xfa, 0xaf, 0xd7, 0xba, 0x27, 0x40, 0x00, 0xa2, 0x2c, 0x71, 0x2e, 0x78, - 0xd6, 0x3c, 0x02, 0x92, 0x40, 0xa5, 0x2a, 0x49, 0x15, 0xab, 0x87, 0x00, 0x9c, 0x40, 0xb7, 0x2f, - 0x01, 0x68, 0x49, 0x03, 0x80, 0x58, 0xab, 0x6a, 0xd4, 0xaf, 0x00, 0xc0, 0x74, 0x64, 0xe3, 0x52, - 0xaf, 0xf5, 0x1a, 0xc7, 0xbf, 0xc7, 0x31, 0x02, 0xb0, 0xfa, 0x9f, 0x02, 0x40, 0xa2, 0x29, 0x0c, - 0xaa, 0x36, 0x0d, 0xc0, 0xa5, 0x12, 0x40, 0x37, 0x00, 0x48, 0x17, 0x4a, 0x8d, 0xc0, 0x70, 0xe2, - 0xea, 0x4e, 0x43, 0x13, 0x8c, 0xda, 0x74, 0x7f, 0xa3, 0x4c, 0x00, 0xc1, 0x01, 0x50, 0xd3, 0x20, - 0xab, 0x79, 0x7c, 0x8d, 0x52, 0x1b, 0x00, 0x27, 0x00, 0x55, 0x10, 0x80, 0x3b, 0x26, 0x00, 0x01, - 0x5c, 0xf4, 0x00, 0x08, 0x0c, 0xc0, 0xc4, 0xdc, 0xb5, 0x03, 0xa8, 0xb5, 0x57, 0xc5, 0x00, 0x07, - 0x70, 0x54, 0x70, 0xd0, 0x18, 0x63, 0x1b, 0x9e, 0x01, 0x95, 0x1d, 0x80, 0xf0, 0x1b, 0x80, 0xc6, - 0xbc, 0xc5, 0x97, 0x07, 0x00, 0xb4, 0x98, 0x6d, 0xf1, 0x71, 0xfd, 0x0e, 0x50, 0x97, 0x68, 0xb2, - 0x44, 0x31, 0xe2, 0xd2, 0xd2, 0x99, 0x0f, 0x02, 0x80, 0xfc, 0x01, 0x40, 0x49, 0x60, 0xbd, 0x87, - 0x00, 0xba, 0x4d, 0x47, 0x06, 0x17, 0x02, 0x60, 0xc1, 0xd5, 0x24, 0xa2, 0xba, 0xf9, 0x06, 0xc4, - 0x8f, 0x0c, 0xeb, 0x4d, 0xa9, 0xf2, 0x84, 0x74, 0x63, 0xfd, 0xb6, 0x80, 0x07, 0xf3, 0x70, 0x6f, - 0x80, 0xb3, 0x5c, 0xd1, 0x01, 0x40, 0x24, 0xaf, 0x04, 0xc4, 0xd3, 0x99, 0x0f, 0x47, 0x6c, 0x3c, - 0x5c, 0xf9, 0x7c, 0x44, 0x64, 0x41, 0x85, 0x6f, 0x68, 0x32, 0x1f, 0xb6, 0x50, 0xba, 0x21, 0x6a, - 0x3d, 0x04, 0x30, 0x17, 0xec, 0xe1, 0xcc, 0xc0, 0x25, 0x99, 0x5d, 0x0a, 0x0f, 0xa8, 0x36, 0xcd, - 0x23, 0x70, 0x0f, 0x6e, 0xa3, 0x09, 0x6a, 0x13, 0xd4, 0x7e, 0x31, 0xcb, 0xa6, 0xd7, 0x91, 0x3d, - 0xc2, 0xf4, 0x9c, 0x8f, 0x6e, 0x77, 0xed, 0x4e, 0xce, 0x4f, 0x37, 0x61, 0x32, 0x1d, 0x87, 0x3e, - 0x2a, 0x50, 0xf9, 0xf6, 0x7f, 0xcb, 0x01, 0x50, 0x09, 0x64, 0xda, 0x1f, 0x77, 0xf0, 0x42, 0xfb, - 0xb1, 0x9f, 0xb6, 0xfd, 0xf9, 0xc8, 0xfa, 0x9d, 0x00, 0xb0, 0x5d, 0x9e, 0x3b, 0xe6, 0x49, 0xb1, - 0x3e, 0x06, 0xd0, 0x15, 0x9a, 0x10, 0xf9, 0x23, 0x00, 0xb6, 0xaf, 0x52, 0xc3, 0x37, 0x02, 0xc0, - 0xd6, 0xba, 0x99, 0xf7, 0xf7, 0xa2, 0x95, 0x1b, 0x5e, 0x6a, 0xf3, 0x29, 0x86, 0x12, 0xbc, 0x7d, - 0x60, 0x02, 0x80, 0xe7, 0x00, 0x40, 0x80, 0x96, 0x50, 0xbf, 0x0f, 0x00, 0xd1, 0xbc, 0xab, 0x5f, - 0x4b, 0x51, 0xd1, 0xb1, 0x7b, 0x6b, 0xbe, 0x0d, 0x49, 0x5d, 0x04, 0x00, 0xc6, 0xfa, 0x23, 0xf0, - 0x34, 0x70, 0x0b, 0x45, 0x24, 0x81, 0x6f, 0x08, 0xc0, 0x2a, 0x85, 0xca, 0x04, 0x40, 0xe9, 0xa8, - 0x0b, 0xd8, 0x33, 0x76, 0x1d, 0xf1, 0x45, 0xe8, 0x46, 0xe0, 0x5b, 0x01, 0x68, 0xb6, 0xff, 0x34, - 0xab, 0xa2, 0x6c, 0x46, 0x54, 0x71, 0x82, 0x68, 0x5d, 0xf5, 0x04, 0xa0, 0xaa, 0xc2, 0xec, 0xf0, - 0x01, 0x22, 0xf5, 0x00, 0x19, 0x66, 0xea, 0x07, 0xca, 0xa6, 0xce, 0xe7, 0xb3, 0x0d, 0x66, 0x4c, - 0xf9, 0x26, 0x42, 0x80, 0x09, 0xba, 0x00, 0x6c, 0x8a, 0x17, 0x93, 0x21, 0x84, 0xfe, 0xe2, 0xac, - 0x73, 0xf6, 0x78, 0x4f, 0xb6, 0x58, 0xd6, 0x9c, 0x45, 0x6e, 0xb7, 0x9b, 0xa0, 0x0b, 0x42, 0x20, - 0x00, 0xac, 0x00, 0x74, 0x03, 0x20, 0xb0, 0x79, 0x02, 0x80, 0x6a, 0x53, 0xfc, 0x4c, 0x99, 0xd6, - 0xcb, 0xd2, 0x6f, 0x40, 0x00, 0x58, 0xc4, 0x52, 0xfc, 0x1d, 0xf4, 0xbe, 0x7c, 0x9c, 0xcf, 0xed, - 0x67, 0xf9, 0x78, 0xf7, 0xf9, 0x66, 0x6f, 0xcc, 0xbf, 0x2d, 0x38, 0x85, 0x9b, 0x82, 0x48, 0x96, - 0x45, 0xdf, 0xde, 0x04, 0x9b, 0xca, 0xfd, 0x12, 0xb3, 0xdf, 0x1f, 0xf7, 0x97, 0x61, 0x39, 0x55, - 0x8b, 0x77, 0x9d, 0xfb, 0xcf, 0x96, 0x90, 0x12, 0xdb, 0x65, 0xf6, 0xbb, 0x32, 0x00, 0xd0, 0x15, - 0x00, 0x38, 0xcb, 0xe6, 0x08, 0xaa, 0x5a, 0x0a, 0x5b, 0x8b, 0x2c, 0x0a, 0x0c, 0xef, 0xa0, 0xac, - 0x7a, 0xc9, 0xe5, 0x92, 0x59, 0x3f, 0xe3, 0xef, 0x04, 0xae, 0x1f, 0xe7, 0xf6, 0xeb, 0xba, 0xd5, - 0x2f, 0xa5, 0x14, 0xf6, 0xfb, 0x10, 0x81, 0xd7, 0xef, 0x00, 0x80, 0xa2, 0x02, 0x02, 0xce, 0xcd, - 0xf7, 0x26, 0x79, 0x8b, 0xb7, 0x9b, 0x0e, 0xad, 0x47, 0x29, 0x85, 0xf1, 0x10, 0x89, 0xdd, 0xde, - 0x84, 0x00, 0x4e, 0x48, 0x33, 0x00, 0x00, 0x07, 0x27, 0x00, 0xec, 0xdf, 0x15, 0x03, 0x00, 0xfb, - 0xae, 0x4b, 0x00, 0x29, 0xa1, 0xcc, 0x00, 0x6c, 0xbe, 0x10, 0x40, 0xd7, 0xe6, 0x25, 0x81, 0x8f, - 0xad, 0xfe, 0x13, 0x5a, 0x28, 0xc6, 0xe6, 0x4d, 0x54, 0xac, 0x7e, 0x1a, 0x22, 0x5a, 0x3e, 0xb7, - 0x97, 0xa2, 0xe4, 0x25, 0x12, 0x80, 0x86, 0xb0, 0x03, 0x70, 0x9a, 0xe3, 0x81, 0x08, 0x60, 0x03, - 0xc0, 0x76, 0x79, 0xfc, 0x0c, 0x00, 0x33, 0x74, 0x0f, 0xc0, 0xe0, 0x6c, 0x00, 0x0a, 0xbb, 0xff, - 0x6d, 0xbd, 0xc0, 0xfa, 0x4d, 0xcf, 0x5f, 0xd1, 0x3d, 0x7e, 0xf3, 0x7e, 0x7e, 0x5c, 0x3f, 0xae, - 0xd7, 0x4f, 0x86, 0x40, 0xad, 0x7e, 0x8a, 0x20, 0x12, 0x46, 0x00, 0x69, 0x07, 0x00, 0x51, 0x22, - 0xde, 0x34, 0xfb, 0x89, 0x94, 0xdb, 0x6d, 0x04, 0x90, 0xf6, 0x00, 0x70, 0x12, 0x9c, 0xc6, 0x84, - 0x19, 0x80, 0x6a, 0xed, 0x5e, 0x22, 0xac, 0xcd, 0x37, 0x39, 0x2c, 0xdf, 0x00, 0xf8, 0xbc, 0x73, - 0x76, 0x72, 0x65, 0x38, 0x51, 0x39, 0x1d, 0x01, 0xa8, 0x0a, 0xd6, 0xff, 0xab, 0xbd, 0x05, 0x1a, - 0x01, 0x7e, 0x48, 0x95, 0x42, 0x02, 0xd0, 0x04, 0xa8, 0x6e, 0x04, 0x32, 0x3a, 0x80, 0x74, 0x21, - 0x80, 0x82, 0x88, 0xe2, 0x27, 0x16, 0x97, 0x54, 0x8a, 0xf3, 0xe1, 0x09, 0x9d, 0xe2, 0x0d, 0x00, - 0x13, 0x62, 0x02, 0x90, 0xd8, 0xae, 0x47, 0x51, 0x40, 0xe7, 0x67, 0x78, 0x51, 0xdc, 0xe1, 0xf5, - 0x13, 0x40, 0x81, 0x56, 0xf3, 0x39, 0x00, 0xae, 0x77, 0x0c, 0xc0, 0x08, 0x54, 0x85, 0x3b, 0x3f, - 0x97, 0x5f, 0xe7, 0xf3, 0xb5, 0xfd, 0x2c, 0x9f, 0x6b, 0x7e, 0x04, 0x10, 0xf9, 0xb8, 0xc0, 0xf2, - 0x0b, 0x09, 0xe4, 0x04, 0x19, 0x01, 0x14, 0x2b, 0x88, 0x47, 0xc2, 0x3a, 0xe5, 0x16, 0x9f, 0x86, - 0xed, 0x8b, 0x03, 0x60, 0xbc, 0x0c, 0x09, 0x25, 0xc4, 0x94, 0x58, 0x7f, 0xef, 0xef, 0x75, 0xd7, - 0xdf, 0xa3, 0xf9, 0xdc, 0x01, 0x35, 0x74, 0x10, 0x21, 0x01, 0x88, 0xb2, 0xa0, 0xfd, 0x7a, 0x25, - 0xa9, 0x4f, 0x6d, 0xc0, 0x88, 0xab, 0x01, 0xf8, 0xe7, 0x7c, 0x3a, 0x5f, 0x6d, 0x7c, 0x6e, 0x09, - 0xaa, 0x91, 0xf9, 0xf1, 0x7e, 0x84, 0x1d, 0x23, 0xfa, 0xe3, 0x83, 0x72, 0xd9, 0x00, 0xc4, 0x58, - 0xee, 0x17, 0xf0, 0x51, 0x01, 0x22, 0xf7, 0x6f, 0x00, 0xf7, 0xf1, 0x11, 0x4c, 0x98, 0xdb, 0x65, - 0x7a, 0x26, 0x65, 0xbe, 0xbd, 0x66, 0x3b, 0xcd, 0xf8, 0x83, 0xf5, 0x5c, 0xd0, 0xe6, 0xf9, 0xf7, - 0xf7, 0x77, 0x1f, 0x87, 0xf3, 0x7c, 0x1e, 0x41, 0xed, 0x5e, 0x6a, 0x3a, 0x4c, 0x53, 0x3d, 0x88, - 0x67, 0xc8, 0xff, 0xc4, 0x7e, 0xec, 0xe7, 0x59, 0x44, 0x6e, 0xc3, 0x2d, 0x03, 0x7d, 0xfc, 0x25, - 0x96, 0xeb, 0x2d, 0xa5, 0xdc, 0xc6, 0xf0, 0x55, 0x19, 0x36, 0xfe, 0x1a, 0x00, 0x22, 0x48, 0x6d, - 0x80, 0x00, 0x60, 0xe3, 0x3f, 0x3d, 0x14, 0xa2, 0x7d, 0x7f, 0x03, 0xd0, 0x07, 0x89, 0x5c, 0xd1, - 0xc7, 0xd3, 0x96, 0x71, 0xbb, 0x91, 0x00, 0xff, 0x0b, 0xca, 0xd3, 0xf4, 0x7c, 0x7c, 0x1b, 0x22, - 0x7d, 0x3c, 0x6d, 0x58, 0x52, 0x4a, 0x37, 0xd9, 0xfd, 0xeb, 0xb5, 0x38, 0x00, 0xf6, 0xd7, 0xc7, - 0x05, 0xe7, 0xb7, 0x58, 0xf2, 0x82, 0x22, 0x71, 0xd5, 0x84, 0xb7, 0x69, 0xbf, 0x50, 0xd3, 0x98, - 0x41, 0x35, 0xfb, 0xb2, 0x0b, 0x57, 0x78, 0x2d, 0xaf, 0x45, 0x4b, 0x0a, 0x45, 0x04, 0xae, 0x23, - 0xbf, 0x28, 0xcf, 0xfd, 0xf5, 0x61, 0xc1, 0x58, 0x9a, 0x56, 0xea, 0xcc, 0xe6, 0xdf, 0x75, 0xf6, - 0x65, 0xa8, 0x07, 0x0b, 0xec, 0xff, 0x79, 0x3f, 0x69, 0xbe, 0x4b, 0xe6, 0xfc, 0x4d, 0xb8, 0x1f, - 0x7d, 0x31, 0x00, 0x29, 0x25, 0x84, 0x02, 0x29, 0xd3, 0x09, 0x60, 0x33, 0xc2, 0xfe, 0x7a, 0x2c, - 0xf8, 0x31, 0x00, 0x88, 0x8e, 0x67, 0x60, 0x95, 0xd9, 0x91, 0x72, 0xfa, 0xb8, 0xff, 0xb7, 0xc0, - 0x9c, 0x04, 0x80, 0x5c, 0x70, 0x9f, 0xcf, 0xde, 0x1c, 0xf9, 0xfc, 0xeb, 0x01, 0xc4, 0x11, 0x40, - 0x22, 0x00, 0xf6, 0xd7, 0x4f, 0x00, 0xe0, 0xff, 0x60, 0xd8, 0x9e, 0x08, 0x51, 0x3a, 0x42, 0x4e, - 0x3f, 0xe8, 0xff, 0x2d, 0x10, 0x89, 0x7b, 0x80, 0xcc, 0x00, 0xa0, 0xf1, 0xc5, 0x00, 0x42, 0xb2, - 0x7e, 0x23, 0x85, 0x32, 0xdc, 0xa0, 0x2c, 0xa9, 0x6c, 0xf3, 0x53, 0x7f, 0x3d, 0x17, 0x4c, 0x3d, - 0x3e, 0x11, 0x09, 0xa5, 0x1f, 0x9b, 0x59, 0x3a, 0x00, 0x4e, 0x4f, 0xfd, 0x3f, 0x81, 0xab, 0x59, - 0x07, 0xa0, 0xe5, 0x4e, 0x2c, 0x66, 0x8c, 0xf3, 0x17, 0x9c, 0x5e, 0x6a, 0x25, 0xa4, 0x66, 0xa1, - 0x90, 0x30, 0x00, 0x89, 0x05, 0xee, 0x00, 0xbc, 0xbf, 0x3e, 0x2a, 0x18, 0x12, 0x01, 0x05, 0xd4, - 0x33, 0xa0, 0xa1, 0x94, 0xb4, 0x02, 0xa0, 0x54, 0xdd, 0x4d, 0x73, 0xf9, 0x5d, 0xff, 0xaf, 0xc0, - 0x1d, 0x40, 0x2a, 0xbe, 0xa3, 0x98, 0x52, 0x21, 0x80, 0x57, 0x37, 0x31, 0xc5, 0x36, 0x5f, 0x36, - 0xa5, 0x49, 0x55, 0xc4, 0x9a, 0x46, 0x1a, 0xfb, 0x6b, 0x16, 0xcc, 0x27, 0x42, 0xdd, 0xa2, 0x67, - 0x20, 0x86, 0xe2, 0xcf, 0x03, 0x28, 0x7d, 0x05, 0x4e, 0x4f, 0xc0, 0x23, 0xd7, 0x4f, 0xb1, 0x14, - 0x4d, 0x80, 0x57, 0x9a, 0x45, 0x61, 0x4e, 0xdf, 0xca, 0xeb, 0x01, 0xf0, 0x71, 0x0e, 0xdb, 0x59, - 0x60, 0x02, 0x00, 0xf2, 0x60, 0xc1, 0x85, 0xf1, 0x66, 0x70, 0x47, 0x88, 0xdb, 0x81, 0xa2, 0x44, - 0x3c, 0x9c, 0x66, 0xff, 0x3f, 0xdd, 0xaa, 0x68, 0x52, 0xaf, 0xdf, 0x0e, 0xc2, 0x00, 0xa8, 0x84, - 0xd7, 0x13, 0xc0, 0x41, 0x6b, 0x3c, 0xbb, 0x0a, 0x65, 0xa1, 0x1d, 0x67, 0x70, 0x6e, 0x94, 0xe5, - 0x68, 0xfa, 0x71, 0xff, 0x4f, 0x5f, 0xee, 0x12, 0x8c, 0x78, 0x71, 0x23, 0xff, 0x2f, 0x01, 0x2b, - 0x50, 0x97, 0xb3, 0xd9, 0x71, 0x34, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, - 0x60, 0x82, + 0x29, 0x31, 0x08, 0x00, 0x8c, 0x5a, 0x29, 0xff, 0xef, 0x8c, 0xa5, 0x7b, 0x4a, 0xdc, 0xa0, 0x64, + 0xff, 0xff, 0x9c, 0x70, 0x5c, 0x2c, 0xff, 0xd6, 0x7b, 0x30, 0x0c, 0x04, 0xe8, 0xc0, 0x70, 0x58, + 0x44, 0x00, 0xc8, 0x90, 0x58, 0xb0, 0x80, 0x50, 0x53, 0xa3, 0xe1, 0x5f, 0x00, 0x00, 0x00, 0x01, + 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x07, 0x62, 0x49, 0x44, 0x41, + 0x54, 0x78, 0x5e, 0xed, 0x9a, 0xeb, 0x72, 0x22, 0xbb, 0x0e, 0x85, 0x59, 0x92, 0xaf, 0x0d, 0xe4, + 0x32, 0xfb, 0xbc, 0xff, 0xb3, 0x1e, 0xc9, 0xa0, 0x5e, 0x36, 0x81, 0x9d, 0xa4, 0x8a, 0x1f, 0xd9, + 0x53, 0x51, 0xc5, 0xf4, 0x2c, 0x59, 0x72, 0x5b, 0xdf, 0x18, 0x06, 0x75, 0xe6, 0xf0, 0xb3, 0xed, + 0xd7, 0x7e, 0xad, 0xbb, 0x61, 0xbc, 0x7c, 0x35, 0x9e, 0xf6, 0x95, 0x84, 0xba, 0x1b, 0x35, 0x1d, + 0xb3, 0x8b, 0xe2, 0x30, 0x46, 0xb8, 0xb0, 0x6c, 0x2e, 0xee, 0x3c, 0x6d, 0x80, 0xdb, 0xa1, 0xa0, + 0x66, 0xd4, 0x1c, 0x4e, 0xb5, 0x6d, 0x92, 0x31, 0x5e, 0x96, 0xfb, 0xd7, 0x07, 0x05, 0x7b, 0x3c, + 0x36, 0xd9, 0x6c, 0xa8, 0x6b, 0x56, 0xb2, 0xec, 0x8f, 0x80, 0xaa, 0x6e, 0x96, 0x62, 0xe6, 0x2a, + 0x34, 0x1d, 0xee, 0xd9, 0xdc, 0x34, 0x00, 0xf8, 0x9f, 0xba, 0x74, 0x73, 0xcb, 0x70, 0x75, 0xb1, + 0x68, 0xdd, 0x09, 0x24, 0x0f, 0x4e, 0xee, 0x96, 0xdc, 0xa3, 0x04, 0x5f, 0x2f, 0x27, 0xce, 0x8b, + 0xcc, 0xb3, 0xe0, 0xd5, 0x1d, 0xea, 0xf3, 0x76, 0xc3, 0x00, 0xe4, 0xa5, 0xfb, 0xcb, 0x15, 0xc0, + 0xf9, 0x8c, 0x03, 0xce, 0xe7, 0x00, 0xb0, 0x16, 0x6c, 0x06, 0x49, 0x80, 0x00, 0x5b, 0xc2, 0x88, + 0xb7, 0xa5, 0x16, 0x00, 0x97, 0xfd, 0x75, 0xee, 0xa0, 0xfa, 0xda, 0x80, 0x46, 0xbd, 0x69, 0x68, + 0x3a, 0xea, 0xe6, 0x5a, 0x72, 0x60, 0xcc, 0x02, 0x07, 0xe0, 0xe3, 0x5a, 0xbf, 0x42, 0x07, 0x01, + 0xe6, 0xbb, 0x5f, 0x59, 0xe1, 0xc8, 0x5f, 0xd6, 0xa7, 0x86, 0x5e, 0x01, 0x5c, 0x21, 0x26, 0xdd, + 0x04, 0x52, 0x20, 0xa2, 0x17, 0x62, 0x3b, 0x80, 0x6b, 0xbc, 0xc7, 0x41, 0x64, 0xc8, 0x0f, 0x05, + 0x53, 0xfb, 0x85, 0x7f, 0x63, 0x61, 0xdc, 0x9f, 0x5d, 0xa2, 0xc0, 0x8b, 0x03, 0x26, 0x79, 0xc3, + 0xc9, 0x81, 0xcd, 0xf4, 0x04, 0x00, 0x59, 0x60, 0x00, 0x22, 0xac, 0xab, 0xd7, 0x1e, 0x00, 0x22, + 0xdf, 0xeb, 0xc9, 0xa0, 0xc6, 0x70, 0xde, 0xd7, 0x83, 0x40, 0x97, 0x62, 0x8e, 0x58, 0x4f, 0xca, + 0x28, 0x94, 0x40, 0x6f, 0x01, 0x28, 0x01, 0xdc, 0x16, 0x0c, 0xc9, 0x43, 0x47, 0x06, 0xb6, 0xd8, + 0x3a, 0xeb, 0x8b, 0x4b, 0x00, 0x58, 0x3e, 0x2f, 0xb8, 0xb7, 0x15, 0x00, 0x91, 0x67, 0x31, 0x00, + 0xa7, 0x58, 0x1f, 0x08, 0x68, 0xcc, 0xf7, 0xfa, 0x03, 0x00, 0x3e, 0x01, 0x60, 0x15, 0x0e, 0x00, + 0xc9, 0xc5, 0x0a, 0x80, 0xf1, 0x5d, 0x09, 0xa0, 0x38, 0x00, 0x02, 0x67, 0xc1, 0x8f, 0x01, 0x98, + 0x3d, 0x06, 0x00, 0xe1, 0x3b, 0xf2, 0x13, 0x00, 0x24, 0x20, 0xa3, 0x7e, 0x42, 0x15, 0x2c, 0x00, + 0xbb, 0x28, 0x1e, 0x01, 0xa0, 0x8e, 0x6c, 0x15, 0x78, 0x59, 0xa1, 0xb4, 0x3b, 0x80, 0xfe, 0x08, + 0x40, 0x71, 0x00, 0xe5, 0x5b, 0x00, 0xfc, 0x53, 0x67, 0x8e, 0xef, 0xbd, 0x07, 0x80, 0x48, 0x80, + 0x68, 0x10, 0x80, 0x3e, 0x06, 0xc0, 0x82, 0x4f, 0x94, 0x9e, 0xb2, 0x9e, 0x00, 0xaf, 0xff, 0x31, + 0x00, 0xcd, 0x58, 0x6f, 0x92, 0xa4, 0x14, 0x49, 0x3b, 0x0e, 0x95, 0x2e, 0xa5, 0x8b, 0x3e, 0x04, + 0x90, 0x52, 0xfa, 0x0e, 0x00, 0x1d, 0xf5, 0x09, 0xef, 0xaf, 0x2a, 0x9a, 0x03, 0x40, 0x14, 0x6c, + 0xba, 0x7e, 0x0e, 0x80, 0xf5, 0x9f, 0x4e, 0xfd, 0x96, 0x00, 0x01, 0x88, 0xb2, 0xc4, 0xb5, 0xe0, + 0x55, 0xf3, 0x08, 0x48, 0x01, 0x95, 0xaa, 0x14, 0x55, 0xb8, 0x67, 0x05, 0x10, 0x04, 0xdc, 0xbe, + 0x05, 0xc0, 0x92, 0x26, 0x00, 0xb9, 0x77, 0xd5, 0xac, 0xdf, 0x01, 0x80, 0xe5, 0xc8, 0xe6, 0xad, + 0x9f, 0xfa, 0x29, 0xcf, 0xff, 0x8e, 0x63, 0x06, 0xe0, 0xf5, 0x7f, 0x09, 0x00, 0x89, 0x96, 0x34, + 0xa9, 0x6e, 0x1a, 0x40, 0x48, 0x25, 0x80, 0x61, 0x30, 0x2b, 0x47, 0x4a, 0xcd, 0xc0, 0x74, 0xe2, + 0xfa, 0x8d, 0x86, 0x16, 0x38, 0xb5, 0xe5, 0xfe, 0x4e, 0x99, 0x00, 0x52, 0x00, 0xa0, 0xa6, 0x41, + 0xae, 0x16, 0xf1, 0x3d, 0x4b, 0x37, 0x00, 0x41, 0x00, 0xaa, 0x20, 0x80, 0x70, 0x2c, 0x00, 0x12, + 0xb8, 0xe8, 0x1d, 0x20, 0x70, 0x00, 0x0b, 0xf3, 0xd0, 0x01, 0xa0, 0xf7, 0x51, 0x15, 0x03, 0x08, + 0xe0, 0x63, 0xc1, 0x49, 0x73, 0xce, 0x36, 0x22, 0x03, 0x2a, 0x37, 0x00, 0xd2, 0x07, 0x00, 0xc6, + 0xdc, 0xe2, 0xdb, 0x03, 0x00, 0xda, 0xdc, 0xf6, 0xf8, 0x7c, 0xfd, 0x0e, 0xd0, 0xb7, 0xec, 0xb2, + 0x65, 0x71, 0xe2, 0x62, 0xe9, 0xcc, 0x07, 0x01, 0x40, 0x3e, 0x01, 0xd0, 0x0a, 0x58, 0xef, 0x5d, + 0x00, 0xc3, 0x96, 0x23, 0x83, 0x23, 0x01, 0xb0, 0xe0, 0xee, 0x12, 0x59, 0xc3, 0x62, 0x03, 0x12, + 0x47, 0x86, 0xf5, 0x96, 0xd2, 0x79, 0x42, 0x86, 0xb1, 0x7e, 0x5f, 0x20, 0x82, 0x79, 0xb8, 0x77, + 0xc0, 0x55, 0x4e, 0x18, 0x00, 0x20, 0x52, 0xaf, 0x04, 0x24, 0xd2, 0x99, 0x8f, 0x40, 0xec, 0x3c, + 0x42, 0xc5, 0x7c, 0x46, 0x66, 0x41, 0x8d, 0x6f, 0x68, 0x32, 0x9f, 0xb6, 0xd0, 0x86, 0x21, 0x6b, + 0xbf, 0x0b, 0x60, 0x2d, 0x38, 0xc2, 0x99, 0x81, 0x63, 0x71, 0x3b, 0x36, 0x1e, 0x50, 0x35, 0xcd, + 0x23, 0x70, 0x09, 0xb6, 0x61, 0x82, 0xda, 0x05, 0x35, 0x2f, 0x06, 0xc0, 0xf5, 0x75, 0xd4, 0x88, + 0x70, 0xbd, 0xe6, 0x63, 0xd8, 0x45, 0x87, 0x93, 0xf3, 0xd4, 0x66, 0x4c, 0xa6, 0xe3, 0xae, 0x8f, + 0x0a, 0x54, 0xb1, 0xfd, 0x0f, 0x39, 0x00, 0x3a, 0x81, 0x2c, 0xfb, 0xe3, 0x0e, 0x9e, 0x68, 0xbf, + 0xf6, 0xdb, 0xb6, 0x7f, 0x3d, 0xb2, 0xff, 0x24, 0x00, 0x6c, 0x97, 0xd7, 0x8e, 0x79, 0x51, 0xac, + 0x8f, 0x01, 0x74, 0x25, 0x13, 0x22, 0x9f, 0x02, 0x60, 0xfb, 0x2a, 0x3d, 0xfd, 0x20, 0x00, 0x6c, + 0xad, 0xcd, 0xa2, 0xbf, 0x17, 0xed, 0xdc, 0xf0, 0xd6, 0xcd, 0xa7, 0x98, 0x4a, 0x88, 0xf6, 0x81, + 0x09, 0x00, 0xbe, 0x06, 0x00, 0x02, 0x58, 0x42, 0xff, 0x39, 0x00, 0x44, 0xeb, 0x4d, 0xfd, 0xda, + 0x9a, 0x8a, 0xce, 0xdd, 0x9b, 0xf9, 0x76, 0x24, 0x7d, 0x13, 0x98, 0xcd, 0xf5, 0x67, 0xe0, 0xcb, + 0xc0, 0x3d, 0x14, 0x99, 0x04, 0x7e, 0x20, 0x00, 0xaf, 0x14, 0x2a, 0x0b, 0x00, 0xa5, 0xa3, 0x6f, + 0x60, 0xcf, 0x38, 0x74, 0xc6, 0x37, 0xa1, 0x3b, 0x81, 0x1f, 0x05, 0xc0, 0x6c, 0xfd, 0x34, 0x1b, + 0x1c, 0xd8, 0x8c, 0xa8, 0xe2, 0x80, 0x01, 0x66, 0xe8, 0x05, 0x40, 0x57, 0x85, 0xdb, 0xdd, 0x07, + 0x88, 0xd4, 0x13, 0x64, 0xb8, 0x69, 0x1c, 0x28, 0x9f, 0x7a, 0x79, 0x79, 0xf1, 0xc1, 0x8c, 0x25, + 0xdf, 0x45, 0x4a, 0x70, 0x41, 0x17, 0x80, 0x5d, 0xf1, 0xe2, 0x32, 0xa5, 0x34, 0x5e, 0x82, 0x75, + 0xad, 0x4b, 0xbc, 0x09, 0x8f, 0x65, 0xcd, 0x55, 0xe4, 0x7c, 0x3e, 0x0b, 0x86, 0x20, 0x04, 0x02, + 0xc0, 0x15, 0x80, 0xee, 0x00, 0x04, 0x3e, 0x4f, 0x00, 0x50, 0x35, 0xc5, 0xcf, 0x94, 0x65, 0xbd, + 0x2a, 0xe3, 0x06, 0x04, 0x80, 0x4d, 0x3c, 0x25, 0xde, 0x41, 0x6f, 0xdb, 0xfb, 0xcb, 0x8b, 0xfd, + 0x6c, 0xef, 0x6f, 0x31, 0x6f, 0xf6, 0xca, 0xfc, 0xf3, 0x86, 0x43, 0x3a, 0x2b, 0x88, 0x64, 0xdb, + 0xf4, 0xf5, 0x55, 0xb0, 0xab, 0x3a, 0x2e, 0xb9, 0xc6, 0xfd, 0x71, 0x79, 0x99, 0x96, 0x53, 0xf5, + 0xf8, 0xd0, 0x75, 0xfc, 0xec, 0x09, 0xa5, 0xb0, 0x5d, 0x66, 0xbf, 0x2b, 0x13, 0x00, 0xbd, 0x02, + 0x00, 0x67, 0xcd, 0xa6, 0xaf, 0xd2, 0xad, 0xb1, 0xb5, 0xa8, 0xa2, 0xc0, 0xf4, 0x0e, 0xaa, 0xaa, + 0xc7, 0xda, 0x8e, 0x95, 0xf5, 0x33, 0xfe, 0x42, 0xe0, 0xf4, 0x6e, 0x00, 0xde, 0x4f, 0x7b, 0xfd, + 0xd2, 0x5a, 0x63, 0xbf, 0x0f, 0x11, 0x44, 0xfd, 0x01, 0x00, 0x68, 0x2a, 0x20, 0xe0, 0x6a, 0xbe, + 0x57, 0xa9, 0x11, 0x6f, 0x00, 0x94, 0xf9, 0x9a, 0x6d, 0x3d, 0xc6, 0x43, 0x24, 0x0f, 0x7b, 0x15, + 0x02, 0x38, 0xa0, 0xac, 0x00, 0x00, 0xdc, 0x39, 0x01, 0x60, 0xff, 0xae, 0x98, 0x00, 0xf8, 0x77, + 0x5d, 0x02, 0x28, 0x05, 0x6d, 0x05, 0xe0, 0xf3, 0x8d, 0x00, 0x86, 0x76, 0x2f, 0x09, 0xbc, 0xef, + 0xf5, 0x1f, 0x60, 0xa1, 0x98, 0x9b, 0x37, 0x51, 0xf1, 0xfa, 0x69, 0xc8, 0xb0, 0x7c, 0x6e, 0xaf, + 0x64, 0xa9, 0x5b, 0x26, 0x00, 0x4d, 0xe9, 0x06, 0xc0, 0x61, 0x8d, 0x07, 0x32, 0x80, 0x1d, 0x00, + 0xdb, 0xe5, 0xf9, 0x33, 0x00, 0xcc, 0xd0, 0x5b, 0x00, 0x0e, 0x67, 0x07, 0xd0, 0xd8, 0xfd, 0xef, + 0xeb, 0x25, 0xd6, 0xef, 0xda, 0x00, 0xd0, 0x10, 0xf1, 0xbb, 0xf7, 0xcf, 0xfb, 0xe9, 0xfd, 0x74, + 0xfa, 0xc3, 0x10, 0xa8, 0xd7, 0x4f, 0x91, 0x44, 0xd2, 0x0c, 0xa0, 0xdc, 0x00, 0x40, 0x96, 0x8c, + 0x57, 0xad, 0x71, 0x22, 0xe5, 0x7c, 0x9e, 0x01, 0x94, 0x0f, 0x00, 0x0e, 0x82, 0xc3, 0x9c, 0xb0, + 0x02, 0x50, 0xed, 0xc3, 0x4b, 0x84, 0xdd, 0x7c, 0x8b, 0xc3, 0xf3, 0x1d, 0x40, 0xcc, 0x07, 0xe7, + 0x20, 0xd7, 0xa6, 0x13, 0x55, 0xcb, 0x3d, 0x00, 0x5d, 0xc1, 0xfa, 0xff, 0xb1, 0xb7, 0x80, 0x11, + 0xe0, 0x87, 0x54, 0x6b, 0x24, 0x00, 0x2d, 0x80, 0xea, 0x4e, 0xa0, 0x62, 0x00, 0x28, 0x47, 0x02, + 0x68, 0xc8, 0x68, 0x71, 0x62, 0x71, 0x2c, 0xad, 0x05, 0x1f, 0x9e, 0xd0, 0x25, 0xde, 0x01, 0x30, + 0x21, 0x17, 0x00, 0x85, 0xed, 0x7a, 0x16, 0x05, 0x74, 0x7d, 0x86, 0x97, 0x25, 0x1c, 0x51, 0x3f, + 0x01, 0x34, 0x68, 0x77, 0x5f, 0x00, 0xe0, 0x7a, 0xf7, 0x01, 0x38, 0x81, 0xae, 0x68, 0x51, 0xff, + 0xf6, 0xcf, 0xcb, 0xcb, 0xc9, 0x7e, 0xb6, 0x0b, 0x01, 0xe4, 0x0c, 0x20, 0xf3, 0x71, 0x81, 0xe7, + 0x37, 0x12, 0xa8, 0x05, 0x32, 0x03, 0x68, 0x5e, 0x10, 0x8f, 0x84, 0x77, 0xca, 0x16, 0x5f, 0xa6, + 0xed, 0x4b, 0x00, 0x60, 0xbc, 0x4c, 0x09, 0x2d, 0xe5, 0x52, 0x58, 0xff, 0xe8, 0xef, 0xf5, 0xa6, + 0xbf, 0x87, 0xf9, 0xc2, 0x01, 0x75, 0x74, 0x10, 0x21, 0x01, 0x88, 0xb2, 0x20, 0xae, 0x17, 0x05, + 0x68, 0x4c, 0xed, 0xc0, 0x88, 0xcb, 0x00, 0xfc, 0xef, 0xe5, 0x60, 0x00, 0x6c, 0xfc, 0xd9, 0x13, + 0x54, 0x33, 0xf3, 0xf3, 0xe5, 0x08, 0x07, 0x46, 0x8c, 0xc7, 0x07, 0xed, 0xb8, 0x03, 0xc8, 0xb9, + 0x5d, 0x2e, 0xe0, 0xa3, 0x02, 0x64, 0xee, 0xdf, 0x01, 0xde, 0xc6, 0x67, 0x30, 0x61, 0x6d, 0x97, + 0xe9, 0x59, 0x94, 0xfb, 0x56, 0xed, 0x86, 0xc5, 0x45, 0xb1, 0xac, 0x17, 0x82, 0xb6, 0xce, 0xbf, + 0xbd, 0xbd, 0xc5, 0xb8, 0x3b, 0xcf, 0xe7, 0x11, 0xd4, 0xe1, 0xa5, 0xa6, 0xc3, 0x35, 0xd5, 0x83, + 0x78, 0x86, 0xfc, 0xe5, 0xf6, 0x6b, 0x6c, 0x79, 0xff, 0xf6, 0x67, 0x11, 0xd5, 0x46, 0x58, 0x05, + 0xc6, 0xa0, 0x43, 0x36, 0xc1, 0x5f, 0x0b, 0xa0, 0xf6, 0x73, 0x29, 0xd5, 0xc6, 0xf4, 0x55, 0x19, + 0x3e, 0xa6, 0x90, 0xed, 0xa0, 0xed, 0xef, 0x05, 0x20, 0x82, 0x62, 0x03, 0x04, 0x00, 0x1f, 0x4b, + 0x88, 0x3e, 0x02, 0xc0, 0x86, 0xeb, 0x3f, 0x6b, 0x00, 0xc6, 0x20, 0x91, 0x13, 0xc6, 0x98, 0x0c, + 0xed, 0x5f, 0xeb, 0x87, 0x35, 0x6b, 0x75, 0xa6, 0xf1, 0x25, 0x24, 0x8c, 0x8f, 0xf1, 0x63, 0x88, + 0x8c, 0xf1, 0x65, 0xc3, 0x56, 0x4a, 0x39, 0xcb, 0xcd, 0x6f, 0xaf, 0x25, 0x00, 0xb0, 0xbf, 0xbe, + 0x5f, 0x70, 0x7d, 0xcd, 0xad, 0x6e, 0x68, 0x92, 0xaf, 0x9a, 0xf0, 0x76, 0x1d, 0x17, 0x6a, 0x1a, + 0x33, 0xa8, 0x56, 0x5f, 0x0d, 0x11, 0x0a, 0xcf, 0xe5, 0xb5, 0x69, 0x2b, 0xa9, 0x89, 0x20, 0x74, + 0xe6, 0x17, 0xe5, 0xb5, 0xbf, 0xbe, 0x5b, 0x30, 0x36, 0xd3, 0x4a, 0x5d, 0xd9, 0xfc, 0x87, 0xae, + 0xb1, 0x0c, 0xf5, 0x64, 0x89, 0xfd, 0x3f, 0xef, 0x27, 0xe6, 0x3b, 0x56, 0xce, 0x9f, 0x85, 0xfb, + 0xd1, 0x27, 0x03, 0x90, 0xd6, 0x52, 0x6a, 0x76, 0x59, 0x4e, 0x00, 0x9b, 0x11, 0xf6, 0xd7, 0x73, + 0xc1, 0x8f, 0x01, 0x40, 0x74, 0x3e, 0x03, 0x57, 0x59, 0x03, 0x29, 0xa7, 0xef, 0xf7, 0xff, 0x1e, + 0x58, 0x8b, 0x00, 0x90, 0x23, 0x2e, 0xf3, 0x35, 0x9a, 0xa3, 0x98, 0x7f, 0x3e, 0x80, 0x3c, 0x03, + 0x28, 0x04, 0xc0, 0xfe, 0xfa, 0x0b, 0x00, 0xf8, 0x3f, 0x18, 0xf6, 0x27, 0x42, 0x94, 0x81, 0x90, + 0xd3, 0x0f, 0xfa, 0x7f, 0x0f, 0x44, 0xe1, 0x1e, 0x20, 0x2b, 0x00, 0x68, 0x7e, 0x32, 0x80, 0x54, + 0xbc, 0xdf, 0x28, 0xa9, 0x4d, 0x37, 0x68, 0x5b, 0x69, 0xfb, 0x3c, 0xfb, 0xeb, 0x0f, 0x05, 0x53, + 0xcf, 0x4f, 0x44, 0x52, 0x1b, 0xc7, 0x66, 0x95, 0x01, 0x80, 0xd3, 0x4b, 0xff, 0x4f, 0xe0, 0xea, + 0x36, 0x00, 0x68, 0xbb, 0x10, 0xcb, 0x15, 0xf3, 0xfc, 0x11, 0x87, 0xa7, 0x5a, 0x4b, 0xc5, 0x2c, + 0x35, 0x12, 0x06, 0x20, 0xb9, 0x21, 0x1c, 0x00, 0xfb, 0xeb, 0x8f, 0x05, 0x43, 0x32, 0xa0, 0x80, + 0x46, 0x06, 0x34, 0xb5, 0x56, 0x64, 0x08, 0xca, 0x00, 0xc0, 0x69, 0x2e, 0x7f, 0xd3, 0xff, 0x2b, + 0x70, 0x01, 0x50, 0x5a, 0xec, 0x28, 0x97, 0xd2, 0x08, 0xe0, 0xd9, 0x4d, 0x4c, 0xf3, 0xcd, 0xb7, + 0x5d, 0x69, 0x51, 0x15, 0xf1, 0xa6, 0x91, 0xc6, 0xfe, 0x9a, 0x05, 0xf3, 0x89, 0xd0, 0xb0, 0x1c, + 0x19, 0xc8, 0xa9, 0xc5, 0xf3, 0x00, 0xca, 0x58, 0x81, 0xd3, 0x0b, 0xf0, 0xcc, 0xf5, 0x4b, 0x36, + 0xde, 0x05, 0x88, 0x4a, 0xab, 0x28, 0xdc, 0x19, 0x5b, 0x79, 0x3e, 0x00, 0x3e, 0xce, 0x61, 0x3b, + 0x0b, 0x2c, 0x00, 0x40, 0x1e, 0x2c, 0xb8, 0x31, 0xde, 0x0d, 0xe1, 0x48, 0x79, 0x3f, 0x50, 0x94, + 0xc8, 0x77, 0xa7, 0xd9, 0xff, 0x2f, 0xb7, 0x32, 0x02, 0x1a, 0xf5, 0xfb, 0x41, 0x20, 0x20, 0xcb, + 0x7f, 0x3e, 0x01, 0xdc, 0x69, 0x8d, 0x57, 0x57, 0xa3, 0x6c, 0xb4, 0xfb, 0x19, 0x9c, 0x9b, 0x65, + 0xbb, 0x37, 0xfd, 0xb8, 0xff, 0xa7, 0xaf, 0x0e, 0x09, 0x46, 0x3c, 0xb9, 0x91, 0xff, 0x3f, 0x00, + 0x75, 0x50, 0xd5, 0x0c, 0x7e, 0x2a, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, + 0x42, 0x60, 0x82, }; #endif diff --git a/src/lang/glyph_ru.png b/src/lang/glyph_ru.png index ed27735962a58b4d1bc1d5acfb8958fd152c2b5e..2af50a85849aaabde43a7f3bddb6e2f0a95b92dd 100644 GIT binary patch delta 1983 zcmV;w2SE7Z5AzR@N`Iw$O5C7i|NoqDTrB_AdoT3NeQ&GkA zELn0}-xvmU=J2!a*M6EsB2cT?2mw|ZkA%^Dl{GL+1xY$_@BCTbIWjbv1r{1Bo9vRmfWKR zUoR)li_Ej&)g9{dcEbSVrTfbj!1;^=&gTHI7HkGdfB;*VEU)HCFUIAPoCfx*5AfgvyJAiAv$3bMs4+T^E zg@0pV+@D>dz>5PWdBe$p&GZBSSzrJntgF`^03zS($)Lt?-q(Xbmtu}sPs%8iKyLvk z0o)c0$wNm5w%9uBi%S4lJ}{Zzj%*cpS)sH$fc^+TaRB980Q^&Dj_ePMH8w0HCHpt`_ka4Y~4xab`qZ~zPQ&;g+LQ56FS;A6o_bAQe@A_FQn0MZ8l#@yoD0|46G_V|4L z4$!ykvSo4NV(H8W0YE+h&!(DBZDIWu;A_zS;Jxj5=VyhmeP4bhOvHMAcA?g zcfeIn7yuwruLLC0nU6s1JVM2MMrJ{cZ)h@~w$O$lYrhL%EjYrNfn#wyHXcwl%_DFL zwtr!Q+66T)2Eg@o)QE7s=404Jhm-TvW=y8zu8#^-vHcG@06Kvz`{NFtXutN`wtqdc z|0Doxm)DMYQLK*vbR`oap8{a}Dn0!m0Bo(zqQ4jI-0;@Tr&+fB|Oc1wdDY+ua9<)DvX5X&fk@dU<*A!Hgx}MM`i%7l2*y;xeT)UV?S4 zOS}n>WzALOd_D_?AOr%y6@cyl1U^pyP&LKRlx4jt;|2tPO*|#uL2ujp%ZvSN?|*MG zZ}!Uk^M*q@D~M#<^z~J+t2!>Z#{F@5nU+)a_|SFy>~9bo#>( zsMk-CMA8hP+yFq9j90C3BISIZ0hA8_4uZp+umVu+!%KwSe2c^L9YD+n=YJsArV~}m zJpf(7`v0-FfDzz_RBI#vEr9Aypke?hM*?WbXmMh3EUg6}p3o)U0WcvK0EO*(76o*D zhLS6Kror|va$OaD*c>NWsqyAaD2^ZXHqr+->Y#Vj=v1|Yd1902?4 zj|D?ApnygOG__V_2+9D!X)b@$|0{3-P+IILm(mE}*-cFI&9_}?Q5Er~k;eX-1@no} zupAl4sm1dE%2VLJ;f06-orxG~-h;YfKuP?X4b zr`i86w=x16^*H-MARx_nPMm)KZ|33hAP}K~6 RD*XTe002ovPDHLkV1l+Zpl1L8 delta 1966 zcmV;f2T}O*58@AyN`G)%ETwx&+@NIt|D6BUdoT3iFc{a7_ae|a{Z_Dn+FjGB(oMRDrGU6?lKcYhu>!0k{_GinT{S{8}u zFVp?=alt(vi!5!ZX;w1rkASi+Ev1<$*L0X?F;fR%zpGN4Te_=Ci`I=mu;5^BiED}X z^$T$mL&7n5GEb4%)bbDC=+-^AGc5?vxf=`eD2(Se7__ovp;J&}g9b{V@P_H+1 zO-Ei#OLUA;V1EE?to19j6JWmil@<2YmgUBj(1ykFF ze`0RjU%PmLcL$o}4F?C7rUw9sf-2R+s#@(U0OnWG2x@favF-$_B%HSOB=tfGbPqrY zU|%pKcI_EheCw>wFAiY(yx`tu07M?8O1=8}fJ0-x)qn2*@CX2pOa~B5%m5f)l>m|f zAaEA^7(lbf03c?uJ^_FPq}NZVf(c+1#UlXJo~;5a%av9GP#*zE1|WS2fPLzW@wHY5 z;0X|Q0?@|*Sn!q7Qsxt2^*;un5%W!gq$FX(p;9GP(T4y+2wwr9y*}anRYju%@PeDp ze+Iz%uYcFNCqMwAEO9P));t1|K&2{46|08;oItlP0cc4BfLN<))UN=*bY$aFuk{+o zzsE5Gu=<|@K%yxOsx}S4r4m3l07w@~jlgi?>P|xwjM{X6qf7w70Z`K*t9g8lQX2p# z096oxJ0<`DT=W1448X+PwF9WNSH%Daa8z*67=L3Mo&l8|fbbiD#=OOs2LQB~ZSisa z4p5h9vP3cB($bj^0)YGhKuKV|hXA@wM+O%HV8PWSqPqD8#E%T?O{wyPbYuOtfCuw% zZ-BF0(E>uLQ)?nGZ*7JY4yFL}WpQZ)h?fwotkuYCQxn7wqB8z$KYo3J<6@%_DFR zZhxZ*Y7^9cG0Udckv+onoR4mI?M}{5H(@dzhdwG$`SyRy0Z<8K+8=lDLi@3ww*C3Y z`kerIX~nfLdil^b4a^C^ZBynSE-fad@}fR<3d z4*=1;t6xh|(Xo4Lz70uT1OUeRBk(kE3x7o{8o67wXv)>>0mti?oi+7#-&z6u9+hz8_a=FZx0?>FM=6Ez z5Q*L1gaA%RGXMYwCjji<6$1eKu767aDWS{&Y`zdc*XAXGkFEX_S}4ZmO;oIY8X{Ug zx0j;iB@%#!umfhY&;+P%1Ts2+bRmF(h~g&}msE=L;R&7M4FD5j0+86QM^QlM zXLwQE;q?G~CS|_8W;@OJgY{g{=K1&ccOQrI zd>%pVUTQi_Q$2`h$p6HC?B`iTZo@4Def%Ys>n)|+#_&}cHvSp_B7aD2fB<0QKRpzp zeSZVc2Z>zK$J3T^yO99@3(C{Sg(+OZR!himHEch`1h>mAqmD!PU`ndnMz?=ktTyUSy-W>V->jA_OKq3J4 z*G~Z8|6tgj2vIshPCw}XEf9%&fXo1(@x=f_vVJ3lGTfjnsciF8e?1pWJw6c$r5~GF zIsi^j{Xc=LSqGryPAq1O^B0_6Y9*v*p^z{Di3RQeyuUsw7=IE01=KU3p_H@&pj6#W zbNOBWufQEZD!!wbQXzm>H!;OFUpA#lRm7S`8vAP&%qK$KqGuq6;?DypeFaWWz$4dB zu@p^!SDHm(PT$Jw0q}7S+gV@&0PkHU+xl&cyS~DF99o1m$TV%Gynhq07*qoM6N<$f|6>G Az5oCK diff --git a/src/lang/sv.h b/src/lang/sv.h new file mode 100644 index 0000000..ff01cfc --- /dev/null +++ b/src/lang/sv.h @@ -0,0 +1,355 @@ +#ifndef H_LANG_SV +#define H_LANG_SV + +// Thanks: Carl Lindmark + +const char *STR_SV[] = { "" +// help + , "Laddar..." + , "Tryck H f~or hj~alp" + , helpText + , "%s@@@" + "D~ODADE %d@@" + "PLOCKAT %d@@" + "HEMLIGHETER %d av %d@@" + "TID TAGEN %s" + , "Sparar spel..." + , "Sparar klar!" + , "SPARA MISSLYCKATS!" + , "JA" + , "NEJ" + , "Av" + , "P^a" + , "Av" + , "Sida-vid-Sida" + , "Anaglyf" + , "Delad sk~arm" + , "VR" + , "L^ag" + , "Mellan" + , "H~og" + , STR_LANGUAGES + , "Till~ampa" + , "Handkontroll 1" + , "Handkontroll 2" + , "Handkontroll 3" + , "Handkontroll 4" + , "Ej Redo" + , "Spelare 1" + , "Spelare 2" + , "Tryck Valfri Knapp" + , "%s - V~alj" + , "%s - Tillbaka" +// inventory pages + , "ALTERNATIV" + , "LAGER" + , "OBJEKT" +// save game page + , "Spara Spel?" + , "Nuvarande Position" +// inventory option + , "Spel" + , "Karta" + , "Kompass" + , "Statistik" + , "Lara's Hem" + , "Detaljniv^aer" + , "Ljud" + , "Kontroller" + , "Gamma" +// passport menu + , "~Oppna Spel" + , "Nytt Spel" + , "Starta om Niv^a" + , "Avsluta till Titel" + , "Avsluta Spel" + , "V~alj Niv^a" +// detail options + , "V~alj detalj" + , "Filtrering" + , "Belysning" + , "Skuggor" + , "Vatten" + , "VSync" + , "Stereo" + , "Enkel Objekt" + , "Uppl~osning" + , STR_SCALE +// sound options + , "St~all in Volym" + , "Eko" + , "Undertexter" + , "Spr^ak" +// controls options + , "St~all in Kontroller" + , "Tangentbord" + , "Handkontroll" + , "Vibration" + , "Ominriktning" + , "Multi-riktning" + // controls + , "V~anster", "H~oger", "Spring", "Backa", "Hoppa", "G^a", "Action", "Dra Vapen", "Titta", "Ducka", "Rusa", "Rulla", "Lager", "Start" + , STR_KEYS +// inventory items + , "Ok~and" + , "Explosivt" + , "Pistoler" + , "Hagelgev~ar" + , "Magnum" + , "Uzis" + , "Pistol-Ammunition" + , "Hagelgev~ar-Ammunition" + , "Magnum-Ammunition" + , "Uzi-Ammunition" + , "Litet First-Aid" + , "Stort First-Aid" + , "Blytacka" + , "Scion" +// keys + , "Nyckel" + , "Nyckel av Silver" + , "Nyckel av Rustier" + , "Nyckel av Guld" + , "Nyckel av Safir" + , "Nyckel av Neptune" + , "Nyckel av Atlas" + , "Nyckel av Damokles" + , "Nyckel av Thor" + , "Nyckel av Ornate" +// puzzles + , "Pussel" + , "Guld-Idol" + , "Guld-Tacka" + , "Kugghjul" + , "Stubin" + , "Ankh" + , "Horus ~Oga" + , "Anubis Sigill" + , "Scarab" + , "Pyramid-Nyckeln" +// TR1 subtitles + /* CAFE */ , + "[43500]Vad m^aste en man g~ora f~or att@f^a er uppm~arskamhet?" + "[47500]Det ~ar sv^art att s~aga,@men du verkar klara det bra." + "[50000]N^a, bra. Men sanningen ~ar,@det ~ar inte jag som vill ha er." + "[54500]Inte?" + "[55000]Nej, men fr~oken Jacqueline Natla,@fr^an Natla Technologies." + "[59000]Du vet, skaparen av@alla ljusa och underbara ting?" + "[64500]Tysta ner dig, Larson." + "[66000]Ma'am." + "[68000]Titta in det h~ar, Lara." + "[70500]Var lite nyfiken?" + "[73500]Jag spelar bara f~or sport, tyv~arr." + "[76000]D^a kanske du kommer att gilla det h~ar." + "[78000]Peru. Majest~atiska bergskedjor, branta v~aggar av ren is,@vilda bergsluttningar, ylande vindar" + "[87500]och sedan finns det Scion:@en gammal artefakt med mystiska krafter," + "[92500]g~omd djupt i Qualopecs f~orlorade grav." + "[96000]Jag vill ha det smycket." + "[98000]Du kan ^aka i morgon.@Har du n^agra planer f~or morgondagen??" + /* LIFT */ , + "[49000]H~ar i den magnifika byggnaden S:t Francis,@pl^agar mig nya frestelser." + "[53500]Mina br~oder ryktar att Tihocans kropp@~ar begravd under v^art kloster," + "[60000]en av de tre mytiska h~arskarna@av den f~orlorade kontinenten Atlantis," + "[64500]och att en bit av Atlanten,@arvet ligger hos honom." + "[68000]en h~angiven som delades mellan de tre h~arskarna@p^a den neds~ankta kontinenten Atlantis," + "[72500]f~or att h^alla sina om~atbara krafter i schack,@krafter bortom den Allsm~aktiges, Skaparen." + "[79000]Jag blir yr av s^adana m~ojligheter som@ligger s^a n~ara mitt d~odliga jag.." + "[85500]Jag klandrar mig sj~alv varje kv~all f~or att leva ut id)en,@men det ~ar verkligen ett sv^art test." + "[92000]" + "[93500]Pierre. Din nerskr~apare." + /* CANYON */ , + "[13500]H~ar har vi ~antligen det lilla odjuret." + "[16500]Howdy." + "[17500]God eftermiddag." + "[20000]Bl^aste du ut ljuset f~or Larson?" + "[22500]Om du vill uttrycka det s^a." + "[24000]N^av~al, din lilla semesterresa ~ar ~over." + "[27000]Dags att ge tillbaka det du stal fr^an mig." + "[30000]L^at oss ta en titt i lunchl^adan." + "[32000]" + "[42500]N^a? D~oda dem!" + "[45000]Hej!" + "[48000]" + "[50500]Era idioter!" + "[53000]" + "[62500]L^at oss g^a." + "[65000]" + "[136000]Vad i helvete var det?" + "[138000]Vad?" + "[138500]D~ar borta." + "[140500]F~ormodligen bara en fisk." + "[142500]Men m^aste ha varit ganska stor." + "[145000]Mannen, du m^aste l~ara dig a det lugnt@Jag g^ar in igen, kommer du?" + "[152000]" + "[158000]H^all dig lugn..." + "[160000]H~ar kommer det." + "[161500]~Ar du redo?" + /* PRISON */ , + "[00001]Du kan inte g~ora det!" + "[01500]Vi d~ommer dig, Natla fr^an Atlantis, f~or dina brott," + "[06000]f~or grovt missbruk av dina befogenheter@och f~or att stj~ala v^ara befogenheter." + "[11500]Du kan inte! Jag..." + "[12500]Du har f~orst~ort den trippelallians som har@lett och skyddat v^art folk..." + "[18500]och utmanade Tihocan och mig med v^ar egen arm)e..." + "[23500]lockade v^ara krigare bort fr^an pyramiden..." + "[27000]s^a att du kan missbruka pyramidens kreativa@kraft f~or din trubbiga destruktivitet." + "[33500]Sj~all~os!? Titta p^a dig!" + "[35500]Ingen av er har en gnista av uppfinning i huvudet." + "[40500]Od^agor!" + "[41500]L^at oss bara g~ora det." + "[44000]Tihocan!" + "[45000]Du har vandaliserat ditt heliga offer av ren girighet," + "[49500]som ett freak show." + "[51000]En ny generation, f~odd f~or att ~overleva." + "[54000]Nu ~ar de k~ottf~ars." + "[56000]Och du, Natla, vi kommer att sm~ada..." + "[60000]dina vener och f~otter, ditt hj~arta..." + "[64000]och din sjuka hj~arna fryses ned till is med ditt blod," + "[70000]Se din eviga rastl~oshet i ~ogonen, Natla.." + "[73000]Du kommer aldrig finna frid,@f~orbannad m^a din kontinent Atlantis!" + /* 22 */ , + "[04000]Tillbaka igen?" + "[05500]Och du - F~or den ceremoniella ^ater~oppningen, antar jag." + "[09500]Evolutionen ~ar i en ^aterv~andsgr~and - n~astan inget naturligt urval..." + "[13500]spridningen av nya varelser" + "[17500] - kommer att stimulera nya regionala krafter..." + "[20500]~Aven skapa nya arter." + "[22500]som en evolution p^a steroider." + "[24500]Ja, med en spark i rumpan...@De d~ar Qualopec och Tihocan hade ingen aning." + "[29500] - Atlantis fall har drabbat ett lopp av tr~otta svagheter..." + "[33500]och kastade dem tillbaka till ursprunget f~or ~overlevnad...." + "[37000]Detta ~ar vad v~arlden beh~over." + "[39000]Inte s^a." + "[40000]Det b~orjar om 15 sekunder." + "[43000]F~or sent f~or att avbryta!" + "[45000]Inte utan hj~artat av operationen!" + "[47000]Neeeeej!" + "[50000]10" + "[54000]5..." + "[55500]4...3...2..." + "[60000]1..." + /* 23 */ , + "[00001]N^a, nu har du min fulla uppm~arksamhet," + "[02500]men har jag din ocks^a?" + "[05000]Hall^a?" + "[06000]V~anta lite. N~ar jag tar tag i dig." + "[09000]Naturligtvis." + "[10000]Du och den d~ar dumma saken av Scion." + "[13000]Om du verkligen vill beh^alla det, s^a ska jag trycka det i din j~avl..." + "[17000]V~anta... pratar vi om artifakten?" + "[20000]Det kan du ta dig p^a ... r~att upp i din ..." + "[22000]V~anta lite - Jag ~ar ledsen" + "[24000]- den h~ar, sa du - var ~ar resten?" + "[26500]Miss Natla satte Pierre Dupont p^a letandet." + "[29500]Vart d^a?" + "[30500]Ha! Du ~ar inte lika snabb som honom." + "[34000]S^a du menar att samtalet h~ar bara hindrar mig?" + "[37000]~Ah, ingen aning var de d~ar kr~okta@skurkbenen leder honom." + "[42000]Du f^ar fr^aga fr~oken Natla." + "[46000]" + "[51000]Det ska jag, tackar." + /* 24 */ , "" + /* 25 */ , + "[03500]H~ar ligger Tihocan" + "[05000]...en av de tv^a r~attf~ardiga h~arskarna i Atlantis..." + "[10000]som ~aven efter bes~oket av kontinenten..." + "[13000]...f~ors~okte h~arska v~al i detta karga, fr~ammande land..." + "[19000]Han dog utan barn och hans kunskap levde intevvidare..." + "[25500]Se v~al ~over oss, Tihocan." + /* 26 */ , "V~alkommen till mitt hem!@L^at oss ta en liten tur." + /* 27 */ , "Anv~and riktningsknappen f~or att g^a till musikrummet." + /* 28 */ , "OK, l^at oss springa lite d^a!@Tryck p^a hoppknappen." + /* 29 */ , "Tryck nu p^a den igen och tryck sedan snabbt p^a en av@riktningsknapparna, d^a hoppar jag i den riktningen." + /* 30 */ , "Ah, den stora salen. Urs~akta l^adorna.@Jag har lagrat n^agra saker och vet inte vad jag ska g~ora med dem." + /* 31 */ , "Spring mot en l^ada och medan du h^aller kontrollknappen upp^at,@tryck p^a actionknappen, d^a kl~attrar jag upp." + /* 32 */ , "Det var en g^ang balsalen, men jag anv~ander det som ett gym@Hur tycker du om det? @ L^at oss sedan g~ora n^agra ~ovningar." + /* 33 */ , "Sj~alvklart springer jag inte ~overallt. Om jag vill vara@s~arskilt f~orsiktig, g^ar jag. H^all ned g^a-knappen@och flytta till den vita linjen." + /* 34 */ , "Medan du h^aller ner g^a-knappen kan jag inte falla av@~aven om du f~ors~oker leda mig ~over kanten. Testa, veta jag." + /* 35 */ , "Om du vill se dig omkring h^aller du ner titta-knappen@och trycker p^a kontrollknappen i den riktning du vill se." + /* 36 */ , "Om ett hopp ~ar f~or l^angt f~or mig kan jag@h^alla fast vid kanten s^a att jag inte faller av. G^a till kanten med den@vita linjen tills jag stannar. Tryck sedan p^a hoppknappen@och omedelbart d~arefter upp kontrollpanelen. Nu, medan jag fortfarande ~ar i luften, tryck p^a ^atg~ardsknappen och h^all den intryckt." + /* 37 */ , "Tryck p^a kontrollknappen upp f~or att kl~attra upp" + /* 38 */ , "Om jag springer och hoppar kan jag g~ora stora hopp." + /* 39 */ , "G^a till kanten med den vita linjen tills jag stannar. Sl~app sedan@startknappen och tryck ner kontrollknappen kort. Nu k~or jag upp. Tryck kontrollknappen upp^at och omedelbart d~arefter hoppa-knappen@Press forward, and almost immediately press and hold the jump button@h^all ned hoppknappen. Jag hoppar i sista stund." + /* 40 */ , "S^a det ~ar riktigt stort! Starta hoppet precis som@f~orklarat, men n~ar jag ~ar i luften trycker du p^a actionknappen@och h^aller den nedtryck, d^a kan jag h^alla fast vid kanten." + /* 41 */ , "Bra." + /* 42 */ , "F~ors~ok att kl~attra upp hit.@Tryck kontrollknappen upp^at och sedan p^a actionknappen." + /* 43 */ , "Jag kan inte kl~attra upp h~ar eftersom gapet ~ar f~or smalt.@Men om du trycker p^a knappen f~or h~oger, h~anger jag@i sidled tills det finns tillr~ackligt med utrymme att dra sig upp." + /* 44 */ , "Om det ~ar en brant nedf~orsbacke och jag inte vill@skada mig sj~alv n~ar jag hoppar, kan jag kl~attra ner f~orsiktigt." + /* 45 */ , "Tryck ner backaknappen s^a att jag hoppar bak^at.@Tryck sedan omedelbart p^a actionknappen och h^all ned den s^a att jag@klamrar fast vid kanten n~ar jag faller." + /* 46 */ , "Sl~app nu." + /* 47 */ , "L^at oss ta en simtur." + /* 48 */ , "Hoppknappen och h~oger- samt v~ansterknappen anv~ands f~or@att styra mig under vatten." + /* 49 */ , "Ah! Luft!@Tryck bara p^a kontrollknappen fram^at, v~anster och h~oger,@f~or att r~ora dig runt ytan. Tryck p^a hoppknappen@om du vill att jag ska dyka igen. Eller g^a till avsatsen och@tryck p^a actionknappen f~or att f^a mig ur vattnet." + /* 50 */ , "S^a nu tar jag av mig de v^ata kl~aderna f~orst." + /* 51 */ , "Va god le!" + /* 52 */ , "Det ~ar inget personligt." + /* 53 */ , "Du ger mig fortfarande huvudv~ark.@En liten f^agel viskade att jag ska skicka dig till helvetet!" + /* 54 */ , "Jag och mina v~anner f~orsvinner inte s^a l~att, Lara." + /* 55 */ , "Inte lite sent f~or prisutdelningen?@Men att vara d~ar ~ar allt, ~aven om inte alla ser det p^a det s~attet." + /* 56 */ , "Du skjuter p^a mig?@Du skjuter p^a mig?@Det finns ingen annan h~ar, s^a du m^aste skjutit p^a mig!" +// TR1 levels + , "Lara's Hem" + , "Grottan" + , "Vilcabambas Stad" + , "F~orlorade Dalen" + , "Qualopec Gravkammare" + , "S:t Francis D^arskap" + , "Kolosseum" + , "Midas Palats" + , "Cisternen" + , "Tihocans Gravkammare" + , "Khamoon Stad" + , "Khamoons Obelisk" + , "Scion Fristad" + , "Natla's Gruvor" + , "Atlantis" + , "Den Stora Pyramid" + , "^Aterv~and till Egypten" + , "Kattens tempel" + , "Atlantiska F~astningen" + , "Kupan" +// TR2 levels + , "Lara's Hem" + , "Den Kinesiska Muren" + , "Venedig" + , "Bartolis G~omst~alle" + , "Operahus" + , "Kustriggen" + , "Dykomr^ade" + , "40 Fathoms" + , "Maria Doria Vrak" + , "Bostads-Kvarter" + , "D~acket" + , "Tibetanska H~ogl~anderna" + , "Barkhang-Klostret" + , "Talion-Katakomberna" + , "Ispalatset" + , "Xian-templet" + , "Den Flytande ~On" + , "Drakens Lya" + , "Hem K~ara Hem" +// TR3 levels + , "Lara's Hus" + , "Djungel" + , "Tempelruinerna" + , "Floden Ganges" + , "Kaliya-Grottorna" + , "Kustby" + , "Kraschplats" + , "Madubu Gorge" + , "Punatemplet" + , "Thames Wharf" + , "Aldwych" + , "Lud's Port" + , "Stad" + , "Nevada~oknen" + , "H~og s~akerhetsf~orening" + , "Area 51" + , "Antarktis" + , "RX-Tech Gruvor" + , "Tinnos F~orlorade Stad" + , "Meteoritgrotta" + , "All Hallows" +}; + +#endif diff --git a/src/platform/nix/main.cpp b/src/platform/nix/main.cpp index ddc4701..e36c1a0 100644 --- a/src/platform/nix/main.cpp +++ b/src/platform/nix/main.cpp @@ -388,6 +388,7 @@ int checkLanguage() { if (id == TWOCC("cs")) return STR_LANG_CZ - STR_LANG_EN; if (id == TWOCC("zh")) return STR_LANG_CN - STR_LANG_EN; if (id == TWOCC("hu")) return STR_LANG_HU - STR_LANG_EN; + if (id == TWOCC("sv")) return STR_LANG_SV - STR_LANG_EN; return 0; } diff --git a/src/platform/rpi/main.cpp b/src/platform/rpi/main.cpp index 295ece5..2f28dc6 100644 --- a/src/platform/rpi/main.cpp +++ b/src/platform/rpi/main.cpp @@ -492,6 +492,7 @@ int checkLanguage() { if (id == TWOCC("cs")) return STR_LANG_CZ - STR_LANG_EN; if (id == TWOCC("zh")) return STR_LANG_CN - STR_LANG_EN; if (id == TWOCC("hu")) return STR_LANG_HU - STR_LANG_EN; + if (id == TWOCC("sv")) return STR_LANG_SV - STR_LANG_EN; return 0; } diff --git a/src/platform/web/index.php b/src/platform/web/index.php index 591ade6..319012a 100644 --- a/src/platform/web/index.php +++ b/src/platform/web/index.php @@ -144,6 +144,8 @@ id = 12; } else if (lang == "hu") { id = 13; + } else if (lang == "sv") { + id = 14; } Module.ccall('set_def_lang', 'null', ['number'], [id]); } diff --git a/src/platform/win/OpenLara.vcxproj b/src/platform/win/OpenLara.vcxproj index 1735d65..3ed7407 100644 --- a/src/platform/win/OpenLara.vcxproj +++ b/src/platform/win/OpenLara.vcxproj @@ -155,6 +155,7 @@ + diff --git a/src/platform/win/OpenLara.vcxproj.filters b/src/platform/win/OpenLara.vcxproj.filters index bb27acf..ead0abb 100644 --- a/src/platform/win/OpenLara.vcxproj.filters +++ b/src/platform/win/OpenLara.vcxproj.filters @@ -134,6 +134,9 @@ lang + + lang + diff --git a/src/platform/win/main.cpp b/src/platform/win/main.cpp index da742b5..dcfd14e 100644 --- a/src/platform/win/main.cpp +++ b/src/platform/win/main.cpp @@ -636,6 +636,7 @@ int checkLanguage() { case LANG_CZECH : str = STR_LANG_CZ; break; case LANG_CHINESE : str = STR_LANG_CN; break; case LANG_HUNGARIAN : str = STR_LANG_HU; break; + case LANG_SWEDISH : str = STR_LANG_SV; break; } return str - STR_LANG_EN; } diff --git a/src/platform/xb1/main.cpp b/src/platform/xb1/main.cpp index ac66ab9..bbe0764 100644 --- a/src/platform/xb1/main.cpp +++ b/src/platform/xb1/main.cpp @@ -382,6 +382,8 @@ public: str = STR_LANG_CN; } else if (CHECK("hu")) { str = STR_LANG_HU; + } else if (CHECK("sv")) { + str = STR_LANG_SV; } return str - STR_LANG_EN; diff --git a/src/ui.h b/src/ui.h index 48c8b39..6a24cf4 100644 --- a/src/ui.h +++ b/src/ui.h @@ -47,13 +47,14 @@ namespace UI { int advGlyphsStart; - #define RU_MAP "" "i~\"" + #define RU_MAP "" "i~\"^" #define RU_GLYPH_COUNT (COUNT(RU_MAP) - 1) #define RU_GLYPH_START 102 #define RU_GLYPH_UPPERCASE 20 - #define CHAR_SPR_TILDA (110 + RU_GLYPH_COUNT - 2) - #define CHAR_SPR_I (CHAR_SPR_TILDA - 1) - #define CHAR_SPR_QUOTE (CHAR_SPR_TILDA + 1) + #define CHAR_SPR_TILDA 154 + #define CHAR_SPR_I 153 + #define CHAR_SPR_QUOTE 155 + #define CHAR_SPR_AUH 156 const static uint8 char_width[110 + RU_GLYPH_COUNT] = { 14, 11, 11, 11, 11, 11, 11, 13, 8, 11, 12, 11, 13, 13, 12, 11, 12, 12, 11, 12, 13, 13, 13, 12, 12, 11, // A-Z @@ -66,7 +67,7 @@ namespace UI { 9, 11, 12, 11, 10, 9, 8, 10, 11, 9, 10, 10, 11, 9, 10, 12, // 10, 10, 9, 11, 12, 9, 11, 8, 9, 13, 9, // // additional - 5, 10, 10 // i~" + 5, 10, 10, 10 // i~"^ }; static const uint8 char_map[102 + 33*2] = { @@ -95,7 +96,7 @@ namespace UI { } inline bool skipChar(char c) { - return c == '~' || c == '\"' || c == '$' || c == '(' || c == ')' || c == '|' || c == '}' || c == '*' || c == '{' || c == '+'; + return c == '~' || c == '\"' || c == '^' || c == '$' || c == '(' || c == ')' || c == '|' || c == '}' || c == '*' || c == '{' || c == '+'; } inline bool upperCase(int index) { @@ -120,6 +121,7 @@ namespace UI { char c = RU_MAP[i]; if (c == '' || c == '' || c == '~' || c == '\"') h = 14; + if (c == '^') h = 16; if (c == '' || c == '' || c == '' || c == '') { o = 1; h++; } if (c == '') { o = 2; h += 2; } @@ -423,6 +425,7 @@ namespace UI { if (c == '+' && *text && *text != '@') frame = CHAR_SPR_TILDA; if (c == 'i' && skipChar(lastChar)) frame = CHAR_SPR_I; if (c == '\"') frame = CHAR_SPR_QUOTE; + if (c == '^') frame = CHAR_SPR_AUH; lastChar = c; if (isShadow) { From 55364779a2e99c2239682eb3375f64f89b781a5a Mon Sep 17 00:00:00 2001 From: Leo-89 <62290297+Leo-89@users.noreply.github.com> Date: Sun, 24 Jan 2021 22:23:57 +0100 Subject: [PATCH 57/58] Update it.h (#300) * Update it.h Corrected a wrong accent in the opening FMV. ;) * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h * Update it.h --- src/lang/it.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lang/it.h b/src/lang/it.h index d97b40f..bfdb78e 100644 --- a/src/lang/it.h +++ b/src/lang/it.h @@ -131,10 +131,10 @@ const char *STR_IT[] = { "" /* CAFE */ , "[43500]Che cosa deve fare un uomo@per ricevere da te questo genere di attenzioni?" "[47500]Difficile dirlo con certezza,@ma forse sei sulla buona strada." - "[50000]Ottimo allora. Anche se a dire il vero@$non sono io che ti sto cercando." + "[50000]Ottimo allora. Anche se a dire il vero@non sono io che ti sto cercando." "[54500]No?" "[55000]No. Sono qui per conto di Miss Jacqueline Natla,@della Natla Technologies." - "[59000]Hai presente la creatrice di cose@brillanti e spettacolari?" + "[59000]Hai presente quella che crea@cose scintillanti e belle?" "[64500]Sta' zitto, Larson." "[66000]Mmm.." "[68000]Rifatti gli occhi, Lara." @@ -187,10 +187,10 @@ const char *STR_IT[] = { "" /* PRISON */ , "[00001]Non puoi farlo!" "[01500]Noi ti condanniamo, Natla di Atlantide, per i tuoi crimini." - "[06000]Per l'abuso dei tuoi poteri@e per averci derubato del nostro..." + "[06000]Per l'uso spregiudicato dei tuoi poteri@e per averci derubato del nostro..." "[11500]Non ne avete il diritto! Io..." "[12500]Infrangendo le leggi che governano@e tutelano il nostro popolo" - "[18500]e sfidando Tihocan e me con il tuo esercito." + "[18500]e invadendo Tihocan e me con il nostro esercito." "[23500]I nostri guerrieri hanno lasciato la piramide" "[27000]cosicch)e tu potessi usare il suo potere creativo@per perseguire la tua dissennata brama di distruzione." "[33500]Dissennata!? Guardatevi!" @@ -202,20 +202,20 @@ const char *STR_IT[] = { "" "[49500]come fosse una fabbrica di mostri." "[51000]Sono dei sopravvissuti; una nuova generazione!" "[54000]Solo un mucchio di carcasse dilaniate ora." - "[56000]E tu. Tu verrai imprigionata nel limbo." + "[56000]E tu, tu verrai imprigionata nel limbo." "[60000]Render$a le tue vene, cuore, gambe," "[64000]e quella tua mente schizzata un tutt'uno con il sangue gelido." - "[70000]Goditi la tua eterna disperazione, Natla!" + "[70000]Saluta la tua eterna disperazione, Natla!" "[73000]Neppure tu riposerai bene, o tantomeno il tuo@dannato continente di Atlantide!" /* 22 */ , "[04000]Di nuovo qui?" - "[05500]Anche tu - per assistere al grande debutto, suppongo." + "[05500]Anche tu - per assistere alla grande riapertura, suppongo." "[09500]L'evoluzione fluisce ma la selezione naturale scorre pi$u lenta che mai..." "[13500]Un rifornimento di carne fresca risveglier$a il nostro orgoglio identitario" "[17500] - ci rinforzer$a e ci avvantagger$a..." "[20500]..dar$a persino origine a nuove razze." "[22500]Una specie di evoluzione sotto steroidi, quindi." - "[24500]Un bel calcio nel sedere...@quei poveretti di Qualopec e Tihocan non immaginano neppure" + "[24500]Una spintarella...quei buoni a nulla@di Qualopec e Tihocan non avevano la bench)e minima idea" "[29500] - il cataclisma che colp$i Atlantide ha spazzato via una razza di rammolliti..." "[33500]facendoli ripiombare alle basi della sopravvivenza..." "[37000]..ma non doveva andare in quel modo!" @@ -251,7 +251,7 @@ const char *STR_IT[] = { "" /* 24 */ , "" /* 25 */ , "[03500]Qui giace Tihocan" - "[05000]...uno dei leggendari sovrani di Atlantide..." + "[05000]...uno dei due onorati sovrani di Atlantide..." "[10000]..che anche dopo la rovina del continente..." "[13000]...tent$o di ristabilire l'ordine in queste lande desolate..." "[19000]Egli mor$i senza un erede e la sua conoscenza non fu tramandata..." From 4a952199524dafa42c63236dbab42089d7b18b88 Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 25 Jan 2021 04:33:22 +0300 Subject: [PATCH 58/58] fix shaders compilation --- src/gapi/gl.h | 2 +- src/platform/win/OpenLara.vcxproj | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gapi/gl.h b/src/gapi/gl.h index 10322f5..e48a944 100644 --- a/src/gapi/gl.h +++ b/src/gapi/gl.h @@ -1440,7 +1440,7 @@ namespace GAPI { "#define texture2D texture\n" "#define texture3D texture\n" "#define textureCube texture\n" - "#define shadow2DEXT texture\n" + "#define shadow2D texture\n" "out vec4 fragColor;\n"); } else { // vertex diff --git a/src/platform/win/OpenLara.vcxproj b/src/platform/win/OpenLara.vcxproj index 3ed7407..d7ac0b5 100644 --- a/src/platform/win/OpenLara.vcxproj +++ b/src/platform/win/OpenLara.vcxproj @@ -67,6 +67,7 @@ Strict + MultiThreadedDebug Console