[NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Patchmaking tutorials for NBA 2K15.

[NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Postby nesa24 on Wed Nov 05, 2014 6:08 am

Since i wont have any time to make progress in tool making i will post tutorials about it to make modding a step up

So ... start

In VisualSTUDIO Express go
File>NewProject>Teplates>Visual C#>Windows>WindowsFormAplication
enter name of project [Name of my proj is tutorials] > than ok

Change DEBUG to release

Add 3 listboxes from toolbox
Rename listbox1 to main [ design name ]
Rename listbox2 to sections [ design name ]
Rename lostbox3 to logbox [ design name ]
Select FORM go to events and double click load
and copy code below
Code: Select all

       private void Form1_Load(object sender, EventArgs e)
        {
            foreach (string s in nba2knames)
            {
                if (File.Exists(Directory.GetCurrentDirectory() + "\\" + s))
                {
                    main.Items.Add(s);
                }
                else
                {

                }
            }
        }


for using part we use
Code: Select all
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


above Form1Load insert

Code: Select all
 string[] nba2knames = File.ReadAllLines("2knames.txt"); //read file names
        public static string moddingfolder = Directory.GetCurrentDirectory() + "\\ModdingFolder\\"; //modding folder for file export-import
        string outputfolder = moddingfolder + "export\\"; //export folder in modding folder
        byte[] iffscan = { 0x94, 0xEF, 0x3B, 0xFF };  //94EF3BFF is IFF header
        byte[] pkzippattern = { 0x50, 0x4B, 0x03, 0x04 }; //504B0304 is PK Zip Header
        byte[] zlibpattern05 = { 0x00, 0x05, 0x78, 0xDA }; // zlib pattern1
        byte[] zlibpattern = { 0x00, 0x06, 0x78, 0xDA }; //zlib pattern2

        List<long> pkchunkslist = new List<long>(new long[] { }); // list to store pkoffsets
        long finalpkzipposs = 0;

 public static int ToInt32BigEndian(byte[] buf, int i)
        {
            return (buf[i] << 24) | (buf[i + 1] << 16) | (buf[i + 2] << 8) | buf[i + 3];
        }

       


MAIN BOX

under mainbox properties/events double click on SelectedIndexChanged
Code: Select all
    private void main_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (main.SelectedIndex != -1)
            {
                sections.Items.Clear();
                string fldr = outputfolder + main.SelectedItem.ToString();
                if (Directory.Exists(fldr) == false)
                {
                    Directory.CreateDirectory(outputfolder + main.SelectedItem.ToString());
                }

                Int64 read = 0;
                FileInfo fi = new FileInfo(Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
                long lo = fi.Length;
                using (FileStream fs = new FileStream(Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString(), FileMode.Open, FileAccess.Read))
                {
                    byte[] buf = new byte[1024 * 1024 * 400];
                    if (main.SelectedIndex != -1)
                    {
                        BinaryReader brxz = new BinaryReader(fs);
                        while (read < fs.Length)
                        {
                            brxz.BaseStream.Position = read;
                            buf = brxz.ReadBytes(buf.Length);

                            if (lo > 419430400)
                            {
                                GetPositionAfterMatchLarge(buf, iffscan, read);
                                read += buf.Length;
                            }
                            else
                            {
                                GetPositionAfterMatch(buf, iffscan);
                                read += buf.Length;
                            }
                        }
                        brxz.Close();
                    }
                }
                logbox.Items.Add(main.SelectedItem.ToString() + " ready!");

            }

            else
            {
                MessageBox.Show("Please select item");
            }
        }


and insert this above private void main_SelectedIndexChanged

Code: Select all
      #region scanlargefiles
        public void GetPositionAfterMatchLarge(byte[] data, byte[] pattern, long add) // byte[] data is buffer, pattern is iff pattern, adress is adress where to scan
        {
            for (int i = 0; i < data.Length - pattern.Length; i++)
            {
                bool match = true;
                for (int k = 0; k < pattern.Length; k++)
                {
                    if (data[i + k] != pattern[k])
                    {
                        match = false;
                        break;
                    }
                }
                if (match)
                {
                    sections.Items.Add(add + i);
                }
            }
        }
        #endregion

        #region scan smaller files [ team data ]
        public void GetPositionAfterMatch(byte[] data, byte[] pattern) // scan for iff possitions
        {
            for (int i = 0; i < data.Length - pattern.Length; i++)
            {
                bool match = true;
                for (int k = 0; k < pattern.Length; k++)
                {
                    if (data[i + k] != pattern[k])
                    {
                        match = false;
                        break;
                    }
                }
                if (match)
                {
                    sections.Items.Add(i);
                }
            }
        }
        #endregion 


*********
SECTIONS/IFFS [exports iffs to moddingfolder]

Go back to design and click sections box and under properties/events doubleclick on SelectedIndexChanged

Code: Select all
       private void sections_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            if (sections.SelectedIndex != -1)
            {
                GetChunkSize(long.Parse(sections.SelectedItem.ToString()), Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
     
            }
            else
            {
                MessageBox.Show("Please select item");
            }
        }


and code for GetChunkSize

Code: Select all
      public int GetChunkSize(long poschunk, string radnifilex)
        {
            int loc = 0;
            BinaryReader brsize = new BinaryReader(File.Open(radnifilex, FileMode.Open, FileAccess.Read));
            brsize.BaseStream.Position = poschunk + 8;
            byte[] temptorev = brsize.ReadBytes(4);
            int nch;
            nch = ToInt32BigEndian(temptorev, 0);
            label1.Text = nch.ToString();
            brsize.BaseStream.Position = poschunk;
            byte[] export = brsize.ReadBytes(nch);
            brsize.Close();
            File.WriteAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff", export);
            return loc;
        }
        #endregion


*******
Sections/IFFS [ scan for pks and zlibs ]

in design select sectionbox and in properties/events double click on doubleclick events

Code: Select all
    private void sections_DoubleClick(object sender, EventArgs e)
        {
            pkzips.Items.Clear();
            zlibbox.Items.Clear();
            GetChunkSize(long.Parse(sections.SelectedItem.ToString()), Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
            byte[] ifftemp = File.ReadAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");
            finalpkzipposs = ifftemp.Length;
            GetPositionAfterMatchCustom(ifftemp);
            GetPositionAfterMatchCustomZlib(ifftemp);

            pkzips.DataSource = pkchunkslist;
            logbox.Items.Add("Scanned " + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");

        }


*******
UNPACK ALL IFFS from main file to moddingfolder

in designer add a button and doubleclick on it

Code: Select all
    private void sections_DoubleClick(object sender, EventArgs e)
        {
            pkzips.Items.Clear();
            zlibbox.Items.Clear();
            GetChunkSize(long.Parse(sections.SelectedItem.ToString()), Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
            byte[] ifftemp = File.ReadAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");
            finalpkzipposs = ifftemp.Length;
            GetPositionAfterMatchCustom(ifftemp);
            GetPositionAfterMatchCustomZlib(ifftemp);

            pkzips.DataSource = pkchunkslist;
            logbox.Items.Add("Scanned " + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");

        }


and code for fullPK export
Code: Select all
   public void fullPKexport(int index)
        {
            int total = sections.Items.Count;
            index = 0;
            int pkchunkindex = 0;
            long indexiff = 0;
            int nomember = 0;
            long startpkoffset = 0;
            long endpkfileoffset = 0;
            byte[] ifftemp = File.ReadAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff"); //read iff
            finalpkzipposs = ifftemp.Length;

            GetPositionAfterMatchCustom(ifftemp);
            if (pkchunkslist.Count > 0)
            {
                if (Directory.Exists("testx1") == true)
                {
                    Directory.Delete("testx1", true);
                }
            }
            byte[] data = { };
            nomember = pkchunkslist.Count;
            while (pkchunkindex < nomember)
            {
                startpkoffset = long.Parse(pkchunkslist[pkchunkindex].ToString());
                using (System.IO.Stream fss = File.OpenRead(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff"))
                {
                    BinaryReader briff = new BinaryReader(fss);
                    long internindexx = indexiff;

                    if (pkchunkindex == nomember - 1)
                    {

                        endpkfileoffset = long.Parse(finalpkzipposs.ToString());

                    }
                    else
                    {

                        string s = pkchunkslist[pkchunkindex + 1].ToString();
                        endpkfileoffset = long.Parse(s);
                    }
                    briff.BaseStream.Position = startpkoffset;
                    data = briff.ReadBytes(Convert.ToInt32(endpkfileoffset - startpkoffset));
                    long datasizetext = data.Length;
                    File.WriteAllBytes("test.dat", data);
                    ExtractFile("test.dat", "testx1");
                    if (Directory.Exists("testx1") == true)
                    {
                        string[] filestomove = Directory.GetFiles("testx1");
                        foreach (string s in filestomove)
                        {
                            string s2 = s.Replace("testx1\\", "");
                            if (Directory.Exists(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString()) == false)
                            {
                                Directory.CreateDirectory(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString());
                            }
                            if (File.Exists(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2) == true)
                            {
                                File.Delete(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2);
                            }
                            File.Move(s, outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2);
                            File.WriteAllText(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\info.txt", "Data size when zipped = " + datasizetext.ToString() + "bytes");
                        }
                        pkchunkindex++;
                        Directory.Delete("testx1", true);
                    }
                    else
                    {
                        pkchunkslist.RemoveAt(pkchunkindex + 1);
                        nomember = nomember - 1;
                    }
                    briff.Close();
                }
            }
        }
     





FULLCODE [in case i skipped something and i did..]


Code: Select all
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Tutorials
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string[] nba2knames = File.ReadAllLines("2knames.txt"); //read file names
        public static string moddingfolder = Directory.GetCurrentDirectory() + "\\ModdingFolder\\"; //modding folder for file export-import
        string outputfolder = moddingfolder + "export\\"; //export folder in modding folder
        byte[] iffscan = { 0x94, 0xEF, 0x3B, 0xFF };  //94EF3BFF is IFF header
        byte[] pkzippattern = { 0x50, 0x4B, 0x03, 0x04 }; //504B0304 is PK Zip Header
        byte[] zlibpattern05 = { 0x00, 0x05, 0x78, 0xDA };
        byte[] zlibpattern = { 0x00, 0x06, 0x78, 0xDA };

        List<long> pkchunkslist = new List<long>(new long[] { }); // list to store pkoffsets
        long finalpkzipposs = 0;
       
        #region scanlargefiles
        public void GetPositionAfterMatchLarge(byte[] data, byte[] pattern, long add) // byte[] data is buffer, pattern is iff pattern, adress is adress where to scan
        {
            for (int i = 0; i < data.Length - pattern.Length; i++)
            {
                bool match = true;
                for (int k = 0; k < pattern.Length; k++)
                {
                    if (data[i + k] != pattern[k])
                    {
                        match = false;
                        break;
                    }
                }
                if (match)
                {
                    sections.Items.Add(add + i);
                }
            }
        }
        #endregion

        #region scan smaller files [ team data ]
        public void GetPositionAfterMatch(byte[] data, byte[] pattern) // scan for iff possitions
        {
            for (int i = 0; i < data.Length - pattern.Length; i++)
            {
                bool match = true;
                for (int k = 0; k < pattern.Length; k++)
                {
                    if (data[i + k] != pattern[k])
                    {
                        match = false;
                        break;
                    }
                }
                if (match)
                {
                    sections.Items.Add(i);
                }
            }
        }
        #endregion 

 
        #region findpkheaderoffsets
        public void GetPositionAfterMatchCustom(byte[] data)
        {
            for (int i = 0; i < data.Length - pkzippattern.Length; i++)
            {
                bool match = true;
                for (int k = 0; k < pkzippattern.Length; k++)
                {
                    if (data[i + k] != pkzippattern[k])
                    {
                        match = false;
                        break;
                    }
                }
                if (match)
                {
                    pkchunkslist.Add(i);
                }
            }
        }
        #endregion

        #region exportpkfromiff
        public void fullPKexport(int index)
        {
            int total = sections.Items.Count;
            index = 0;
            int pkchunkindex = 0;

            long indexiff = 0;
            int nomember = 0;

            long startpkoffset = 0;
            long endpkfileoffset = 0;




            byte[] ifftemp = File.ReadAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff"); //read iff
            finalpkzipposs = ifftemp.Length;

            GetPositionAfterMatchCustom(ifftemp);
            if (pkchunkslist.Count > 0)
            {
                if (Directory.Exists("testx1") == true)
                {
                    Directory.Delete("testx1", true);
                }
            }
            byte[] data = { };
            nomember = pkchunkslist.Count;
            while (pkchunkindex < nomember)
            {

                startpkoffset = long.Parse(pkchunkslist[pkchunkindex].ToString());
                using (System.IO.Stream fss = File.OpenRead(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff"))
                {
                    BinaryReader briff = new BinaryReader(fss);
                    long internindexx = indexiff;



                    if (pkchunkindex == nomember - 1)
                    {

                        endpkfileoffset = long.Parse(finalpkzipposs.ToString());

                    }
                    else
                    {

                        string s = pkchunkslist[pkchunkindex + 1].ToString();
                        endpkfileoffset = long.Parse(s);
                    }
                    briff.BaseStream.Position = startpkoffset;
                    data = briff.ReadBytes(Convert.ToInt32(endpkfileoffset - startpkoffset));
                    long datasizetext = data.Length;
                    File.WriteAllBytes("test.dat", data);
                    ExtractFile("test.dat", "testx1");
                    if (Directory.Exists("testx1") == true)
                    {
                        string[] filestomove = Directory.GetFiles("testx1");
                        foreach (string s in filestomove)
                        {
                            string s2 = s.Replace("testx1\\", "");
                            if (Directory.Exists(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString()) == false)
                            {
                                Directory.CreateDirectory(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString());
                            }
                            if (File.Exists(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2) == true)
                            {
                                File.Delete(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2);
                            }
                            File.Move(s, outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\" + s2);
                            File.WriteAllText(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + "\\" + startpkoffset.ToString() + "\\info.txt", "Data size when zipped = " + datasizetext.ToString() + "bytes");
                        }
                        pkchunkindex++;
                        Directory.Delete("testx1", true);
                    }
                    else
                    {
                        pkchunkslist.RemoveAt(pkchunkindex + 1);
                        nomember = nomember - 1;
                    }

                    briff.Close();
                }
            }




        }
        #endregion

        #region extractpkfile
        public void ExtractFile(string source, string destination)
        {
            if (Ionic.Zip.ZipFile.IsZipFile(source) == true)
            {
                string zPath = "7zG.exe";
                try
                {
                    ProcessStartInfo pro = new ProcessStartInfo();
                    pro.WindowStyle = ProcessWindowStyle.Hidden;
                    pro.FileName = zPath;
                    pro.Arguments = "x -y \"" + source + "\" -o" + "\"" + destination + "\"";
                    Process x = Process.Start(pro);
                    x.WaitForExit();
                    x.Close();

                }
                catch (System.Exception Ex)
                {
                }
            }
            else
            {
            }

        }
        #endregion



        public static int ToInt32BigEndian(byte[] buf, int i)
        {
            return (buf[i] << 24) | (buf[i + 1] << 16) | (buf[i + 2] << 8) | buf[i + 3];
        }

   

        #region exportifffrommain
        public void exportiff()
        {
            using (System.IO.Stream input = System.IO.File.OpenRead(Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString()))
            {
                BinaryReader bx = new BinaryReader(input);
                byte[] exp = { };
                string size = input.Length.ToString();
                bx.BaseStream.Position = long.Parse(sections.SelectedItem.ToString());
                byte[] exportIFFx = bx.ReadBytes(Int32.Parse(size));
                File.WriteAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff", exportIFFx);
                bx.Close();

                logbox.Items.Add("Saved " + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");
            }
        }
        #endregion

        #region getsizeofiffs
        public int GetChunkSize(long poschunk, string radnifilex)
        {
            int loc = 0;
            BinaryReader brsize = new BinaryReader(File.Open(radnifilex, FileMode.Open, FileAccess.Read));
            brsize.BaseStream.Position = poschunk + 8;
            byte[] temptorev = brsize.ReadBytes(4);
            int nch;
            nch = ToInt32BigEndian(temptorev, 0);
            label1.Text = nch.ToString();
            brsize.BaseStream.Position = poschunk;
            byte[] export = brsize.ReadBytes(nch);
            brsize.Close();
            File.WriteAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff", export);
            return loc;
        }
        #endregion
       

        #region findzliboffsets
        public void GetPositionAfterMatchCustomZlib(byte[] data)
        {
            for (int i = 0; i < data.Length - zlibpattern.Length; i++)
            {
                bool match = true;
                bool match2 = true;
                for (int k = 0; k < zlibpattern.Length; k++)
                {
                    if (data[i + k] != zlibpattern[k])
                    {


                        match = false;

                        if (data[i + k] != zlibpattern05[k])
                        {
                            match2 = false;
                            break;
                        }
                    }
                }
                if (match == true || match2 == true)
                {
                    zlibbox.Items.Add(i + 2);
                }

            }
        }
        #endregion



        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (string s in nba2knames)
            {
                if (File.Exists(Directory.GetCurrentDirectory() + "\\" + s))
                {
                    main.Items.Add(s);
                }
                else
                {

                }
            }
        }

        private void main_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (main.SelectedIndex != -1)
            {
                sections.Items.Clear();
                string fldr = outputfolder + main.SelectedItem.ToString();
                if (Directory.Exists(fldr) == false)
                {
                    Directory.CreateDirectory(outputfolder + main.SelectedItem.ToString());
                }

                Int64 read = 0;
                FileInfo fi = new FileInfo(Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
                long lo = fi.Length;
                using (FileStream fs = new FileStream(Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString(), FileMode.Open, FileAccess.Read))
                {
                    byte[] buf = new byte[1024 * 1024 * 400];
                    if (main.SelectedIndex != -1)
                    {
                        BinaryReader brxz = new BinaryReader(fs);
                        while (read < fs.Length)
                        {
                            brxz.BaseStream.Position = read;
                            buf = brxz.ReadBytes(buf.Length);

                            if (lo > 419430400)
                            {
                                GetPositionAfterMatchLarge(buf, iffscan, read);
                                read += buf.Length;
                            }
                            else
                            {
                                GetPositionAfterMatch(buf, iffscan);
                                read += buf.Length;
                            }
                        }
                        brxz.Close();
                    }
                }
                logbox.Items.Add(main.SelectedItem.ToString() + " ready!");

            }

            else
            {
                MessageBox.Show("Please select item");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void sections_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            if (sections.SelectedIndex != -1)
            {
                GetChunkSize(long.Parse(sections.SelectedItem.ToString()), Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
     
            }
            else
            {
                MessageBox.Show("Please select item");
            }
        }

        #region scanoffsetstolistbox
        private void sections_DoubleClick(object sender, EventArgs e)
        {
            pkzips.Items.Clear();
            zlibbox.Items.Clear();
            GetChunkSize(long.Parse(sections.SelectedItem.ToString()), Directory.GetCurrentDirectory() + "\\" + main.SelectedItem.ToString());
            byte[] ifftemp = File.ReadAllBytes(outputfolder + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");
            finalpkzipposs = ifftemp.Length;
            GetPositionAfterMatchCustom(ifftemp);
            GetPositionAfterMatchCustomZlib(ifftemp);

            pkzips.DataSource = pkchunkslist;
            logbox.Items.Add("Scanned " + main.SelectedItem.ToString() + "\\" + sections.SelectedItem.ToString() + ".iff");

        }
        #endregion

        #region extractallpkzipsfromiffs
        private void button2_Click(object sender, EventArgs e)
        {
            int sectionindex = 0;
            while (sectionindex < sections.Items.Count)
            {
                sections.SelectedIndex = sectionindex;
                fullPKexport(sectionindex);
                sectionindex = sectionindex + 1;
                pkchunkslist.Clear(); //clear pkzip list of offsets
                zlibbox.Items.Clear(); //clear zlibbs
            }
            MessageBox.Show("DONE!");
        }
        #endregion

    }
}




Hope others will continue work since i wont be able in next 7-10 days for sure...
Cheers
This topic was moved by a nonexistent user on Wed Nov 05, 2014 8:58 am.
All men dream: but not equally.
Those who dream by night in the dusty recesses of their minds wake in the day to find that it was vanity: but the dreamers of the day are dangerous men, for they may act their dreams with open eyes, to make it possible.
This I did.
User avatar
nesa24
 
Posts: 313
Joined: Sun Mar 04, 2012 3:43 am

Re: [NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Postby bigh0rt on Wed Nov 05, 2014 7:30 am

Thank you very much. (Y)
User avatar
bigh0rt
NLSC Team Member
NLSC Team Member
 
Posts: 9032
Joined: Thu Nov 10, 2005 5:06 pm
Location: New York

Re: [NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Postby nesa24 on Thu Nov 06, 2014 12:26 am

no probs

i will post another tutorial
that one will be about file research
All men dream: but not equally.
Those who dream by night in the dusty recesses of their minds wake in the day to find that it was vanity: but the dreamers of the day are dangerous men, for they may act their dreams with open eyes, to make it possible.
This I did.
User avatar
nesa24
 
Posts: 313
Joined: Sun Mar 04, 2012 3:43 am

Re: [NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Postby A_Armella on Sat Nov 08, 2014 2:16 pm

Thank you Nesa! You've opened the door for a whole new level of modding. It's great to get an insight into what goes into making these tools.

I'm looking forward to reading the file research tutorial.
Follow me on Twitter @A_Armella for my latest mod releases
A_Armella
 
Posts: 60
Joined: Fri Jul 12, 2013 1:31 pm

Re: [NBA2K15 PC] Tutorial - Managing files [ C# Tutorial and SourceCode ]

Postby Retroswald13 on Fri Nov 14, 2014 12:55 pm

Which version of Visual Studio do you advise?
User avatar
Retroswald13
Oswald. Legend Mods Creator. 256 Project Starter. Real Cheerleaders. Kawaii Leonard.
 
Posts: 554
Joined: Sat May 28, 2011 2:15 pm
Location: Philippines


Return to NBA 2K15 Tutorials & FAQs

Who is online

Users browsing this forum: No registered users and 2 guests