From 94b4f0cc7ea7b349a33044ae22cb843e5940e267 Mon Sep 17 00:00:00 2001 From: Drew Bratcher Date: Sat, 29 Apr 2023 22:11:37 -0400 Subject: [PATCH 1/3] Sets up an iOS SDL project --- .gitignore | 3 + ios/52_hello_mobile.cpp | 549 +++++++++++++++++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 13 + .../ColorMap.textureset/Contents.json | 17 + .../Universal.mipmapset/ColorMap.png | Bin 0 -> 37539 bytes .../Universal.mipmapset/Contents.json | 12 + ios/Assets.xcassets/Contents.json | 6 + ios/Base.lproj/LaunchScreen.storyboard | 25 + ios/SDL_uikit_main.c | 24 + ios/ShaderTypes.h | 49 ++ ios/Shaders.metal | 53 ++ ios/fheroes2.xcodeproj/project.pbxproj | 563 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 29456 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../xcschemes/xcschememanagement.plist | 14 + ios/hello.bmp | Bin 0 -> 49206 bytes 19 files changed, 1360 insertions(+) create mode 100644 ios/52_hello_mobile.cpp create mode 100644 ios/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 ios/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Assets.xcassets/ColorMap.textureset/Contents.json create mode 100644 ios/Assets.xcassets/ColorMap.textureset/Universal.mipmapset/ColorMap.png create mode 100644 ios/Assets.xcassets/ColorMap.textureset/Universal.mipmapset/Contents.json create mode 100644 ios/Assets.xcassets/Contents.json create mode 100644 ios/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/SDL_uikit_main.c create mode 100644 ios/ShaderTypes.h create mode 100644 ios/Shaders.metal create mode 100644 ios/fheroes2.xcodeproj/project.pbxproj create mode 100644 ios/fheroes2.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/fheroes2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 ios/hello.bmp diff --git a/.gitignore b/.gitignore index af8057fc82b..0210df21076 100644 --- a/.gitignore +++ b/.gitignore @@ -94,5 +94,8 @@ android/.gradle # Automatically created Android assets android/app/src/main/assets/files/ +# Xcode per user files +xcuserdata + # Mac magic folders .DS_Store diff --git a/ios/52_hello_mobile.cpp b/ios/52_hello_mobile.cpp new file mode 100644 index 00000000000..a536a9c94d4 --- /dev/null +++ b/ios/52_hello_mobile.cpp @@ -0,0 +1,549 @@ +/*This source code copyrighted by Lazy Foo' Productions (2004-2022) +and may not be redistributed without written permission.*/ + +//Using SDL, standard IO, and strings +#include +#include +#include +#include + +//Texture wrapper class +class LTexture +{ +public: + //Initializes variables + LTexture(); + + //Deallocates memory + ~LTexture(); + + //Loads image at specified path + bool loadFromFile( std::string path ); + + //Loads image into pixel buffer + bool loadPixelsFromFile( std::string path ); + + //Creates image from preloaded pixels + bool loadFromPixels(); + +#if defined(SDL_TTF_MAJOR_VERSION) + //Creates image from font string + bool loadFromRenderedText( std::string textureText, SDL_Color textColor ); +#endif + + //Creates blank texture + bool createBlank( int width, int height, SDL_TextureAccess access ); + + //Deallocates texture + void free(); + + //Set color modulation + void setColor( Uint8 red, Uint8 green, Uint8 blue ); + + //Set blending + void setBlendMode( SDL_BlendMode blending ); + + //Set alpha modulation + void setAlpha( Uint8 alpha ); + + //Renders texture at given point + void render( int x, int y, SDL_Rect* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE ); + + //Gets image dimensions + int getWidth(); + int getHeight(); + + //Pixel accessors + Uint32* getPixels32(); + Uint32 getPixel32( Uint32 x, Uint32 y ); + Uint32 getPitch32(); + void copyRawPixels32( void* pixels ); + bool lockTexture(); + bool unlockTexture(); + +private: + //The actual hardware texture + SDL_Texture* mTexture; + + //Surface pixels + SDL_Surface* mSurfacePixels; + + //Raw pixels + void* mRawPixels; + int mRawPitch; + + //Image dimensions + int mWidth; + int mHeight; +}; + +//Starts up SDL and creates window +bool init(); + +//Loads media +bool loadMedia(); + +//Frees media and shuts down SDL +void close(); + +//The window we'll be rendering to +SDL_Window* gWindow = NULL; + +//The window renderer +SDL_Renderer* gRenderer = NULL; + +//Screen dimensions +SDL_Rect gScreenRect = { 0, 0, 320, 240 }; + +//Scene textures +LTexture gSplashTexture; + +LTexture::LTexture() +{ + //Initialize + mTexture = NULL; + mWidth = 0; + mHeight = 0; + + mSurfacePixels = NULL; + mRawPixels = NULL; + mRawPitch = 0; +} + +LTexture::~LTexture() +{ + //Deallocate + free(); +} + +bool LTexture::loadFromFile( std::string path ) +{ + //Load pixels + if( !loadPixelsFromFile( path ) ) + { + printf( "Failed to load pixels for %s!\n", path.c_str() ); + } + else + { + //Load texture from pixels + if( !loadFromPixels() ) + { + printf( "Failed to texture from pixels from %s!\n", path.c_str() ); + } + } + + //Return success + return mTexture != NULL; +} + +bool LTexture::loadPixelsFromFile( std::string path ) +{ + //Free preexisting assets + free(); + + //Load image at specified path + SDL_Surface* loadedSurface = SDL_LoadBMP( path.c_str() ); + if( loadedSurface == NULL ) + { + printf( "Unable to load image %s! SDL Error: %s\n", path.c_str(), SDL_GetError() ); + } + else + { + //Convert surface to display format + mSurfacePixels = SDL_ConvertSurfaceFormat( loadedSurface, SDL_GetWindowPixelFormat( gWindow ), 0 ); + if( mSurfacePixels == NULL ) + { + printf( "Unable to convert loaded surface to display format! SDL Error: %s\n", SDL_GetError() ); + } + else + { + //Get image dimensions + mWidth = mSurfacePixels->w; + mHeight = mSurfacePixels->h; + } + + //Get rid of old loaded surface + SDL_FreeSurface( loadedSurface ); + } + + return mSurfacePixels != NULL; +} + +bool LTexture::loadFromPixels() +{ + //Only load if pixels exist + if( mSurfacePixels == NULL ) + { + printf( "No pixels loaded!" ); + } + else + { + //Color key image + SDL_SetColorKey( mSurfacePixels, SDL_TRUE, SDL_MapRGB( mSurfacePixels->format, 0, 0xFF, 0xFF ) ); + + //Create texture from surface pixels + mTexture = SDL_CreateTextureFromSurface( gRenderer, mSurfacePixels ); + if( mTexture == NULL ) + { + printf( "Unable to create texture from loaded pixels! SDL Error: %s\n", SDL_GetError() ); + } + else + { + //Get image dimensions + mWidth = mSurfacePixels->w; + mHeight = mSurfacePixels->h; + } + + //Get rid of old loaded surface + SDL_FreeSurface( mSurfacePixels ); + mSurfacePixels = NULL; + } + + //Return success + return mTexture != NULL; +} + +#if defined(SDL_TTF_MAJOR_VERSION) +bool LTexture::loadFromRenderedText( std::string textureText, SDL_Color textColor ) +{ + //Get rid of preexisting texture + free(); + + //Render text surface + SDL_Surface* textSurface = TTF_RenderText_Solid( gFont, textureText.c_str(), textColor ); + if( textSurface != NULL ) + { + //Create texture from surface pixels + mTexture = SDL_CreateTextureFromSurface( gRenderer, textSurface ); + if( mTexture == NULL ) + { + printf( "Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError() ); + } + else + { + //Get image dimensions + mWidth = textSurface->w; + mHeight = textSurface->h; + } + + //Get rid of old surface + SDL_FreeSurface( textSurface ); + } + else + { + printf( "Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() ); + } + + + //Return success + return mTexture != NULL; + } +#endif + +bool LTexture::createBlank( int width, int height, SDL_TextureAccess access ) +{ + //Get rid of preexisting texture + free(); + + //Create uninitialized texture + mTexture = SDL_CreateTexture( gRenderer, SDL_PIXELFORMAT_RGBA8888, access, width, height ); + if( mTexture == NULL ) + { + printf( "Unable to create streamable blank texture! SDL Error: %s\n", SDL_GetError() ); + } + else + { + mWidth = width; + mHeight = height; + } + + return mTexture != NULL; +} + +void LTexture::free() +{ + //Free texture if it exists + if( mTexture != NULL ) + { + SDL_DestroyTexture( mTexture ); + mTexture = NULL; + mWidth = 0; + mHeight = 0; + } + + //Free surface if it exists + if( mSurfacePixels != NULL ) + { + SDL_FreeSurface( mSurfacePixels ); + mSurfacePixels = NULL; + } +} + +void LTexture::setColor( Uint8 red, Uint8 green, Uint8 blue ) +{ + //Modulate texture rgb + SDL_SetTextureColorMod( mTexture, red, green, blue ); +} + +void LTexture::setBlendMode( SDL_BlendMode blending ) +{ + //Set blending function + SDL_SetTextureBlendMode( mTexture, blending ); +} + +void LTexture::setAlpha( Uint8 alpha ) +{ + //Modulate texture alpha + SDL_SetTextureAlphaMod( mTexture, alpha ); +} + +void LTexture::render( int x, int y, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip flip ) +{ + //Set rendering space and render to screen + SDL_Rect renderQuad = { x, y, mWidth, mHeight }; + + //Set clip rendering dimensions + if( clip != NULL ) + { + renderQuad.w = clip->w; + renderQuad.h = clip->h; + } + + //Render to screen + SDL_RenderCopyEx( gRenderer, mTexture, clip, &renderQuad, angle, center, flip ); +} + +int LTexture::getWidth() +{ + return mWidth; +} + +int LTexture::getHeight() +{ + return mHeight; +} + +Uint32* LTexture::getPixels32() +{ + Uint32* pixels = NULL; + + if( mSurfacePixels != NULL ) + { + pixels = static_cast( mSurfacePixels->pixels ); + } + + return pixels; +} + +Uint32 LTexture::getPixel32( Uint32 x, Uint32 y ) +{ + //Convert the pixels to 32 bit + Uint32* pixels = static_cast( mSurfacePixels->pixels ); + + //Get the pixel requested + return pixels[ ( y * getPitch32() ) + x ]; +} + +Uint32 LTexture::getPitch32() +{ + Uint32 pitch = 0; + + if( mSurfacePixels != NULL ) + { + pitch = mSurfacePixels->pitch / 4; + } + + return pitch; +} + +bool LTexture::lockTexture() +{ + bool success = true; + + //Texture is already locked + if( mRawPixels != NULL ) + { + printf( "Texture is already locked!\n" ); + success = false; + } + //Lock texture + else + { + if( SDL_LockTexture( mTexture, NULL, &mRawPixels, &mRawPitch ) != 0 ) + { + printf( "Unable to lock texture! %s\n", SDL_GetError() ); + success = false; + } + } + + return success; +} + +bool LTexture::unlockTexture() +{ + bool success = true; + + //Texture is not locked + if( mRawPixels == NULL ) + { + printf( "Texture is not locked!\n" ); + success = false; + } + //Unlock texture + else + { + SDL_UnlockTexture( mTexture ); + mRawPixels = NULL; + mRawPitch = 0; + } + + return success; +} + +void LTexture::copyRawPixels32( void* pixels ) +{ + //Texture is locked + if( mRawPixels != NULL ) + { + //Copy to locked pixels + memcpy( mRawPixels, pixels, mRawPitch * mHeight ); + } +} + +bool init() +{ + //Initialization flag + bool success = true; + + //Initialize SDL + if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) + { + SDL_Log( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() ); + success = false; + } + else + { + //Set texture filtering to linear + if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) ) + { + SDL_Log( "Warning: Linear texture filtering not enabled!" ); + } + + //Get device display mode + SDL_DisplayMode displayMode; + if( SDL_GetCurrentDisplayMode( 0, &displayMode ) == 0 ) + { + gScreenRect.w = displayMode.w; + gScreenRect.h = displayMode.h; + } + + //Create window + gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, gScreenRect.w, gScreenRect.h, SDL_WINDOW_SHOWN ); + if( gWindow == NULL ) + { + SDL_Log( "Window could not be created! SDL Error: %s\n", SDL_GetError() ); + success = false; + } + else + { + //Create renderer for window + gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC ); + if( gRenderer == NULL ) + { + SDL_Log( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() ); + success = false; + } + else + { + //Initialize renderer color + SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); + } + } + } + + return success; +} + +bool loadMedia() +{ + //Loading success flag + bool success = true; + + //Load splash texture + if( !gSplashTexture.loadFromFile( "hello.bmp" ) ) + { + SDL_Log( "Failed to load splash texture!\n" ); + success = false; + } + + return success; +} + +void close() +{ + //Free loaded images + gSplashTexture.free(); + + //Destroy window + SDL_DestroyRenderer( gRenderer ); + SDL_DestroyWindow( gWindow ); + gWindow = NULL; + gRenderer = NULL; + + //Quit SDL subsystems + SDL_Quit(); +} + +int main( int argc, char* args[] ) +{ + //Start up SDL and create window + if( !init() ) + { + SDL_Log( "Failed to initialize!\n" ); + } + else + { + //Load media + if( !loadMedia() ) + { + SDL_Log( "Failed to load media!\n" ); + } + else + { + //Main loop flag + bool quit = false; + + //Event handler + SDL_Event e; + + //While application is running + while( !quit ) + { + //Handle events on queue + while( SDL_PollEvent( &e ) != 0 ) + { + //User requests quit + if( e.type == SDL_QUIT ) + { + quit = true; + } + } + + //Clear screen + SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); + SDL_RenderClear( gRenderer ); + + //Render splash + gSplashTexture.render( ( gScreenRect.w - gSplashTexture.getWidth() ) / 2, ( gScreenRect.h - gSplashTexture.getHeight() ) / 2 ); + + //Update screen + SDL_RenderPresent( gRenderer ); + } + } + } + + //Free resources and close SDL + close(); + + return 0; +} diff --git a/ios/Assets.xcassets/AccentColor.colorset/Contents.json b/ios/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000000..eb878970081 --- /dev/null +++ b/ios/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000000..13613e3ee1a --- /dev/null +++ b/ios/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/Assets.xcassets/ColorMap.textureset/Contents.json b/ios/Assets.xcassets/ColorMap.textureset/Contents.json new file mode 100644 index 00000000000..702494cfd94 --- /dev/null +++ b/ios/Assets.xcassets/ColorMap.textureset/Contents.json @@ -0,0 +1,17 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "origin" : "bottom-left", + "interpretation" : "non-premultiplied-colors" + }, + "textures" : [ + { + "idiom" : "universal", + "filename" : "Universal.mipmapset" + } + ] +} + diff --git a/ios/Assets.xcassets/ColorMap.textureset/Universal.mipmapset/ColorMap.png b/ios/Assets.xcassets/ColorMap.textureset/Universal.mipmapset/ColorMap.png new file mode 100644 index 0000000000000000000000000000000000000000..ddf9519d4619fb02becb1157e8b8704d10a01547 GIT binary patch literal 37539 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 r$)xH}R>*L<@bp14E`X~(RdGy#_RQ<+j#?*o1V0 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/SDL_uikit_main.c b/ios/SDL_uikit_main.c new file mode 100644 index 00000000000..90c20d1db08 --- /dev/null +++ b/ios/SDL_uikit_main.c @@ -0,0 +1,24 @@ +/* + SDL_uikit_main.c, placed in the public domain by Sam Lantinga 3/18/2019 +*/ + +/* Include the SDL main definition header */ +#include "SDL_main.h" + +#if defined(__IPHONEOS__) || defined(__TVOS__) + +#ifndef SDL_MAIN_HANDLED +#ifdef main +#undef main +#endif + +int +main(int argc, char *argv[]) +{ + return SDL_UIKitRunApp(argc, argv, SDL_main); +} +#endif /* !SDL_MAIN_HANDLED */ + +#endif /* __IPHONEOS__ || __TVOS__ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/ios/ShaderTypes.h b/ios/ShaderTypes.h new file mode 100644 index 00000000000..e40c9a09df0 --- /dev/null +++ b/ios/ShaderTypes.h @@ -0,0 +1,49 @@ +// +// ShaderTypes.h +// fheroes2 +// +// Created by Drew Bratcher on 4/29/23. +// + +// +// Header containing types and enum constants shared between Metal shaders and Swift/ObjC source +// +#ifndef ShaderTypes_h +#define ShaderTypes_h + +#ifdef __METAL_VERSION__ +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +typedef metal::int32_t EnumBackingType; +#else +#import +typedef NSInteger EnumBackingType; +#endif + +#include + +typedef NS_ENUM(EnumBackingType, BufferIndex) +{ + BufferIndexMeshPositions = 0, + BufferIndexMeshGenerics = 1, + BufferIndexUniforms = 2 +}; + +typedef NS_ENUM(EnumBackingType, VertexAttribute) +{ + VertexAttributePosition = 0, + VertexAttributeTexcoord = 1, +}; + +typedef NS_ENUM(EnumBackingType, TextureIndex) +{ + TextureIndexColor = 0, +}; + +typedef struct +{ + matrix_float4x4 projectionMatrix; + matrix_float4x4 modelViewMatrix; +} Uniforms; + +#endif /* ShaderTypes_h */ + diff --git a/ios/Shaders.metal b/ios/Shaders.metal new file mode 100644 index 00000000000..05fe880e77f --- /dev/null +++ b/ios/Shaders.metal @@ -0,0 +1,53 @@ +// +// Shaders.metal +// fheroes2 +// +// Created by Drew Bratcher on 4/29/23. +// + +// File for Metal kernel and shader functions + +#include +#include + +// Including header shared between this Metal shader code and Swift/C code executing Metal API commands +#import "ShaderTypes.h" + +using namespace metal; + +typedef struct +{ + float3 position [[attribute(VertexAttributePosition)]]; + float2 texCoord [[attribute(VertexAttributeTexcoord)]]; +} Vertex; + +typedef struct +{ + float4 position [[position]]; + float2 texCoord; +} ColorInOut; + +vertex ColorInOut vertexShader(Vertex in [[stage_in]], + constant Uniforms & uniforms [[ buffer(BufferIndexUniforms) ]]) +{ + ColorInOut out; + + float4 position = float4(in.position, 1.0); + out.position = uniforms.projectionMatrix * uniforms.modelViewMatrix * position; + out.texCoord = in.texCoord; + + return out; +} + +fragment float4 fragmentShader(ColorInOut in [[stage_in]], + constant Uniforms & uniforms [[ buffer(BufferIndexUniforms) ]], + texture2d colorMap [[ texture(TextureIndexColor) ]]) +{ + constexpr sampler colorSampler(mip_filter::linear, + mag_filter::linear, + min_filter::linear); + + half4 colorSample = colorMap.sample(colorSampler, in.texCoord.xy); + + return float4(colorSample); +} diff --git a/ios/fheroes2.xcodeproj/project.pbxproj b/ios/fheroes2.xcodeproj/project.pbxproj new file mode 100644 index 00000000000..fff4d0f7cbe --- /dev/null +++ b/ios/fheroes2.xcodeproj/project.pbxproj @@ -0,0 +1,563 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + EA5466A429FE02FF00A9D8B2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EA5466A329FE02FF00A9D8B2 /* Assets.xcassets */; }; + EA5466A729FE02FF00A9D8B2 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EA5466A529FE02FF00A9D8B2 /* LaunchScreen.storyboard */; }; + EA67D2A129FE03C60004F40F /* Shaders.metal in Sources */ = {isa = PBXBuildFile; fileRef = EA54669E29FE02FF00A9D8B2 /* Shaders.metal */; }; + EA67D2C829FE04B70004F40F /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D2B329FE04380004F40F /* SDL2.framework */; }; + EA67D2C929FE04B70004F40F /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D2B329FE04380004F40F /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + EA67D2CC29FE05030004F40F /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */; }; + EA67D2CE29FE05180004F40F /* 52_hello_mobile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */; }; + EA67D2D029FE051D0004F40F /* hello.bmp in Resources */ = {isa = PBXBuildFile; fileRef = EA67D2CF29FE051D0004F40F /* hello.bmp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + EA67D2B029FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BECDF66C0761BA81005FE872; + remoteInfo = Framework; + }; + EA67D2B229FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A7D88B5423E2437C00DCD162; + remoteInfo = "Framework-iOS"; + }; + EA67D2B429FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A7D88D1523E24BED00DCD162; + remoteInfo = "Framework-tvOS"; + }; + EA67D2B629FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E2D187CF28A5673500D2B4F1; + remoteInfo = "xcFramework-iOS"; + }; + EA67D2B829FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BECDF6B30761BA81005FE872; + remoteInfo = "Static Library"; + }; + EA67D2BA29FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A7D88E5423E24D3B00DCD162; + remoteInfo = "Static Library-iOS"; + }; + EA67D2BC29FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A769B23D23E259AE00872273; + remoteInfo = "Static Library-tvOS"; + }; + EA67D2BE29FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = DB31407717554B71006C0E22; + remoteInfo = "Shared Library"; + }; + EA67D2C029FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A75FCEB323E25AB700529352; + remoteInfo = "Shared Library-iOS"; + }; + EA67D2C229FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A75FD06C23E25AC700529352; + remoteInfo = "Shared Library-tvOS"; + }; + EA67D2C429FE04380004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BECDF6BE0761BA81005FE872; + remoteInfo = "Standard DMG"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + EA67D2CA29FE04B70004F40F /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + EA67D2C929FE04B70004F40F /* SDL2.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + EA54669429FE02FF00A9D8B2 /* fheroes2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fheroes2.app; sourceTree = BUILT_PRODUCTS_DIR; }; + EA54669929FE02FF00A9D8B2 /* ShaderTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShaderTypes.h; sourceTree = ""; }; + EA54669E29FE02FF00A9D8B2 /* Shaders.metal */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.metal; path = Shaders.metal; sourceTree = ""; }; + EA5466A329FE02FF00A9D8B2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + EA5466A629FE02FF00A9D8B2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + EA67D2A229FE04380004F40F /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "../../SDL-release-2.26.5/Xcode/SDL/SDL.xcodeproj"; sourceTree = ""; }; + EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_uikit_main.c; sourceTree = ""; }; + EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 52_hello_mobile.cpp; sourceTree = ""; }; + EA67D2CF29FE051D0004F40F /* hello.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = hello.bmp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + EA54669129FE02FF00A9D8B2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EA67D2C829FE04B70004F40F /* SDL2.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + EA54668B29FE02FF00A9D8B2 = { + isa = PBXGroup; + children = ( + EA67D2A229FE04380004F40F /* SDL.xcodeproj */, + EA54669929FE02FF00A9D8B2 /* ShaderTypes.h */, + EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */, + EA67D2CF29FE051D0004F40F /* hello.bmp */, + EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */, + EA54669E29FE02FF00A9D8B2 /* Shaders.metal */, + EA5466A329FE02FF00A9D8B2 /* Assets.xcassets */, + EA5466A529FE02FF00A9D8B2 /* LaunchScreen.storyboard */, + EA54669529FE02FF00A9D8B2 /* Products */, + EA67D2C629FE04AE0004F40F /* Frameworks */, + ); + sourceTree = ""; + }; + EA54669529FE02FF00A9D8B2 /* Products */ = { + isa = PBXGroup; + children = ( + EA54669429FE02FF00A9D8B2 /* fheroes2.app */, + ); + name = Products; + sourceTree = ""; + }; + EA67D2A329FE04380004F40F /* Products */ = { + isa = PBXGroup; + children = ( + EA67D2B129FE04380004F40F /* SDL2.framework */, + EA67D2B329FE04380004F40F /* SDL2.framework */, + EA67D2B529FE04380004F40F /* SDL2.framework */, + EA67D2B729FE04380004F40F /* SDL2.framework */, + EA67D2B929FE04380004F40F /* libSDL2.a */, + EA67D2BB29FE04380004F40F /* libSDL2.a */, + EA67D2BD29FE04380004F40F /* libSDL2.a */, + EA67D2BF29FE04380004F40F /* libSDL2.dylib */, + EA67D2C129FE04380004F40F /* libSDL2.dylib */, + EA67D2C329FE04380004F40F /* libSDL2.dylib */, + EA67D2C529FE04380004F40F /* SDL2 */, + ); + name = Products; + sourceTree = ""; + }; + EA67D2C629FE04AE0004F40F /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + EA54669329FE02FF00A9D8B2 /* fheroes2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = EA5466AA29FE02FF00A9D8B2 /* Build configuration list for PBXNativeTarget "fheroes2" */; + buildPhases = ( + EA54669029FE02FF00A9D8B2 /* Sources */, + EA54669129FE02FF00A9D8B2 /* Frameworks */, + EA54669229FE02FF00A9D8B2 /* Resources */, + EA67D2CA29FE04B70004F40F /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = fheroes2; + productName = fheroes2; + productReference = EA54669429FE02FF00A9D8B2 /* fheroes2.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + EA54668C29FE02FF00A9D8B2 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1420; + LastUpgradeCheck = 1420; + TargetAttributes = { + EA54669329FE02FF00A9D8B2 = { + CreatedOnToolsVersion = 14.2; + }; + }; + }; + buildConfigurationList = EA54668F29FE02FF00A9D8B2 /* Build configuration list for PBXProject "fheroes2" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = EA54668B29FE02FF00A9D8B2; + productRefGroup = EA54669529FE02FF00A9D8B2 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = EA67D2A329FE04380004F40F /* Products */; + ProjectRef = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + EA54669329FE02FF00A9D8B2 /* fheroes2 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + EA67D2B129FE04380004F40F /* SDL2.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL2.framework; + remoteRef = EA67D2B029FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2B329FE04380004F40F /* SDL2.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL2.framework; + remoteRef = EA67D2B229FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2B529FE04380004F40F /* SDL2.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL2.framework; + remoteRef = EA67D2B429FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2B729FE04380004F40F /* SDL2.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL2.framework; + remoteRef = EA67D2B629FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2B929FE04380004F40F /* libSDL2.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSDL2.a; + remoteRef = EA67D2B829FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2BB29FE04380004F40F /* libSDL2.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSDL2.a; + remoteRef = EA67D2BA29FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2BD29FE04380004F40F /* libSDL2.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSDL2.a; + remoteRef = EA67D2BC29FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2BF29FE04380004F40F /* libSDL2.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = libSDL2.dylib; + remoteRef = EA67D2BE29FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2C129FE04380004F40F /* libSDL2.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = libSDL2.dylib; + remoteRef = EA67D2C029FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2C329FE04380004F40F /* libSDL2.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = libSDL2.dylib; + remoteRef = EA67D2C229FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D2C529FE04380004F40F /* SDL2 */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = SDL2; + remoteRef = EA67D2C429FE04380004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + EA54669229FE02FF00A9D8B2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EA5466A729FE02FF00A9D8B2 /* LaunchScreen.storyboard in Resources */, + EA67D2D029FE051D0004F40F /* hello.bmp in Resources */, + EA5466A429FE02FF00A9D8B2 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + EA54669029FE02FF00A9D8B2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EA67D2A129FE03C60004F40F /* Shaders.metal in Sources */, + EA67D2CC29FE05030004F40F /* SDL_uikit_main.c in Sources */, + EA67D2CE29FE05180004F40F /* 52_hello_mobile.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + EA5466A529FE02FF00A9D8B2 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + EA5466A629FE02FF00A9D8B2 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + EA5466A829FE02FF00A9D8B2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + EA5466A929FE02FF00A9D8B2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EA5466AB29FE02FF00A9D8B2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = CD69SP6A6Z; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIRequiredDeviceCapabilities = metal; + INFOPLIST_KEY_UIStatusBarHidden = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.drewbratcher.fheroes2; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = ShaderTypes.h; + SWIFT_VERSION = 5.0; + SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../SDL-release-2.26.5/include\""; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + EA5466AC29FE02FF00A9D8B2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = CD69SP6A6Z; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIRequiredDeviceCapabilities = metal; + INFOPLIST_KEY_UIStatusBarHidden = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.drewbratcher.fheroes2; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = ShaderTypes.h; + SWIFT_VERSION = 5.0; + SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../SDL-release-2.26.5/include\""; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + EA54668F29FE02FF00A9D8B2 /* Build configuration list for PBXProject "fheroes2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EA5466A829FE02FF00A9D8B2 /* Debug */, + EA5466A929FE02FF00A9D8B2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + EA5466AA29FE02FF00A9D8B2 /* Build configuration list for PBXNativeTarget "fheroes2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EA5466AB29FE02FF00A9D8B2 /* Debug */, + EA5466AC29FE02FF00A9D8B2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = EA54668C29FE02FF00A9D8B2 /* Project object */; +} diff --git a/ios/fheroes2.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/fheroes2.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000000..919434a6254 --- /dev/null +++ b/ios/fheroes2.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/fheroes2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/fheroes2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000000..18d981003d6 --- /dev/null +++ b/ios/fheroes2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate b/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..5d6aa9af53e48e27debbf61aab1d394dcfeb2cd3 GIT binary patch literal 29456 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 + + diff --git a/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000000..9c720960c08 --- /dev/null +++ b/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + fheroes2.xcscheme_^#shared#^_ + + orderHint + 2 + + + + diff --git a/ios/hello.bmp b/ios/hello.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8df050454b11daf7a57552212f94aa9a4fafeab2 GIT binary patch literal 49206 zcmeI3yO9@15Qk5;EJ}`SEcsLsfC^V8DUbrLOr<~yq<}*JN`Vwe0exIUSJ(7RZ}0B^ zfwYKmYKmYKmYKmYKmYKm-N?&z?Pd{``3qB6;=dRg~=N|MS?UCg%CYix<<;LWm)) zQ2752efsq2^XJbofB1d*@};O3fN$TvjV7`G?_-M+`mbNV{_x=gZmrQT{JSj+h zq-R#7%58u8Fn{;%oqKC`$c@%iKCeb~0E>R609}Fd4G2hG7(0wY$t7$h$^jtspz-F- z8?M}L)(AaZnU(D+Omem!D0em&QZ_+Smp?T@$bz)GY^nH_gjXgehbJxS)Cm|&{7?C_ zsu`kib4XU)!f@CxMuxeFafd#EFdViCxn<#C=(i{neemF;t4>{hwxS9k(e}RQ>w)VuC{D*}&a&FyE9ztTPu0Fm{>ywO8`c@EtRkS_O&*8Gf+}eR`eL_#SfO9L@ zdXj~X`*G#iVOoifc@*aUs*tQ1C4DQl;dG%!Z<~F>QA=Ee(**3y@$&?IqBHx^kXX*G zVCyNF&%uL@^42t+UmNu(?rPeZ7Bbb0!lsoSJ`N;$*wxSBvIK`Let<_-!;Dx^C)4MT zpPVrJi*Q*!L|G}Ad|F6t!f4aV3Y;dt86qm=a9Lug^M22o2l&T1wZv>`<#3+1M{!B+ zbab*6l3dhOjlItfT{V^~`FD0l4wof)@mosv9E=ZHuiBPJW*ci+>14OjioQn~1%+Mb}9a(G=0$6zKDC!t6s5vJrRU3bD>@wS$a%a*!|0PCB63B|8XjQ& z{qC!6UUks}eOoqhZ43&l+oAlGn#&EiWlKetxsPska=0id7QcD6z2DAGd{ z&!lIKTc4DeqdaNOlFy;iAMQ zw9L$gi9@~}0$+D%vu9*{7VEMpo&*35Z*CFsrg*O}C#k+x|@3B90eUE6Vm1 z_(AwHk7UI)PjM|dnSbp(kLGYD;k*TDaq>r3lxfdOI@w{=?DX+){`~0#n(Ca-f9iH6 z%;8MZIr*bcJ8#XFYaH6!$2`7K?=?TEZzY^`(l^iHOv2*l{O|iglP$x0CWd&}WjHA3 zlm>;X-rhKR4u=GWwC3RxY1nH&9-?q>Kc}?U!x{Y>N6+Dq0Dt<=N}akeJZx+Jb4s1K zS%)L^z&UoQ=sBOMgd}Nkh-Ke-=Zq$o?O%$(F+ZHTdk@~rmVb9|9AdQdY4AL{<9pQk z{N+IeL_h>YKmYKmYKm!|Vl32AKp4ZZn&0)Iy5g9NY6 zJACU^B-3=BJ?t`M!5eu#za&Wtw^R{k&o`6s)eZS ziO@xXK2%g{lentRJrte7d11v+$Iw=IvBvC!@Fs^kpS`1<{LN>f**w9D+zRJ~6+<0E z<6l4EOy~9wV*8H(b&WPkrK|5VSvhAGe-q<0$v*#@?Y;PeZbfydccs~Xf(#DhZ3ko2 z_kPE)!`A*oL_J3y^n#rg)f{4_Y1N(l2DpPUr-YhExeCWR z%)i9hymWrM>@4GH=#F8BElJ{P8sd6FQo;b+DsMv(Kp~YM2+PHeENf*)olmk)V5=2{JHXYrBREyqQlD@a`NnK z(rE%Gg%{*cCRPsQIg6~`W_lfrQ&$~Be)Ebi36#vih#`4eqtzEjXV zKehg^G)>}vC9qAm;@<>yCAB91YyXDWOd~@$Y?xi$MZ&Khw9U}GJoBnt{|RZ+Nuh8U z<6*-hnI|~ZTn3rUVZ-c75)lvq5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo T0TB=Z5fA|p5CIW*Y6SiRO^D Date: Sat, 29 Apr 2023 22:50:05 -0400 Subject: [PATCH 2/3] Running fheroes2 code first pass --- ios/52_hello_mobile.cpp | 549 ------ ios/fheroes2.xcodeproj/project.pbxproj | 1669 ++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 29456 -> 61205 bytes .../xcschemes/xcschememanagement.plist | 2 +- ios/hello.bmp | Bin 49206 -> 0 bytes 5 files changed, 1660 insertions(+), 560 deletions(-) delete mode 100644 ios/52_hello_mobile.cpp delete mode 100644 ios/hello.bmp diff --git a/ios/52_hello_mobile.cpp b/ios/52_hello_mobile.cpp deleted file mode 100644 index a536a9c94d4..00000000000 --- a/ios/52_hello_mobile.cpp +++ /dev/null @@ -1,549 +0,0 @@ -/*This source code copyrighted by Lazy Foo' Productions (2004-2022) -and may not be redistributed without written permission.*/ - -//Using SDL, standard IO, and strings -#include -#include -#include -#include - -//Texture wrapper class -class LTexture -{ -public: - //Initializes variables - LTexture(); - - //Deallocates memory - ~LTexture(); - - //Loads image at specified path - bool loadFromFile( std::string path ); - - //Loads image into pixel buffer - bool loadPixelsFromFile( std::string path ); - - //Creates image from preloaded pixels - bool loadFromPixels(); - -#if defined(SDL_TTF_MAJOR_VERSION) - //Creates image from font string - bool loadFromRenderedText( std::string textureText, SDL_Color textColor ); -#endif - - //Creates blank texture - bool createBlank( int width, int height, SDL_TextureAccess access ); - - //Deallocates texture - void free(); - - //Set color modulation - void setColor( Uint8 red, Uint8 green, Uint8 blue ); - - //Set blending - void setBlendMode( SDL_BlendMode blending ); - - //Set alpha modulation - void setAlpha( Uint8 alpha ); - - //Renders texture at given point - void render( int x, int y, SDL_Rect* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE ); - - //Gets image dimensions - int getWidth(); - int getHeight(); - - //Pixel accessors - Uint32* getPixels32(); - Uint32 getPixel32( Uint32 x, Uint32 y ); - Uint32 getPitch32(); - void copyRawPixels32( void* pixels ); - bool lockTexture(); - bool unlockTexture(); - -private: - //The actual hardware texture - SDL_Texture* mTexture; - - //Surface pixels - SDL_Surface* mSurfacePixels; - - //Raw pixels - void* mRawPixels; - int mRawPitch; - - //Image dimensions - int mWidth; - int mHeight; -}; - -//Starts up SDL and creates window -bool init(); - -//Loads media -bool loadMedia(); - -//Frees media and shuts down SDL -void close(); - -//The window we'll be rendering to -SDL_Window* gWindow = NULL; - -//The window renderer -SDL_Renderer* gRenderer = NULL; - -//Screen dimensions -SDL_Rect gScreenRect = { 0, 0, 320, 240 }; - -//Scene textures -LTexture gSplashTexture; - -LTexture::LTexture() -{ - //Initialize - mTexture = NULL; - mWidth = 0; - mHeight = 0; - - mSurfacePixels = NULL; - mRawPixels = NULL; - mRawPitch = 0; -} - -LTexture::~LTexture() -{ - //Deallocate - free(); -} - -bool LTexture::loadFromFile( std::string path ) -{ - //Load pixels - if( !loadPixelsFromFile( path ) ) - { - printf( "Failed to load pixels for %s!\n", path.c_str() ); - } - else - { - //Load texture from pixels - if( !loadFromPixels() ) - { - printf( "Failed to texture from pixels from %s!\n", path.c_str() ); - } - } - - //Return success - return mTexture != NULL; -} - -bool LTexture::loadPixelsFromFile( std::string path ) -{ - //Free preexisting assets - free(); - - //Load image at specified path - SDL_Surface* loadedSurface = SDL_LoadBMP( path.c_str() ); - if( loadedSurface == NULL ) - { - printf( "Unable to load image %s! SDL Error: %s\n", path.c_str(), SDL_GetError() ); - } - else - { - //Convert surface to display format - mSurfacePixels = SDL_ConvertSurfaceFormat( loadedSurface, SDL_GetWindowPixelFormat( gWindow ), 0 ); - if( mSurfacePixels == NULL ) - { - printf( "Unable to convert loaded surface to display format! SDL Error: %s\n", SDL_GetError() ); - } - else - { - //Get image dimensions - mWidth = mSurfacePixels->w; - mHeight = mSurfacePixels->h; - } - - //Get rid of old loaded surface - SDL_FreeSurface( loadedSurface ); - } - - return mSurfacePixels != NULL; -} - -bool LTexture::loadFromPixels() -{ - //Only load if pixels exist - if( mSurfacePixels == NULL ) - { - printf( "No pixels loaded!" ); - } - else - { - //Color key image - SDL_SetColorKey( mSurfacePixels, SDL_TRUE, SDL_MapRGB( mSurfacePixels->format, 0, 0xFF, 0xFF ) ); - - //Create texture from surface pixels - mTexture = SDL_CreateTextureFromSurface( gRenderer, mSurfacePixels ); - if( mTexture == NULL ) - { - printf( "Unable to create texture from loaded pixels! SDL Error: %s\n", SDL_GetError() ); - } - else - { - //Get image dimensions - mWidth = mSurfacePixels->w; - mHeight = mSurfacePixels->h; - } - - //Get rid of old loaded surface - SDL_FreeSurface( mSurfacePixels ); - mSurfacePixels = NULL; - } - - //Return success - return mTexture != NULL; -} - -#if defined(SDL_TTF_MAJOR_VERSION) -bool LTexture::loadFromRenderedText( std::string textureText, SDL_Color textColor ) -{ - //Get rid of preexisting texture - free(); - - //Render text surface - SDL_Surface* textSurface = TTF_RenderText_Solid( gFont, textureText.c_str(), textColor ); - if( textSurface != NULL ) - { - //Create texture from surface pixels - mTexture = SDL_CreateTextureFromSurface( gRenderer, textSurface ); - if( mTexture == NULL ) - { - printf( "Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError() ); - } - else - { - //Get image dimensions - mWidth = textSurface->w; - mHeight = textSurface->h; - } - - //Get rid of old surface - SDL_FreeSurface( textSurface ); - } - else - { - printf( "Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() ); - } - - - //Return success - return mTexture != NULL; - } -#endif - -bool LTexture::createBlank( int width, int height, SDL_TextureAccess access ) -{ - //Get rid of preexisting texture - free(); - - //Create uninitialized texture - mTexture = SDL_CreateTexture( gRenderer, SDL_PIXELFORMAT_RGBA8888, access, width, height ); - if( mTexture == NULL ) - { - printf( "Unable to create streamable blank texture! SDL Error: %s\n", SDL_GetError() ); - } - else - { - mWidth = width; - mHeight = height; - } - - return mTexture != NULL; -} - -void LTexture::free() -{ - //Free texture if it exists - if( mTexture != NULL ) - { - SDL_DestroyTexture( mTexture ); - mTexture = NULL; - mWidth = 0; - mHeight = 0; - } - - //Free surface if it exists - if( mSurfacePixels != NULL ) - { - SDL_FreeSurface( mSurfacePixels ); - mSurfacePixels = NULL; - } -} - -void LTexture::setColor( Uint8 red, Uint8 green, Uint8 blue ) -{ - //Modulate texture rgb - SDL_SetTextureColorMod( mTexture, red, green, blue ); -} - -void LTexture::setBlendMode( SDL_BlendMode blending ) -{ - //Set blending function - SDL_SetTextureBlendMode( mTexture, blending ); -} - -void LTexture::setAlpha( Uint8 alpha ) -{ - //Modulate texture alpha - SDL_SetTextureAlphaMod( mTexture, alpha ); -} - -void LTexture::render( int x, int y, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip flip ) -{ - //Set rendering space and render to screen - SDL_Rect renderQuad = { x, y, mWidth, mHeight }; - - //Set clip rendering dimensions - if( clip != NULL ) - { - renderQuad.w = clip->w; - renderQuad.h = clip->h; - } - - //Render to screen - SDL_RenderCopyEx( gRenderer, mTexture, clip, &renderQuad, angle, center, flip ); -} - -int LTexture::getWidth() -{ - return mWidth; -} - -int LTexture::getHeight() -{ - return mHeight; -} - -Uint32* LTexture::getPixels32() -{ - Uint32* pixels = NULL; - - if( mSurfacePixels != NULL ) - { - pixels = static_cast( mSurfacePixels->pixels ); - } - - return pixels; -} - -Uint32 LTexture::getPixel32( Uint32 x, Uint32 y ) -{ - //Convert the pixels to 32 bit - Uint32* pixels = static_cast( mSurfacePixels->pixels ); - - //Get the pixel requested - return pixels[ ( y * getPitch32() ) + x ]; -} - -Uint32 LTexture::getPitch32() -{ - Uint32 pitch = 0; - - if( mSurfacePixels != NULL ) - { - pitch = mSurfacePixels->pitch / 4; - } - - return pitch; -} - -bool LTexture::lockTexture() -{ - bool success = true; - - //Texture is already locked - if( mRawPixels != NULL ) - { - printf( "Texture is already locked!\n" ); - success = false; - } - //Lock texture - else - { - if( SDL_LockTexture( mTexture, NULL, &mRawPixels, &mRawPitch ) != 0 ) - { - printf( "Unable to lock texture! %s\n", SDL_GetError() ); - success = false; - } - } - - return success; -} - -bool LTexture::unlockTexture() -{ - bool success = true; - - //Texture is not locked - if( mRawPixels == NULL ) - { - printf( "Texture is not locked!\n" ); - success = false; - } - //Unlock texture - else - { - SDL_UnlockTexture( mTexture ); - mRawPixels = NULL; - mRawPitch = 0; - } - - return success; -} - -void LTexture::copyRawPixels32( void* pixels ) -{ - //Texture is locked - if( mRawPixels != NULL ) - { - //Copy to locked pixels - memcpy( mRawPixels, pixels, mRawPitch * mHeight ); - } -} - -bool init() -{ - //Initialization flag - bool success = true; - - //Initialize SDL - if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) - { - SDL_Log( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() ); - success = false; - } - else - { - //Set texture filtering to linear - if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" ) ) - { - SDL_Log( "Warning: Linear texture filtering not enabled!" ); - } - - //Get device display mode - SDL_DisplayMode displayMode; - if( SDL_GetCurrentDisplayMode( 0, &displayMode ) == 0 ) - { - gScreenRect.w = displayMode.w; - gScreenRect.h = displayMode.h; - } - - //Create window - gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, gScreenRect.w, gScreenRect.h, SDL_WINDOW_SHOWN ); - if( gWindow == NULL ) - { - SDL_Log( "Window could not be created! SDL Error: %s\n", SDL_GetError() ); - success = false; - } - else - { - //Create renderer for window - gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC ); - if( gRenderer == NULL ) - { - SDL_Log( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() ); - success = false; - } - else - { - //Initialize renderer color - SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); - } - } - } - - return success; -} - -bool loadMedia() -{ - //Loading success flag - bool success = true; - - //Load splash texture - if( !gSplashTexture.loadFromFile( "hello.bmp" ) ) - { - SDL_Log( "Failed to load splash texture!\n" ); - success = false; - } - - return success; -} - -void close() -{ - //Free loaded images - gSplashTexture.free(); - - //Destroy window - SDL_DestroyRenderer( gRenderer ); - SDL_DestroyWindow( gWindow ); - gWindow = NULL; - gRenderer = NULL; - - //Quit SDL subsystems - SDL_Quit(); -} - -int main( int argc, char* args[] ) -{ - //Start up SDL and create window - if( !init() ) - { - SDL_Log( "Failed to initialize!\n" ); - } - else - { - //Load media - if( !loadMedia() ) - { - SDL_Log( "Failed to load media!\n" ); - } - else - { - //Main loop flag - bool quit = false; - - //Event handler - SDL_Event e; - - //While application is running - while( !quit ) - { - //Handle events on queue - while( SDL_PollEvent( &e ) != 0 ) - { - //User requests quit - if( e.type == SDL_QUIT ) - { - quit = true; - } - } - - //Clear screen - SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF ); - SDL_RenderClear( gRenderer ); - - //Render splash - gSplashTexture.render( ( gScreenRect.w - gSplashTexture.getWidth() ) / 2, ( gScreenRect.h - gSplashTexture.getHeight() ) / 2 ); - - //Update screen - SDL_RenderPresent( gRenderer ); - } - } - } - - //Free resources and close SDL - close(); - - return 0; -} diff --git a/ios/fheroes2.xcodeproj/project.pbxproj b/ios/fheroes2.xcodeproj/project.pbxproj index fff4d0f7cbe..affd9c5e355 100644 --- a/ios/fheroes2.xcodeproj/project.pbxproj +++ b/ios/fheroes2.xcodeproj/project.pbxproj @@ -13,8 +13,249 @@ EA67D2C829FE04B70004F40F /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D2B329FE04380004F40F /* SDL2.framework */; }; EA67D2C929FE04B70004F40F /* SDL2.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D2B329FE04380004F40F /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; EA67D2CC29FE05030004F40F /* SDL_uikit_main.c in Sources */ = {isa = PBXBuildFile; fileRef = EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */; }; - EA67D2CE29FE05180004F40F /* 52_hello_mobile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */; }; - EA67D2D029FE051D0004F40F /* hello.bmp in Resources */ = {isa = PBXBuildFile; fileRef = EA67D2CF29FE051D0004F40F /* hello.bmp */; }; + EA67D4D229FE09D20004F40F /* Makefile.mingw in Resources */ = {isa = PBXBuildFile; fileRef = EA67D2EF29FE09D20004F40F /* Makefile.mingw */; }; + EA67D4D329FE09D20004F40F /* Makefile.vita in Resources */ = {isa = PBXBuildFile; fileRef = EA67D2F029FE09D20004F40F /* Makefile.vita */; }; + EA67D4E829FE09D20004F40F /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = EA67D30729FE09D20004F40F /* Makefile */; }; + EA67D4E929FE09D20004F40F /* Makefile.switch in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30829FE09D20004F40F /* Makefile.switch */; }; + EA67D4EA29FE09D20004F40F /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = EA67D30929FE09D20004F40F /* Makefile */; }; + EA67D4EB29FE09D20004F40F /* fheroes2.icns in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30B29FE09D20004F40F /* fheroes2.icns */; }; + EA67D4EC29FE09D20004F40F /* fheroes2.png in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30C29FE09D20004F40F /* fheroes2.png */; }; + EA67D4ED29FE09D20004F40F /* fheroes2.rc in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30D29FE09D20004F40F /* fheroes2.rc */; }; + EA67D4EE29FE09D20004F40F /* fheroes2.ico in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30E29FE09D20004F40F /* fheroes2.ico */; }; + EA67D4EF29FE09D20004F40F /* Info.plist.in in Resources */ = {isa = PBXBuildFile; fileRef = EA67D30F29FE09D20004F40F /* Info.plist.in */; }; + EA67D4F029FE09D20004F40F /* Makefile.osx in Resources */ = {isa = PBXBuildFile; fileRef = EA67D31029FE09D20004F40F /* Makefile.osx */; }; + EA67D4F129FE09D20004F40F /* agg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31329FE09D20004F40F /* agg.cpp */; }; + EA67D4F229FE09D20004F40F /* m82.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31529FE09D20004F40F /* m82.cpp */; }; + EA67D4F329FE09D20004F40F /* bin_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31829FE09D20004F40F /* bin_info.cpp */; }; + EA67D4F429FE09D20004F40F /* xmi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31B29FE09D20004F40F /* xmi.cpp */; }; + EA67D4F529FE09D20004F40F /* icn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31D29FE09D20004F40F /* icn.cpp */; }; + EA67D4F629FE09D20004F40F /* mus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D31E29FE09D20004F40F /* mus.cpp */; }; + EA67D4F729FE09D20004F40F /* agg_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32029FE09D20004F40F /* agg_image.cpp */; }; + EA67D4F829FE09D20004F40F /* battle_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32329FE09D20004F40F /* battle_main.cpp */; }; + EA67D4F929FE09D20004F40F /* battle_only.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32629FE09D20004F40F /* battle_only.cpp */; }; + EA67D4FA29FE09D20004F40F /* battle_pathfinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32729FE09D20004F40F /* battle_pathfinding.cpp */; }; + EA67D4FB29FE09D20004F40F /* battle_board.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32A29FE09D20004F40F /* battle_board.cpp */; }; + EA67D4FC29FE09D20004F40F /* battle_army.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32B29FE09D20004F40F /* battle_army.cpp */; }; + EA67D4FD29FE09D20004F40F /* battle_arena.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32C29FE09D20004F40F /* battle_arena.cpp */; }; + EA67D4FE29FE09D20004F40F /* battle_tower.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D32F29FE09D20004F40F /* battle_tower.cpp */; }; + EA67D4FF29FE09D20004F40F /* battle_bridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33029FE09D20004F40F /* battle_bridge.cpp */; }; + EA67D50029FE09D20004F40F /* battle_troop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33129FE09D20004F40F /* battle_troop.cpp */; }; + EA67D50129FE09D20004F40F /* battle_dialogs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33329FE09D20004F40F /* battle_dialogs.cpp */; }; + EA67D50229FE09D20004F40F /* battle_cell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33529FE09D20004F40F /* battle_cell.cpp */; }; + EA67D50329FE09D20004F40F /* battle_catapult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33629FE09D20004F40F /* battle_catapult.cpp */; }; + EA67D50429FE09D20004F40F /* battle_command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33829FE09D20004F40F /* battle_command.cpp */; }; + EA67D50529FE09D20004F40F /* battle_interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33B29FE09D20004F40F /* battle_interface.cpp */; }; + EA67D50629FE09D20004F40F /* battle_animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33C29FE09D20004F40F /* battle_animation.cpp */; }; + EA67D50729FE09D20004F40F /* battle_grave.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D33D29FE09D20004F40F /* battle_grave.cpp */; }; + EA67D50829FE09D20004F40F /* battle_action.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34129FE09D20004F40F /* battle_action.cpp */; }; + EA67D50929FE09D20004F40F /* mp2_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34429FE09D20004F40F /* mp2_helper.cpp */; }; + EA67D50A29FE09D20004F40F /* mp2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34529FE09D20004F40F /* mp2.cpp */; }; + EA67D50B29FE09D20004F40F /* maps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34729FE09D20004F40F /* maps.cpp */; }; + EA67D50C29FE09D20004F40F /* visit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34929FE09D20004F40F /* visit.cpp */; }; + EA67D50D29FE09D20004F40F /* ground.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34A29FE09D20004F40F /* ground.cpp */; }; + EA67D50E29FE09D20004F40F /* maps_fileinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D34B29FE09D20004F40F /* maps_fileinfo.cpp */; }; + EA67D50F29FE09D20004F40F /* maps_objects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D35129FE09D20004F40F /* maps_objects.cpp */; }; + EA67D51029FE09D20004F40F /* maps_tiles.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D35229FE09D20004F40F /* maps_tiles.cpp */; }; + EA67D51129FE09D20004F40F /* maps_tiles_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D35629FE09D20004F40F /* maps_tiles_helper.cpp */; }; + EA67D51229FE09D20004F40F /* position.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D35829FE09D20004F40F /* position.cpp */; }; + EA67D51429FE09D20004F40F /* profit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36029FE09D20004F40F /* profit.cpp */; }; + EA67D51529FE09D20004F40F /* kingdom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36129FE09D20004F40F /* kingdom.cpp */; }; + EA67D51629FE09D20004F40F /* color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36229FE09D20004F40F /* color.cpp */; }; + EA67D51729FE09D20004F40F /* view_world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36329FE09D20004F40F /* view_world.cpp */; }; + EA67D51829FE09D20004F40F /* kingdom_overview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36429FE09D20004F40F /* kingdom_overview.cpp */; }; + EA67D51929FE09D20004F40F /* puzzle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36729FE09D20004F40F /* puzzle.cpp */; }; + EA67D51A29FE09D20004F40F /* speed.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36829FE09D20004F40F /* speed.cpp */; }; + EA67D51B29FE09D20004F40F /* payment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36A29FE09D20004F40F /* payment.cpp */; }; + EA67D51C29FE09D20004F40F /* luck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36C29FE09D20004F40F /* luck.cpp */; }; + EA67D51D29FE09D20004F40F /* race.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36D29FE09D20004F40F /* race.cpp */; }; + EA67D51E29FE09D20004F40F /* week.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D36F29FE09D20004F40F /* week.cpp */; }; + EA67D51F29FE09D20004F40F /* morale.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37029FE09D20004F40F /* morale.cpp */; }; + EA67D52029FE09D20004F40F /* experience.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37329FE09D20004F40F /* experience.cpp */; }; + EA67D52129FE09D20004F40F /* heroes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37529FE09D20004F40F /* heroes.cpp */; }; + EA67D52229FE09D20004F40F /* heroes_recruits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37729FE09D20004F40F /* heroes_recruits.cpp */; }; + EA67D52329FE09D20004F40F /* heroes_meeting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37929FE09D20004F40F /* heroes_meeting.cpp */; }; + EA67D52429FE09D20004F40F /* heroes_spell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37B29FE09D20004F40F /* heroes_spell.cpp */; }; + EA67D52529FE09D20004F40F /* heroes_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D37D29FE09D20004F40F /* heroes_base.cpp */; }; + EA67D52629FE09D20004F40F /* heroes_action.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38029FE09D20004F40F /* heroes_action.cpp */; }; + EA67D52729FE09D20004F40F /* route.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38129FE09D20004F40F /* route.cpp */; }; + EA67D52829FE09D20004F40F /* heroes_move.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38229FE09D20004F40F /* heroes_move.cpp */; }; + EA67D52929FE09D20004F40F /* skill.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38329FE09D20004F40F /* skill.cpp */; }; + EA67D52A29FE09D20004F40F /* direction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38629FE09D20004F40F /* direction.cpp */; }; + EA67D52B29FE09D20004F40F /* heroes_indicator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38729FE09D20004F40F /* heroes_indicator.cpp */; }; + EA67D52C29FE09D20004F40F /* heroes_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38829FE09D20004F40F /* heroes_dialog.cpp */; }; + EA67D52D29FE09D20004F40F /* spell_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38C29FE09D20004F40F /* spell_info.cpp */; }; + EA67D52E29FE09D20004F40F /* spell_book.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D38E29FE09D20004F40F /* spell_book.cpp */; }; + EA67D52F29FE09D20004F40F /* spell_storage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39029FE09D20004F40F /* spell_storage.cpp */; }; + EA67D53029FE09D20004F40F /* spell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39129FE09D20004F40F /* spell.cpp */; }; + EA67D53129FE09D20004F40F /* army_ui_helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39529FE09D20004F40F /* army_ui_helper.cpp */; }; + EA67D53229FE09D20004F40F /* army_bar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39629FE09D20004F40F /* army_bar.cpp */; }; + EA67D53329FE09D20004F40F /* army.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39729FE09D20004F40F /* army.cpp */; }; + EA67D53429FE09D20004F40F /* army_troop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39A29FE09D20004F40F /* army_troop.cpp */; }; + EA67D53529FE09D20004F40F /* objwatr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D39D29FE09D20004F40F /* objwatr.cpp */; }; + EA67D53629FE09D20004F40F /* objdsrt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A129FE09D20004F40F /* objdsrt.cpp */; }; + EA67D53729FE09D20004F40F /* objsnow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A229FE09D20004F40F /* objsnow.cpp */; }; + EA67D53829FE09D20004F40F /* trees.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A329FE09D20004F40F /* trees.cpp */; }; + EA67D53929FE09D20004F40F /* objlava.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A529FE09D20004F40F /* objlava.cpp */; }; + EA67D53A29FE09D20004F40F /* objtown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A829FE09D20004F40F /* objtown.cpp */; }; + EA67D53B29FE09D20004F40F /* objdirt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3A929FE09D20004F40F /* objdirt.cpp */; }; + EA67D53C29FE09D20004F40F /* objmult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3AB29FE09D20004F40F /* objmult.cpp */; }; + EA67D53D29FE09D20004F40F /* mounts.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3AD29FE09D20004F40F /* mounts.cpp */; }; + EA67D53E29FE09D20004F40F /* objgras.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3AE29FE09D20004F40F /* objgras.cpp */; }; + EA67D53F29FE09D20004F40F /* objswmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3B029FE09D20004F40F /* objswmp.cpp */; }; + EA67D54029FE09D20004F40F /* objcrck.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3B229FE09D20004F40F /* objcrck.cpp */; }; + EA67D54129FE09D20004F40F /* objxloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3B529FE09D20004F40F /* objxloc.cpp */; }; + EA67D54229FE09D20004F40F /* world_pathfinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3B729FE09D20004F40F /* world_pathfinding.cpp */; }; + EA67D54329FE09D20004F40F /* world_loadmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3B929FE09D20004F40F /* world_loadmap.cpp */; }; + EA67D54429FE09D20004F40F /* world_regions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3BA29FE09D20004F40F /* world_regions.cpp */; }; + EA67D54529FE09D20004F40F /* world.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3BC29FE09D20004F40F /* world.cpp */; }; + EA67D54629FE09D20004F40F /* game_newgame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3BF29FE09D20004F40F /* game_newgame.cpp */; }; + EA67D54729FE09D20004F40F /* game_static.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3C029FE09D20004F40F /* game_static.cpp */; }; + EA67D54829FE09D20004F40F /* game_over.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3C229FE09D20004F40F /* game_over.cpp */; }; + EA67D54929FE09D20004F40F /* difficulty.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3C429FE09D20004F40F /* difficulty.cpp */; }; + EA67D54A29FE09D20004F40F /* game_hotkeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3CA29FE09D20004F40F /* game_hotkeys.cpp */; }; + EA67D54B29FE09D20004F40F /* game_credits.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3CB29FE09D20004F40F /* game_credits.cpp */; }; + EA67D54C29FE09D20004F40F /* game_highscores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3CC29FE09D20004F40F /* game_highscores.cpp */; }; + EA67D54D29FE09D20004F40F /* game_startgame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3CE29FE09D20004F40F /* game_startgame.cpp */; }; + EA67D54E29FE09D20004F40F /* game_campaign.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3CF29FE09D20004F40F /* game_campaign.cpp */; }; + EA67D54F29FE09D20004F40F /* game_mainmenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D129FE09D20004F40F /* game_mainmenu.cpp */; }; + EA67D55029FE09D20004F40F /* fheroes2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D329FE09D20004F40F /* fheroes2.cpp */; }; + EA67D55129FE09D20004F40F /* game_video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D429FE09D20004F40F /* game_video.cpp */; }; + EA67D55229FE09D20004F40F /* game_io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D629FE09D20004F40F /* game_io.cpp */; }; + EA67D55329FE09D20004F40F /* game_loadgame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D729FE09D20004F40F /* game_loadgame.cpp */; }; + EA67D55429FE09D20004F40F /* game_interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D829FE09D20004F40F /* game_interface.cpp */; }; + EA67D55529FE09D20004F40F /* game_logo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3D929FE09D20004F40F /* game_logo.cpp */; }; + EA67D55629FE09D20004F40F /* game_delays.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3DB29FE09D20004F40F /* game_delays.cpp */; }; + EA67D55729FE09D20004F40F /* highscores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3DD29FE09D20004F40F /* highscores.cpp */; }; + EA67D55829FE09D20004F40F /* game_mainmenu_ui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3DE29FE09D20004F40F /* game_mainmenu_ui.cpp */; }; + EA67D55929FE09D20004F40F /* game_scenarioinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3E129FE09D20004F40F /* game_scenarioinfo.cpp */; }; + EA67D55A29FE09D20004F40F /* game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3E229FE09D20004F40F /* game.cpp */; }; + EA67D55B29FE09D20004F40F /* dialog_selectcount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3E729FE09D20004F40F /* dialog_selectcount.cpp */; }; + EA67D55C29FE09D20004F40F /* dialog_frameborder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3E929FE09D20004F40F /* dialog_frameborder.cpp */; }; + EA67D55D29FE09D20004F40F /* dialog_selectfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3EB29FE09D20004F40F /* dialog_selectfile.cpp */; }; + EA67D55E29FE09D20004F40F /* dialog_arena.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3ED29FE09D20004F40F /* dialog_arena.cpp */; }; + EA67D55F29FE09D20004F40F /* dialog_language_selection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3EE29FE09D20004F40F /* dialog_language_selection.cpp */; }; + EA67D56029FE09D20004F40F /* dialog_audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3EF29FE09D20004F40F /* dialog_audio.cpp */; }; + EA67D56129FE09D20004F40F /* dialog_gameinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F029FE09D20004F40F /* dialog_gameinfo.cpp */; }; + EA67D56229FE09D20004F40F /* dialog_artifact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F129FE09D20004F40F /* dialog_artifact.cpp */; }; + EA67D56329FE09D20004F40F /* dialog_game_settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F229FE09D20004F40F /* dialog_game_settings.cpp */; }; + EA67D56429FE09D20004F40F /* dialog_adventure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F329FE09D20004F40F /* dialog_adventure.cpp */; }; + EA67D56529FE09D20004F40F /* dialog_graphics_settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F429FE09D20004F40F /* dialog_graphics_settings.cpp */; }; + EA67D56629FE09D20004F40F /* dialog_resolution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F529FE09D20004F40F /* dialog_resolution.cpp */; }; + EA67D56729FE09D20004F40F /* dialog_system_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F829FE09D20004F40F /* dialog_system_options.cpp */; }; + EA67D56829FE09D20004F40F /* dialog_marketplace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3F929FE09D20004F40F /* dialog_marketplace.cpp */; }; + EA67D56929FE09D20004F40F /* dialog_recruit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FA29FE09D20004F40F /* dialog_recruit.cpp */; }; + EA67D56A29FE09D20004F40F /* dialog_box.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FB29FE09D20004F40F /* dialog_box.cpp */; }; + EA67D56B29FE09D20004F40F /* dialog_armyinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FC29FE09D20004F40F /* dialog_armyinfo.cpp */; }; + EA67D56C29FE09D20004F40F /* dialog_quickinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FD29FE09D20004F40F /* dialog_quickinfo.cpp */; }; + EA67D56D29FE09D20004F40F /* dialog_levelup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FE29FE09D20004F40F /* dialog_levelup.cpp */; }; + EA67D56E29FE09D20004F40F /* dialog_buyboat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D3FF29FE09D20004F40F /* dialog_buyboat.cpp */; }; + EA67D56F29FE09D20004F40F /* dialog_selectitems.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40029FE09D20004F40F /* dialog_selectitems.cpp */; }; + EA67D57029FE09D20004F40F /* dialog_giftresources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40129FE09D20004F40F /* dialog_giftresources.cpp */; }; + EA67D57129FE09D20004F40F /* dialog_selectscenario.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40429FE09D20004F40F /* dialog_selectscenario.cpp */; }; + EA67D57229FE09D20004F40F /* dialog_thievesguild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40529FE09D20004F40F /* dialog_thievesguild.cpp */; }; + EA67D57329FE09D20004F40F /* dialog_hotkeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40729FE09D20004F40F /* dialog_hotkeys.cpp */; }; + EA67D57429FE09D20004F40F /* dialog_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40829FE09D20004F40F /* dialog_file.cpp */; }; + EA67D57529FE09D20004F40F /* dialog_chest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40929FE09D20004F40F /* dialog_chest.cpp */; }; + EA67D57629FE09D20004F40F /* dialog_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D40A29FE09D20004F40F /* dialog_message.cpp */; }; + EA67D57729FE09D20004F40F /* bitmodes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41029FE09D20004F40F /* bitmodes.cpp */; }; + EA67D57829FE09D20004F40F /* players.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41329FE09D20004F40F /* players.cpp */; }; + EA67D57929FE09D20004F40F /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41529FE09D20004F40F /* settings.cpp */; }; + EA67D57A29FE09D20004F40F /* audio_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41829FE09D20004F40F /* audio_manager.cpp */; }; + EA67D57B29FE09D20004F40F /* h2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41A29FE09D20004F40F /* h2d.cpp */; }; + EA67D57C29FE09D20004F40F /* ai_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41D29FE09D20004F40F /* ai_common.cpp */; }; + EA67D57D29FE09D20004F40F /* ai_hero_action.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D41E29FE09D20004F40F /* ai_hero_action.cpp */; }; + EA67D57E29FE09D20004F40F /* ai_normal_kingdom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42129FE09D20004F40F /* ai_normal_kingdom.cpp */; }; + EA67D57F29FE09D20004F40F /* ai_normal_battle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42329FE09D20004F40F /* ai_normal_battle.cpp */; }; + EA67D58029FE09D20004F40F /* ai_normal_spell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42429FE09D20004F40F /* ai_normal_spell.cpp */; }; + EA67D58129FE09D20004F40F /* ai_normal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42529FE09D20004F40F /* ai_normal.cpp */; }; + EA67D58229FE09D20004F40F /* ai_normal_hero.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42629FE09D20004F40F /* ai_normal_hero.cpp */; }; + EA67D58329FE09D20004F40F /* ai_normal_castle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42729FE09D20004F40F /* ai_normal_castle.cpp */; }; + EA67D58429FE09D20004F40F /* ai_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42829FE09D20004F40F /* ai_base.cpp */; }; + EA67D58529FE09D20004F40F /* ui_kingdom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42A29FE09D20004F40F /* ui_kingdom.cpp */; }; + EA67D58629FE09D20004F40F /* ui_scrollbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42C29FE09D20004F40F /* ui_scrollbar.cpp */; }; + EA67D58729FE09D20004F40F /* interface_buttons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42E29FE09D20004F40F /* interface_buttons.cpp */; }; + EA67D58829FE09D20004F40F /* ui_tool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D42F29FE09D20004F40F /* ui_tool.cpp */; }; + EA67D58929FE09D20004F40F /* player_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43029FE09D20004F40F /* player_info.cpp */; }; + EA67D58A29FE09D20004F40F /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43129FE09D20004F40F /* text.cpp */; }; + EA67D58B29FE09D20004F40F /* interface_status.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43629FE09D20004F40F /* interface_status.cpp */; }; + EA67D58C29FE09D20004F40F /* ui_castle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43729FE09D20004F40F /* ui_castle.cpp */; }; + EA67D58D29FE09D20004F40F /* interface_cpanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43829FE09D20004F40F /* interface_cpanel.cpp */; }; + EA67D58E29FE09D20004F40F /* ui_monster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43929FE09D20004F40F /* ui_monster.cpp */; }; + EA67D58F29FE09D20004F40F /* ui_keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43A29FE09D20004F40F /* ui_keyboard.cpp */; }; + EA67D59029FE09D20004F40F /* interface_icons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43E29FE09D20004F40F /* interface_icons.cpp */; }; + EA67D59129FE09D20004F40F /* statusbar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D43F29FE09D20004F40F /* statusbar.cpp */; }; + EA67D59229FE09D20004F40F /* ui_campaign.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44129FE09D20004F40F /* ui_campaign.cpp */; }; + EA67D59329FE09D20004F40F /* ui_option_item.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44429FE09D20004F40F /* ui_option_item.cpp */; }; + EA67D59429FE09D20004F40F /* ui_window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44729FE09D20004F40F /* ui_window.cpp */; }; + EA67D59529FE09D20004F40F /* ui_base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44829FE09D20004F40F /* ui_base.cpp */; }; + EA67D59629FE09D20004F40F /* interface_radar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44A29FE09D20004F40F /* interface_radar.cpp */; }; + EA67D59729FE09D20004F40F /* ui_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D44B29FE09D20004F40F /* ui_dialog.cpp */; }; + EA67D59829FE09D20004F40F /* interface_border.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45129FE09D20004F40F /* interface_border.cpp */; }; + EA67D59929FE09D20004F40F /* ui_font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45229FE09D20004F40F /* ui_font.cpp */; }; + EA67D59A29FE09D20004F40F /* interface_events.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45529FE09D20004F40F /* interface_events.cpp */; }; + EA67D59B29FE09D20004F40F /* ui_language.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45629FE09D20004F40F /* ui_language.cpp */; }; + EA67D59C29FE09D20004F40F /* interface_focus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45829FE09D20004F40F /* interface_focus.cpp */; }; + EA67D59D29FE09D20004F40F /* skill_bar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45A29FE09D20004F40F /* skill_bar.cpp */; }; + EA67D59E29FE09D20004F40F /* cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45C29FE09D20004F40F /* cursor.cpp */; }; + EA67D59F29FE09D20004F40F /* ui_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D45F29FE09D20004F40F /* ui_text.cpp */; }; + EA67D5A029FE09D20004F40F /* ui_button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46029FE09D20004F40F /* ui_button.cpp */; }; + EA67D5A129FE09D20004F40F /* interface_gamearea.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46429FE09D20004F40F /* interface_gamearea.cpp */; }; + EA67D5A229FE09D20004F40F /* campaign_scenariodata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46829FE09D20004F40F /* campaign_scenariodata.cpp */; }; + EA67D5A329FE09D20004F40F /* campaign_data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46929FE09D20004F40F /* campaign_data.cpp */; }; + EA67D5A429FE09D20004F40F /* campaign_savedata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46A29FE09D20004F40F /* campaign_savedata.cpp */; }; + EA67D5A529FE09D20004F40F /* castle_dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46D29FE09D20004F40F /* castle_dialog.cpp */; }; + EA67D5A629FE09D20004F40F /* castle_town.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D46E29FE09D20004F40F /* castle_town.cpp */; }; + EA67D5A729FE09D20004F40F /* castle_building.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47029FE09D20004F40F /* castle_building.cpp */; }; + EA67D5A829FE09D20004F40F /* buildinginfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47129FE09D20004F40F /* buildinginfo.cpp */; }; + EA67D5A929FE09D20004F40F /* mageguild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47229FE09D20004F40F /* mageguild.cpp */; }; + EA67D5AA29FE09D20004F40F /* castle_building_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47429FE09D20004F40F /* castle_building_info.cpp */; }; + EA67D5AB29FE09D20004F40F /* castle_tavern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47529FE09D20004F40F /* castle_tavern.cpp */; }; + EA67D5AC29FE09D20004F40F /* captain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47629FE09D20004F40F /* captain.cpp */; }; + EA67D5AD29FE09D20004F40F /* castle_well.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47829FE09D20004F40F /* castle_well.cpp */; }; + EA67D5AE29FE09D20004F40F /* castle_mageguild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47A29FE09D20004F40F /* castle_mageguild.cpp */; }; + EA67D5AF29FE09D20004F40F /* castle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47C29FE09D20004F40F /* castle.cpp */; }; + EA67D5B029FE09D20004F40F /* artifact_ultimate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D47F29FE09D20004F40F /* artifact_ultimate.cpp */; }; + EA67D5B129FE09D20004F40F /* artifact_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48029FE09D20004F40F /* artifact_info.cpp */; }; + EA67D5B229FE09D20004F40F /* resource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48129FE09D20004F40F /* resource.cpp */; }; + EA67D5B329FE09D20004F40F /* artifact.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48229FE09D20004F40F /* artifact.cpp */; }; + EA67D5B429FE09D20004F40F /* monster_info.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48729FE09D20004F40F /* monster_info.cpp */; }; + EA67D5B529FE09D20004F40F /* monster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48929FE09D20004F40F /* monster.cpp */; }; + EA67D5B629FE09D20004F40F /* monster_anim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D48C29FE09D20004F40F /* monster_anim.cpp */; }; + EA67D5B929FE09D20004F40F /* tinyconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49029FE09D20004F40F /* tinyconfig.cpp */; }; + EA67D5BA29FE09D20004F40F /* serialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49229FE09D20004F40F /* serialize.cpp */; }; + EA67D5BB29FE09D20004F40F /* thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49429FE09D20004F40F /* thread.cpp */; }; + EA67D5BC29FE09D20004F40F /* h2d_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49629FE09D20004F40F /* h2d_file.cpp */; }; + EA67D5BE29FE09D20004F40F /* image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49929FE09D20004F40F /* image.cpp */; }; + EA67D5BF29FE09D20004F40F /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49A29FE09D20004F40F /* logging.cpp */; }; + EA67D5C029FE09D20004F40F /* core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49C29FE09D20004F40F /* core.cpp */; }; + EA67D5C129FE09D20004F40F /* smk_decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49D29FE09D20004F40F /* smk_decoder.cpp */; }; + EA67D5C229FE09D20004F40F /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49E29FE09D20004F40F /* Makefile */; }; + EA67D5C329FE09D20004F40F /* screen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D49F29FE09D20004F40F /* screen.cpp */; }; + EA67D5C429FE09D20004F40F /* image_tool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A129FE09D20004F40F /* image_tool.cpp */; }; + EA67D5C529FE09D20004F40F /* audio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A229FE09D20004F40F /* audio.cpp */; }; + EA67D5C629FE09D20004F40F /* pal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A429FE09D20004F40F /* pal.cpp */; }; + EA67D5C729FE09D20004F40F /* translations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A529FE09D20004F40F /* translations.cpp */; }; + EA67D5C829FE09D20004F40F /* zzlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A729FE09D20004F40F /* zzlib.cpp */; }; + EA67D5C929FE09D20004F40F /* image_palette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A829FE09D20004F40F /* image_palette.cpp */; }; + EA67D5CA29FE09D20004F40F /* dir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4A929FE09D20004F40F /* dir.cpp */; }; + EA67D5CB29FE09D20004F40F /* rand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4AB29FE09D20004F40F /* rand.cpp */; }; + EA67D5CC29FE09D20004F40F /* system.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4AC29FE09D20004F40F /* system.cpp */; }; + EA67D5CD29FE09D20004F40F /* agg_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4AD29FE09D20004F40F /* agg_file.cpp */; }; + EA67D5CE29FE09D20004F40F /* tools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4AF29FE09D20004F40F /* tools.cpp */; }; + EA67D5CF29FE09D20004F40F /* localevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4B529FE09D20004F40F /* localevent.cpp */; }; + EA67D5D029FE09D20004F40F /* xmi2mid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4B829FE09D20004F40F /* xmi2mid.cpp */; }; + EA67D5D129FE09D20004F40F /* timing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4BB29FE09D20004F40F /* timing.cpp */; }; + EA67D5D229FE09D20004F40F /* configure.ac in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4C429FE09D20004F40F /* configure.ac */; }; + EA67D5D329FE09D20004F40F /* INSTALL in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4C529FE09D20004F40F /* INSTALL */; }; + EA67D5D429FE09D20004F40F /* smacker.c in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4C629FE09D20004F40F /* smacker.c */; }; + EA67D5D529FE09D20004F40F /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = EA67D4C729FE09D20004F40F /* Makefile */; }; + EA67D5D829FE09D20004F40F /* Makefile.am in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4CA29FE09D20004F40F /* Makefile.am */; }; + EA67D5D929FE09D20004F40F /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4CB29FE09D20004F40F /* COPYING */; }; + EA67D5DA29FE09D20004F40F /* smacker.h.orig in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4CC29FE09D20004F40F /* smacker.h.orig */; }; + EA67D5DB29FE09D20004F40F /* smacker.c.orig in Resources */ = {isa = PBXBuildFile; fileRef = EA67D4CF29FE09D20004F40F /* smacker.c.orig */; }; + EA67D5F029FE0B620004F40F /* SDL3_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */; }; + EA67D5F129FE0B620004F40F /* SDL3_mixer.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + EA67D5F329FE0CD50004F40F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5F229FE0C8C0004F40F /* libz.tbd */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -95,6 +336,27 @@ remoteGlobalIDString = BECDF6BE0761BA81005FE872; remoteInfo = "Standard DMG"; }; + EA67D5E929FE0B350004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BE1FA90607AF96B2004B6283; + remoteInfo = Framework; + }; + EA67D5EB29FE0B350004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BE1FA95407AF96B2004B6283; + remoteInfo = "Static Library"; + }; + EA67D5ED29FE0B350004F40F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = BE1FA95807AF96B3004B6283; + remoteInfo = "Create DMG"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -104,6 +366,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + EA67D5F129FE0B620004F40F /* SDL3_mixer.framework in Embed Frameworks */, EA67D2C929FE04B70004F40F /* SDL2.framework in Embed Frameworks */, ); name = "Embed Frameworks"; @@ -119,8 +382,443 @@ EA5466A629FE02FF00A9D8B2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; EA67D2A229FE04380004F40F /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = "../../SDL-release-2.26.5/Xcode/SDL/SDL.xcodeproj"; sourceTree = ""; }; EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_uikit_main.c; sourceTree = ""; }; - EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 52_hello_mobile.cpp; sourceTree = ""; }; - EA67D2CF29FE051D0004F40F /* hello.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = hello.bmp; sourceTree = ""; }; + EA67D2EF29FE09D20004F40F /* Makefile.mingw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.mingw; sourceTree = ""; }; + EA67D2F029FE09D20004F40F /* Makefile.vita */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.vita; sourceTree = ""; }; + EA67D30529FE09D20004F40F /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + EA67D30729FE09D20004F40F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + EA67D30829FE09D20004F40F /* Makefile.switch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.switch; sourceTree = ""; }; + EA67D30929FE09D20004F40F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + EA67D30B29FE09D20004F40F /* fheroes2.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = fheroes2.icns; sourceTree = ""; }; + EA67D30C29FE09D20004F40F /* fheroes2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fheroes2.png; sourceTree = ""; }; + EA67D30D29FE09D20004F40F /* fheroes2.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = fheroes2.rc; sourceTree = ""; }; + EA67D30E29FE09D20004F40F /* fheroes2.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = fheroes2.ico; sourceTree = ""; }; + EA67D30F29FE09D20004F40F /* Info.plist.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist.in; sourceTree = ""; }; + EA67D31029FE09D20004F40F /* Makefile.osx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.osx; sourceTree = ""; }; + EA67D31329FE09D20004F40F /* agg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = agg.cpp; sourceTree = ""; }; + EA67D31429FE09D20004F40F /* xmi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xmi.h; sourceTree = ""; }; + EA67D31529FE09D20004F40F /* m82.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = m82.cpp; sourceTree = ""; }; + EA67D31629FE09D20004F40F /* agg_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = agg_image.h; sourceTree = ""; }; + EA67D31729FE09D20004F40F /* icn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icn.h; sourceTree = ""; }; + EA67D31829FE09D20004F40F /* bin_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bin_info.cpp; sourceTree = ""; }; + EA67D31929FE09D20004F40F /* m82.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = m82.h; sourceTree = ""; }; + EA67D31A29FE09D20004F40F /* til.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = til.h; sourceTree = ""; }; + EA67D31B29FE09D20004F40F /* xmi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmi.cpp; sourceTree = ""; }; + EA67D31C29FE09D20004F40F /* bin_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bin_info.h; sourceTree = ""; }; + EA67D31D29FE09D20004F40F /* icn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = icn.cpp; sourceTree = ""; }; + EA67D31E29FE09D20004F40F /* mus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mus.cpp; sourceTree = ""; }; + EA67D31F29FE09D20004F40F /* mus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mus.h; sourceTree = ""; }; + EA67D32029FE09D20004F40F /* agg_image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = agg_image.cpp; sourceTree = ""; }; + EA67D32129FE09D20004F40F /* agg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = agg.h; sourceTree = ""; }; + EA67D32329FE09D20004F40F /* battle_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_main.cpp; sourceTree = ""; }; + EA67D32429FE09D20004F40F /* battle_cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_cell.h; sourceTree = ""; }; + EA67D32529FE09D20004F40F /* battle_tower.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_tower.h; sourceTree = ""; }; + EA67D32629FE09D20004F40F /* battle_only.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_only.cpp; sourceTree = ""; }; + EA67D32729FE09D20004F40F /* battle_pathfinding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_pathfinding.cpp; sourceTree = ""; }; + EA67D32829FE09D20004F40F /* battle_catapult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_catapult.h; sourceTree = ""; }; + EA67D32929FE09D20004F40F /* battle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle.h; sourceTree = ""; }; + EA67D32A29FE09D20004F40F /* battle_board.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_board.cpp; sourceTree = ""; }; + EA67D32B29FE09D20004F40F /* battle_army.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_army.cpp; sourceTree = ""; }; + EA67D32C29FE09D20004F40F /* battle_arena.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_arena.cpp; sourceTree = ""; }; + EA67D32D29FE09D20004F40F /* battle_pathfinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_pathfinding.h; sourceTree = ""; }; + EA67D32E29FE09D20004F40F /* battle_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_interface.h; sourceTree = ""; }; + EA67D32F29FE09D20004F40F /* battle_tower.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_tower.cpp; sourceTree = ""; }; + EA67D33029FE09D20004F40F /* battle_bridge.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_bridge.cpp; sourceTree = ""; }; + EA67D33129FE09D20004F40F /* battle_troop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_troop.cpp; sourceTree = ""; }; + EA67D33229FE09D20004F40F /* battle_troop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_troop.h; sourceTree = ""; }; + EA67D33329FE09D20004F40F /* battle_dialogs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_dialogs.cpp; sourceTree = ""; }; + EA67D33429FE09D20004F40F /* battle_army.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_army.h; sourceTree = ""; }; + EA67D33529FE09D20004F40F /* battle_cell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_cell.cpp; sourceTree = ""; }; + EA67D33629FE09D20004F40F /* battle_catapult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_catapult.cpp; sourceTree = ""; }; + EA67D33729FE09D20004F40F /* battle_only.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_only.h; sourceTree = ""; }; + EA67D33829FE09D20004F40F /* battle_command.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_command.cpp; sourceTree = ""; }; + EA67D33929FE09D20004F40F /* battle_animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_animation.h; sourceTree = ""; }; + EA67D33A29FE09D20004F40F /* battle_board.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_board.h; sourceTree = ""; }; + EA67D33B29FE09D20004F40F /* battle_interface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_interface.cpp; sourceTree = ""; }; + EA67D33C29FE09D20004F40F /* battle_animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_animation.cpp; sourceTree = ""; }; + EA67D33D29FE09D20004F40F /* battle_grave.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_grave.cpp; sourceTree = ""; }; + EA67D33E29FE09D20004F40F /* battle_bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_bridge.h; sourceTree = ""; }; + EA67D33F29FE09D20004F40F /* battle_command.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_command.h; sourceTree = ""; }; + EA67D34029FE09D20004F40F /* battle_grave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_grave.h; sourceTree = ""; }; + EA67D34129FE09D20004F40F /* battle_action.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = battle_action.cpp; sourceTree = ""; }; + EA67D34229FE09D20004F40F /* battle_arena.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = battle_arena.h; sourceTree = ""; }; + EA67D34429FE09D20004F40F /* mp2_helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mp2_helper.cpp; sourceTree = ""; }; + EA67D34529FE09D20004F40F /* mp2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mp2.cpp; sourceTree = ""; }; + EA67D34629FE09D20004F40F /* mp2_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mp2_helper.h; sourceTree = ""; }; + EA67D34729FE09D20004F40F /* maps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maps.cpp; sourceTree = ""; }; + EA67D34829FE09D20004F40F /* visit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = visit.h; sourceTree = ""; }; + EA67D34929FE09D20004F40F /* visit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = visit.cpp; sourceTree = ""; }; + EA67D34A29FE09D20004F40F /* ground.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ground.cpp; sourceTree = ""; }; + EA67D34B29FE09D20004F40F /* maps_fileinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maps_fileinfo.cpp; sourceTree = ""; }; + EA67D34C29FE09D20004F40F /* maps_tiles_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maps_tiles_helper.h; sourceTree = ""; }; + EA67D34D29FE09D20004F40F /* maps_fileinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maps_fileinfo.h; sourceTree = ""; }; + EA67D34E29FE09D20004F40F /* maps_tiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maps_tiles.h; sourceTree = ""; }; + EA67D34F29FE09D20004F40F /* mp2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mp2.h; sourceTree = ""; }; + EA67D35029FE09D20004F40F /* pairs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pairs.h; sourceTree = ""; }; + EA67D35129FE09D20004F40F /* maps_objects.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maps_objects.cpp; sourceTree = ""; }; + EA67D35229FE09D20004F40F /* maps_tiles.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maps_tiles.cpp; sourceTree = ""; }; + EA67D35329FE09D20004F40F /* maps_objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maps_objects.h; sourceTree = ""; }; + EA67D35429FE09D20004F40F /* ground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ground.h; sourceTree = ""; }; + EA67D35529FE09D20004F40F /* maps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maps.h; sourceTree = ""; }; + EA67D35629FE09D20004F40F /* maps_tiles_helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = maps_tiles_helper.cpp; sourceTree = ""; }; + EA67D35729FE09D20004F40F /* position.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = position.h; sourceTree = ""; }; + EA67D35829FE09D20004F40F /* position.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = position.cpp; sourceTree = ""; }; + EA67D35929FE09D20004F40F /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + EA67D35B29FE09D20004F40F /* profit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profit.h; sourceTree = ""; }; + EA67D35C29FE09D20004F40F /* speed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speed.h; sourceTree = ""; }; + EA67D35D29FE09D20004F40F /* view_world.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = view_world.h; sourceTree = ""; }; + EA67D35E29FE09D20004F40F /* morale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = morale.h; sourceTree = ""; }; + EA67D35F29FE09D20004F40F /* color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color.h; sourceTree = ""; }; + EA67D36029FE09D20004F40F /* profit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = profit.cpp; sourceTree = ""; }; + EA67D36129FE09D20004F40F /* kingdom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kingdom.cpp; sourceTree = ""; }; + EA67D36229FE09D20004F40F /* color.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = color.cpp; sourceTree = ""; }; + EA67D36329FE09D20004F40F /* view_world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = view_world.cpp; sourceTree = ""; }; + EA67D36429FE09D20004F40F /* kingdom_overview.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kingdom_overview.cpp; sourceTree = ""; }; + EA67D36529FE09D20004F40F /* payment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = payment.h; sourceTree = ""; }; + EA67D36629FE09D20004F40F /* week.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = week.h; sourceTree = ""; }; + EA67D36729FE09D20004F40F /* puzzle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = puzzle.cpp; sourceTree = ""; }; + EA67D36829FE09D20004F40F /* speed.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speed.cpp; sourceTree = ""; }; + EA67D36929FE09D20004F40F /* experience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = experience.h; sourceTree = ""; }; + EA67D36A29FE09D20004F40F /* payment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = payment.cpp; sourceTree = ""; }; + EA67D36B29FE09D20004F40F /* luck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = luck.h; sourceTree = ""; }; + EA67D36C29FE09D20004F40F /* luck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = luck.cpp; sourceTree = ""; }; + EA67D36D29FE09D20004F40F /* race.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = race.cpp; sourceTree = ""; }; + EA67D36E29FE09D20004F40F /* race.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = race.h; sourceTree = ""; }; + EA67D36F29FE09D20004F40F /* week.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = week.cpp; sourceTree = ""; }; + EA67D37029FE09D20004F40F /* morale.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = morale.cpp; sourceTree = ""; }; + EA67D37129FE09D20004F40F /* puzzle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = puzzle.h; sourceTree = ""; }; + EA67D37229FE09D20004F40F /* kingdom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kingdom.h; sourceTree = ""; }; + EA67D37329FE09D20004F40F /* experience.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = experience.cpp; sourceTree = ""; }; + EA67D37529FE09D20004F40F /* heroes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes.cpp; sourceTree = ""; }; + EA67D37629FE09D20004F40F /* skill_static.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = skill_static.h; sourceTree = ""; }; + EA67D37729FE09D20004F40F /* heroes_recruits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_recruits.cpp; sourceTree = ""; }; + EA67D37829FE09D20004F40F /* skill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = skill.h; sourceTree = ""; }; + EA67D37929FE09D20004F40F /* heroes_meeting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_meeting.cpp; sourceTree = ""; }; + EA67D37A29FE09D20004F40F /* route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = route.h; sourceTree = ""; }; + EA67D37B29FE09D20004F40F /* heroes_spell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_spell.cpp; sourceTree = ""; }; + EA67D37C29FE09D20004F40F /* heroes_indicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heroes_indicator.h; sourceTree = ""; }; + EA67D37D29FE09D20004F40F /* heroes_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_base.cpp; sourceTree = ""; }; + EA67D37E29FE09D20004F40F /* heroes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heroes.h; sourceTree = ""; }; + EA67D37F29FE09D20004F40F /* direction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = direction.h; sourceTree = ""; }; + EA67D38029FE09D20004F40F /* heroes_action.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_action.cpp; sourceTree = ""; }; + EA67D38129FE09D20004F40F /* route.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = route.cpp; sourceTree = ""; }; + EA67D38229FE09D20004F40F /* heroes_move.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_move.cpp; sourceTree = ""; }; + EA67D38329FE09D20004F40F /* skill.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skill.cpp; sourceTree = ""; }; + EA67D38429FE09D20004F40F /* heroes_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heroes_base.h; sourceTree = ""; }; + EA67D38529FE09D20004F40F /* heroes_recruits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = heroes_recruits.h; sourceTree = ""; }; + EA67D38629FE09D20004F40F /* direction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = direction.cpp; sourceTree = ""; }; + EA67D38729FE09D20004F40F /* heroes_indicator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_indicator.cpp; sourceTree = ""; }; + EA67D38829FE09D20004F40F /* heroes_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = heroes_dialog.cpp; sourceTree = ""; }; + EA67D38A29FE09D20004F40F /* spell_storage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spell_storage.h; sourceTree = ""; }; + EA67D38B29FE09D20004F40F /* spell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spell.h; sourceTree = ""; }; + EA67D38C29FE09D20004F40F /* spell_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spell_info.cpp; sourceTree = ""; }; + EA67D38D29FE09D20004F40F /* spell_book.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spell_book.h; sourceTree = ""; }; + EA67D38E29FE09D20004F40F /* spell_book.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spell_book.cpp; sourceTree = ""; }; + EA67D38F29FE09D20004F40F /* spell_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spell_info.h; sourceTree = ""; }; + EA67D39029FE09D20004F40F /* spell_storage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spell_storage.cpp; sourceTree = ""; }; + EA67D39129FE09D20004F40F /* spell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spell.cpp; sourceTree = ""; }; + EA67D39329FE09D20004F40F /* army_ui_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = army_ui_helper.h; sourceTree = ""; }; + EA67D39429FE09D20004F40F /* army_troop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = army_troop.h; sourceTree = ""; }; + EA67D39529FE09D20004F40F /* army_ui_helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = army_ui_helper.cpp; sourceTree = ""; }; + EA67D39629FE09D20004F40F /* army_bar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = army_bar.cpp; sourceTree = ""; }; + EA67D39729FE09D20004F40F /* army.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = army.cpp; sourceTree = ""; }; + EA67D39829FE09D20004F40F /* army_bar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = army_bar.h; sourceTree = ""; }; + EA67D39929FE09D20004F40F /* army.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = army.h; sourceTree = ""; }; + EA67D39A29FE09D20004F40F /* army_troop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = army_troop.cpp; sourceTree = ""; }; + EA67D39C29FE09D20004F40F /* objtown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objtown.h; sourceTree = ""; }; + EA67D39D29FE09D20004F40F /* objwatr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objwatr.cpp; sourceTree = ""; }; + EA67D39E29FE09D20004F40F /* objdirt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objdirt.h; sourceTree = ""; }; + EA67D39F29FE09D20004F40F /* objlava.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objlava.h; sourceTree = ""; }; + EA67D3A029FE09D20004F40F /* objgras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objgras.h; sourceTree = ""; }; + EA67D3A129FE09D20004F40F /* objdsrt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objdsrt.cpp; sourceTree = ""; }; + EA67D3A229FE09D20004F40F /* objsnow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objsnow.cpp; sourceTree = ""; }; + EA67D3A329FE09D20004F40F /* trees.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trees.cpp; sourceTree = ""; }; + EA67D3A429FE09D20004F40F /* objcrck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objcrck.h; sourceTree = ""; }; + EA67D3A529FE09D20004F40F /* objlava.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objlava.cpp; sourceTree = ""; }; + EA67D3A629FE09D20004F40F /* trees.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trees.h; sourceTree = ""; }; + EA67D3A729FE09D20004F40F /* objxloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objxloc.h; sourceTree = ""; }; + EA67D3A829FE09D20004F40F /* objtown.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objtown.cpp; sourceTree = ""; }; + EA67D3A929FE09D20004F40F /* objdirt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objdirt.cpp; sourceTree = ""; }; + EA67D3AA29FE09D20004F40F /* objsnow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objsnow.h; sourceTree = ""; }; + EA67D3AB29FE09D20004F40F /* objmult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objmult.cpp; sourceTree = ""; }; + EA67D3AC29FE09D20004F40F /* mounts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mounts.h; sourceTree = ""; }; + EA67D3AD29FE09D20004F40F /* mounts.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mounts.cpp; sourceTree = ""; }; + EA67D3AE29FE09D20004F40F /* objgras.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objgras.cpp; sourceTree = ""; }; + EA67D3AF29FE09D20004F40F /* objmult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objmult.h; sourceTree = ""; }; + EA67D3B029FE09D20004F40F /* objswmp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objswmp.cpp; sourceTree = ""; }; + EA67D3B129FE09D20004F40F /* objwatr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objwatr.h; sourceTree = ""; }; + EA67D3B229FE09D20004F40F /* objcrck.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objcrck.cpp; sourceTree = ""; }; + EA67D3B329FE09D20004F40F /* objswmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objswmp.h; sourceTree = ""; }; + EA67D3B429FE09D20004F40F /* objdsrt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objdsrt.h; sourceTree = ""; }; + EA67D3B529FE09D20004F40F /* objxloc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = objxloc.cpp; sourceTree = ""; }; + EA67D3B729FE09D20004F40F /* world_pathfinding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = world_pathfinding.cpp; sourceTree = ""; }; + EA67D3B829FE09D20004F40F /* world_pathfinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = world_pathfinding.h; sourceTree = ""; }; + EA67D3B929FE09D20004F40F /* world_loadmap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = world_loadmap.cpp; sourceTree = ""; }; + EA67D3BA29FE09D20004F40F /* world_regions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = world_regions.cpp; sourceTree = ""; }; + EA67D3BB29FE09D20004F40F /* world.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = world.h; sourceTree = ""; }; + EA67D3BC29FE09D20004F40F /* world.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = world.cpp; sourceTree = ""; }; + EA67D3BD29FE09D20004F40F /* world_regions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = world_regions.h; sourceTree = ""; }; + EA67D3BF29FE09D20004F40F /* game_newgame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_newgame.cpp; sourceTree = ""; }; + EA67D3C029FE09D20004F40F /* game_static.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_static.cpp; sourceTree = ""; }; + EA67D3C129FE09D20004F40F /* game_io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_io.h; sourceTree = ""; }; + EA67D3C229FE09D20004F40F /* game_over.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_over.cpp; sourceTree = ""; }; + EA67D3C329FE09D20004F40F /* game_delays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_delays.h; sourceTree = ""; }; + EA67D3C429FE09D20004F40F /* difficulty.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = difficulty.cpp; sourceTree = ""; }; + EA67D3C529FE09D20004F40F /* game_mainmenu_ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_mainmenu_ui.h; sourceTree = ""; }; + EA67D3C629FE09D20004F40F /* game_video_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_video_type.h; sourceTree = ""; }; + EA67D3C729FE09D20004F40F /* highscores.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = highscores.h; sourceTree = ""; }; + EA67D3C829FE09D20004F40F /* game_over.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_over.h; sourceTree = ""; }; + EA67D3C929FE09D20004F40F /* game_credits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_credits.h; sourceTree = ""; }; + EA67D3CA29FE09D20004F40F /* game_hotkeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_hotkeys.cpp; sourceTree = ""; }; + EA67D3CB29FE09D20004F40F /* game_credits.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_credits.cpp; sourceTree = ""; }; + EA67D3CC29FE09D20004F40F /* game_highscores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_highscores.cpp; sourceTree = ""; }; + EA67D3CD29FE09D20004F40F /* game_static.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_static.h; sourceTree = ""; }; + EA67D3CE29FE09D20004F40F /* game_startgame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_startgame.cpp; sourceTree = ""; }; + EA67D3CF29FE09D20004F40F /* game_campaign.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_campaign.cpp; sourceTree = ""; }; + EA67D3D029FE09D20004F40F /* game_logo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_logo.h; sourceTree = ""; }; + EA67D3D129FE09D20004F40F /* game_mainmenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_mainmenu.cpp; sourceTree = ""; }; + EA67D3D229FE09D20004F40F /* game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = ""; }; + EA67D3D329FE09D20004F40F /* fheroes2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fheroes2.cpp; sourceTree = ""; }; + EA67D3D429FE09D20004F40F /* game_video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_video.cpp; sourceTree = ""; }; + EA67D3D529FE09D20004F40F /* game_mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_mode.h; sourceTree = ""; }; + EA67D3D629FE09D20004F40F /* game_io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_io.cpp; sourceTree = ""; }; + EA67D3D729FE09D20004F40F /* game_loadgame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_loadgame.cpp; sourceTree = ""; }; + EA67D3D829FE09D20004F40F /* game_interface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_interface.cpp; sourceTree = ""; }; + EA67D3D929FE09D20004F40F /* game_logo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_logo.cpp; sourceTree = ""; }; + EA67D3DA29FE09D20004F40F /* game_hotkeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_hotkeys.h; sourceTree = ""; }; + EA67D3DB29FE09D20004F40F /* game_delays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_delays.cpp; sourceTree = ""; }; + EA67D3DC29FE09D20004F40F /* difficulty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = difficulty.h; sourceTree = ""; }; + EA67D3DD29FE09D20004F40F /* highscores.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = highscores.cpp; sourceTree = ""; }; + EA67D3DE29FE09D20004F40F /* game_mainmenu_ui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_mainmenu_ui.cpp; sourceTree = ""; }; + EA67D3DF29FE09D20004F40F /* game_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_video.h; sourceTree = ""; }; + EA67D3E029FE09D20004F40F /* game_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = game_interface.h; sourceTree = ""; }; + EA67D3E129FE09D20004F40F /* game_scenarioinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game_scenarioinfo.cpp; sourceTree = ""; }; + EA67D3E229FE09D20004F40F /* game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = game.cpp; sourceTree = ""; }; + EA67D3E429FE09D20004F40F /* embedded_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = embedded_image.h; sourceTree = ""; }; + EA67D3E629FE09D20004F40F /* dialog_selectitems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_selectitems.h; sourceTree = ""; }; + EA67D3E729FE09D20004F40F /* dialog_selectcount.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_selectcount.cpp; sourceTree = ""; }; + EA67D3E829FE09D20004F40F /* dialog_hotkeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_hotkeys.h; sourceTree = ""; }; + EA67D3E929FE09D20004F40F /* dialog_frameborder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_frameborder.cpp; sourceTree = ""; }; + EA67D3EA29FE09D20004F40F /* dialog_game_settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_game_settings.h; sourceTree = ""; }; + EA67D3EB29FE09D20004F40F /* dialog_selectfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_selectfile.cpp; sourceTree = ""; }; + EA67D3EC29FE09D20004F40F /* dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog.h; sourceTree = ""; }; + EA67D3ED29FE09D20004F40F /* dialog_arena.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_arena.cpp; sourceTree = ""; }; + EA67D3EE29FE09D20004F40F /* dialog_language_selection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_language_selection.cpp; sourceTree = ""; }; + EA67D3EF29FE09D20004F40F /* dialog_audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_audio.cpp; sourceTree = ""; }; + EA67D3F029FE09D20004F40F /* dialog_gameinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_gameinfo.cpp; sourceTree = ""; }; + EA67D3F129FE09D20004F40F /* dialog_artifact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_artifact.cpp; sourceTree = ""; }; + EA67D3F229FE09D20004F40F /* dialog_game_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_game_settings.cpp; sourceTree = ""; }; + EA67D3F329FE09D20004F40F /* dialog_adventure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_adventure.cpp; sourceTree = ""; }; + EA67D3F429FE09D20004F40F /* dialog_graphics_settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_graphics_settings.cpp; sourceTree = ""; }; + EA67D3F529FE09D20004F40F /* dialog_resolution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_resolution.cpp; sourceTree = ""; }; + EA67D3F629FE09D20004F40F /* dialog_language_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_language_selection.h; sourceTree = ""; }; + EA67D3F729FE09D20004F40F /* dialog_system_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_system_options.h; sourceTree = ""; }; + EA67D3F829FE09D20004F40F /* dialog_system_options.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_system_options.cpp; sourceTree = ""; }; + EA67D3F929FE09D20004F40F /* dialog_marketplace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_marketplace.cpp; sourceTree = ""; }; + EA67D3FA29FE09D20004F40F /* dialog_recruit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_recruit.cpp; sourceTree = ""; }; + EA67D3FB29FE09D20004F40F /* dialog_box.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_box.cpp; sourceTree = ""; }; + EA67D3FC29FE09D20004F40F /* dialog_armyinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_armyinfo.cpp; sourceTree = ""; }; + EA67D3FD29FE09D20004F40F /* dialog_quickinfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_quickinfo.cpp; sourceTree = ""; }; + EA67D3FE29FE09D20004F40F /* dialog_levelup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_levelup.cpp; sourceTree = ""; }; + EA67D3FF29FE09D20004F40F /* dialog_buyboat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_buyboat.cpp; sourceTree = ""; }; + EA67D40029FE09D20004F40F /* dialog_selectitems.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_selectitems.cpp; sourceTree = ""; }; + EA67D40129FE09D20004F40F /* dialog_giftresources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_giftresources.cpp; sourceTree = ""; }; + EA67D40229FE09D20004F40F /* dialog_resolution.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_resolution.h; sourceTree = ""; }; + EA67D40329FE09D20004F40F /* dialog_graphics_settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_graphics_settings.h; sourceTree = ""; }; + EA67D40429FE09D20004F40F /* dialog_selectscenario.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_selectscenario.cpp; sourceTree = ""; }; + EA67D40529FE09D20004F40F /* dialog_thievesguild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_thievesguild.cpp; sourceTree = ""; }; + EA67D40629FE09D20004F40F /* dialog_selectscenario.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_selectscenario.h; sourceTree = ""; }; + EA67D40729FE09D20004F40F /* dialog_hotkeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_hotkeys.cpp; sourceTree = ""; }; + EA67D40829FE09D20004F40F /* dialog_file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_file.cpp; sourceTree = ""; }; + EA67D40929FE09D20004F40F /* dialog_chest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_chest.cpp; sourceTree = ""; }; + EA67D40A29FE09D20004F40F /* dialog_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialog_message.cpp; sourceTree = ""; }; + EA67D40B29FE09D20004F40F /* dialog_audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dialog_audio.h; sourceTree = ""; }; + EA67D40D29FE09D20004F40F /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + EA67D40E29FE09D20004F40F /* settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = settings.h; sourceTree = ""; }; + EA67D40F29FE09D20004F40F /* save_format_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = save_format_version.h; sourceTree = ""; }; + EA67D41029FE09D20004F40F /* bitmodes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bitmodes.cpp; sourceTree = ""; }; + EA67D41129FE09D20004F40F /* gamedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gamedefs.h; sourceTree = ""; }; + EA67D41229FE09D20004F40F /* bitmodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitmodes.h; sourceTree = ""; }; + EA67D41329FE09D20004F40F /* players.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = players.cpp; sourceTree = ""; }; + EA67D41429FE09D20004F40F /* players.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = players.h; sourceTree = ""; }; + EA67D41529FE09D20004F40F /* settings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = settings.cpp; sourceTree = ""; }; + EA67D41729FE09D20004F40F /* audio_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_manager.h; sourceTree = ""; }; + EA67D41829FE09D20004F40F /* audio_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio_manager.cpp; sourceTree = ""; }; + EA67D41A29FE09D20004F40F /* h2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = h2d.cpp; sourceTree = ""; }; + EA67D41B29FE09D20004F40F /* h2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2d.h; sourceTree = ""; }; + EA67D41D29FE09D20004F40F /* ai_common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_common.cpp; sourceTree = ""; }; + EA67D41E29FE09D20004F40F /* ai_hero_action.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_hero_action.cpp; sourceTree = ""; }; + EA67D41F29FE09D20004F40F /* ai.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ai.h; sourceTree = ""; }; + EA67D42129FE09D20004F40F /* ai_normal_kingdom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal_kingdom.cpp; sourceTree = ""; }; + EA67D42229FE09D20004F40F /* ai_normal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ai_normal.h; sourceTree = ""; }; + EA67D42329FE09D20004F40F /* ai_normal_battle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal_battle.cpp; sourceTree = ""; }; + EA67D42429FE09D20004F40F /* ai_normal_spell.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal_spell.cpp; sourceTree = ""; }; + EA67D42529FE09D20004F40F /* ai_normal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal.cpp; sourceTree = ""; }; + EA67D42629FE09D20004F40F /* ai_normal_hero.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal_hero.cpp; sourceTree = ""; }; + EA67D42729FE09D20004F40F /* ai_normal_castle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_normal_castle.cpp; sourceTree = ""; }; + EA67D42829FE09D20004F40F /* ai_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ai_base.cpp; sourceTree = ""; }; + EA67D42A29FE09D20004F40F /* ui_kingdom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_kingdom.cpp; sourceTree = ""; }; + EA67D42B29FE09D20004F40F /* ui_tool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_tool.h; sourceTree = ""; }; + EA67D42C29FE09D20004F40F /* ui_scrollbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_scrollbar.cpp; sourceTree = ""; }; + EA67D42D29FE09D20004F40F /* ui_kingdom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_kingdom.h; sourceTree = ""; }; + EA67D42E29FE09D20004F40F /* interface_buttons.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_buttons.cpp; sourceTree = ""; }; + EA67D42F29FE09D20004F40F /* ui_tool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_tool.cpp; sourceTree = ""; }; + EA67D43029FE09D20004F40F /* player_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = player_info.cpp; sourceTree = ""; }; + EA67D43129FE09D20004F40F /* text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = text.cpp; sourceTree = ""; }; + EA67D43229FE09D20004F40F /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = ""; }; + EA67D43329FE09D20004F40F /* interface_icons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_icons.h; sourceTree = ""; }; + EA67D43429FE09D20004F40F /* ui_castle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_castle.h; sourceTree = ""; }; + EA67D43529FE09D20004F40F /* ui_campaign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_campaign.h; sourceTree = ""; }; + EA67D43629FE09D20004F40F /* interface_status.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_status.cpp; sourceTree = ""; }; + EA67D43729FE09D20004F40F /* ui_castle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_castle.cpp; sourceTree = ""; }; + EA67D43829FE09D20004F40F /* interface_cpanel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_cpanel.cpp; sourceTree = ""; }; + EA67D43929FE09D20004F40F /* ui_monster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_monster.cpp; sourceTree = ""; }; + EA67D43A29FE09D20004F40F /* ui_keyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_keyboard.cpp; sourceTree = ""; }; + EA67D43B29FE09D20004F40F /* ui_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_base.h; sourceTree = ""; }; + EA67D43C29FE09D20004F40F /* interface_gamearea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_gamearea.h; sourceTree = ""; }; + EA67D43D29FE09D20004F40F /* statusbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = statusbar.h; sourceTree = ""; }; + EA67D43E29FE09D20004F40F /* interface_icons.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_icons.cpp; sourceTree = ""; }; + EA67D43F29FE09D20004F40F /* statusbar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = statusbar.cpp; sourceTree = ""; }; + EA67D44029FE09D20004F40F /* ui_button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_button.h; sourceTree = ""; }; + EA67D44129FE09D20004F40F /* ui_campaign.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_campaign.cpp; sourceTree = ""; }; + EA67D44229FE09D20004F40F /* ui_keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_keyboard.h; sourceTree = ""; }; + EA67D44329FE09D20004F40F /* interface_border.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_border.h; sourceTree = ""; }; + EA67D44429FE09D20004F40F /* ui_option_item.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_option_item.cpp; sourceTree = ""; }; + EA67D44529FE09D20004F40F /* ui_font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_font.h; sourceTree = ""; }; + EA67D44629FE09D20004F40F /* cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = ""; }; + EA67D44729FE09D20004F40F /* ui_window.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_window.cpp; sourceTree = ""; }; + EA67D44829FE09D20004F40F /* ui_base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_base.cpp; sourceTree = ""; }; + EA67D44929FE09D20004F40F /* ui_object_rendering.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_object_rendering.h; sourceTree = ""; }; + EA67D44A29FE09D20004F40F /* interface_radar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_radar.cpp; sourceTree = ""; }; + EA67D44B29FE09D20004F40F /* ui_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_dialog.cpp; sourceTree = ""; }; + EA67D44C29FE09D20004F40F /* ui_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_window.h; sourceTree = ""; }; + EA67D44D29FE09D20004F40F /* interface_itemsbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_itemsbar.h; sourceTree = ""; }; + EA67D44E29FE09D20004F40F /* ui_language.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_language.h; sourceTree = ""; }; + EA67D44F29FE09D20004F40F /* ui_text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_text.h; sourceTree = ""; }; + EA67D45029FE09D20004F40F /* interface_radar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_radar.h; sourceTree = ""; }; + EA67D45129FE09D20004F40F /* interface_border.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_border.cpp; sourceTree = ""; }; + EA67D45229FE09D20004F40F /* ui_font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_font.cpp; sourceTree = ""; }; + EA67D45329FE09D20004F40F /* skill_bar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = skill_bar.h; sourceTree = ""; }; + EA67D45429FE09D20004F40F /* interface_status.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_status.h; sourceTree = ""; }; + EA67D45529FE09D20004F40F /* interface_events.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_events.cpp; sourceTree = ""; }; + EA67D45629FE09D20004F40F /* ui_language.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_language.cpp; sourceTree = ""; }; + EA67D45729FE09D20004F40F /* interface_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_list.h; sourceTree = ""; }; + EA67D45829FE09D20004F40F /* interface_focus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_focus.cpp; sourceTree = ""; }; + EA67D45929FE09D20004F40F /* player_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = player_info.h; sourceTree = ""; }; + EA67D45A29FE09D20004F40F /* skill_bar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = skill_bar.cpp; sourceTree = ""; }; + EA67D45B29FE09D20004F40F /* interface_buttons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_buttons.h; sourceTree = ""; }; + EA67D45C29FE09D20004F40F /* cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cursor.cpp; sourceTree = ""; }; + EA67D45D29FE09D20004F40F /* ui_dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_dialog.h; sourceTree = ""; }; + EA67D45E29FE09D20004F40F /* ui_monster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_monster.h; sourceTree = ""; }; + EA67D45F29FE09D20004F40F /* ui_text.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_text.cpp; sourceTree = ""; }; + EA67D46029FE09D20004F40F /* ui_button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_button.cpp; sourceTree = ""; }; + EA67D46129FE09D20004F40F /* ui_scrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_scrollbar.h; sourceTree = ""; }; + EA67D46229FE09D20004F40F /* ui_option_item.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_option_item.h; sourceTree = ""; }; + EA67D46329FE09D20004F40F /* interface_cpanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interface_cpanel.h; sourceTree = ""; }; + EA67D46429FE09D20004F40F /* interface_gamearea.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interface_gamearea.cpp; sourceTree = ""; }; + EA67D46629FE09D20004F40F /* campaign_scenariodata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = campaign_scenariodata.h; sourceTree = ""; }; + EA67D46729FE09D20004F40F /* campaign_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = campaign_data.h; sourceTree = ""; }; + EA67D46829FE09D20004F40F /* campaign_scenariodata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = campaign_scenariodata.cpp; sourceTree = ""; }; + EA67D46929FE09D20004F40F /* campaign_data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = campaign_data.cpp; sourceTree = ""; }; + EA67D46A29FE09D20004F40F /* campaign_savedata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = campaign_savedata.cpp; sourceTree = ""; }; + EA67D46B29FE09D20004F40F /* campaign_savedata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = campaign_savedata.h; sourceTree = ""; }; + EA67D46D29FE09D20004F40F /* castle_dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_dialog.cpp; sourceTree = ""; }; + EA67D46E29FE09D20004F40F /* castle_town.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_town.cpp; sourceTree = ""; }; + EA67D46F29FE09D20004F40F /* captain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = captain.h; sourceTree = ""; }; + EA67D47029FE09D20004F40F /* castle_building.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_building.cpp; sourceTree = ""; }; + EA67D47129FE09D20004F40F /* buildinginfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = buildinginfo.cpp; sourceTree = ""; }; + EA67D47229FE09D20004F40F /* mageguild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mageguild.cpp; sourceTree = ""; }; + EA67D47329FE09D20004F40F /* mageguild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mageguild.h; sourceTree = ""; }; + EA67D47429FE09D20004F40F /* castle_building_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_building_info.cpp; sourceTree = ""; }; + EA67D47529FE09D20004F40F /* castle_tavern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_tavern.cpp; sourceTree = ""; }; + EA67D47629FE09D20004F40F /* captain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = captain.cpp; sourceTree = ""; }; + EA67D47729FE09D20004F40F /* buildinginfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buildinginfo.h; sourceTree = ""; }; + EA67D47829FE09D20004F40F /* castle_well.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_well.cpp; sourceTree = ""; }; + EA67D47929FE09D20004F40F /* castle_building_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = castle_building_info.h; sourceTree = ""; }; + EA67D47A29FE09D20004F40F /* castle_mageguild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle_mageguild.cpp; sourceTree = ""; }; + EA67D47B29FE09D20004F40F /* castle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = castle.h; sourceTree = ""; }; + EA67D47C29FE09D20004F40F /* castle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = castle.cpp; sourceTree = ""; }; + EA67D47E29FE09D20004F40F /* artifact_ultimate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = artifact_ultimate.h; sourceTree = ""; }; + EA67D47F29FE09D20004F40F /* artifact_ultimate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = artifact_ultimate.cpp; sourceTree = ""; }; + EA67D48029FE09D20004F40F /* artifact_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = artifact_info.cpp; sourceTree = ""; }; + EA67D48129FE09D20004F40F /* resource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = resource.cpp; sourceTree = ""; }; + EA67D48229FE09D20004F40F /* artifact.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = artifact.cpp; sourceTree = ""; }; + EA67D48329FE09D20004F40F /* artifact_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = artifact_info.h; sourceTree = ""; }; + EA67D48429FE09D20004F40F /* artifact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = artifact.h; sourceTree = ""; }; + EA67D48529FE09D20004F40F /* resource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; + EA67D48729FE09D20004F40F /* monster_info.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = monster_info.cpp; sourceTree = ""; }; + EA67D48829FE09D20004F40F /* monster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = monster.h; sourceTree = ""; }; + EA67D48929FE09D20004F40F /* monster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = monster.cpp; sourceTree = ""; }; + EA67D48A29FE09D20004F40F /* monster_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = monster_info.h; sourceTree = ""; }; + EA67D48B29FE09D20004F40F /* monster_anim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = monster_anim.h; sourceTree = ""; }; + EA67D48C29FE09D20004F40F /* monster_anim.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = monster_anim.cpp; sourceTree = ""; }; + EA67D48D29FE09D20004F40F /* Makefile.all */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.all; sourceTree = ""; }; + EA67D48E29FE09D20004F40F /* Makefile.bsd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.bsd; sourceTree = ""; }; + EA67D49029FE09D20004F40F /* tinyconfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyconfig.cpp; sourceTree = ""; }; + EA67D49129FE09D20004F40F /* pathfinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pathfinding.h; sourceTree = ""; }; + EA67D49229FE09D20004F40F /* serialize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = serialize.cpp; sourceTree = ""; }; + EA67D49329FE09D20004F40F /* zzlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zzlib.h; sourceTree = ""; }; + EA67D49429FE09D20004F40F /* thread.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = thread.cpp; sourceTree = ""; }; + EA67D49529FE09D20004F40F /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = ""; }; + EA67D49629FE09D20004F40F /* h2d_file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = h2d_file.cpp; sourceTree = ""; }; + EA67D49729FE09D20004F40F /* smk_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smk_decoder.h; sourceTree = ""; }; + EA67D49829FE09D20004F40F /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + EA67D49929FE09D20004F40F /* image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = image.cpp; sourceTree = ""; }; + EA67D49A29FE09D20004F40F /* logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logging.cpp; sourceTree = ""; }; + EA67D49B29FE09D20004F40F /* h2d_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2d_file.h; sourceTree = ""; }; + EA67D49C29FE09D20004F40F /* core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = core.cpp; sourceTree = ""; }; + EA67D49D29FE09D20004F40F /* smk_decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smk_decoder.cpp; sourceTree = ""; }; + EA67D49E29FE09D20004F40F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + EA67D49F29FE09D20004F40F /* screen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = screen.cpp; sourceTree = ""; }; + EA67D4A029FE09D20004F40F /* timing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timing.h; sourceTree = ""; }; + EA67D4A129FE09D20004F40F /* image_tool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = image_tool.cpp; sourceTree = ""; }; + EA67D4A229FE09D20004F40F /* audio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio.cpp; sourceTree = ""; }; + EA67D4A329FE09D20004F40F /* audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = ""; }; + EA67D4A429FE09D20004F40F /* pal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pal.cpp; sourceTree = ""; }; + EA67D4A529FE09D20004F40F /* translations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = translations.cpp; sourceTree = ""; }; + EA67D4A629FE09D20004F40F /* logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = ""; }; + EA67D4A729FE09D20004F40F /* zzlib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = zzlib.cpp; sourceTree = ""; }; + EA67D4A829FE09D20004F40F /* image_palette.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = image_palette.cpp; sourceTree = ""; }; + EA67D4A929FE09D20004F40F /* dir.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dir.cpp; sourceTree = ""; }; + EA67D4AA29FE09D20004F40F /* thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread.h; sourceTree = ""; }; + EA67D4AB29FE09D20004F40F /* rand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rand.cpp; sourceTree = ""; }; + EA67D4AC29FE09D20004F40F /* system.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = system.cpp; sourceTree = ""; }; + EA67D4AD29FE09D20004F40F /* agg_file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = agg_file.cpp; sourceTree = ""; }; + EA67D4AE29FE09D20004F40F /* tools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tools.h; sourceTree = ""; }; + EA67D4AF29FE09D20004F40F /* tools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tools.cpp; sourceTree = ""; }; + EA67D4B029FE09D20004F40F /* image_palette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = image_palette.h; sourceTree = ""; }; + EA67D4B129FE09D20004F40F /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = ""; }; + EA67D4B229FE09D20004F40F /* system.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = system.h; sourceTree = ""; }; + EA67D4B329FE09D20004F40F /* math_base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_base.h; sourceTree = ""; }; + EA67D4B429FE09D20004F40F /* agg_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = agg_file.h; sourceTree = ""; }; + EA67D4B529FE09D20004F40F /* localevent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = localevent.cpp; sourceTree = ""; }; + EA67D4B629FE09D20004F40F /* screen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = screen.h; sourceTree = ""; }; + EA67D4B729FE09D20004F40F /* pal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pal.h; sourceTree = ""; }; + EA67D4B829FE09D20004F40F /* xmi2mid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmi2mid.cpp; sourceTree = ""; }; + EA67D4B929FE09D20004F40F /* serialize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = serialize.h; sourceTree = ""; }; + EA67D4BA29FE09D20004F40F /* endian_h2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian_h2.h; sourceTree = ""; }; + EA67D4BB29FE09D20004F40F /* timing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timing.cpp; sourceTree = ""; }; + EA67D4BC29FE09D20004F40F /* tinyconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyconfig.h; sourceTree = ""; }; + EA67D4BD29FE09D20004F40F /* translations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = translations.h; sourceTree = ""; }; + EA67D4BE29FE09D20004F40F /* localevent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = localevent.h; sourceTree = ""; }; + EA67D4BF29FE09D20004F40F /* dir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dir.h; sourceTree = ""; }; + EA67D4C029FE09D20004F40F /* image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = image.h; sourceTree = ""; }; + EA67D4C129FE09D20004F40F /* image_tool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = image_tool.h; sourceTree = ""; }; + EA67D4C429FE09D20004F40F /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = configure.ac; sourceTree = ""; }; + EA67D4C529FE09D20004F40F /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; + EA67D4C629FE09D20004F40F /* smacker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smacker.c; sourceTree = ""; }; + EA67D4C729FE09D20004F40F /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + EA67D4C829FE09D20004F40F /* smk2avi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = smk2avi.c; sourceTree = ""; }; + EA67D4C929FE09D20004F40F /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; + EA67D4CA29FE09D20004F40F /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + EA67D4CB29FE09D20004F40F /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + EA67D4CC29FE09D20004F40F /* smacker.h.orig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = smacker.h.orig; sourceTree = ""; }; + EA67D4CD29FE09D20004F40F /* smk_malloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smk_malloc.h; sourceTree = ""; }; + EA67D4CE29FE09D20004F40F /* smacker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smacker.h; sourceTree = ""; }; + EA67D4CF29FE09D20004F40F /* smacker.c.orig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = smacker.c.orig; sourceTree = ""; }; + EA67D4D029FE09D20004F40F /* driver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = driver.c; sourceTree = ""; }; + EA67D4D129FE09D20004F40F /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL_mixer.xcodeproj; path = ../../SDL_mixer/Xcode/SDL_mixer.xcodeproj; sourceTree = ""; }; + EA67D5F229FE0C8C0004F40F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -128,6 +826,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + EA67D5F329FE0CD50004F40F /* libz.tbd in Frameworks */, + EA67D5F029FE0B620004F40F /* SDL3_mixer.framework in Frameworks */, EA67D2C829FE04B70004F40F /* SDL2.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -138,10 +838,10 @@ EA54668B29FE02FF00A9D8B2 = { isa = PBXGroup; children = ( + EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */, + EA67D2EE29FE09D20004F40F /* src */, EA67D2A229FE04380004F40F /* SDL.xcodeproj */, EA54669929FE02FF00A9D8B2 /* ShaderTypes.h */, - EA67D2CD29FE05180004F40F /* 52_hello_mobile.cpp */, - EA67D2CF29FE051D0004F40F /* hello.bmp */, EA67D2CB29FE05030004F40F /* SDL_uikit_main.c */, EA54669E29FE02FF00A9D8B2 /* Shaders.metal */, EA5466A329FE02FF00A9D8B2 /* Assets.xcassets */, @@ -180,10 +880,688 @@ EA67D2C629FE04AE0004F40F /* Frameworks */ = { isa = PBXGroup; children = ( + EA67D5F229FE0C8C0004F40F /* libz.tbd */, ); name = Frameworks; sourceTree = ""; }; + EA67D2EE29FE09D20004F40F /* src */ = { + isa = PBXGroup; + children = ( + EA67D2EF29FE09D20004F40F /* Makefile.mingw */, + EA67D2F029FE09D20004F40F /* Makefile.vita */, + EA67D30529FE09D20004F40F /* CMakeLists.txt */, + EA67D30629FE09D20004F40F /* dist */, + EA67D30829FE09D20004F40F /* Makefile.switch */, + EA67D30929FE09D20004F40F /* Makefile */, + EA67D30A29FE09D20004F40F /* resources */, + EA67D31029FE09D20004F40F /* Makefile.osx */, + EA67D31129FE09D20004F40F /* fheroes2 */, + EA67D48D29FE09D20004F40F /* Makefile.all */, + EA67D48E29FE09D20004F40F /* Makefile.bsd */, + EA67D48F29FE09D20004F40F /* engine */, + EA67D4C229FE09D20004F40F /* thirdparty */, + ); + name = src; + path = ../src; + sourceTree = ""; + }; + EA67D30629FE09D20004F40F /* dist */ = { + isa = PBXGroup; + children = ( + EA67D30729FE09D20004F40F /* Makefile */, + ); + path = dist; + sourceTree = ""; + }; + EA67D30A29FE09D20004F40F /* resources */ = { + isa = PBXGroup; + children = ( + EA67D30B29FE09D20004F40F /* fheroes2.icns */, + EA67D30C29FE09D20004F40F /* fheroes2.png */, + EA67D30D29FE09D20004F40F /* fheroes2.rc */, + EA67D30E29FE09D20004F40F /* fheroes2.ico */, + EA67D30F29FE09D20004F40F /* Info.plist.in */, + ); + path = resources; + sourceTree = ""; + }; + EA67D31129FE09D20004F40F /* fheroes2 */ = { + isa = PBXGroup; + children = ( + EA67D31229FE09D20004F40F /* agg */, + EA67D32229FE09D20004F40F /* battle */, + EA67D34329FE09D20004F40F /* maps */, + EA67D35929FE09D20004F40F /* CMakeLists.txt */, + EA67D35A29FE09D20004F40F /* kingdom */, + EA67D37429FE09D20004F40F /* heroes */, + EA67D38929FE09D20004F40F /* spell */, + EA67D39229FE09D20004F40F /* army */, + EA67D39B29FE09D20004F40F /* objects */, + EA67D3B629FE09D20004F40F /* world */, + EA67D3BE29FE09D20004F40F /* game */, + EA67D3E329FE09D20004F40F /* image */, + EA67D3E529FE09D20004F40F /* dialog */, + EA67D40C29FE09D20004F40F /* system */, + EA67D41629FE09D20004F40F /* audio */, + EA67D41929FE09D20004F40F /* h2d */, + EA67D41C29FE09D20004F40F /* ai */, + EA67D42929FE09D20004F40F /* gui */, + EA67D46529FE09D20004F40F /* campaign */, + EA67D46C29FE09D20004F40F /* castle */, + EA67D47D29FE09D20004F40F /* resource */, + EA67D48629FE09D20004F40F /* monster */, + ); + path = fheroes2; + sourceTree = ""; + }; + EA67D31229FE09D20004F40F /* agg */ = { + isa = PBXGroup; + children = ( + EA67D31329FE09D20004F40F /* agg.cpp */, + EA67D31429FE09D20004F40F /* xmi.h */, + EA67D31529FE09D20004F40F /* m82.cpp */, + EA67D31629FE09D20004F40F /* agg_image.h */, + EA67D31729FE09D20004F40F /* icn.h */, + EA67D31829FE09D20004F40F /* bin_info.cpp */, + EA67D31929FE09D20004F40F /* m82.h */, + EA67D31A29FE09D20004F40F /* til.h */, + EA67D31B29FE09D20004F40F /* xmi.cpp */, + EA67D31C29FE09D20004F40F /* bin_info.h */, + EA67D31D29FE09D20004F40F /* icn.cpp */, + EA67D31E29FE09D20004F40F /* mus.cpp */, + EA67D31F29FE09D20004F40F /* mus.h */, + EA67D32029FE09D20004F40F /* agg_image.cpp */, + EA67D32129FE09D20004F40F /* agg.h */, + ); + path = agg; + sourceTree = ""; + }; + EA67D32229FE09D20004F40F /* battle */ = { + isa = PBXGroup; + children = ( + EA67D32329FE09D20004F40F /* battle_main.cpp */, + EA67D32429FE09D20004F40F /* battle_cell.h */, + EA67D32529FE09D20004F40F /* battle_tower.h */, + EA67D32629FE09D20004F40F /* battle_only.cpp */, + EA67D32729FE09D20004F40F /* battle_pathfinding.cpp */, + EA67D32829FE09D20004F40F /* battle_catapult.h */, + EA67D32929FE09D20004F40F /* battle.h */, + EA67D32A29FE09D20004F40F /* battle_board.cpp */, + EA67D32B29FE09D20004F40F /* battle_army.cpp */, + EA67D32C29FE09D20004F40F /* battle_arena.cpp */, + EA67D32D29FE09D20004F40F /* battle_pathfinding.h */, + EA67D32E29FE09D20004F40F /* battle_interface.h */, + EA67D32F29FE09D20004F40F /* battle_tower.cpp */, + EA67D33029FE09D20004F40F /* battle_bridge.cpp */, + EA67D33129FE09D20004F40F /* battle_troop.cpp */, + EA67D33229FE09D20004F40F /* battle_troop.h */, + EA67D33329FE09D20004F40F /* battle_dialogs.cpp */, + EA67D33429FE09D20004F40F /* battle_army.h */, + EA67D33529FE09D20004F40F /* battle_cell.cpp */, + EA67D33629FE09D20004F40F /* battle_catapult.cpp */, + EA67D33729FE09D20004F40F /* battle_only.h */, + EA67D33829FE09D20004F40F /* battle_command.cpp */, + EA67D33929FE09D20004F40F /* battle_animation.h */, + EA67D33A29FE09D20004F40F /* battle_board.h */, + EA67D33B29FE09D20004F40F /* battle_interface.cpp */, + EA67D33C29FE09D20004F40F /* battle_animation.cpp */, + EA67D33D29FE09D20004F40F /* battle_grave.cpp */, + EA67D33E29FE09D20004F40F /* battle_bridge.h */, + EA67D33F29FE09D20004F40F /* battle_command.h */, + EA67D34029FE09D20004F40F /* battle_grave.h */, + EA67D34129FE09D20004F40F /* battle_action.cpp */, + EA67D34229FE09D20004F40F /* battle_arena.h */, + ); + path = battle; + sourceTree = ""; + }; + EA67D34329FE09D20004F40F /* maps */ = { + isa = PBXGroup; + children = ( + EA67D34429FE09D20004F40F /* mp2_helper.cpp */, + EA67D34529FE09D20004F40F /* mp2.cpp */, + EA67D34629FE09D20004F40F /* mp2_helper.h */, + EA67D34729FE09D20004F40F /* maps.cpp */, + EA67D34829FE09D20004F40F /* visit.h */, + EA67D34929FE09D20004F40F /* visit.cpp */, + EA67D34A29FE09D20004F40F /* ground.cpp */, + EA67D34B29FE09D20004F40F /* maps_fileinfo.cpp */, + EA67D34C29FE09D20004F40F /* maps_tiles_helper.h */, + EA67D34D29FE09D20004F40F /* maps_fileinfo.h */, + EA67D34E29FE09D20004F40F /* maps_tiles.h */, + EA67D34F29FE09D20004F40F /* mp2.h */, + EA67D35029FE09D20004F40F /* pairs.h */, + EA67D35129FE09D20004F40F /* maps_objects.cpp */, + EA67D35229FE09D20004F40F /* maps_tiles.cpp */, + EA67D35329FE09D20004F40F /* maps_objects.h */, + EA67D35429FE09D20004F40F /* ground.h */, + EA67D35529FE09D20004F40F /* maps.h */, + EA67D35629FE09D20004F40F /* maps_tiles_helper.cpp */, + EA67D35729FE09D20004F40F /* position.h */, + EA67D35829FE09D20004F40F /* position.cpp */, + ); + path = maps; + sourceTree = ""; + }; + EA67D35A29FE09D20004F40F /* kingdom */ = { + isa = PBXGroup; + children = ( + EA67D35B29FE09D20004F40F /* profit.h */, + EA67D35C29FE09D20004F40F /* speed.h */, + EA67D35D29FE09D20004F40F /* view_world.h */, + EA67D35E29FE09D20004F40F /* morale.h */, + EA67D35F29FE09D20004F40F /* color.h */, + EA67D36029FE09D20004F40F /* profit.cpp */, + EA67D36129FE09D20004F40F /* kingdom.cpp */, + EA67D36229FE09D20004F40F /* color.cpp */, + EA67D36329FE09D20004F40F /* view_world.cpp */, + EA67D36429FE09D20004F40F /* kingdom_overview.cpp */, + EA67D36529FE09D20004F40F /* payment.h */, + EA67D36629FE09D20004F40F /* week.h */, + EA67D36729FE09D20004F40F /* puzzle.cpp */, + EA67D36829FE09D20004F40F /* speed.cpp */, + EA67D36929FE09D20004F40F /* experience.h */, + EA67D36A29FE09D20004F40F /* payment.cpp */, + EA67D36B29FE09D20004F40F /* luck.h */, + EA67D36C29FE09D20004F40F /* luck.cpp */, + EA67D36D29FE09D20004F40F /* race.cpp */, + EA67D36E29FE09D20004F40F /* race.h */, + EA67D36F29FE09D20004F40F /* week.cpp */, + EA67D37029FE09D20004F40F /* morale.cpp */, + EA67D37129FE09D20004F40F /* puzzle.h */, + EA67D37229FE09D20004F40F /* kingdom.h */, + EA67D37329FE09D20004F40F /* experience.cpp */, + ); + path = kingdom; + sourceTree = ""; + }; + EA67D37429FE09D20004F40F /* heroes */ = { + isa = PBXGroup; + children = ( + EA67D37529FE09D20004F40F /* heroes.cpp */, + EA67D37629FE09D20004F40F /* skill_static.h */, + EA67D37729FE09D20004F40F /* heroes_recruits.cpp */, + EA67D37829FE09D20004F40F /* skill.h */, + EA67D37929FE09D20004F40F /* heroes_meeting.cpp */, + EA67D37A29FE09D20004F40F /* route.h */, + EA67D37B29FE09D20004F40F /* heroes_spell.cpp */, + EA67D37C29FE09D20004F40F /* heroes_indicator.h */, + EA67D37D29FE09D20004F40F /* heroes_base.cpp */, + EA67D37E29FE09D20004F40F /* heroes.h */, + EA67D37F29FE09D20004F40F /* direction.h */, + EA67D38029FE09D20004F40F /* heroes_action.cpp */, + EA67D38129FE09D20004F40F /* route.cpp */, + EA67D38229FE09D20004F40F /* heroes_move.cpp */, + EA67D38329FE09D20004F40F /* skill.cpp */, + EA67D38429FE09D20004F40F /* heroes_base.h */, + EA67D38529FE09D20004F40F /* heroes_recruits.h */, + EA67D38629FE09D20004F40F /* direction.cpp */, + EA67D38729FE09D20004F40F /* heroes_indicator.cpp */, + EA67D38829FE09D20004F40F /* heroes_dialog.cpp */, + ); + path = heroes; + sourceTree = ""; + }; + EA67D38929FE09D20004F40F /* spell */ = { + isa = PBXGroup; + children = ( + EA67D38A29FE09D20004F40F /* spell_storage.h */, + EA67D38B29FE09D20004F40F /* spell.h */, + EA67D38C29FE09D20004F40F /* spell_info.cpp */, + EA67D38D29FE09D20004F40F /* spell_book.h */, + EA67D38E29FE09D20004F40F /* spell_book.cpp */, + EA67D38F29FE09D20004F40F /* spell_info.h */, + EA67D39029FE09D20004F40F /* spell_storage.cpp */, + EA67D39129FE09D20004F40F /* spell.cpp */, + ); + path = spell; + sourceTree = ""; + }; + EA67D39229FE09D20004F40F /* army */ = { + isa = PBXGroup; + children = ( + EA67D39329FE09D20004F40F /* army_ui_helper.h */, + EA67D39429FE09D20004F40F /* army_troop.h */, + EA67D39529FE09D20004F40F /* army_ui_helper.cpp */, + EA67D39629FE09D20004F40F /* army_bar.cpp */, + EA67D39729FE09D20004F40F /* army.cpp */, + EA67D39829FE09D20004F40F /* army_bar.h */, + EA67D39929FE09D20004F40F /* army.h */, + EA67D39A29FE09D20004F40F /* army_troop.cpp */, + ); + path = army; + sourceTree = ""; + }; + EA67D39B29FE09D20004F40F /* objects */ = { + isa = PBXGroup; + children = ( + EA67D39C29FE09D20004F40F /* objtown.h */, + EA67D39D29FE09D20004F40F /* objwatr.cpp */, + EA67D39E29FE09D20004F40F /* objdirt.h */, + EA67D39F29FE09D20004F40F /* objlava.h */, + EA67D3A029FE09D20004F40F /* objgras.h */, + EA67D3A129FE09D20004F40F /* objdsrt.cpp */, + EA67D3A229FE09D20004F40F /* objsnow.cpp */, + EA67D3A329FE09D20004F40F /* trees.cpp */, + EA67D3A429FE09D20004F40F /* objcrck.h */, + EA67D3A529FE09D20004F40F /* objlava.cpp */, + EA67D3A629FE09D20004F40F /* trees.h */, + EA67D3A729FE09D20004F40F /* objxloc.h */, + EA67D3A829FE09D20004F40F /* objtown.cpp */, + EA67D3A929FE09D20004F40F /* objdirt.cpp */, + EA67D3AA29FE09D20004F40F /* objsnow.h */, + EA67D3AB29FE09D20004F40F /* objmult.cpp */, + EA67D3AC29FE09D20004F40F /* mounts.h */, + EA67D3AD29FE09D20004F40F /* mounts.cpp */, + EA67D3AE29FE09D20004F40F /* objgras.cpp */, + EA67D3AF29FE09D20004F40F /* objmult.h */, + EA67D3B029FE09D20004F40F /* objswmp.cpp */, + EA67D3B129FE09D20004F40F /* objwatr.h */, + EA67D3B229FE09D20004F40F /* objcrck.cpp */, + EA67D3B329FE09D20004F40F /* objswmp.h */, + EA67D3B429FE09D20004F40F /* objdsrt.h */, + EA67D3B529FE09D20004F40F /* objxloc.cpp */, + ); + path = objects; + sourceTree = ""; + }; + EA67D3B629FE09D20004F40F /* world */ = { + isa = PBXGroup; + children = ( + EA67D3B729FE09D20004F40F /* world_pathfinding.cpp */, + EA67D3B829FE09D20004F40F /* world_pathfinding.h */, + EA67D3B929FE09D20004F40F /* world_loadmap.cpp */, + EA67D3BA29FE09D20004F40F /* world_regions.cpp */, + EA67D3BB29FE09D20004F40F /* world.h */, + EA67D3BC29FE09D20004F40F /* world.cpp */, + EA67D3BD29FE09D20004F40F /* world_regions.h */, + ); + path = world; + sourceTree = ""; + }; + EA67D3BE29FE09D20004F40F /* game */ = { + isa = PBXGroup; + children = ( + EA67D3BF29FE09D20004F40F /* game_newgame.cpp */, + EA67D3C029FE09D20004F40F /* game_static.cpp */, + EA67D3C129FE09D20004F40F /* game_io.h */, + EA67D3C229FE09D20004F40F /* game_over.cpp */, + EA67D3C329FE09D20004F40F /* game_delays.h */, + EA67D3C429FE09D20004F40F /* difficulty.cpp */, + EA67D3C529FE09D20004F40F /* game_mainmenu_ui.h */, + EA67D3C629FE09D20004F40F /* game_video_type.h */, + EA67D3C729FE09D20004F40F /* highscores.h */, + EA67D3C829FE09D20004F40F /* game_over.h */, + EA67D3C929FE09D20004F40F /* game_credits.h */, + EA67D3CA29FE09D20004F40F /* game_hotkeys.cpp */, + EA67D3CB29FE09D20004F40F /* game_credits.cpp */, + EA67D3CC29FE09D20004F40F /* game_highscores.cpp */, + EA67D3CD29FE09D20004F40F /* game_static.h */, + EA67D3CE29FE09D20004F40F /* game_startgame.cpp */, + EA67D3CF29FE09D20004F40F /* game_campaign.cpp */, + EA67D3D029FE09D20004F40F /* game_logo.h */, + EA67D3D129FE09D20004F40F /* game_mainmenu.cpp */, + EA67D3D229FE09D20004F40F /* game.h */, + EA67D3D329FE09D20004F40F /* fheroes2.cpp */, + EA67D3D429FE09D20004F40F /* game_video.cpp */, + EA67D3D529FE09D20004F40F /* game_mode.h */, + EA67D3D629FE09D20004F40F /* game_io.cpp */, + EA67D3D729FE09D20004F40F /* game_loadgame.cpp */, + EA67D3D829FE09D20004F40F /* game_interface.cpp */, + EA67D3D929FE09D20004F40F /* game_logo.cpp */, + EA67D3DA29FE09D20004F40F /* game_hotkeys.h */, + EA67D3DB29FE09D20004F40F /* game_delays.cpp */, + EA67D3DC29FE09D20004F40F /* difficulty.h */, + EA67D3DD29FE09D20004F40F /* highscores.cpp */, + EA67D3DE29FE09D20004F40F /* game_mainmenu_ui.cpp */, + EA67D3DF29FE09D20004F40F /* game_video.h */, + EA67D3E029FE09D20004F40F /* game_interface.h */, + EA67D3E129FE09D20004F40F /* game_scenarioinfo.cpp */, + EA67D3E229FE09D20004F40F /* game.cpp */, + ); + path = game; + sourceTree = ""; + }; + EA67D3E329FE09D20004F40F /* image */ = { + isa = PBXGroup; + children = ( + EA67D3E429FE09D20004F40F /* embedded_image.h */, + ); + path = image; + sourceTree = ""; + }; + EA67D3E529FE09D20004F40F /* dialog */ = { + isa = PBXGroup; + children = ( + EA67D3E629FE09D20004F40F /* dialog_selectitems.h */, + EA67D3E729FE09D20004F40F /* dialog_selectcount.cpp */, + EA67D3E829FE09D20004F40F /* dialog_hotkeys.h */, + EA67D3E929FE09D20004F40F /* dialog_frameborder.cpp */, + EA67D3EA29FE09D20004F40F /* dialog_game_settings.h */, + EA67D3EB29FE09D20004F40F /* dialog_selectfile.cpp */, + EA67D3EC29FE09D20004F40F /* dialog.h */, + EA67D3ED29FE09D20004F40F /* dialog_arena.cpp */, + EA67D3EE29FE09D20004F40F /* dialog_language_selection.cpp */, + EA67D3EF29FE09D20004F40F /* dialog_audio.cpp */, + EA67D3F029FE09D20004F40F /* dialog_gameinfo.cpp */, + EA67D3F129FE09D20004F40F /* dialog_artifact.cpp */, + EA67D3F229FE09D20004F40F /* dialog_game_settings.cpp */, + EA67D3F329FE09D20004F40F /* dialog_adventure.cpp */, + EA67D3F429FE09D20004F40F /* dialog_graphics_settings.cpp */, + EA67D3F529FE09D20004F40F /* dialog_resolution.cpp */, + EA67D3F629FE09D20004F40F /* dialog_language_selection.h */, + EA67D3F729FE09D20004F40F /* dialog_system_options.h */, + EA67D3F829FE09D20004F40F /* dialog_system_options.cpp */, + EA67D3F929FE09D20004F40F /* dialog_marketplace.cpp */, + EA67D3FA29FE09D20004F40F /* dialog_recruit.cpp */, + EA67D3FB29FE09D20004F40F /* dialog_box.cpp */, + EA67D3FC29FE09D20004F40F /* dialog_armyinfo.cpp */, + EA67D3FD29FE09D20004F40F /* dialog_quickinfo.cpp */, + EA67D3FE29FE09D20004F40F /* dialog_levelup.cpp */, + EA67D3FF29FE09D20004F40F /* dialog_buyboat.cpp */, + EA67D40029FE09D20004F40F /* dialog_selectitems.cpp */, + EA67D40129FE09D20004F40F /* dialog_giftresources.cpp */, + EA67D40229FE09D20004F40F /* dialog_resolution.h */, + EA67D40329FE09D20004F40F /* dialog_graphics_settings.h */, + EA67D40429FE09D20004F40F /* dialog_selectscenario.cpp */, + EA67D40529FE09D20004F40F /* dialog_thievesguild.cpp */, + EA67D40629FE09D20004F40F /* dialog_selectscenario.h */, + EA67D40729FE09D20004F40F /* dialog_hotkeys.cpp */, + EA67D40829FE09D20004F40F /* dialog_file.cpp */, + EA67D40929FE09D20004F40F /* dialog_chest.cpp */, + EA67D40A29FE09D20004F40F /* dialog_message.cpp */, + EA67D40B29FE09D20004F40F /* dialog_audio.h */, + ); + path = dialog; + sourceTree = ""; + }; + EA67D40C29FE09D20004F40F /* system */ = { + isa = PBXGroup; + children = ( + EA67D40D29FE09D20004F40F /* version.h */, + EA67D40E29FE09D20004F40F /* settings.h */, + EA67D40F29FE09D20004F40F /* save_format_version.h */, + EA67D41029FE09D20004F40F /* bitmodes.cpp */, + EA67D41129FE09D20004F40F /* gamedefs.h */, + EA67D41229FE09D20004F40F /* bitmodes.h */, + EA67D41329FE09D20004F40F /* players.cpp */, + EA67D41429FE09D20004F40F /* players.h */, + EA67D41529FE09D20004F40F /* settings.cpp */, + ); + path = system; + sourceTree = ""; + }; + EA67D41629FE09D20004F40F /* audio */ = { + isa = PBXGroup; + children = ( + EA67D41729FE09D20004F40F /* audio_manager.h */, + EA67D41829FE09D20004F40F /* audio_manager.cpp */, + ); + path = audio; + sourceTree = ""; + }; + EA67D41929FE09D20004F40F /* h2d */ = { + isa = PBXGroup; + children = ( + EA67D41A29FE09D20004F40F /* h2d.cpp */, + EA67D41B29FE09D20004F40F /* h2d.h */, + ); + path = h2d; + sourceTree = ""; + }; + EA67D41C29FE09D20004F40F /* ai */ = { + isa = PBXGroup; + children = ( + EA67D41D29FE09D20004F40F /* ai_common.cpp */, + EA67D41E29FE09D20004F40F /* ai_hero_action.cpp */, + EA67D41F29FE09D20004F40F /* ai.h */, + EA67D42029FE09D20004F40F /* normal */, + EA67D42829FE09D20004F40F /* ai_base.cpp */, + ); + path = ai; + sourceTree = ""; + }; + EA67D42029FE09D20004F40F /* normal */ = { + isa = PBXGroup; + children = ( + EA67D42129FE09D20004F40F /* ai_normal_kingdom.cpp */, + EA67D42229FE09D20004F40F /* ai_normal.h */, + EA67D42329FE09D20004F40F /* ai_normal_battle.cpp */, + EA67D42429FE09D20004F40F /* ai_normal_spell.cpp */, + EA67D42529FE09D20004F40F /* ai_normal.cpp */, + EA67D42629FE09D20004F40F /* ai_normal_hero.cpp */, + EA67D42729FE09D20004F40F /* ai_normal_castle.cpp */, + ); + path = normal; + sourceTree = ""; + }; + EA67D42929FE09D20004F40F /* gui */ = { + isa = PBXGroup; + children = ( + EA67D42A29FE09D20004F40F /* ui_kingdom.cpp */, + EA67D42B29FE09D20004F40F /* ui_tool.h */, + EA67D42C29FE09D20004F40F /* ui_scrollbar.cpp */, + EA67D42D29FE09D20004F40F /* ui_kingdom.h */, + EA67D42E29FE09D20004F40F /* interface_buttons.cpp */, + EA67D42F29FE09D20004F40F /* ui_tool.cpp */, + EA67D43029FE09D20004F40F /* player_info.cpp */, + EA67D43129FE09D20004F40F /* text.cpp */, + EA67D43229FE09D20004F40F /* text.h */, + EA67D43329FE09D20004F40F /* interface_icons.h */, + EA67D43429FE09D20004F40F /* ui_castle.h */, + EA67D43529FE09D20004F40F /* ui_campaign.h */, + EA67D43629FE09D20004F40F /* interface_status.cpp */, + EA67D43729FE09D20004F40F /* ui_castle.cpp */, + EA67D43829FE09D20004F40F /* interface_cpanel.cpp */, + EA67D43929FE09D20004F40F /* ui_monster.cpp */, + EA67D43A29FE09D20004F40F /* ui_keyboard.cpp */, + EA67D43B29FE09D20004F40F /* ui_base.h */, + EA67D43C29FE09D20004F40F /* interface_gamearea.h */, + EA67D43D29FE09D20004F40F /* statusbar.h */, + EA67D43E29FE09D20004F40F /* interface_icons.cpp */, + EA67D43F29FE09D20004F40F /* statusbar.cpp */, + EA67D44029FE09D20004F40F /* ui_button.h */, + EA67D44129FE09D20004F40F /* ui_campaign.cpp */, + EA67D44229FE09D20004F40F /* ui_keyboard.h */, + EA67D44329FE09D20004F40F /* interface_border.h */, + EA67D44429FE09D20004F40F /* ui_option_item.cpp */, + EA67D44529FE09D20004F40F /* ui_font.h */, + EA67D44629FE09D20004F40F /* cursor.h */, + EA67D44729FE09D20004F40F /* ui_window.cpp */, + EA67D44829FE09D20004F40F /* ui_base.cpp */, + EA67D44929FE09D20004F40F /* ui_object_rendering.h */, + EA67D44A29FE09D20004F40F /* interface_radar.cpp */, + EA67D44B29FE09D20004F40F /* ui_dialog.cpp */, + EA67D44C29FE09D20004F40F /* ui_window.h */, + EA67D44D29FE09D20004F40F /* interface_itemsbar.h */, + EA67D44E29FE09D20004F40F /* ui_language.h */, + EA67D44F29FE09D20004F40F /* ui_text.h */, + EA67D45029FE09D20004F40F /* interface_radar.h */, + EA67D45129FE09D20004F40F /* interface_border.cpp */, + EA67D45229FE09D20004F40F /* ui_font.cpp */, + EA67D45329FE09D20004F40F /* skill_bar.h */, + EA67D45429FE09D20004F40F /* interface_status.h */, + EA67D45529FE09D20004F40F /* interface_events.cpp */, + EA67D45629FE09D20004F40F /* ui_language.cpp */, + EA67D45729FE09D20004F40F /* interface_list.h */, + EA67D45829FE09D20004F40F /* interface_focus.cpp */, + EA67D45929FE09D20004F40F /* player_info.h */, + EA67D45A29FE09D20004F40F /* skill_bar.cpp */, + EA67D45B29FE09D20004F40F /* interface_buttons.h */, + EA67D45C29FE09D20004F40F /* cursor.cpp */, + EA67D45D29FE09D20004F40F /* ui_dialog.h */, + EA67D45E29FE09D20004F40F /* ui_monster.h */, + EA67D45F29FE09D20004F40F /* ui_text.cpp */, + EA67D46029FE09D20004F40F /* ui_button.cpp */, + EA67D46129FE09D20004F40F /* ui_scrollbar.h */, + EA67D46229FE09D20004F40F /* ui_option_item.h */, + EA67D46329FE09D20004F40F /* interface_cpanel.h */, + EA67D46429FE09D20004F40F /* interface_gamearea.cpp */, + ); + path = gui; + sourceTree = ""; + }; + EA67D46529FE09D20004F40F /* campaign */ = { + isa = PBXGroup; + children = ( + EA67D46629FE09D20004F40F /* campaign_scenariodata.h */, + EA67D46729FE09D20004F40F /* campaign_data.h */, + EA67D46829FE09D20004F40F /* campaign_scenariodata.cpp */, + EA67D46929FE09D20004F40F /* campaign_data.cpp */, + EA67D46A29FE09D20004F40F /* campaign_savedata.cpp */, + EA67D46B29FE09D20004F40F /* campaign_savedata.h */, + ); + path = campaign; + sourceTree = ""; + }; + EA67D46C29FE09D20004F40F /* castle */ = { + isa = PBXGroup; + children = ( + EA67D46D29FE09D20004F40F /* castle_dialog.cpp */, + EA67D46E29FE09D20004F40F /* castle_town.cpp */, + EA67D46F29FE09D20004F40F /* captain.h */, + EA67D47029FE09D20004F40F /* castle_building.cpp */, + EA67D47129FE09D20004F40F /* buildinginfo.cpp */, + EA67D47229FE09D20004F40F /* mageguild.cpp */, + EA67D47329FE09D20004F40F /* mageguild.h */, + EA67D47429FE09D20004F40F /* castle_building_info.cpp */, + EA67D47529FE09D20004F40F /* castle_tavern.cpp */, + EA67D47629FE09D20004F40F /* captain.cpp */, + EA67D47729FE09D20004F40F /* buildinginfo.h */, + EA67D47829FE09D20004F40F /* castle_well.cpp */, + EA67D47929FE09D20004F40F /* castle_building_info.h */, + EA67D47A29FE09D20004F40F /* castle_mageguild.cpp */, + EA67D47B29FE09D20004F40F /* castle.h */, + EA67D47C29FE09D20004F40F /* castle.cpp */, + ); + path = castle; + sourceTree = ""; + }; + EA67D47D29FE09D20004F40F /* resource */ = { + isa = PBXGroup; + children = ( + EA67D47E29FE09D20004F40F /* artifact_ultimate.h */, + EA67D47F29FE09D20004F40F /* artifact_ultimate.cpp */, + EA67D48029FE09D20004F40F /* artifact_info.cpp */, + EA67D48129FE09D20004F40F /* resource.cpp */, + EA67D48229FE09D20004F40F /* artifact.cpp */, + EA67D48329FE09D20004F40F /* artifact_info.h */, + EA67D48429FE09D20004F40F /* artifact.h */, + EA67D48529FE09D20004F40F /* resource.h */, + ); + path = resource; + sourceTree = ""; + }; + EA67D48629FE09D20004F40F /* monster */ = { + isa = PBXGroup; + children = ( + EA67D48729FE09D20004F40F /* monster_info.cpp */, + EA67D48829FE09D20004F40F /* monster.h */, + EA67D48929FE09D20004F40F /* monster.cpp */, + EA67D48A29FE09D20004F40F /* monster_info.h */, + EA67D48B29FE09D20004F40F /* monster_anim.h */, + EA67D48C29FE09D20004F40F /* monster_anim.cpp */, + ); + path = monster; + sourceTree = ""; + }; + EA67D48F29FE09D20004F40F /* engine */ = { + isa = PBXGroup; + children = ( + EA67D49029FE09D20004F40F /* tinyconfig.cpp */, + EA67D49129FE09D20004F40F /* pathfinding.h */, + EA67D49229FE09D20004F40F /* serialize.cpp */, + EA67D49329FE09D20004F40F /* zzlib.h */, + EA67D49429FE09D20004F40F /* thread.cpp */, + EA67D49529FE09D20004F40F /* core.h */, + EA67D49629FE09D20004F40F /* h2d_file.cpp */, + EA67D49729FE09D20004F40F /* smk_decoder.h */, + EA67D49829FE09D20004F40F /* CMakeLists.txt */, + EA67D49929FE09D20004F40F /* image.cpp */, + EA67D49A29FE09D20004F40F /* logging.cpp */, + EA67D49B29FE09D20004F40F /* h2d_file.h */, + EA67D49C29FE09D20004F40F /* core.cpp */, + EA67D49D29FE09D20004F40F /* smk_decoder.cpp */, + EA67D49E29FE09D20004F40F /* Makefile */, + EA67D49F29FE09D20004F40F /* screen.cpp */, + EA67D4A029FE09D20004F40F /* timing.h */, + EA67D4A129FE09D20004F40F /* image_tool.cpp */, + EA67D4A229FE09D20004F40F /* audio.cpp */, + EA67D4A329FE09D20004F40F /* audio.h */, + EA67D4A429FE09D20004F40F /* pal.cpp */, + EA67D4A529FE09D20004F40F /* translations.cpp */, + EA67D4A629FE09D20004F40F /* logging.h */, + EA67D4A729FE09D20004F40F /* zzlib.cpp */, + EA67D4A829FE09D20004F40F /* image_palette.cpp */, + EA67D4A929FE09D20004F40F /* dir.cpp */, + EA67D4AA29FE09D20004F40F /* thread.h */, + EA67D4AB29FE09D20004F40F /* rand.cpp */, + EA67D4AC29FE09D20004F40F /* system.cpp */, + EA67D4AD29FE09D20004F40F /* agg_file.cpp */, + EA67D4AE29FE09D20004F40F /* tools.h */, + EA67D4AF29FE09D20004F40F /* tools.cpp */, + EA67D4B029FE09D20004F40F /* image_palette.h */, + EA67D4B129FE09D20004F40F /* rand.h */, + EA67D4B229FE09D20004F40F /* system.h */, + EA67D4B329FE09D20004F40F /* math_base.h */, + EA67D4B429FE09D20004F40F /* agg_file.h */, + EA67D4B529FE09D20004F40F /* localevent.cpp */, + EA67D4B629FE09D20004F40F /* screen.h */, + EA67D4B729FE09D20004F40F /* pal.h */, + EA67D4B829FE09D20004F40F /* xmi2mid.cpp */, + EA67D4B929FE09D20004F40F /* serialize.h */, + EA67D4BA29FE09D20004F40F /* endian_h2.h */, + EA67D4BB29FE09D20004F40F /* timing.cpp */, + EA67D4BC29FE09D20004F40F /* tinyconfig.h */, + EA67D4BD29FE09D20004F40F /* translations.h */, + EA67D4BE29FE09D20004F40F /* localevent.h */, + EA67D4BF29FE09D20004F40F /* dir.h */, + EA67D4C029FE09D20004F40F /* image.h */, + EA67D4C129FE09D20004F40F /* image_tool.h */, + ); + path = engine; + sourceTree = ""; + }; + EA67D4C229FE09D20004F40F /* thirdparty */ = { + isa = PBXGroup; + children = ( + EA67D4C329FE09D20004F40F /* libsmacker */, + EA67D4D129FE09D20004F40F /* CMakeLists.txt */, + ); + path = thirdparty; + sourceTree = ""; + }; + EA67D4C329FE09D20004F40F /* libsmacker */ = { + isa = PBXGroup; + children = ( + EA67D4C429FE09D20004F40F /* configure.ac */, + EA67D4C529FE09D20004F40F /* INSTALL */, + EA67D4C629FE09D20004F40F /* smacker.c */, + EA67D4C729FE09D20004F40F /* Makefile */, + EA67D4C829FE09D20004F40F /* smk2avi.c */, + EA67D4C929FE09D20004F40F /* README */, + EA67D4CA29FE09D20004F40F /* Makefile.am */, + EA67D4CB29FE09D20004F40F /* COPYING */, + EA67D4CC29FE09D20004F40F /* smacker.h.orig */, + EA67D4CD29FE09D20004F40F /* smk_malloc.h */, + EA67D4CE29FE09D20004F40F /* smacker.h */, + EA67D4CF29FE09D20004F40F /* smacker.c.orig */, + EA67D4D029FE09D20004F40F /* driver.c */, + ); + path = libsmacker; + sourceTree = ""; + }; + EA67D5DF29FE0B350004F40F /* Products */ = { + isa = PBXGroup; + children = ( + EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */, + EA67D5EC29FE0B350004F40F /* libSDL3_mixer.a */, + EA67D5EE29FE0B350004F40F /* Create DMG */, + ); + name = Products; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -236,6 +1614,10 @@ ProductGroup = EA67D2A329FE04380004F40F /* Products */; ProjectRef = EA67D2A229FE04380004F40F /* SDL.xcodeproj */; }, + { + ProductGroup = EA67D5DF29FE0B350004F40F /* Products */; + ProjectRef = EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */; + }, ); projectRoot = ""; targets = ( @@ -322,6 +1704,27 @@ remoteRef = EA67D2C429FE04380004F40F /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = SDL3_mixer.framework; + remoteRef = EA67D5E929FE0B350004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D5EC29FE0B350004F40F /* libSDL3_mixer.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libSDL3_mixer.a; + remoteRef = EA67D5EB29FE0B350004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + EA67D5EE29FE0B350004F40F /* Create DMG */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = "Create DMG"; + remoteRef = EA67D5ED29FE0B350004F40F /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ @@ -329,8 +1732,22 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + EA67D4D229FE09D20004F40F /* Makefile.mingw in Resources */, + EA67D4D329FE09D20004F40F /* Makefile.vita in Resources */, + EA67D5D929FE09D20004F40F /* COPYING in Resources */, + EA67D4ED29FE09D20004F40F /* fheroes2.rc in Resources */, + EA67D5DA29FE09D20004F40F /* smacker.h.orig in Resources */, + EA67D5DB29FE09D20004F40F /* smacker.c.orig in Resources */, + EA67D4EE29FE09D20004F40F /* fheroes2.ico in Resources */, + EA67D5D229FE09D20004F40F /* configure.ac in Resources */, + EA67D4F029FE09D20004F40F /* Makefile.osx in Resources */, + EA67D5D329FE09D20004F40F /* INSTALL in Resources */, EA5466A729FE02FF00A9D8B2 /* LaunchScreen.storyboard in Resources */, - EA67D2D029FE051D0004F40F /* hello.bmp in Resources */, + EA67D4EF29FE09D20004F40F /* Info.plist.in in Resources */, + EA67D4EB29FE09D20004F40F /* fheroes2.icns in Resources */, + EA67D4E929FE09D20004F40F /* Makefile.switch in Resources */, + EA67D4EC29FE09D20004F40F /* fheroes2.png in Resources */, + EA67D5D829FE09D20004F40F /* Makefile.am in Resources */, EA5466A429FE02FF00A9D8B2 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -342,9 +1759,233 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + EA67D58429FE09D20004F40F /* ai_base.cpp in Sources */, + EA67D51C29FE09D20004F40F /* luck.cpp in Sources */, + EA67D56D29FE09D20004F40F /* dialog_levelup.cpp in Sources */, + EA67D52929FE09D20004F40F /* skill.cpp in Sources */, + EA67D5AC29FE09D20004F40F /* captain.cpp in Sources */, + EA67D52129FE09D20004F40F /* heroes.cpp in Sources */, + EA67D52E29FE09D20004F40F /* spell_book.cpp in Sources */, + EA67D51829FE09D20004F40F /* kingdom_overview.cpp in Sources */, + EA67D5B029FE09D20004F40F /* artifact_ultimate.cpp in Sources */, + EA67D55829FE09D20004F40F /* game_mainmenu_ui.cpp in Sources */, + EA67D5C529FE09D20004F40F /* audio.cpp in Sources */, + EA67D50C29FE09D20004F40F /* visit.cpp in Sources */, + EA67D5B329FE09D20004F40F /* artifact.cpp in Sources */, + EA67D57C29FE09D20004F40F /* ai_common.cpp in Sources */, + EA67D53029FE09D20004F40F /* spell.cpp in Sources */, + EA67D51929FE09D20004F40F /* puzzle.cpp in Sources */, + EA67D53C29FE09D20004F40F /* objmult.cpp in Sources */, + EA67D55E29FE09D20004F40F /* dialog_arena.cpp in Sources */, + EA67D5CD29FE09D20004F40F /* agg_file.cpp in Sources */, + EA67D52429FE09D20004F40F /* heroes_spell.cpp in Sources */, + EA67D52B29FE09D20004F40F /* heroes_indicator.cpp in Sources */, + EA67D4F829FE09D20004F40F /* battle_main.cpp in Sources */, + EA67D55429FE09D20004F40F /* game_interface.cpp in Sources */, + EA67D54929FE09D20004F40F /* difficulty.cpp in Sources */, + EA67D4F329FE09D20004F40F /* bin_info.cpp in Sources */, + EA67D55029FE09D20004F40F /* fheroes2.cpp in Sources */, + EA67D5A929FE09D20004F40F /* mageguild.cpp in Sources */, + EA67D54829FE09D20004F40F /* game_over.cpp in Sources */, + EA67D55F29FE09D20004F40F /* dialog_language_selection.cpp in Sources */, + EA67D59E29FE09D20004F40F /* cursor.cpp in Sources */, + EA67D59129FE09D20004F40F /* statusbar.cpp in Sources */, + EA67D5AF29FE09D20004F40F /* castle.cpp in Sources */, + EA67D55329FE09D20004F40F /* game_loadgame.cpp in Sources */, + EA67D57829FE09D20004F40F /* players.cpp in Sources */, + EA67D57729FE09D20004F40F /* bitmodes.cpp in Sources */, + EA67D58A29FE09D20004F40F /* text.cpp in Sources */, + EA67D59D29FE09D20004F40F /* skill_bar.cpp in Sources */, + EA67D54E29FE09D20004F40F /* game_campaign.cpp in Sources */, + EA67D4F729FE09D20004F40F /* agg_image.cpp in Sources */, + EA67D55C29FE09D20004F40F /* dialog_frameborder.cpp in Sources */, + EA67D58129FE09D20004F40F /* ai_normal.cpp in Sources */, + EA67D58629FE09D20004F40F /* ui_scrollbar.cpp in Sources */, + EA67D59429FE09D20004F40F /* ui_window.cpp in Sources */, + EA67D5AA29FE09D20004F40F /* castle_building_info.cpp in Sources */, + EA67D4F929FE09D20004F40F /* battle_only.cpp in Sources */, + EA67D50229FE09D20004F40F /* battle_cell.cpp in Sources */, + EA67D5CC29FE09D20004F40F /* system.cpp in Sources */, + EA67D4FF29FE09D20004F40F /* battle_bridge.cpp in Sources */, + EA67D58029FE09D20004F40F /* ai_normal_spell.cpp in Sources */, + EA67D56C29FE09D20004F40F /* dialog_quickinfo.cpp in Sources */, + EA67D5A229FE09D20004F40F /* campaign_scenariodata.cpp in Sources */, + EA67D56A29FE09D20004F40F /* dialog_box.cpp in Sources */, + EA67D51729FE09D20004F40F /* view_world.cpp in Sources */, + EA67D5B429FE09D20004F40F /* monster_info.cpp in Sources */, + EA67D5A429FE09D20004F40F /* campaign_savedata.cpp in Sources */, + EA67D57F29FE09D20004F40F /* ai_normal_battle.cpp in Sources */, + EA67D50829FE09D20004F40F /* battle_action.cpp in Sources */, + EA67D54329FE09D20004F40F /* world_loadmap.cpp in Sources */, + EA67D50629FE09D20004F40F /* battle_animation.cpp in Sources */, + EA67D59329FE09D20004F40F /* ui_option_item.cpp in Sources */, + EA67D5A629FE09D20004F40F /* castle_town.cpp in Sources */, + EA67D57629FE09D20004F40F /* dialog_message.cpp in Sources */, + EA67D5D029FE09D20004F40F /* xmi2mid.cpp in Sources */, + EA67D5C829FE09D20004F40F /* zzlib.cpp in Sources */, + EA67D56429FE09D20004F40F /* dialog_adventure.cpp in Sources */, + EA67D51029FE09D20004F40F /* maps_tiles.cpp in Sources */, + EA67D59629FE09D20004F40F /* interface_radar.cpp in Sources */, + EA67D53F29FE09D20004F40F /* objswmp.cpp in Sources */, EA67D2A129FE03C60004F40F /* Shaders.metal in Sources */, + EA67D59729FE09D20004F40F /* ui_dialog.cpp in Sources */, + EA67D5BB29FE09D20004F40F /* thread.cpp in Sources */, + EA67D53229FE09D20004F40F /* army_bar.cpp in Sources */, + EA67D51A29FE09D20004F40F /* speed.cpp in Sources */, + EA67D57D29FE09D20004F40F /* ai_hero_action.cpp in Sources */, + EA67D51129FE09D20004F40F /* maps_tiles_helper.cpp in Sources */, + EA67D55729FE09D20004F40F /* highscores.cpp in Sources */, + EA67D57E29FE09D20004F40F /* ai_normal_kingdom.cpp in Sources */, + EA67D54429FE09D20004F40F /* world_regions.cpp in Sources */, + EA67D55629FE09D20004F40F /* game_delays.cpp in Sources */, + EA67D4FA29FE09D20004F40F /* battle_pathfinding.cpp in Sources */, + EA67D4E829FE09D20004F40F /* Makefile in Sources */, + EA67D50429FE09D20004F40F /* battle_command.cpp in Sources */, + EA67D59029FE09D20004F40F /* interface_icons.cpp in Sources */, + EA67D54029FE09D20004F40F /* objcrck.cpp in Sources */, + EA67D58329FE09D20004F40F /* ai_normal_castle.cpp in Sources */, + EA67D58B29FE09D20004F40F /* interface_status.cpp in Sources */, + EA67D4FB29FE09D20004F40F /* battle_board.cpp in Sources */, + EA67D56E29FE09D20004F40F /* dialog_buyboat.cpp in Sources */, + EA67D50B29FE09D20004F40F /* maps.cpp in Sources */, + EA67D52C29FE09D20004F40F /* heroes_dialog.cpp in Sources */, + EA67D56629FE09D20004F40F /* dialog_resolution.cpp in Sources */, + EA67D51B29FE09D20004F40F /* payment.cpp in Sources */, + EA67D57529FE09D20004F40F /* dialog_chest.cpp in Sources */, + EA67D51529FE09D20004F40F /* kingdom.cpp in Sources */, + EA67D57A29FE09D20004F40F /* audio_manager.cpp in Sources */, + EA67D53929FE09D20004F40F /* objlava.cpp in Sources */, + EA67D51229FE09D20004F40F /* position.cpp in Sources */, + EA67D5C629FE09D20004F40F /* pal.cpp in Sources */, + EA67D5D129FE09D20004F40F /* timing.cpp in Sources */, + EA67D5C729FE09D20004F40F /* translations.cpp in Sources */, + EA67D54529FE09D20004F40F /* world.cpp in Sources */, + EA67D55B29FE09D20004F40F /* dialog_selectcount.cpp in Sources */, + EA67D51E29FE09D20004F40F /* week.cpp in Sources */, + EA67D5A529FE09D20004F40F /* castle_dialog.cpp in Sources */, + EA67D58E29FE09D20004F40F /* ui_monster.cpp in Sources */, + EA67D5A829FE09D20004F40F /* buildinginfo.cpp in Sources */, + EA67D52329FE09D20004F40F /* heroes_meeting.cpp in Sources */, + EA67D5D429FE09D20004F40F /* smacker.c in Sources */, + EA67D58729FE09D20004F40F /* interface_buttons.cpp in Sources */, + EA67D53B29FE09D20004F40F /* objdirt.cpp in Sources */, EA67D2CC29FE05030004F40F /* SDL_uikit_main.c in Sources */, - EA67D2CE29FE05180004F40F /* 52_hello_mobile.cpp in Sources */, + EA67D54729FE09D20004F40F /* game_static.cpp in Sources */, + EA67D56129FE09D20004F40F /* dialog_gameinfo.cpp in Sources */, + EA67D52829FE09D20004F40F /* heroes_move.cpp in Sources */, + EA67D59529FE09D20004F40F /* ui_base.cpp in Sources */, + EA67D57129FE09D20004F40F /* dialog_selectscenario.cpp in Sources */, + EA67D53429FE09D20004F40F /* army_troop.cpp in Sources */, + EA67D57B29FE09D20004F40F /* h2d.cpp in Sources */, + EA67D5BF29FE09D20004F40F /* logging.cpp in Sources */, + EA67D51D29FE09D20004F40F /* race.cpp in Sources */, + EA67D5B529FE09D20004F40F /* monster.cpp in Sources */, + EA67D53329FE09D20004F40F /* army.cpp in Sources */, + EA67D59A29FE09D20004F40F /* interface_events.cpp in Sources */, + EA67D57929FE09D20004F40F /* settings.cpp in Sources */, + EA67D58D29FE09D20004F40F /* interface_cpanel.cpp in Sources */, + EA67D54A29FE09D20004F40F /* game_hotkeys.cpp in Sources */, + EA67D5BE29FE09D20004F40F /* image.cpp in Sources */, + EA67D55A29FE09D20004F40F /* game.cpp in Sources */, + EA67D53629FE09D20004F40F /* objdsrt.cpp in Sources */, + EA67D57429FE09D20004F40F /* dialog_file.cpp in Sources */, + EA67D56B29FE09D20004F40F /* dialog_armyinfo.cpp in Sources */, + EA67D5A329FE09D20004F40F /* campaign_data.cpp in Sources */, + EA67D5BA29FE09D20004F40F /* serialize.cpp in Sources */, + EA67D58929FE09D20004F40F /* player_info.cpp in Sources */, + EA67D59229FE09D20004F40F /* ui_campaign.cpp in Sources */, + EA67D54129FE09D20004F40F /* objxloc.cpp in Sources */, + EA67D59B29FE09D20004F40F /* ui_language.cpp in Sources */, + EA67D5AE29FE09D20004F40F /* castle_mageguild.cpp in Sources */, + EA67D52729FE09D20004F40F /* route.cpp in Sources */, + EA67D4F129FE09D20004F40F /* agg.cpp in Sources */, + EA67D5A729FE09D20004F40F /* castle_building.cpp in Sources */, + EA67D5C129FE09D20004F40F /* smk_decoder.cpp in Sources */, + EA67D55129FE09D20004F40F /* game_video.cpp in Sources */, + EA67D55529FE09D20004F40F /* game_logo.cpp in Sources */, + EA67D50E29FE09D20004F40F /* maps_fileinfo.cpp in Sources */, + EA67D5CF29FE09D20004F40F /* localevent.cpp in Sources */, + EA67D5CB29FE09D20004F40F /* rand.cpp in Sources */, + EA67D56729FE09D20004F40F /* dialog_system_options.cpp in Sources */, + EA67D50A29FE09D20004F40F /* mp2.cpp in Sources */, + EA67D56029FE09D20004F40F /* dialog_audio.cpp in Sources */, + EA67D59F29FE09D20004F40F /* ui_text.cpp in Sources */, + EA67D53A29FE09D20004F40F /* objtown.cpp in Sources */, + EA67D59C29FE09D20004F40F /* interface_focus.cpp in Sources */, + EA67D51F29FE09D20004F40F /* morale.cpp in Sources */, + EA67D52F29FE09D20004F40F /* spell_storage.cpp in Sources */, + EA67D5C329FE09D20004F40F /* screen.cpp in Sources */, + EA67D54B29FE09D20004F40F /* game_credits.cpp in Sources */, + EA67D52A29FE09D20004F40F /* direction.cpp in Sources */, + EA67D5AD29FE09D20004F40F /* castle_well.cpp in Sources */, + EA67D50029FE09D20004F40F /* battle_troop.cpp in Sources */, + EA67D57229FE09D20004F40F /* dialog_thievesguild.cpp in Sources */, + EA67D54629FE09D20004F40F /* game_newgame.cpp in Sources */, + EA67D4F629FE09D20004F40F /* mus.cpp in Sources */, + EA67D57329FE09D20004F40F /* dialog_hotkeys.cpp in Sources */, + EA67D5BC29FE09D20004F40F /* h2d_file.cpp in Sources */, + EA67D57029FE09D20004F40F /* dialog_giftresources.cpp in Sources */, + EA67D5C029FE09D20004F40F /* core.cpp in Sources */, + EA67D51429FE09D20004F40F /* profit.cpp in Sources */, + EA67D5A029FE09D20004F40F /* ui_button.cpp in Sources */, + EA67D59929FE09D20004F40F /* ui_font.cpp in Sources */, + EA67D4F529FE09D20004F40F /* icn.cpp in Sources */, + EA67D5B629FE09D20004F40F /* monster_anim.cpp in Sources */, + EA67D50129FE09D20004F40F /* battle_dialogs.cpp in Sources */, + EA67D58229FE09D20004F40F /* ai_normal_hero.cpp in Sources */, + EA67D51629FE09D20004F40F /* color.cpp in Sources */, + EA67D52229FE09D20004F40F /* heroes_recruits.cpp in Sources */, + EA67D4FC29FE09D20004F40F /* battle_army.cpp in Sources */, + EA67D54F29FE09D20004F40F /* game_mainmenu.cpp in Sources */, + EA67D53729FE09D20004F40F /* objsnow.cpp in Sources */, + EA67D4FE29FE09D20004F40F /* battle_tower.cpp in Sources */, + EA67D5C429FE09D20004F40F /* image_tool.cpp in Sources */, + EA67D53829FE09D20004F40F /* trees.cpp in Sources */, + EA67D4EA29FE09D20004F40F /* Makefile in Sources */, + EA67D58829FE09D20004F40F /* ui_tool.cpp in Sources */, + EA67D50529FE09D20004F40F /* battle_interface.cpp in Sources */, + EA67D52629FE09D20004F40F /* heroes_action.cpp in Sources */, + EA67D5C229FE09D20004F40F /* Makefile in Sources */, + EA67D5D529FE09D20004F40F /* Makefile in Sources */, + EA67D50729FE09D20004F40F /* battle_grave.cpp in Sources */, + EA67D56229FE09D20004F40F /* dialog_artifact.cpp in Sources */, + EA67D5B229FE09D20004F40F /* resource.cpp in Sources */, + EA67D53D29FE09D20004F40F /* mounts.cpp in Sources */, + EA67D5CE29FE09D20004F40F /* tools.cpp in Sources */, + EA67D55229FE09D20004F40F /* game_io.cpp in Sources */, + EA67D59829FE09D20004F40F /* interface_border.cpp in Sources */, + EA67D52D29FE09D20004F40F /* spell_info.cpp in Sources */, + EA67D5B929FE09D20004F40F /* tinyconfig.cpp in Sources */, + EA67D4F229FE09D20004F40F /* m82.cpp in Sources */, + EA67D53129FE09D20004F40F /* army_ui_helper.cpp in Sources */, + EA67D56929FE09D20004F40F /* dialog_recruit.cpp in Sources */, + EA67D54D29FE09D20004F40F /* game_startgame.cpp in Sources */, + EA67D55929FE09D20004F40F /* game_scenarioinfo.cpp in Sources */, + EA67D5CA29FE09D20004F40F /* dir.cpp in Sources */, + EA67D53E29FE09D20004F40F /* objgras.cpp in Sources */, + EA67D56F29FE09D20004F40F /* dialog_selectitems.cpp in Sources */, + EA67D4F429FE09D20004F40F /* xmi.cpp in Sources */, + EA67D52529FE09D20004F40F /* heroes_base.cpp in Sources */, + EA67D50D29FE09D20004F40F /* ground.cpp in Sources */, + EA67D5A129FE09D20004F40F /* interface_gamearea.cpp in Sources */, + EA67D50929FE09D20004F40F /* mp2_helper.cpp in Sources */, + EA67D5B129FE09D20004F40F /* artifact_info.cpp in Sources */, + EA67D4FD29FE09D20004F40F /* battle_arena.cpp in Sources */, + EA67D50329FE09D20004F40F /* battle_catapult.cpp in Sources */, + EA67D53529FE09D20004F40F /* objwatr.cpp in Sources */, + EA67D54229FE09D20004F40F /* world_pathfinding.cpp in Sources */, + EA67D58F29FE09D20004F40F /* ui_keyboard.cpp in Sources */, + EA67D56529FE09D20004F40F /* dialog_graphics_settings.cpp in Sources */, + EA67D58C29FE09D20004F40F /* ui_castle.cpp in Sources */, + EA67D54C29FE09D20004F40F /* game_highscores.cpp in Sources */, + EA67D56329FE09D20004F40F /* dialog_game_settings.cpp in Sources */, + EA67D55D29FE09D20004F40F /* dialog_selectfile.cpp in Sources */, + EA67D50F29FE09D20004F40F /* maps_objects.cpp in Sources */, + EA67D5C929FE09D20004F40F /* image_palette.cpp in Sources */, + EA67D52029FE09D20004F40F /* experience.cpp in Sources */, + EA67D56829FE09D20004F40F /* dialog_marketplace.cpp in Sources */, + EA67D5AB29FE09D20004F40F /* castle_tavern.cpp in Sources */, + EA67D58529FE09D20004F40F /* ui_kingdom.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -501,7 +2142,11 @@ SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = ShaderTypes.h; SWIFT_VERSION = 5.0; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../SDL-release-2.26.5/include\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../SDL-release-2.26.5/include\"", + "\"$(SRCROOT)/../src\"/**", + "\"$(SRCROOT)/../../SDL_mixer/include\"/**", + ); TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -531,7 +2176,11 @@ SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OBJC_BRIDGING_HEADER = ShaderTypes.h; SWIFT_VERSION = 5.0; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../SDL-release-2.26.5/include\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/../../SDL-release-2.26.5/include\"", + "\"$(SRCROOT)/../src\"/**", + "\"$(SRCROOT)/../../SDL_mixer/include\"/**", + ); TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; diff --git a/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate b/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate index 5d6aa9af53e48e27debbf61aab1d394dcfeb2cd3..6678d350d56b5b3a8bee058a1aa43cd247bcc31e 100644 GIT binary patch literal 61205 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 delta 15352 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 diff --git a/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist index 9c720960c08..27efcd413a9 100644 --- a/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/ios/fheroes2.xcodeproj/xcuserdata/drewbratcher.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ fheroes2.xcscheme_^#shared#^_ orderHint - 2 + 3 diff --git a/ios/hello.bmp b/ios/hello.bmp deleted file mode 100644 index 8df050454b11daf7a57552212f94aa9a4fafeab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49206 zcmeI3yO9@15Qk5;EJ}`SEcsLsfC^V8DUbrLOr<~yq<}*JN`Vwe0exIUSJ(7RZ}0B^ zfwYKmYKmYKmYKmYKmYKm-N?&z?Pd{``3qB6;=dRg~=N|MS?UCg%CYix<<;LWm)) zQ2752efsq2^XJbofB1d*@};O3fN$TvjV7`G?_-M+`mbNV{_x=gZmrQT{JSj+h zq-R#7%58u8Fn{;%oqKC`$c@%iKCeb~0E>R609}Fd4G2hG7(0wY$t7$h$^jtspz-F- z8?M}L)(AaZnU(D+Omem!D0em&QZ_+Smp?T@$bz)GY^nH_gjXgehbJxS)Cm|&{7?C_ zsu`kib4XU)!f@CxMuxeFafd#EFdViCxn<#C=(i{neemF;t4>{hwxS9k(e}RQ>w)VuC{D*}&a&FyE9ztTPu0Fm{>ywO8`c@EtRkS_O&*8Gf+}eR`eL_#SfO9L@ zdXj~X`*G#iVOoifc@*aUs*tQ1C4DQl;dG%!Z<~F>QA=Ee(**3y@$&?IqBHx^kXX*G zVCyNF&%uL@^42t+UmNu(?rPeZ7Bbb0!lsoSJ`N;$*wxSBvIK`Let<_-!;Dx^C)4MT zpPVrJi*Q*!L|G}Ad|F6t!f4aV3Y;dt86qm=a9Lug^M22o2l&T1wZv>`<#3+1M{!B+ zbab*6l3dhOjlItfT{V^~`FD0l4wof)@mosv9E=ZHuiBPJW*ci+>14OjioQn~1%+Mb}9a(G=0$6zKDC!t6s5vJrRU3bD>@wS$a%a*!|0PCB63B|8XjQ& z{qC!6UUks}eOoqhZ43&l+oAlGn#&EiWlKetxsPska=0id7QcD6z2DAGd{ z&!lIKTc4DeqdaNOlFy;iAMQ zw9L$gi9@~}0$+D%vu9*{7VEMpo&*35Z*CFsrg*O}C#k+x|@3B90eUE6Vm1 z_(AwHk7UI)PjM|dnSbp(kLGYD;k*TDaq>r3lxfdOI@w{=?DX+){`~0#n(Ca-f9iH6 z%;8MZIr*bcJ8#XFYaH6!$2`7K?=?TEZzY^`(l^iHOv2*l{O|iglP$x0CWd&}WjHA3 zlm>;X-rhKR4u=GWwC3RxY1nH&9-?q>Kc}?U!x{Y>N6+Dq0Dt<=N}akeJZx+Jb4s1K zS%)L^z&UoQ=sBOMgd}Nkh-Ke-=Zq$o?O%$(F+ZHTdk@~rmVb9|9AdQdY4AL{<9pQk z{N+IeL_h>YKmYKmYKm!|Vl32AKp4ZZn&0)Iy5g9NY6 zJACU^B-3=BJ?t`M!5eu#za&Wtw^R{k&o`6s)eZS ziO@xXK2%g{lentRJrte7d11v+$Iw=IvBvC!@Fs^kpS`1<{LN>f**w9D+zRJ~6+<0E z<6l4EOy~9wV*8H(b&WPkrK|5VSvhAGe-q<0$v*#@?Y;PeZbfydccs~Xf(#DhZ3ko2 z_kPE)!`A*oL_J3y^n#rg)f{4_Y1N(l2DpPUr-YhExeCWR z%)i9hymWrM>@4GH=#F8BElJ{P8sd6FQo;b+DsMv(Kp~YM2+PHeENf*)olmk)V5=2{JHXYrBREyqQlD@a`NnK z(rE%Gg%{*cCRPsQIg6~`W_lfrQ&$~Be)Ebi36#vih#`4eqtzEjXV zKehg^G)>}vC9qAm;@<>yCAB91YyXDWOd~@$Y?xi$MZ&Khw9U}GJoBnt{|RZ+Nuh8U z<6*-hnI|~ZTn3rUVZ-c75)lvq5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo T0TB=Z5fA|p5CIW*Y6SiRO^D Date: Sun, 30 Apr 2023 00:32:19 -0400 Subject: [PATCH 3/3] working :D --- docs/INSTALL.md | 2 +- ios/fheroes2.xcodeproj/project.pbxproj | 68 +++++++++ .../UserInterfaceState.xcuserstate | Bin 61205 -> 94902 bytes src/engine/audio.cpp | 5 - src/engine/screen.cpp | 2 - src/fheroes2/h2d/h2d.cpp | 32 +++- src/fheroes2/system/settings.cpp | 139 +++++++++++++++++- 7 files changed, 232 insertions(+), 16 deletions(-) diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 68202b53539..099698272bc 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -1,4 +1,4 @@ -# [**fheroes2**](README.md) installation guide +shell# [**fheroes2**](README.md) installation guide ## Requirements diff --git a/ios/fheroes2.xcodeproj/project.pbxproj b/ios/fheroes2.xcodeproj/project.pbxproj index affd9c5e355..2f353989ef5 100644 --- a/ios/fheroes2.xcodeproj/project.pbxproj +++ b/ios/fheroes2.xcodeproj/project.pbxproj @@ -256,6 +256,21 @@ EA67D5F029FE0B620004F40F /* SDL3_mixer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */; }; EA67D5F129FE0B620004F40F /* SDL3_mixer.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5EA29FE0B350004F40F /* SDL3_mixer.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; EA67D5F329FE0CD50004F40F /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D5F229FE0C8C0004F40F /* libz.tbd */; }; + EA67D5FE29FE12470004F40F /* heroes2.agg in Resources */ = {isa = PBXBuildFile; fileRef = EA67D5FA29FE12470004F40F /* heroes2.agg */; }; + EA67D5FF29FE12470004F40F /* standard.hs in Resources */ = {isa = PBXBuildFile; fileRef = EA67D5FB29FE12470004F40F /* standard.hs */; }; + EA67D60029FE12470004F40F /* h2offer.smk in Resources */ = {isa = PBXBuildFile; fileRef = EA67D5FC29FE12470004F40F /* h2offer.smk */; }; + EA67D60229FE186F0004F40F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA67D60129FE186F0004F40F /* CoreFoundation.framework */; }; + EA67D60429FE1FD20004F40F /* resurrection.h2d in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60329FE1FD20004F40F /* resurrection.h2d */; }; + EA67D60629FE1FE90004F40F /* fheroes2.sf3 in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60529FE1FE90004F40F /* fheroes2.sf3 */; }; + EA67D60F29FE22510004F40F /* heroes2x.agg in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60729FE22500004F40F /* heroes2x.agg */; }; + EA67D61029FE22510004F40F /* IVYWIZ.SMK in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60829FE22500004F40F /* IVYWIZ.SMK */; }; + EA67D61129FE22510004F40F /* IVYDES.SMK in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60929FE22500004F40F /* IVYDES.SMK */; }; + EA67D61229FE22510004F40F /* netlodr.dat in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60A29FE22500004F40F /* netlodr.dat */; }; + EA67D61329FE22510004F40F /* IVYVOY.SMK in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60B29FE22500004F40F /* IVYVOY.SMK */; }; + EA67D61429FE22510004F40F /* campaign.hs in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60C29FE22510004F40F /* campaign.hs */; }; + EA67D61529FE22510004F40F /* IVYPOL.SMK in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60D29FE22510004F40F /* IVYPOL.SMK */; }; + EA67D61629FE22510004F40F /* H2XINTRO.SMK in Resources */ = {isa = PBXBuildFile; fileRef = EA67D60E29FE22510004F40F /* H2XINTRO.SMK */; }; + EA67D61829FE26330004F40F /* Betrayal.mp2 in Resources */ = {isa = PBXBuildFile; fileRef = EA67D61729FE26330004F40F /* Betrayal.mp2 */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -819,6 +834,21 @@ EA67D4D129FE09D20004F40F /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL_mixer.xcodeproj; path = ../../SDL_mixer/Xcode/SDL_mixer.xcodeproj; sourceTree = ""; }; EA67D5F229FE0C8C0004F40F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + EA67D5FA29FE12470004F40F /* heroes2.agg */ = {isa = PBXFileReference; lastKnownFileType = file; path = heroes2.agg; sourceTree = ""; }; + EA67D5FB29FE12470004F40F /* standard.hs */ = {isa = PBXFileReference; lastKnownFileType = file; path = standard.hs; sourceTree = ""; }; + EA67D5FC29FE12470004F40F /* h2offer.smk */ = {isa = PBXFileReference; lastKnownFileType = file; path = h2offer.smk; sourceTree = ""; }; + EA67D60129FE186F0004F40F /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + EA67D60329FE1FD20004F40F /* resurrection.h2d */ = {isa = PBXFileReference; lastKnownFileType = file; name = resurrection.h2d; path = ../files/data/resurrection.h2d; sourceTree = ""; }; + EA67D60529FE1FE90004F40F /* fheroes2.sf3 */ = {isa = PBXFileReference; lastKnownFileType = file; name = fheroes2.sf3; path = ../files/soundfonts/fheroes2.sf3; sourceTree = ""; }; + EA67D60729FE22500004F40F /* heroes2x.agg */ = {isa = PBXFileReference; lastKnownFileType = file; path = heroes2x.agg; sourceTree = ""; }; + EA67D60829FE22500004F40F /* IVYWIZ.SMK */ = {isa = PBXFileReference; lastKnownFileType = file; path = IVYWIZ.SMK; sourceTree = ""; }; + EA67D60929FE22500004F40F /* IVYDES.SMK */ = {isa = PBXFileReference; lastKnownFileType = file; path = IVYDES.SMK; sourceTree = ""; }; + EA67D60A29FE22500004F40F /* netlodr.dat */ = {isa = PBXFileReference; lastKnownFileType = file; path = netlodr.dat; sourceTree = ""; }; + EA67D60B29FE22500004F40F /* IVYVOY.SMK */ = {isa = PBXFileReference; lastKnownFileType = file; path = IVYVOY.SMK; sourceTree = ""; }; + EA67D60C29FE22510004F40F /* campaign.hs */ = {isa = PBXFileReference; lastKnownFileType = file; path = campaign.hs; sourceTree = ""; }; + EA67D60D29FE22510004F40F /* IVYPOL.SMK */ = {isa = PBXFileReference; lastKnownFileType = file; path = IVYPOL.SMK; sourceTree = ""; }; + EA67D60E29FE22510004F40F /* H2XINTRO.SMK */ = {isa = PBXFileReference; lastKnownFileType = file; path = H2XINTRO.SMK; sourceTree = ""; }; + EA67D61729FE26330004F40F /* Betrayal.mp2 */ = {isa = PBXFileReference; lastKnownFileType = file; path = Betrayal.mp2; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -826,6 +856,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + EA67D60229FE186F0004F40F /* CoreFoundation.framework in Frameworks */, EA67D5F329FE0CD50004F40F /* libz.tbd in Frameworks */, EA67D5F029FE0B620004F40F /* SDL3_mixer.framework in Frameworks */, EA67D2C829FE04B70004F40F /* SDL2.framework in Frameworks */, @@ -838,6 +869,9 @@ EA54668B29FE02FF00A9D8B2 = { isa = PBXGroup; children = ( + EA67D60529FE1FE90004F40F /* fheroes2.sf3 */, + EA67D60329FE1FD20004F40F /* resurrection.h2d */, + EA67D5F829FE12370004F40F /* data */, EA67D5DE29FE0B350004F40F /* SDL_mixer.xcodeproj */, EA67D2EE29FE09D20004F40F /* src */, EA67D2A229FE04380004F40F /* SDL.xcodeproj */, @@ -880,6 +914,7 @@ EA67D2C629FE04AE0004F40F /* Frameworks */ = { isa = PBXGroup; children = ( + EA67D60129FE186F0004F40F /* CoreFoundation.framework */, EA67D5F229FE0C8C0004F40F /* libz.tbd */, ); name = Frameworks; @@ -1562,6 +1597,25 @@ name = Products; sourceTree = ""; }; + EA67D5F829FE12370004F40F /* data */ = { + isa = PBXGroup; + children = ( + EA67D61729FE26330004F40F /* Betrayal.mp2 */, + EA67D60C29FE22510004F40F /* campaign.hs */, + EA67D60E29FE22510004F40F /* H2XINTRO.SMK */, + EA67D60729FE22500004F40F /* heroes2x.agg */, + EA67D60929FE22500004F40F /* IVYDES.SMK */, + EA67D60D29FE22510004F40F /* IVYPOL.SMK */, + EA67D60B29FE22500004F40F /* IVYVOY.SMK */, + EA67D60829FE22500004F40F /* IVYWIZ.SMK */, + EA67D60A29FE22500004F40F /* netlodr.dat */, + EA67D5FC29FE12470004F40F /* h2offer.smk */, + EA67D5FA29FE12470004F40F /* heroes2.agg */, + EA67D5FB29FE12470004F40F /* standard.hs */, + ); + path = data; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1734,19 +1788,33 @@ files = ( EA67D4D229FE09D20004F40F /* Makefile.mingw in Resources */, EA67D4D329FE09D20004F40F /* Makefile.vita in Resources */, + EA67D61129FE22510004F40F /* IVYDES.SMK in Resources */, EA67D5D929FE09D20004F40F /* COPYING in Resources */, EA67D4ED29FE09D20004F40F /* fheroes2.rc in Resources */, + EA67D60629FE1FE90004F40F /* fheroes2.sf3 in Resources */, + EA67D61229FE22510004F40F /* netlodr.dat in Resources */, EA67D5DA29FE09D20004F40F /* smacker.h.orig in Resources */, + EA67D5FF29FE12470004F40F /* standard.hs in Resources */, EA67D5DB29FE09D20004F40F /* smacker.c.orig in Resources */, EA67D4EE29FE09D20004F40F /* fheroes2.ico in Resources */, + EA67D61529FE22510004F40F /* IVYPOL.SMK in Resources */, + EA67D60F29FE22510004F40F /* heroes2x.agg in Resources */, + EA67D61429FE22510004F40F /* campaign.hs in Resources */, EA67D5D229FE09D20004F40F /* configure.ac in Resources */, EA67D4F029FE09D20004F40F /* Makefile.osx in Resources */, EA67D5D329FE09D20004F40F /* INSTALL in Resources */, + EA67D60429FE1FD20004F40F /* resurrection.h2d in Resources */, + EA67D60029FE12470004F40F /* h2offer.smk in Resources */, EA5466A729FE02FF00A9D8B2 /* LaunchScreen.storyboard in Resources */, + EA67D5FE29FE12470004F40F /* heroes2.agg in Resources */, EA67D4EF29FE09D20004F40F /* Info.plist.in in Resources */, EA67D4EB29FE09D20004F40F /* fheroes2.icns in Resources */, + EA67D61629FE22510004F40F /* H2XINTRO.SMK in Resources */, EA67D4E929FE09D20004F40F /* Makefile.switch in Resources */, + EA67D61329FE22510004F40F /* IVYVOY.SMK in Resources */, EA67D4EC29FE09D20004F40F /* fheroes2.png in Resources */, + EA67D61829FE26330004F40F /* Betrayal.mp2 in Resources */, + EA67D61029FE22510004F40F /* IVYWIZ.SMK in Resources */, EA67D5D829FE09D20004F40F /* Makefile.am in Resources */, EA5466A429FE02FF00A9D8B2 /* Assets.xcassets in Resources */, ); diff --git a/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate b/ios/fheroes2.xcodeproj/project.xcworkspace/xcuserdata/drewbratcher.xcuserdatad/UserInterfaceState.xcuserstate index 6678d350d56b5b3a8bee058a1aa43cd247bcc31e..69701ae09c3855969aac7a94a2d8926931534d2c 100644 GIT binary patch literal 94902 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 M{`vpEhc=D;2cajp?f?J) delta 27663 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 f_nD6;vQ9Mn-_0j0>wj#2 isInitialized{ false }; diff --git a/src/engine/screen.cpp b/src/engine/screen.cpp index 2296b3f90b4..ef205b1bfec 100644 --- a/src/engine/screen.cpp +++ b/src/engine/screen.cpp @@ -1077,12 +1077,10 @@ namespace resolutionInfo = GetNearestResolution( resolutionInfo, resolutions ); } -#if defined( ANDROID ) // Same as ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE if ( SDL_SetHint( SDL_HINT_ORIENTATIONS, "LandscapeLeft LandscapeRight" ) == SDL_FALSE ) { ERROR_LOG( "Failed to set a hint for screen orientation." ) } -#endif uint32_t flags = SDL_WINDOW_SHOWN; if ( isFullScreen ) { diff --git a/src/fheroes2/h2d/h2d.cpp b/src/fheroes2/h2d/h2d.cpp index 98ee3e4fb85..e4731f1e179 100644 --- a/src/fheroes2/h2d/h2d.cpp +++ b/src/fheroes2/h2d/h2d.cpp @@ -23,6 +23,8 @@ #include #include +#include + #include "h2d_file.h" #include "logging.h" #include "settings.h" @@ -46,15 +48,31 @@ namespace fheroes2 { namespace h2d { - H2DInitializer::H2DInitializer() + + std::string get_resources_dir2() + { + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("h2d"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 0)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) { - const std::string fileName{ "resurrection.h2d" }; - std::string filePath; - if ( !getH2DFilePath( fileName, filePath ) ) { - VERBOSE_LOG( "'" << fileName << "' file cannot be found in the system." ) - throw std::logic_error( fileName + " is not found." ); - } + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; + } + + H2DInitializer::H2DInitializer() + { + std::string filePath = get_resources_dir2(); if ( !reader.open( filePath ) ) { VERBOSE_LOG( "Failed to open '" << filePath << "' file." ) throw std::logic_error( std::string( "Cannot open file: " ) + filePath ); diff --git a/src/fheroes2/system/settings.cpp b/src/fheroes2/system/settings.cpp index f37fa1d952f..ec63f8618b8 100644 --- a/src/fheroes2/system/settings.cpp +++ b/src/fheroes2/system/settings.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #if defined( MACOS_APP_BUNDLE ) #include @@ -510,6 +511,9 @@ void Settings::SetProgramPath( const char * argv0 ) path_program = argv0; } + + + const std::vector & Settings::GetRootDirs() { static std::vector dirs; @@ -565,14 +569,147 @@ const std::vector & Settings::GetRootDirs() } // Remove all paths that are not directories. - dirs.erase( std::remove_if( dirs.begin(), dirs.end(), []( const std::string & path ) { return !System::IsDirectory( path ); } ), dirs.end() ); + dirs.erase( std::remove_if( dirs.begin(), dirs.end(), []( const std::string & path ) { + return !System::IsDirectory( path ); + } ), dirs.end() ); return dirs; } + +std::string get_resources_dir() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("agg"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 0)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + +std::string get_resources_dir0() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("agg"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 1)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + + +std::string get_resources_dir2() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("smk"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 0)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + + +std::string get_resources_dir3() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("hs"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 0)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + + +std::string get_resources_dir4() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("hs"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 1)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + +std::string get_resources_dir5() +{ + + CFArrayRef paths = CFBundleCopyResourceURLsOfType(CFBundleGetMainBundle(), CFSTR("mp2"), NULL); + CFURLRef resourceURL = static_cast(CFArrayGetValueAtIndex(paths, 0)); + char resourcePath[PATH_MAX]; + if (CFURLGetFileSystemRepresentation(resourceURL, true, + (UInt8 *)resourcePath, + PATH_MAX)) + { + if (resourceURL != NULL) + { + CFRelease(resourceURL); + } + return resourcePath; + } + + return nil; +} + ListFiles Settings::FindFiles( const std::string & prefixDir, const std::string & fileNameFilter, const bool exactMatch ) { ListFiles res; + + res.emplace_back( std::move( get_resources_dir() ) ); + res.emplace_back( std::move( get_resources_dir0() ) ); + res.emplace_back( std::move( get_resources_dir2() ) ); + res.emplace_back( std::move( get_resources_dir3() ) ); + res.emplace_back( std::move( get_resources_dir4() ) ); + res.emplace_back( std::move( get_resources_dir5() ) ); for ( const std::string & dir : GetRootDirs() ) { const std::string path = !prefixDir.empty() ? System::concatPath( dir, prefixDir ) : dir;