Index: AE/Installer/trunk/source/methods.h
===================================================================
--- AE/Installer/trunk/source/methods.h	(revision 312)
+++ AE/Installer/trunk/source/methods.h	(revision 314)
@@ -79,2 +79,92 @@
 void tokenize(const string&, vector<string>&, const string& delimiters = " ");
 //bool getDirectoryContents(char , char &);
+
+
+//New copy(path, path) function. Too lazy to implement my own, this is basically how I would have done it though.
+//No, really. :)
+//Move to utilities.cpp when the time comes.
+using namespace boost::filesystem; 
+using namespace std;
+
+void copy_directory( const path & from_dir_ph, 
+ const path & to_dir_ph ); 
+ 
+ void copy( const path & from_file_ph, 
+ const path & to_file_ph ); 
+
+
+// this function copies files and directories. If copying a 
+// directory to a directory, it copies recursively. 
+
+ //pardon the mess, I did this at midnight, and had to fix a bug
+void copy( const path & from_ph, 
+		  const path & to_ph ) 
+{ 
+	cout << to_ph.string() << "\n";
+	// Make sure that the destination, if it exists, is a directory 
+	if((exists(to_ph) && !is_directory(to_ph)) || (!exists(from_ph))) cout << "error";
+	if(!is_directory(from_ph)) 
+	{ 
+		
+		if(exists(to_ph)) 
+		{ 
+			copy_file(from_ph,to_ph/from_ph.filename()); 
+		} 
+		else 
+		{ 
+			try{
+			
+			copy_file(from_ph,to_ph);
+			}
+			catch (exception ex){
+			cout << from_ph.string() << " to " << to_ph.string() << "\n";
+			}
+		}
+
+	} 
+	else if(from_ph.filename() != ".svn")
+	{ 
+		path destination; 
+		if(!exists(to_ph)) 
+		{ 
+			destination=to_ph; 
+		} 
+		else 
+		{ 
+			destination=to_ph/from_ph.filename(); 
+		} 
+		//not sure what this did, its going away though. probably error checking ;)
+		//copy_directory(from_ph,destination); 
+
+		for(directory_iterator i(from_ph); i!=directory_iterator(); ++i) 
+		{ 
+			//the idiot who coded this in the first place (not me)
+			//forgot to make a new directory. Exception city. x_x
+			create_directory(destination); 
+			copy(*i,destination/i->filename()); 
+		} 
+	} 
+} 
+
+void copy_directory( const path &from_dir_ph, 
+					const path &to_dir_ph) 
+{ 
+	if(!exists(from_dir_ph) || !is_directory(from_dir_ph) 
+		|| exists(to_dir_ph)) 
+		cout << !exists(from_dir_ph) << " " << !is_directory(from_dir_ph) 
+		<< " " << exists(to_dir_ph);
+		//boost::throw_exception( filesystem_error( 
+		//"boost::filesystem::copy_directory", 
+		//from_dir_ph, to_dir_ph, boost::system::error_code() )); 
+
+# ifdef BOOST_POSIX 
+	struct stat from_stat; 
+	if ( (::stat( from_dir_ph.string().c_str(), &from_stat ) != 0) 
+		|| ::mkdir(to_dir_ph.native_directory_string().c_str(), 
+		from_stat.st_mode)!=0) 
+# endif 
+	//	boost::throw_exception( filesystem_error( 
+	//	//"boost::filesystem::copy_directory", 
+	//	from_dir_ph, to_dir_ph, boost::system::error_code())); 
+} 
+
Index: AE/Installer/trunk/source/subs.cpp
===================================================================
--- AE/Installer/trunk/source/subs.cpp	(revision 312)
+++ AE/Installer/trunk/source/subs.cpp	(revision 314)
@@ -105,5 +105,5 @@
 	int err = 0;
 	
-		try {
+	try {
 	int levels[15] = {0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19}; // the levels Oni has
 	char choice = 0;
@@ -266,5 +266,5 @@
 	
 	create_directory("../GameDataFolder/IGMD");
-	copy_file("packages/VanillaBSL", "../GameDataFolder/IGMD");
+	copy((path)"packages/VanillaBSL/IGMD", (path)"../GameDataFolder");
 	}
 	catch (exception ex) {
