diff --git a/Generals/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt b/Generals/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
index a81aef267ab..18447bfab33 100644
--- a/Generals/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
+++ b/Generals/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
@@ -23,6 +23,7 @@ set(WWLIB_SRC
ramfile.cpp
random.cpp
rawfile.cpp
+ rcfile.cpp
readline.cpp
realcrc.cpp
refcount.cpp
@@ -83,6 +84,7 @@ set(WWLIB_SRC
RAMFILE.H
RANDOM.H
RAWFILE.H
+ rcfile.h
readline.h
realcrc.h
ref_ptr.h
diff --git a/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp b/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
new file mode 100644
index 00000000000..7fbfe90299c
--- /dev/null
+++ b/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
@@ -0,0 +1,129 @@
+/*
+** Command & Conquer Generals(tm)
+** Copyright 2025 Electronic Arts Inc.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation, either version 3 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program. If not, see .
+*/
+
+/***********************************************************************************************
+ *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
+ ***********************************************************************************************
+ * *
+ * Project Name : wwlib *
+ * *
+ * $Archive:: /Commando/Code/wwlib/rcfile.cpp $*
+ * *
+ * Author:: Greg Hjelstrom *
+ * *
+ * $Modtime:: 7/09/99 1:37p $*
+ * *
+ * $Revision:: 5 $*
+ * *
+ *---------------------------------------------------------------------------------------------*
+ * Functions: *
+ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+
+#include "rcfile.h"
+#include
+
+const char * RESOURCE_FILE_TYPE_NAME = "File";
+
+
+ResourceFileClass::ResourceFileClass(HMODULE hmodule, char const *filename) :
+ ResourceName(NULL),
+ hModule(NULL),
+ FileBytes(NULL),
+ FilePtr(NULL),
+ EndOfFile(NULL)
+{
+ Set_Name(filename);
+ HRSRC hresource = FindResource(hmodule,ResourceName,RESOURCE_FILE_TYPE_NAME);
+
+ if (hresource) {
+ HGLOBAL hglob = LoadResource(hmodule,hresource);
+ if (hglob) {
+ FileBytes = (unsigned char *)LockResource(hglob);
+ if (FileBytes) {
+ FilePtr = FileBytes;
+ EndOfFile = FileBytes + SizeofResource(hmodule,hresource);
+ }
+ }
+ }
+}
+
+ResourceFileClass::~ResourceFileClass(void)
+{
+ if (ResourceName)
+ free(ResourceName);
+}
+
+char const * ResourceFileClass::Set_Name(char const *filename)
+{
+ if (ResourceName) {
+ free(ResourceName);
+ ResourceName = NULL;
+ }
+ if (filename) {
+ ResourceName = strdup(filename);
+ }
+ return ResourceName;
+}
+
+int ResourceFileClass::Read(void *buffer, int size)
+{
+ if (!FilePtr) return 0;
+
+ if (FilePtr + size > EndOfFile) {
+ size = EndOfFile - FilePtr;
+ }
+ memcpy(buffer,FilePtr,size);
+ FilePtr += size;
+ return size;
+}
+
+int ResourceFileClass::Seek(int pos, int dir)
+{
+ switch (dir) {
+ case SEEK_SET:
+ FilePtr = FileBytes + pos;
+ break;
+
+ case SEEK_CUR:
+ FilePtr = FilePtr + pos;
+ break;
+
+ case SEEK_END:
+ FilePtr = EndOfFile + pos;
+ break;
+ }
+
+ if (FilePtr > EndOfFile) {
+ FilePtr = EndOfFile;
+ }
+ if (FilePtr < FileBytes) {
+ FilePtr = FileBytes;
+ }
+
+ return FilePtr - FileBytes;
+}
+
+int ResourceFileClass::Size(void)
+{
+ return EndOfFile - FileBytes;
+}
+
+void ResourceFileClass::Error(int /*error*/, int /*canretry*/, char const * /*filename*/)
+{
+}
diff --git a/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.h b/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.h
new file mode 100644
index 00000000000..f2344e6638b
--- /dev/null
+++ b/Generals/Code/Libraries/Source/WWVegas/WWLib/rcfile.h
@@ -0,0 +1,95 @@
+/*
+** Command & Conquer Generals(tm)
+** Copyright 2025 Electronic Arts Inc.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation, either version 3 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program. If not, see .
+*/
+
+/***********************************************************************************************
+ *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
+ ***********************************************************************************************
+ * *
+ * Project Name : wwlib *
+ * *
+ * $Archive:: /Commando/Code/wwlib/rcfile.h $*
+ * *
+ * Author:: Greg Hjelstrom *
+ * *
+ * $Modtime:: 7/09/99 1:37p $*
+ * *
+ * $Revision:: 7 $*
+ * *
+ *---------------------------------------------------------------------------------------------*
+ * Functions: *
+ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#ifndef RCFILE_H
+#define RCFILE_H
+
+#include "always.h"
+#include "WWFILE.H"
+#include "win.h"
+
+/*
+** ResourceFileClass
+** This is a file class which allows you to read from a binary file that you have
+** imported into your resources. Just import the file as a custom resource of the
+** type "File". Replace the "id" of the resource with its filename (change
+** IDR_FILE1 to "MyFile.w3d") and then you will be able to access it by using this
+** class.
+*/
+class ResourceFileClass : public FileClass
+{
+ public:
+
+ ResourceFileClass(HMODULE hmodule, char const *filename);
+ virtual ~ResourceFileClass(void);
+
+ virtual char const * File_Name(void) const { return ResourceName; }
+ virtual char const * Set_Name(char const *filename);
+ virtual int Create(void) { return false; }
+ virtual int Delete(void) { return false; }
+ virtual bool Is_Available(int /*forced=false*/) { return Is_Open (); }
+ virtual bool Is_Open(void) const { return (FileBytes != NULL); }
+
+ virtual int Open(char const * /*fname*/, int /*rights=READ*/) { return Is_Open(); }
+ virtual int Open(int /*rights=READ*/) { return Is_Open(); }
+
+ virtual int Read(void *buffer, int size);
+ virtual int Seek(int pos, int dir=SEEK_CUR);
+ virtual int Size(void);
+ virtual int Write(void const * /*buffer*/, int /*size*/) { return 0; }
+ virtual void Close(void) { }
+ virtual void Error(int error, int canretry = false, char const * filename=NULL);
+
+ virtual unsigned char *Peek_Data(void) const { return FileBytes; }
+
+ protected:
+
+ char * ResourceName;
+
+ HMODULE hModule;
+
+ unsigned char * FileBytes;
+ unsigned char * FilePtr;
+ unsigned char * EndOfFile;
+
+};
+
+
+#endif
diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
index 5f0fb34cd1e..73c28c725bb 100644
--- a/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
+++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/CMakeLists.txt
@@ -26,6 +26,7 @@ set(WWLIB_SRC
ramfile.cpp
random.cpp
rawfile.cpp
+ rcfile.cpp
readline.cpp
realcrc.cpp
refcount.cpp
@@ -89,6 +90,7 @@ set(WWLIB_SRC
RAMFILE.H
RANDOM.H
RAWFILE.H
+ rcfile.h
readline.h
realcrc.h
ref_ptr.h
diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
new file mode 100644
index 00000000000..83e3d520ea0
--- /dev/null
+++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.cpp
@@ -0,0 +1,129 @@
+/*
+** Command & Conquer Generals Zero Hour(tm)
+** Copyright 2025 Electronic Arts Inc.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation, either version 3 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program. If not, see .
+*/
+
+/***********************************************************************************************
+ *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
+ ***********************************************************************************************
+ * *
+ * Project Name : wwlib *
+ * *
+ * $Archive:: /Commando/Code/wwlib/rcfile.cpp $*
+ * *
+ * Author:: Greg Hjelstrom *
+ * *
+ * $Modtime:: 7/09/99 1:37p $*
+ * *
+ * $Revision:: 5 $*
+ * *
+ *---------------------------------------------------------------------------------------------*
+ * Functions: *
+ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+
+#include "rcfile.h"
+#include
+
+const char * RESOURCE_FILE_TYPE_NAME = "File";
+
+
+ResourceFileClass::ResourceFileClass(HMODULE hmodule, char const *filename) :
+ ResourceName(NULL),
+ hModule(NULL),
+ FileBytes(NULL),
+ FilePtr(NULL),
+ EndOfFile(NULL)
+{
+ Set_Name(filename);
+ HRSRC hresource = FindResource(hmodule,ResourceName,RESOURCE_FILE_TYPE_NAME);
+
+ if (hresource) {
+ HGLOBAL hglob = LoadResource(hmodule,hresource);
+ if (hglob) {
+ FileBytes = (unsigned char *)LockResource(hglob);
+ if (FileBytes) {
+ FilePtr = FileBytes;
+ EndOfFile = FileBytes + SizeofResource(hmodule,hresource);
+ }
+ }
+ }
+}
+
+ResourceFileClass::~ResourceFileClass(void)
+{
+ if (ResourceName)
+ free(ResourceName);
+}
+
+char const * ResourceFileClass::Set_Name(char const *filename)
+{
+ if (ResourceName) {
+ free(ResourceName);
+ ResourceName = NULL;
+ }
+ if (filename) {
+ ResourceName = strdup(filename);
+ }
+ return ResourceName;
+}
+
+int ResourceFileClass::Read(void *buffer, int size)
+{
+ if (!FilePtr) return 0;
+
+ if (FilePtr + size > EndOfFile) {
+ size = EndOfFile - FilePtr;
+ }
+ memcpy(buffer,FilePtr,size);
+ FilePtr += size;
+ return size;
+}
+
+int ResourceFileClass::Seek(int pos, int dir)
+{
+ switch (dir) {
+ case SEEK_SET:
+ FilePtr = FileBytes + pos;
+ break;
+
+ case SEEK_CUR:
+ FilePtr = FilePtr + pos;
+ break;
+
+ case SEEK_END:
+ FilePtr = EndOfFile + pos;
+ break;
+ }
+
+ if (FilePtr > EndOfFile) {
+ FilePtr = EndOfFile;
+ }
+ if (FilePtr < FileBytes) {
+ FilePtr = FileBytes;
+ }
+
+ return FilePtr - FileBytes;
+}
+
+int ResourceFileClass::Size(void)
+{
+ return EndOfFile - FileBytes;
+}
+
+void ResourceFileClass::Error(int /*error*/, int /*canretry*/, char const * /*filename*/)
+{
+}
diff --git a/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.h b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.h
new file mode 100644
index 00000000000..510c455651c
--- /dev/null
+++ b/GeneralsMD/Code/Libraries/Source/WWVegas/WWLib/rcfile.h
@@ -0,0 +1,96 @@
+/*
+** Command & Conquer Generals Zero Hour(tm)
+** Copyright 2025 Electronic Arts Inc.
+**
+** This program is free software: you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation, either version 3 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program. If not, see .
+*/
+
+/***********************************************************************************************
+ *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
+ ***********************************************************************************************
+ * *
+ * Project Name : wwlib *
+ * *
+ * $Archive:: /Commando/Code/wwlib/rcfile.h $*
+ * *
+ * Author:: Greg Hjelstrom *
+ * *
+ * $Modtime:: 11/02/01 1:21p $*
+ * *
+ * $Revision:: 8 $*
+ * *
+ *---------------------------------------------------------------------------------------------*
+ * Functions: *
+ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#ifndef RCFILE_H
+#define RCFILE_H
+
+#include "always.h"
+#include "WWFILE.H"
+#include "win.h"
+
+/*
+** ResourceFileClass
+** This is a file class which allows you to read from a binary file that you have
+** imported into your resources. Just import the file as a custom resource of the
+** type "File". Replace the "id" of the resource with its filename (change
+** IDR_FILE1 to "MyFile.w3d") and then you will be able to access it by using this
+** class.
+*/
+class ResourceFileClass : public FileClass
+{
+ public:
+
+ ResourceFileClass(HMODULE hmodule, char const *filename);
+ virtual ~ResourceFileClass(void);
+
+ virtual char const * File_Name(void) const { return ResourceName; }
+ virtual char const * Set_Name(char const *filename);
+ virtual int Create(void) { return false; }
+ virtual int Delete(void) { return false; }
+ virtual bool Is_Available(int /*forced=false*/) { return Is_Open (); }
+ virtual bool Is_Open(void) const { return (FileBytes != NULL); }
+
+ virtual int Open(char const * /*fname*/, int /*rights=READ*/) { return Is_Open(); }
+ virtual int Open(int /*rights=READ*/) { return Is_Open(); }
+
+ virtual int Read(void *buffer, int size);
+ virtual int Seek(int pos, int dir=SEEK_CUR);
+ virtual int Size(void);
+ virtual int Write(void const * /*buffer*/, int /*size*/) { return 0; }
+ virtual void Close(void) { }
+ virtual void Error(int error, int canretry = false, char const * filename=NULL);
+ virtual void Bias(int start, int length=-1) {}
+
+ virtual unsigned char *Peek_Data(void) const { return FileBytes; }
+
+ protected:
+
+ char * ResourceName;
+
+ HMODULE hModule;
+
+ unsigned char * FileBytes;
+ unsigned char * FilePtr;
+ unsigned char * EndOfFile;
+
+};
+
+
+#endif