What's new

The Tesseract for BO2 v2.0 (Now Open Source)

CraigChrist8239

CraigChrist8239

VIP
VIP
Hardened Veteran Experienced Veteran Grizzled Veteran
Messages
2,641
Reaction score
3,924
Points
660
Sin$
-7
240px-Tesseract.gif

The Tesseract for BO2 2.0

What is the Tesseract?
The Tesseract is a cross-game modding tool for any devkit or RGH/JTAG. It is NOT a mod menu. The biggest feature is the numerous asset loaders including a script loader (GSC and CSC). Also included is various xex patches and my attempt at a challenge response (for an online bypass).

XEX Patches
  • A challenge response. Keep in mind that I in no way garuntee that this will keep you from getting banned. I do not go online much and I do not have a fleet of BETA testers to make sure that no one gets banned... but this should work.
  • External DLC maps. The game will think all DLC is present at all times, and instead of loading the DLC containers, the map files will be loaded from the installation folder.
  • Remove DVAR system checks.
  • Remove invalid gamertag check.
  • Remove clan tag checks.
  • Remove custom class name checks.
  • GSC++. A concept I made up that currently consists of 2 parts. The first is to report extra error information from the script loader. The second is to load "new" gscs, that do not exist yet.
Then the asset editors (Note that with v2.0 some of the dumps are out of date, they will be updated soon):
  • GSC Editor! (Compile using this, download decompiled dump here, download a raw extraction here (aero :wink:)) (GSCs go inside the appropriate path in the /raw/ folder)
  • Phys Preset Editor (Download dump here, place edited files in /raw/physics/)
  • Map Entities Editor (Download dump here, place edited files in the appropriate path in the /raw/ folder)
  • Localized String Editor (Place .str files in /raw/english/)
  • Weapon Def Editor (For a weapons dump, go here) (Place edited files in /raw/weapons/mp/ or /raw/weapons/zm/)
  • Attachment Def Editor (An attachment and unique attachment dump is here)(Place edited files in /raw/attachment/mp/ or /raw/attachment/zm/)
  • Unique Attachment Def Editor (Place edited files in /raw/attachment_unq/mp/ or /raw/attachment_unq/zm/)
  • Rawfile Editor (Download dump here, place edited files in the appropriate path in the /raw/ folder)
  • String Table Editor (Download dump here, place edited files in the appropriate path in the /raw/ folder)
  • Vehicle Editor (Download dump here, place edited files in /raw/vehicles/mp/ or /raw/vehicles/zm/)
  • Tracer Editor (Download dump here, place edited files in /raw/tracer/)
  • QDB and Slug editors (No dumps for these as I'm not exactly sure what they are for)
  • Footstep and Footstep FX table editors.
  • ZBarrier Editor (Download dump here, place edited files in /raw/zbarrier/)

Installation
1. Create a filerip of your legal, legit copy of Black Ops 2 for Xbox 360 and put it somewhere where your system can run it (either on the hard drive or a USB drive).
2. Any DLC files you wish to install must be extracted from their container and the files must be installed to the Black Ops 2 folder. Use a program such as Horizon, Le Fluffie or even Modio to extract all the files from the DLC container. Then copy any file ending in .sabs to the /stream/ folder and any file ending in .sabl to the /load/ folder. Any other files go into the installation path.
3. Last step is to install the TU file. Make sure this is done after ALL the DLC files you wish to install are installed. Again any .sabs files go in the /stream/ folder and any .sabl files go in the /load/ folder, the rest go in the installation path. Keep in mind that the XEXp files are used later, so those don't need to be copied.
4. Next patch the XEX. You can either do this manually, or have a friend do it, as this is warez. Since this site has a premium section, I can post a premade TU18 XEX there. First you must patch the XEX with the XEXp from the TU file using XexPatcher. After that you can either patch the XEX to load the DLL or use a small app to launch the XEX then the DLL.
5. Last step is to copy the appropriate DLL to the installation path. If you're running on a real XDK then use the one in the Dev folder, any other should use the RGH/JTAG version.

For the _clientids.gsc example here, I would put it at Black Ops 2/raw/maps/mp/gametypes/_clientids.gsc (or Black Ops 2/raw/maps/mp/gametypes_zm/_clientids.gsc for zombies).

UI3gD.png


Todo list:
  • Fix known bug of no new assets (MUST EDIT PREVIOUSLY EXISTING GSCS/RAWFILES/LOCALIZED STRINGS/WEAPONS/etc...)
  • Implement GSC++. UPDATE: Half way done.
A note to developers, the load address is 0x88000000.

Change Log:
v2.0
Gutted the entire Tesseract and rebuilt almost everything.
Went open-source.
Note that the playlist update editor has been removed and will be replaced by a .wad file loader in the future.
v1.1
Weapon editor fixes.
Allow loading of custom gsc files.
Failed function linkage reporting.
Include manual patches for DLC files.
Added Playlist Update Editor
 
Last edited:
Deathy

Deathy

Anime & Manga <3
Messages
552
Reaction score
177
Points
280
Sin$
7
Okay so I got messing with GSC Assets again because of this :tongue:
And produced something really simple but the code is terrible, but it works soo use it if you want I don't care...
http://pastebin.com/QWtcuFrP

Pictures of the production
547099cb5b.png

32318fc0e0.png

f856e9f0b2.png


(it is obviously a menu) But there are others you can do with this. I also used _clientids.

I thank you again for releasing this :tongue:
 
Last edited:
Im Leroy

Im Leroy

I'm just Testing Stuff.
Messages
446
Reaction score
165
Points
125
Sin$
0
Thank you for this. Good way to show off that you are still the best. :wink:
 
CraigChrist8239

CraigChrist8239

VIP
VIP
Hardened Veteran Experienced Veteran Grizzled Veteran
Messages
2,641
Reaction score
3,924
Points
660
Sin$
-7
For anyone who wants a list of all the gscs to edit, master131 dumped them all here. They all should be exactly the same on 360. As far as the other editors go (stringtable, localize, weapondef, etc.), I'll be posting those dumps in full when I have more time later.

EDIT: Also a note on stats. All the stat setting functions use labels in the structure I've already released. There are some restrictions however. If any of these ever happen, then the stats for the game get thrown out:
plevel and stats_version can't change
rankxp can't increase by 65536 or decrease by 1
kills and assists can't increase by 300 or decrease by 1
deaths can't decrease
headshots can't increase by 200 or decrease
revives can't increase by 100 or decrease
time played, wins and ties can't decrease
hits and misses can't increase by 2500 or decrease
total shots can't increase by 5000 or decrease
rank can't increase by 20
can this make a aimbot? lol i really wanna use a aimbot
wait you make mod menus with this!?
I don't think you realize the quality of the thread you're destroying.
But to answer your questions, if you can script either one then yes.
 
Last edited:
SC58

SC58

Enthusiast
Messages
358
Reaction score
129
Points
125
Sin$
7
240px-Tesseract.gif

The Tesseract for BO2 1.0

What is the Tesseract?

The Tesseract is a cross-game modding tool for any devkit or RGH/JTAG. It is NOT a mod menu. For Black Ops 2 it is simply an asset editing tool, which is all that is needed. The current features for Black Ops 2 are:
  • GSC Editor! (Compile using this)
  • Phys Preset Editor
  • Map Entities Editor
  • Localzied String Editor
  • Weapon Def Editor
  • Attachment Def Editor
  • Unique Attachment Def Editor
  • Rawfile Editor
  • String Table Editor
  • Vehicle Editor
  • Tracer Editor
  • ZBarrier Editor
Installation
First you're going to need a way to load the DLL into memory. I'm going to be posting this XEX in the premium section (because it is warez) which is fully capable of loading this dll. Either make your own, or get it from a premium user. Start by extracting the DLL for the appropriate system from the download on this page. If you're on a developers kit use the DEV version, if you're on anything else then use the RGH/JTAG version. To load assets, they need to go into a /raw/ folder in your Black Ops 2 folder. For the _clientids.gsc example here, I would put it at Black Ops 2/raw/maps/mp/gametypes/_clientids.gsc (or Black Ops 2/raw/maps/mp/gametypes_zm/_clientids.gsc for zombies).

UI3gD.png


Is is still not working? Did you install the Black Ops 2 TU18? Go to this site and download the latest Black Ops 2 TU. Extract it using something like Horizon and copy all the FF and IPAK files to your Black Ops 2 folder and then the sabl files to the load folder and then the sabs files to the stream folder.
Todo list:
  • Fix known bug of no new assets (MUST EDIT PREVIOUSLY EXISTING GSCS/RAWFILES/LOCALIZED STRINGS/WEAPONS/etc...)
  • Implement GSC++.


A note to developers, the load address is 0x88000000.


Very nice release, Would be cool to see the GSC loader on PS3 since it all ready done for PC and now 360
 
Devient

Devient

Banned
Messages
443
Reaction score
291
Points
125
Sin$
0
I'm definitely going to have some fun with this, excellent work Craig!
 
CraigChrist8239

CraigChrist8239

VIP
VIP
Hardened Veteran Experienced Veteran Grizzled Veteran
Messages
2,641
Reaction score
3,924
Points
660
Sin$
-7
I'm updating the OP with links to all the weapon, attachment and unique attachment assets. The Tesseract should handle these files just fine. Weapons go in /raw/weapons/mp/ or /raw/weapons/zm/. Attachments in /raw/attachment/mp/ or /zm/ and unique attachments go in /attachment_unq/ respectively. Tracer, vehicle, etc... will be added either later today or tomorrow.
Very nice release, Would be cool to see the GSC loader on PS3 since it all ready done for PC and now 360
Theres a reason I released the GSC compiler separately, and as a "console compiler". All the "PS3 scene" has to do is make their own loader and the GSCs it produces should load right up.
 
Im Leroy

Im Leroy

I'm just Testing Stuff.
Messages
446
Reaction score
165
Points
125
Sin$
0
I'm updating the OP with links to all the weapon, attachment and unique attachment assets. The Tesseract should handle these files just fine. Weapons go in /raw/weapons/mp/ or /raw/weapons/zm/. Attachments in /raw/attachment/mp/ or /zm/ and unique attachments go in /attachment_unq/ respectively. Tracer, vehicle, etc... will be added either later today or tomorrow.

Theres a reason I released the GSC compiler separately, and as a "console compiler". All the "PS3 scene" has to do is make their own loader and the GSCs it produces should load right up.
Check the download for the gun dumps.
 
D

D3cH

Newbie
Messages
15
Reaction score
6
Points
45
Sin$
0
Theres a reason I released the GSC compiler separately, and as a "console compiler". All the "PS3 scene" has to do is make their own loader and the GSCs it produces should load right up.


Yup, dtx12's compiler works fine for PS3.

8hXZ7Hi.jpg
 
SC58

SC58

Enthusiast
Messages
358
Reaction score
129
Points
125
Sin$
7
I'm updating the OP with links to all the weapon, attachment and unique attachment assets. The Tesseract should handle these files just fine. Weapons go in /raw/weapons/mp/ or /raw/weapons/zm/. Attachments in /raw/attachment/mp/ or /zm/ and unique attachments go in /attachment_unq/ respectively. Tracer, vehicle, etc... will be added either later today or tomorrow.

Theres a reason I released the GSC compiler separately, and as a "console compiler". All the "PS3 scene" has to do is make their own loader and the GSCs it produces should load right up.

Don't bo2 have the same check as bo1 where clients can't connect when doing gsc
 
CraigChrist8239

CraigChrist8239

VIP
VIP
Hardened Veteran Experienced Veteran Grizzled Veteran
Messages
2,641
Reaction score
3,924
Points
660
Sin$
-7
Don't bo2 have the same check as bo1 where clients can't connect when doing gsc
The surprising part is no. Retail clients can connect just fine.
EDIT: So far, dun dun duuhhhh!!! Its worth noting that this dll uses an auto-update feature. For instance, I actually coded the entire thing on TU16 and updated to TU18 without changing the dll at all. As long as there aren't any GSC restrictions on TU19, it should already work for it.
 
imGol2den

imGol2den

Life Goes On!
Messages
1,059
Reaction score
469
Points
165
Sin$
0
I just remade my mw2 forge in bo2 gsc :wink:
Comparing my forge to other forges, I think mine is more optimized and better!
But idk either way, other than how I spawn then instanly pick up the carepackage with 2 bullettraces, how do you think I can improve it?

Code:
#include maps\mp\gametypes\_hud_util;

init()
{
    level.clientid = 0;
    level thread onPlayerConnect();
 
    setdvar("scr_" + level.gametype + "_timelimit", 0);
    setdvar("scr_" + level.gametype + "_scorelimit", 0);
}

onPlayerConnect()
{
    for(;;)
    {
        level waittill("connecting", player);
        player.clientid = level.clientid;
        level.clientid++;
     
        // Player spawn detection
        player thread onPlayerSpawned();
        // Forge text hud elem
        player DoForgeText();
        // Start monitoring buttons
        player thread MonitorButtons();
        // Start move crate thread
        player thread MoveCrate();
    }
}

onPlayerSpawned()
{
    self endon("disconnect");
    level endon("game_ended");
 
    for(;;)
    {
        self waittill("spawned_player");
     
        // Count down moveing
        self freezeControls(false);
    }
}

DoForgeText()
{
    self.MenuNameText = self createFontString("objective", 1.6);
    self.MenuNameText.color = (200, 0, 0);
    self.MenuNameText setText("Forge Mod v1.0");
    self.MenuNameText setPoint("TOPRIGHT", "TOPRIGHT", 0, 0);
}

/*

Simple spawning of crate
forward = anglesToForward(self getplayerangles());
start = self geteye();
end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
Model = spawn("script_model", bullettrace(start, start + end, false, undefined)["position"]);
Model setmodel("t6_wpn_supply_drop_ally");

*/

MonitorButtons()
{
    self endon("disconnect");
 
    for(;;)
    {
        if(self actionslotonebuttonpressed()) // DPAD_UP
        {
            SpawnCrate();
            self iprintln("SpawnCrate");
        }
        if(self actionslottwobuttonpressed()) // DPAD_DOWN
        {
            if(isdefined(self.CurrentCrate) == true)
            {
                DropCrate();
                self iprintln("DropCrate");
            }
            else if(isdefined(self.CurrentCrate) == false)
            {
                PickupCrate();
                self iprintln("PickupCrate");
            }
        }
        if(self actionslotfourbuttonpressed()) // DPAD_RIGHT
        {
            if(isdefined(self.CurrentCrate) == true)
            {
                self.CurrentCrate delete();
                self.CurrentCrate = undefined;
            }
            else if(isdefined(self.CurrentCrate) == false)
            {
                forward = anglesToForward(self getplayerangles());
                start = self geteye();
                end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
                bullettrace(start, start + end, false, undefined)["entity"] delete();
            }
            self iprintln("DeleteCrate");
        }
        wait 0.05;
    }
}

MoveCrate()
{
    self endon("disconnect");
 
    for(;;)
    {
        if(isdefined(self.CurrentCrate) == true)
        {
            forward = anglestoforward(self getplayerangles());
            start = self geteye();
            end = (forward[0] * 100, forward[1] * 100, forward[2] * 100);
            self.CurrentCrate.origin = start + end;
            self.CurrentCrate.angles = (0, self.angles[1], self.angles[2]);
        }
        wait 0.05;
    }
}

SpawnCrate()
{
    forward = anglesToForward(self getplayerangles());
    start = self geteye();
    end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
    Crate = spawn("script_model", bullettrace(start, start + end, false, undefined)["position"]);
    Crate setmodel("t6_wpn_supply_drop_ally");
    self.CurrentCrate = Crate;
    self PickupCrate();
}

DropCrate()
{
    self.CurrentCrate = undefined;
}

PickupCrate()
{
    forward = anglesToForward(self getplayerangles());
    start = self geteye();
    end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
    self.CurrentCrate = bullettrace(start, start + end, false, undefined)["entity"];
}
 
Last edited:
D

dtx12

Enthusiast
Messages
25
Reaction score
12
Points
55
Sin$
7
Very nice release, Would be cool to see the GSC loader on PS3 since it all ready done for PC and now 360
Made this one by yourself, there is nothing hard to do.
I just remade my mw2 forge in bo2 gsc :wink:
Comparing my forge to other forges, I think mine is more optimized and better!
But idk either way, other than how I spawn then instanly pick up the carepackage with 2 bullettraces, how do you think I can improve it?

Code:
#include maps\mp\gametypes\_hud_util;

init()
{
    level.clientid = 0;
    level thread onPlayerConnect();

    setdvar("scr_" + level.gametype + "_timelimit", 0);
    setdvar("scr_" + level.gametype + "_scorelimit", 0);
}

onPlayerConnect()
{
    for(;;)
    {
        level waittill("connecting", player);
        player.clientid = level.clientid;
        level.clientid++;
 
        // Player spawn detection
        player thread onPlayerSpawned();
        // Forge text hud elem
        player DoForgeText();
        // Start monitoring buttons
        player thread MonitorButtons();
        // Start move crate thread
        player thread MoveCrate();
    }
}

onPlayerSpawned()
{
    self endon("disconnect");
    level endon("game_ended");

    for(;;)
    {
        self waittill("spawned_player");
 
        // Count down moveing
        self freezeControls(false);
    }
}

DoForgeText()
{
    self.MenuNameText = self createFontString("objective", 1.6);
    self.MenuNameText.color = (200, 0, 0);
    self.MenuNameText setText("Forge Mod v1.0");
    self.MenuNameText setPoint("TOPRIGHT", "TOPRIGHT", 0, 0);
}

/*

Simple spawning of crate
forward = anglesToForward(self getplayerangles());
start = self geteye();
end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
Model = spawn("script_model", bullettrace(start, start + end, false, undefined)["position"]);
Model setmodel("t6_wpn_supply_drop_ally");

*/

MonitorButtons()
{
    self endon("disconnect");

    for(;;)
    {
        if(self actionslotonebuttonpressed()) // DPAD_UP
        {
            SpawnCrate();
            self iprintln("SpawnCrate");
        }
        if(self actionslottwobuttonpressed()) // DPAD_DOWN
        {
            if(isdefined(self.CurrentCrate) == true)
            {
                DropCrate();
                self iprintln("DropCrate");
            }
            else if(isdefined(self.CurrentCrate) == false)
            {
                PickupCrate();
                self iprintln("PickupCrate");
            }
        }
        if(self actionslotfourbuttonpressed()) // DPAD_RIGHT
        {
            if(isdefined(self.CurrentCrate) == true)
            {
                self.CurrentCrate delete();
                self.CurrentCrate = undefined;
            }
            else if(isdefined(self.CurrentCrate) == false)
            {
                forward = anglesToForward(self getplayerangles());
                start = self geteye();
                end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
                bullettrace(start, start + end, false, undefined)["entity"] delete();
            }
            self iprintln("DeleteCrate");
        }
        wait 0.05;
    }
}

MoveCrate()
{
    self endon("disconnect");

    for(;;)
    {
        if(isdefined(self.CurrentCrate) == true)
        {
            forward = anglestoforward(self getplayerangles());
            start = self geteye();
            end = (forward[0] * 100, forward[1] * 100, forward[2] * 100);
            self.CurrentCrate.origin = start + end;
            self.CurrentCrate.angles = (0, self.angles[1], self.angles[2]);
        }
        wait 0.05;
    }
}

SpawnCrate()
{
    forward = anglesToForward(self getplayerangles());
    start = self geteye();
    end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
    Crate = spawn("script_model", bullettrace(start, start + end, false, undefined)["position"]);
    Crate setmodel("t6_wpn_supply_drop_ally");
    self.CurrentCrate = Crate;
    self PickupCrate();
}

DropCrate()
{
    self.CurrentCrate = undefined;
}

PickupCrate()
{
    forward = anglesToForward(self getplayerangles());
    start = self geteye();
    end = (forward[0] * 9999, forward[1] * 9999, forward[2] * 9999);
    self.CurrentCrate = bullettrace(start, start + end, false, undefined)["entity"];
}
Short version
http://pastebin.com/vHJXL2mx
 
Last edited:
Top Bottom
Login
Register