Maelstrom: Added an Xcode project

From b694003fa8b351d2fdde8d8f0d4569acd29468ac Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 29 Nov 2025 14:10:11 -0800
Subject: [PATCH] Added an Xcode project

---
 .gitignore                                    |   4 +
 .../AccentColor.colorset/Contents.json        |  11 +
 .../AppIcon.appiconset/Contents.json          |  85 ++
 Xcode/Assets.xcassets/Contents.json           |   6 +
 Xcode/Maelstrom.xcodeproj/project.pbxproj     | 774 ++++++++++++++++++
 external/SDL_net                              |   2 +-
 game/main.cpp                                 |   3 +
 7 files changed, 884 insertions(+), 1 deletion(-)
 create mode 100644 .gitignore
 create mode 100644 Xcode/Assets.xcassets/AccentColor.colorset/Contents.json
 create mode 100644 Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
 create mode 100644 Xcode/Assets.xcassets/Contents.json
 create mode 100644 Xcode/Maelstrom.xcodeproj/project.pbxproj

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..92516a97
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+# for Xcode
+.DS_Store
+xcuserdata
+*.xcworkspace
diff --git a/Xcode/Assets.xcassets/AccentColor.colorset/Contents.json b/Xcode/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 00000000..eb878970
--- /dev/null
+++ b/Xcode/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+  "colors" : [
+    {
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json b/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..ffdfe150
--- /dev/null
+++ b/Xcode/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,85 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "platform" : "ios",
+      "size" : "1024x1024"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "idiom" : "universal",
+      "platform" : "ios",
+      "size" : "1024x1024"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "tinted"
+        }
+      ],
+      "idiom" : "universal",
+      "platform" : "ios",
+      "size" : "1024x1024"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "16x16"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "16x16"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "32x32"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "32x32"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "128x128"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "128x128"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "256x256"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "256x256"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "1x",
+      "size" : "512x512"
+    },
+    {
+      "idiom" : "mac",
+      "scale" : "2x",
+      "size" : "512x512"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/Xcode/Assets.xcassets/Contents.json b/Xcode/Assets.xcassets/Contents.json
new file mode 100644
index 00000000..73c00596
--- /dev/null
+++ b/Xcode/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/Xcode/Maelstrom.xcodeproj/project.pbxproj b/Xcode/Maelstrom.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..ff16c606
--- /dev/null
+++ b/Xcode/Maelstrom.xcodeproj/project.pbxproj
@@ -0,0 +1,774 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 77;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		AA9285A22EDB9A5D0005200A /* SDL3_net.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA9285A12EDB9A5D0005200A /* SDL3_net.framework */; };
+		AA9285A32EDB9A5D0005200A /* SDL3_net.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AA9285A12EDB9A5D0005200A /* SDL3_net.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AA9285A42EDB9A6A0005200A /* SDL3.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA9285772EDB8EA00005200A /* SDL3.framework */; };
+		AA9285A52EDB9A6A0005200A /* SDL3.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AA9285772EDB8EA00005200A /* SDL3.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		AA928DE52EDB9CA60005200A /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DCF2EDB9CA60005200A /* main.cpp */; };
+		AA928DE62EDB9CA60005200A /* about.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DB32EDB9CA60005200A /* about.cpp */; };
+		AA928DE72EDB9CA60005200A /* MaelstromUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DCD2EDB9CA60005200A /* MaelstromUI.cpp */; };
+		AA928DE82EDB9CA60005200A /* rect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DDF2EDB9CA60005200A /* rect.cpp */; };
+		AA928DE92EDB9CA60005200A /* netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DD52EDB9CA60005200A /* netplay.cpp */; };
+		AA928DEA2EDB9CA60005200A /* objects.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DD92EDB9CA60005200A /* objects.cpp */; };
+		AA928DEB2EDB9CA60005200A /* game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DBC2EDB9CA60005200A /* game.cpp */; };
+		AA928DEC2EDB9CA60005200A /* lobby.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DC62EDB9CA60005200A /* lobby.cpp */; };
+		AA928DED2EDB9CA60005200A /* MacDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DC92EDB9CA60005200A /* MacDialog.cpp */; };
+		AA928DEE2EDB9CA60005200A /* continue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DB62EDB9CA60005200A /* continue.cpp */; };
+		AA928DEF2EDB9CA60005200A /* player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DDC2EDB9CA60005200A /* player.cpp */; };
+		AA928DF02EDB9CA60005200A /* load.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DC42EDB9CA60005200A /* load.cpp */; };
+		AA928DF12EDB9CA60005200A /* gameover.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DC02EDB9CA60005200A /* gameover.cpp */; };
+		AA928DF22EDB9CA60005200A /* object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DD72EDB9CA60005200A /* object.cpp */; };
+		AA928DF32EDB9CA60005200A /* myerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DD32EDB9CA60005200A /* myerror.cpp */; };
+		AA928DF42EDB9CA60005200A /* fastrand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DBA2EDB9CA60005200A /* fastrand.cpp */; };
+		AA928DF52EDB9CA60005200A /* replay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DE12EDB9CA60005200A /* replay.cpp */; };
+		AA928DF62EDB9CA60005200A /* gameinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DBE2EDB9CA60005200A /* gameinfo.cpp */; };
+		AA928DF72EDB9CA60005200A /* make.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DD12EDB9CA60005200A /* make.cpp */; };
+		AA928DF82EDB9CA60005200A /* scores.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DE32EDB9CA60005200A /* scores.cpp */; };
+		AA928DF92EDB9CA60005200A /* init.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DC22EDB9CA60005200A /* init.cpp */; };
+		AA928DFA2EDB9CA60005200A /* controls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928DB82EDB9CA60005200A /* controls.cpp */; };
+		AA928E082EDB9CEA0005200A /* files.c in Sources */ = {isa = PBXBuildFile; fileRef = AA928DFF2EDB9CEA0005200A /* files.c */; };
+		AA928E092EDB9CEA0005200A /* hashtable.c in Sources */ = {isa = PBXBuildFile; fileRef = AA928E012EDB9CEA0005200A /* hashtable.c */; };
+		AA928E0A2EDB9CEA0005200A /* loadxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E032EDB9CEA0005200A /* loadxml.cpp */; };
+		AA928E0B2EDB9CEA0005200A /* prefs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E052EDB9CEA0005200A /* prefs.cpp */; };
+		AA928E342EDB9D1B0005200A /* UIPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E2E2EDB9D1B0005200A /* UIPanel.cpp */; };
+		AA928E352EDB9D1B0005200A /* UIElementThumbstick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E282EDB9D1B0005200A /* UIElementThumbstick.cpp */; };
+		AA928E362EDB9D1B0005200A /* UIBaseElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E122EDB9D1B0005200A /* UIBaseElement.cpp */; };
+		AA928E372EDB9D1B0005200A /* UIContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E142EDB9D1B0005200A /* UIContainer.cpp */; };
+		AA928E382EDB9D1B0005200A /* UIArea.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E102EDB9D1B0005200A /* UIArea.cpp */; };
+		AA928E392EDB9D1B0005200A /* UIDrawEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E1A2EDB9D1B0005200A /* UIDrawEngine.cpp */; };
+		AA928E3A2EDB9D1B0005200A /* UIDialogButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E182EDB9D1B0005200A /* UIDialogButton.cpp */; };
+		AA928E3B2EDB9D1B0005200A /* UIElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E1C2EDB9D1B0005200A /* UIElement.cpp */; };
+		AA928E3C2EDB9D1B0005200A /* UITexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E332EDB9D1B0005200A /* UITexture.cpp */; };
+		AA928E3D2EDB9D1B0005200A /* UIElementCheckbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E202EDB9D1B0005200A /* UIElementCheckbox.cpp */; };
+		AA928E3E2EDB9D1B0005200A /* SDL_FrameBuf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E0E2EDB9D1B0005200A /* SDL_FrameBuf.cpp */; };
+		AA928E3F2EDB9D1B0005200A /* UIElementDropdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E222EDB9D1B0005200A /* UIElementDropdown.cpp */; };
+		AA928E402EDB9D1B0005200A /* UIDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E162EDB9D1B0005200A /* UIDialog.cpp */; };
+		AA928E412EDB9D1B0005200A /* UITemplates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E312EDB9D1B0005200A /* UITemplates.cpp */; };
+		AA928E422EDB9D1B0005200A /* UIElementRadio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E262EDB9D1B0005200A /* UIElementRadio.cpp */; };
+		AA928E432EDB9D1B0005200A /* UIElementButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E1E2EDB9D1B0005200A /* UIElementButton.cpp */; };
+		AA928E442EDB9D1B0005200A /* UIManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E2C2EDB9D1B0005200A /* UIManager.cpp */; };
+		AA928E452EDB9D1B0005200A /* UIElementEditbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E242EDB9D1B0005200A /* UIElementEditbox.cpp */; };
+		AA928E492EDB9D440005200A /* miniz.c in Sources */ = {isa = PBXBuildFile; fileRef = AA928E482EDB9D440005200A /* miniz.c */; };
+		AA928E502EDB9D830005200A /* Mac_FontServ.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E4D2EDB9D830005200A /* Mac_FontServ.cpp */; };
+		AA928E512EDB9D830005200A /* Mac_Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA928E4F2EDB9D830005200A /* Mac_Sound.cpp */; };
+		AA929E852EDBA1900005200A /* Docs in Resources */ = {isa = PBXBuildFile; fileRef = AA929E842EDBA1900005200A /* Docs */; };
+		AA929E872EDBA3B80005200A /* Data in Resources */ = {isa = PBXBuildFile; fileRef = AA929E862EDBA3B80005200A /* Data */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		AA92857A2EDB8EA00005200A /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				AA9285A52EDB9A6A0005200A /* SDL3.framework in Embed Frameworks */,
+				AA9285A32EDB9A5D0005200A /* SDL3_net.framework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		AA9284B32EDB8BB30005200A /* Maelstrom.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Maelstrom.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		AA9284C12EDB8BE00005200A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		AA9284C72EDB8CEE0005200A /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../external/SDL/Xcode/SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; };
+		AA9285752EDB8E8A0005200A /* SDL3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDL3.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		AA9285772EDB8EA00005200A /* SDL3.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDL3.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		AA9285942EDB9A3D0005200A /* SDL_net.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL_net.xcodeproj; path = ../external/SDL_net/Xcode/SDL_net.xcodeproj; sourceTree = SOURCE_ROOT; };
+		AA9285A12EDB9A5D0005200A /* SDL3_net.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SDL3_net.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		AA928DB22EDB9CA60005200A /* about.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = about.h; sourceTree = "<group>"; };
+		AA928DB32EDB9CA60005200A /* about.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = about.cpp; sourceTree = "<group>"; };
+		AA928DB42EDB9CA60005200A /* colortable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = colortable.h; sourceTree = "<group>"; };
+		AA928DB52EDB9CA60005200A /* continue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = continue.h; sourceTree = "<group>"; };
+		AA928DB62EDB9CA60005200A /* continue.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = continue.cpp; sourceTree = "<group>"; };
+		AA928DB72EDB9CA60005200A /* controls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = controls.h; sourceTree = "<group>"; };
+		AA928DB82EDB9CA60005200A /* controls.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = controls.cpp; sourceTree = "<group>"; };
+		AA928DB92EDB9CA60005200A /* fastrand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fastrand.h; sourceTree = "<group>"; };
+		AA928DBA2EDB9CA60005200A /* fastrand.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fastrand.cpp; sourceTree = "<group>"; };
+		AA928DBB2EDB9CA60005200A /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = "<group>"; };
+		AA928DBC2EDB9CA60005200A /* game.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = game.cpp; sourceTree = "<group>"; };
+		AA928DBD2EDB9CA60005200A /* gameinfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gameinfo.h; sourceTree = "<group>"; };
+		AA928DBE2EDB9CA60005200A /* gameinfo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gameinfo.cpp; sourceTree = "<group>"; };
+		AA928DBF2EDB9CA60005200A /* gameover.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gameover.h; sourceTree = "<group>"; };
+		AA928DC02EDB9CA60005200A /* gameover.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gameover.cpp; sourceTree = "<group>"; };
+		AA928DC12EDB9CA60005200A /* init.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = init.h; sourceTree = "<group>"; };
+		AA928DC22EDB9CA60005200A /* init.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = init.cpp; sourceTree = "<group>"; };
+		AA928DC32EDB9CA60005200A /* load.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = load.h; sourceTree = "<group>"; };
+		AA928DC42EDB9CA60005200A /* load.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = load.cpp; sourceTree = "<group>"; };
+		AA928DC52EDB9CA60005200A /* lobby.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lobby.h; sourceTree = "<group>"; };
+		AA928DC62EDB9CA60005200A /* lobby.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = lobby.cpp; sourceTree = "<group>"; };
+		AA928DC72EDB9CA60005200A /* Localization.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Localization.h; sourceTree = "<group>"; };
+		AA928DC82EDB9CA60005200A /* MacDialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MacDialog.h; sourceTree = "<group>"; };
+		AA928DC92EDB9CA60005200A /* MacDialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MacDialog.cpp; sourceTree = "<group>"; };
+		AA928DCA2EDB9CA60005200A /* Maelstrom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Maelstrom.h; sourceTree = "<group>"; };
+		AA928DCB2EDB9CA60005200A /* Maelstrom_Globals.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Maelstrom_Globals.h; sourceTree = "<group>"; };
+		AA928DCC2EDB9CA60005200A /* MaelstromUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MaelstromUI.h; sourceTree = "<group>"; };
+		AA928DCD2EDB9CA60005200A /* MaelstromUI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MaelstromUI.cpp; sourceTree = "<group>"; };
+		AA928DCE2EDB9CA60005200A /* main.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = "<group>"; };
+		AA928DCF2EDB9CA60005200A /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
+		AA928DD02EDB9CA60005200A /* make.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = make.h; sourceTree = "<group>"; };
+		AA928DD12EDB9CA60005200A /* make.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = make.cpp; sourceTree = "<group>"; };
+		AA928DD22EDB9CA60005200A /* myerror.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = myerror.h; sourceTree = "<group>"; };
+		AA928DD32EDB9CA60005200A /* myerror.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = myerror.cpp; sourceTree = "<group>"; };
+		AA928DD42EDB9CA60005200A /* netplay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = "<group>"; };
+		AA928DD52EDB9CA60005200A /* netplay.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = netplay.cpp; sourceTree = "<group>"; };
+		AA928DD62EDB9CA60005200A /* object.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = object.h; sourceTree = "<group>"; };
+		AA928DD72EDB9CA60005200A /* object.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = object.cpp; sourceTree = "<group>"; };
+		AA928DD82EDB9CA60005200A /* objects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = "<group>"; };
+		AA928DD92EDB9CA60005200A /* objects.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = objects.cpp; sourceTree = "<group>"; };
+		AA928DDA2EDB9CA60005200A /* packet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = packet.h; sourceTree = "<group>"; };
+		AA928DDB2EDB9CA60005200A /* player.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = player.h; sourceTree = "<group>"; };
+		AA928DDC2EDB9CA60005200A /* player.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = player.cpp; sourceTree = "<group>"; };
+		AA928DDD2EDB9CA60005200A /* protocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = "<group>"; };
+		AA928DDE2EDB9CA60005200A /* rect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rect.h; sourceTree = "<group>"; };
+		AA928DDF2EDB9CA60005200A /* rect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rect.cpp; sourceTree = "<group>"; };
+		AA928DE02EDB9CA60005200A /* replay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = replay.h; sourceTree = "<group>"; };
+		AA928DE12EDB9CA60005200A /* replay.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = replay.cpp; sourceTree = "<group>"; };
+		AA928DE22EDB9CA60005200A /* scores.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scores.h; sourceTree = "<group>"; };
+		AA928DE32EDB9CA60005200A /* scores.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = scores.cpp; sourceTree = "<group>"; };
+		AA928DE42EDB9CA60005200A /* shinobi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = shinobi.h; sourceTree = "<group>"; };
+		AA928DFC2EDB9CEA0005200A /* array.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = "<group>"; };
+		AA928DFD2EDB9CEA0005200A /* ErrorBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ErrorBase.h; sourceTree = "<group>"; };
+		AA928DFE2EDB9CEA0005200A /* files.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = files.h; sourceTree = "<group>"; };
+		AA928DFF2EDB9CEA0005200A /* files.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = files.c; sourceTree = "<group>"; };
+		AA928E002EDB9CEA0005200A /* hashtable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hashtable.h; sourceTree = "<group>"; };
+		AA928E012EDB9CEA0005200A /* hashtable.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hashtable.c; sourceTree = "<group>"; };
+		AA928E022EDB9CEA0005200A /* loadxml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = loadxml.h; sourceTree = "<group>"; };
+		AA928E032EDB9CEA0005200A /* loadxml.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = loadxml.cpp; sourceTree = "<group>"; };
+		AA928E042EDB9CEA0005200A /* prefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = prefs.h; sourceTree = "<group>"; };
+		AA928E052EDB9CEA0005200A /* prefs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = prefs.cpp; sourceTree = "<group>"; };
+		AA928E062EDB9CEA0005200A /* rapidxml.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidxml.h; sourceTree = "<group>"; };
+		AA928E072EDB9CEA0005200A /* rapidxml.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rapidxml.hpp; sourceTree = "<group>"; };
+		AA928E0D2EDB9D1B0005200A /* SDL_FrameBuf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_FrameBuf.h; sourceTree = "<group>"; };
+		AA928E0E2EDB9D1B0005200A /* SDL_FrameBuf.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SDL_FrameBuf.cpp; sourceTree = "<group>"; };
+		AA928E0F2EDB9D1B0005200A /* UIArea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIArea.h; sourceTree = "<group>"; };
+		AA928E102EDB9D1B0005200A /* UIArea.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIArea.cpp; sourceTree = "<group>"; };
+		AA928E112EDB9D1B0005200A /* UIBaseElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIBaseElement.h; sourceTree = "<group>"; };
+		AA928E122EDB9D1B0005200A /* UIBaseElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIBaseElement.cpp; sourceTree = "<group>"; };
+		AA928E132EDB9D1B0005200A /* UIContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIContainer.h; sourceTree = "<group>"; };
+		AA928E142EDB9D1B0005200A /* UIContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIContainer.cpp; sourceTree = "<group>"; };
+		AA928E152EDB9D1B0005200A /* UIDialog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDialog.h; sourceTree = "<group>"; };
+		AA928E162EDB9D1B0005200A /* UIDialog.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIDialog.cpp; sourceTree = "<group>"; };
+		AA928E172EDB9D1B0005200A /* UIDialogButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDialogButton.h; sourceTree = "<group>"; };
+		AA928E182EDB9D1B0005200A /* UIDialogButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIDialogButton.cpp; sourceTree = "<group>"; };
+		AA928E192EDB9D1B0005200A /* UIDrawEngine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIDrawEngine.h; sourceTree = "<group>"; };
+		AA928E1A2EDB9D1B0005200A /* UIDrawEngine.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIDrawEngine.cpp; sourceTree = "<group>"; };
+		AA928E1B2EDB9D1B0005200A /* UIElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElement.h; sourceTree = "<group>"; };
+		AA928E1C2EDB9D1B0005200A /* UIElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElement.cpp; sourceTree = "<group>"; };
+		AA928E1D2EDB9D1B0005200A /* UIElementButton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementButton.h; sourceTree = "<group>"; };
+		AA928E1E2EDB9D1B0005200A /* UIElementButton.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementButton.cpp; sourceTree = "<group>"; };
+		AA928E1F2EDB9D1B0005200A /* UIElementCheckbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementCheckbox.h; sourceTree = "<group>"; };
+		AA928E202EDB9D1B0005200A /* UIElementCheckbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementCheckbox.cpp; sourceTree = "<group>"; };
+		AA928E212EDB9D1B0005200A /* UIElementDropdown.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementDropdown.h; sourceTree = "<group>"; };
+		AA928E222EDB9D1B0005200A /* UIElementDropdown.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementDropdown.cpp; sourceTree = "<group>"; };
+		AA928E232EDB9D1B0005200A /* UIElementEditbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementEditbox.h; sourceTree = "<group>"; };
+		AA928E242EDB9D1B0005200A /* UIElementEditbox.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementEditbox.cpp; sourceTree = "<group>"; };
+		AA928E252EDB9D1B0005200A /* UIElementRadio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementRadio.h; sourceTree = "<group>"; };
+		AA928E262EDB9D1B0005200A /* UIElementRadio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementRadio.cpp; sourceTree = "<group>"; };
+		AA928E272EDB9D1B0005200A /* UIElementThumbstick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIElementThumbstick.h; sourceTree = "<group>"; };
+		AA928E282EDB9D1B0005200A /* UIElementThumbstick.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIElementThumbstick.cpp; sourceTree = "<group>"; };
+		AA928E292EDB9D1B0005200A /* UIFontInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIFontInterface.h; sourceTree = "<group>"; };
+		AA928E2A2EDB9D1B0005200A /* UIImageInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIImageInterface.h; sourceTree = "<group>"; };
+		AA928E2B2EDB9D1B0005200A /* UIManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIManager.h; sourceTree = "<group>"; };
+		AA928E2C2EDB9D1B0005200A /* UIManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIManager.cpp; sourceTree = "<group>"; };
+		AA928E2D2EDB9D1B0005200A /* UIPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UIPanel.h; sourceTree = "<group>"; };
+		AA928E2E2EDB9D1B0005200A /* UIPanel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UIPanel.cpp; sourceTree = "<group>"; };
+		AA928E2F2EDB9D1B0005200A /* UISoundInterface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UISoundInterface.h; sourceTree = "<group>"; };
+		AA928E302EDB9D1B0005200A /* UITemplates.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UITemplates.h; sourceTree = "<group>"; };
+		AA928E312EDB9D1B0005200A /* UITemplates.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UITemplates.cpp; sourceTree = "<group>"; };
+		AA928E322EDB9D1B0005200A /* UITexture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UITexture.h; sourceTree = "<group>"; };
+		AA928E332EDB9D1B0005200A /* UITexture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = UITexture.cpp; sourceTree = "<group>"; };
+		AA928E472EDB9D440005200A /* miniz.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = miniz.h; sourceTree = "<group>"; };
+		AA928E482EDB9D440005200A /* miniz.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = miniz.c; sourceTree = "<group>"; };
+		AA928E4B2EDB9D830005200A /* Mac_Compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mac_Compat.h; sourceTree = "<group>"; };
+		AA928E4C2EDB9D830005200A /* Mac_FontServ.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mac_FontServ.h; sourceTree = "<group>"; };
+		AA928E4D2EDB9D830005200A /* Mac_FontServ.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mac_FontServ.cpp; sourceTree = "<group>"; };
+		AA928E4E2EDB9D830005200A /* Mac_Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Mac_Sound.h; sourceTree = "<group>"; };
+		AA928E4F2EDB9D830005200A /* Mac_Sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Mac_Sound.cpp; sourceTree = "<group>"; };
+		AA929E842EDBA1900005200A /* Docs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Docs; path = ../Docs; sourceTree = "<group>"; };
+		AA929E862EDBA3B80005200A /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Data; path = ../Data; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		AA9284B02EDB8BB30005200A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				AA9285A42EDB9A6A0005200A /* SDL3.framework in Frameworks */,
+				AA9285A22EDB9A5D0005200A /* SDL3_net.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		AA9284AA2EDB8BB30005200A = {
+			isa = PBXGroup;
+			children = (
+				AA9284C72EDB8CEE0005200A /* SDL.xcodeproj */,
+				AA9285942EDB9A3D0005200A /* SDL_net.xcodep

(Patch may be truncated, please check the link at the top of this post.)