Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.
Zero Tolerance for Disrespect

Extract UFC Octagon 3D model?

Featured Replies

Hi, is anyone able to extract the UFC 3, 4, 5, Octagon or even the arenas 3D model? Been seeing many 3D models of the fighters extracted but no discussion of the octagon or arena.

Thanks.

Upload files or something, without clay you can't make bricks... otherwise they'll close this thread and you'll be left without the square or octagon or arena...

Thanks.

  • Author

Here's the UFC 3 (would like the higher games but I am not sure how to unpack those) Stage folder I tried to unpack, but to no success. I'm not sure if this is the folder with the Arena or octagon, but if this isn't it I have the other files.

stage.7z

  • Supporter

I think i got it. Now it should unpack compressed textures.

##############################
get BaseFileName basename
get FileExtension extension
get FileSize asize

endian big

get ResourceCount uint32
getdstring Dummy 0x8
get TOCOffset uint32

goto TOCOffset

for i = 0 < ResourceCount
	getdstring ResourceName 0x10
	getdstring ResourceType 0x4
	get ResourceSize uint32
	get ResourceOffset uint32
	getdstring Dummy 0x4
	savepos cPos
	
	if ResourceType == "tex"
		goto ResourceOffset
		savepos ResourceBaseOffset
		get TexResourceCount uint32
		getdstring Dummy 0x8
		get TexTOCOffset uint32
		
		for j = 0 < TexResourceCount
			getdstring ResourceName 0x10
			getdstring ResourceType 0x4
			get TexResourceSize uint32
			get TexResourceOffset uint32
			getdstring Dummy 0x4
			savepos EndOfInfo
			
			math TexResourceOffset + ResourceBaseOffset
			math TexResourceSize - 16
			
			goto TexResourceOffset
			getdstring Dummy 0x4
			endian little
			get DecompressedSize uint32
			getdstring Dummy 0x8
			savepos Offset
			endian big
			goto EndOfInfo
			string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
			clog Name Offset TexResourceSize DecompressedSize
		next j
		
	elif ResourceType == "dds"
		goto ResourceOffset
		getdstring Sign 0x4
		string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
		
		if Sign == "YZLI"
			goto ResourceOffset
			getdstring Dummy 0x4
			endian little
			get DecompressedSize uint32
			getdstring Dummy 0x8
			savepos Offset
			endian big
			xmath DdsResourceSize "ResourceSize - 16"
			clog Name Offset DdsResourceSize DecompressedSize
		else
			log Name ResourceOffset ResourceSize
		endif
	else
		string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
		log Name ResourceOffset ResourceSize
	endif
	goto cPos
next i

Got something.

image.png

So mesh format is something like this. I will try to write noesis script.

//------------------------------------------------
//--- 010 Editor v14.0 Binary Template
//
//      File: 
//   Authors: 
//   Version: 
//   Purpose: 
//  Category: 
// File Mask: 
//  ID Bytes: 
//   History: 
//------------------------------------------------
BigEndian();OutputPaneClear();

local uint32 i,j,k,l;

char Sign[4];
uint32 Unknown_0;
uint32 Unknown_1;
uint32 Unknown_2;
uint32 Unknown_3;
uint32 Unknown_4;
uint32 ShapeCount;
uint32 ShapeDefOffset;     // + 8
uint32 TransformCount;
uint32 UnknownDef0Count;
uint32 TransformDefOffset; // + 8
uint32 UnknownDef0Offset;  // + 8
uint32 UnknownDef1Offset;  // + 8
uint32 UnknownDef1Count;
uint32 Unknown_5;
uint32 Unknown_6;
uint32 Unknown_7;
uint32 Unknown_8;
uint32 TextureCount;
uint32 TextureDefOffset;   // + 8

FSeek(ShapeDefOffset + 8);
struct
{
    uint32 ElementCount;
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 TransformIndex;
    byte FF[76];
    uint32 Unknown_2;
    uint32 Unknown_3;
    uint32 Unknown_4;
    uint32 ElementBufferOffset;    // + 8  // Vertices / Normals / Colors // Stride 28
    uint32 Unknown0BufferOffset;   // + 8
    uint32 UnitVectorBufferOffset; // + 8  // Unit Vectors // Stride 16 // 2 UV Sets  // Local / World
    uint32 Unknown1BufferOffset;   // + 8
    uint32 TextureIndex;
    char Type[16];
    uint32 Unknown_6;
    uint32 Unknown_7;
    uint32 MaterialDefCount;
    uint32 MaterialDefOffset;      // + 8
    uint32 IndexBufferOffset;      // + 8
    uint32 ElementCount_t;
    uint32 Unknown_8;
    float BBoxX,BBoxY,BBoxZ,Radius;
}ShapeDefinition[ShapeCount]<optimize=false>;

FSeek(TransformDefOffset + 8);
struct
{
    char MeshName[16];
    float Matrix4x4[16];
}TransformDefinition[TransformCount];

FSeek(UnknownDef0Offset + 8);
struct
{
    char Name[16];
}Unknown0Definition[UnknownDef0Count];

FSeek(UnknownDef1Offset + 8);
struct
{
    char Name[16];
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 Unknown_2;
    uint32 Unknown_3;
}Unknown1Definition[UnknownDef1Count];

FSeek(TextureDefOffset + 8);
struct
{
    char TextureName[16];
}TextureDefinition[TextureCount];

Some progress....

image.png

Noesis script. If anything went wrong just let me know. Some textures are missing from scene, maybe in another file.

# Script by h3x3r

from inc_noesis import *
import noesis
import rapi
import os

def registerNoesisTypes():
   handle = noesis.register("UFC 3 - Mesh", ".ymx")
   noesis.setHandlerTypeCheck(handle, noepyCheckType)
   noesis.setHandlerLoadModel(handle, noepyLoadModel)
   noesis.logPopup()
   return 1
        
def noepyCheckType(data):
	bs = NoeBitStream(data, NOE_BIGENDIAN)
	if len(data) < 20:
	    return 0
	if bs.readUInt() != 0x4A424F59:
	    return 0
	return 1
        
def noepyLoadModel(data, mdlList):
	bs = NoeBitStream(data, NOE_BIGENDIAN)
	baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
	ctx = rapi.rpgCreateContext()
	rapi.rpgSetOption(noesis.RPGOPT_BIGENDIAN, 1)
	Underline = "_"
	Dummy = "dummy"
    
	TextureNameList = []
	MeshNameList = []
	TransformList = []

	# Base Info
	bs.read(24)
	ShapeCount = bs.readUInt()
	ShapeDefOffset = bs.readUInt() + 8
	TransformCount = bs.readUInt()
	bs.read(4)
	TransformDefOffset = bs.readUInt() + 8
	bs.read(28)
	TextureCount = bs.readUInt()
	TextureDefOffset = bs.readUInt() + 8
    
	# Texture Definition
	bs.seek(TextureDefOffset, NOESEEK_ABS)
	for i in range(0, TextureCount):
		CurPos = bs.tell()
		CharCheck = bs.readUByte()
		if CharCheck < 128:
			bs.seek(CurPos)
			TextureNameList.append(bs.readString())
            
		bs.seek(CurPos)
		bs.read(16)
        
	# Transform Definition
	bs.seek(TransformDefOffset, NOESEEK_ABS)
	for i in range(0, TransformCount):
		CurPos = bs.tell()
		MeshNameList.append(bs.readString())
		bs.seek(CurPos)
		bs.read(16)
		TransformBytes = bs.read(64)
		TransformList.append(TransformBytes)
        
	# Shape Definition
	bs.seek(ShapeDefOffset, NOESEEK_ABS)
	for j in range(0, ShapeCount):
		ShapeNum = "{:04d}".format(j)
		ElementCount = bs.readUInt()
		bs.read(8)
		TransformIndex = bs.readUInt() - 1
		bs.read(88)
		ElementBufferOffset = bs.readUInt() + 8
		bs.read(4)
		UnitVectorBufferOffset = bs.readUInt() + 8
		UnknownBufferOffset = bs.readUInt() + 8
		UVStride = ((UnknownBufferOffset - UnitVectorBufferOffset) // ElementCount)
		TextureIndex = bs.readUInt()
		bs.read(32)
		IndexBufferOffset = bs.readUInt() + 8
		bs.read(4)
		UVFlag = bs.readUInt()
		bs.read(16)
		EndOfInfo = bs.tell()
        
		bs.seek(ElementBufferOffset, NOESEEK_ABS)
		bs.read(4)
		ElementBuffer = bs.read(ElementCount * 28)
        
		bs.seek(UnitVectorBufferOffset, NOESEEK_ABS)
		if UVStride == 16:
		    UnitVectorBuffer = bs.read(ElementCount * 16)
		else:
		    UnitVectorBuffer = bs.read(ElementCount * 8)
        
		bs.seek(IndexBufferOffset, NOESEEK_ABS)
		bs.read(8)
		IndexCountOffset = bs.readUInt()
        
		bs.seek(IndexCountOffset, NOESEEK_ABS)
		IndexCount = bs.readUInt()
		bs.read(4)
		IndexBuffer = bs.read(IndexCount * 2)
        
		rapi.rpgBindPositionBufferOfs(ElementBuffer, noesis.RPGEODATA_FLOAT, 28, 0)
		rapi.rpgBindNormalBufferOfs(ElementBuffer, noesis.RPGEODATA_FLOAT, 28, 12)
        
		if UVStride == 16:
		    rapi.rpgBindUV1BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 16, 0)
		    #rapi.rpgBindUV2BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 16, 8)
		else:
		    rapi.rpgBindUV1BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 8, 0)
        
		rapi.rpgSetName(baseName + Underline + MeshNameList[TransformIndex] + Underline + ShapeNum)
        
		if TextureIndex == TextureCount - 1:
		    rapi.rpgSetMaterial(Dummy)
		else:
		    rapi.rpgSetMaterial(TextureNameList[TextureIndex])
            
		rapi.rpgCommitTriangles(IndexBuffer, noesis.RPGEODATA_USHORT, IndexCount, noesis.RPGEO_TRIANGLE_STRIP)
		bs.seek(EndOfInfo, NOESEEK_ABS)

	mdl = rapi.rpgConstructModel()
	mdlList.append(mdl)
	return 1

Edited by h3x3r

  • Author
17 hours ago, h3x3r said:

I think i got it. Now it should unpack compressed textures.

##############################
get BaseFileName basename
get FileExtension extension
get FileSize asize

endian big

get ResourceCount uint32
getdstring Dummy 0x8
get TOCOffset uint32

goto TOCOffset

for i = 0 < ResourceCount
	getdstring ResourceName 0x10
	getdstring ResourceType 0x4
	get ResourceSize uint32
	get ResourceOffset uint32
	getdstring Dummy 0x4
	savepos cPos
	
	if ResourceType == "tex"
		goto ResourceOffset
		savepos ResourceBaseOffset
		get TexResourceCount uint32
		getdstring Dummy 0x8
		get TexTOCOffset uint32
		
		for j = 0 < TexResourceCount
			getdstring ResourceName 0x10
			getdstring ResourceType 0x4
			get TexResourceSize uint32
			get TexResourceOffset uint32
			getdstring Dummy 0x4
			savepos EndOfInfo
			
			math TexResourceOffset + ResourceBaseOffset
			math TexResourceSize - 16
			
			goto TexResourceOffset
			getdstring Dummy 0x4
			endian little
			get DecompressedSize uint32
			getdstring Dummy 0x8
			savepos Offset
			endian big
			goto EndOfInfo

			string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
			clog Name Offset TexResourceSize DecompressedSize
		next j
		goto cPos	
	else
		string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
		log Name ResourceOffset ResourceSize
	endif	
next i

Got something.

image.png

So mesh format is something like this. I will try to write noesis script.

//------------------------------------------------
//--- 010 Editor v14.0 Binary Template
//
//      File: 
//   Authors: 
//   Version: 
//   Purpose: 
//  Category: 
// File Mask: 
//  ID Bytes: 
//   History: 
//------------------------------------------------
BigEndian();OutputPaneClear();

local uint32 i,j,k,l;

char Sign[4];
uint32 Unknown_0;
uint32 Unknown_1;
uint32 Unknown_2;
uint32 Unknown_3;
uint32 Unknown_4;
uint32 ShapeCount;
uint32 ShapeDefOffset;     // + 8
uint32 TransformCount;
uint32 UnknownDef0Count;
uint32 TransformDefOffset; // + 8
uint32 UnknownDef0Offset;  // + 8
uint32 UnknownDef1Offset;  // + 8
uint32 UnknownDef1Count;
uint32 Unknown_5;
uint32 Unknown_6;
uint32 Unknown_7;
uint32 Unknown_8;
uint32 TextureCount;
uint32 TextureDefOffset;   // + 8

FSeek(ShapeDefOffset + 8);
struct
{
    uint32 ElementCount;
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 TransformIndex;
    byte FF[76];
    uint32 Unknown_2;
    uint32 Unknown_3;
    uint32 Unknown_4;
    uint32 ElementBufferOffset;    // + 8  // Vertices / Normals / Colors // Stride 28
    uint32 Unknown0BufferOffset;   // + 8
    uint32 UnitVectorBufferOffset; // + 8  // Unit Vectors // Stride 16 // 2 UV Sets  // Local / World
    uint32 Unknown1BufferOffset;   // + 8
    uint32 TextureIndex;
    char Type[16];
    uint32 Unknown_6;
    uint32 Unknown_7;
    uint32 MaterialDefCount;
    uint32 MaterialDefOffset;      // + 8
    uint32 IndexBufferOffset;      // + 8
    uint32 ElementCount_t;
    uint32 Unknown_8;
    float BBoxX,BBoxY,BBoxZ,Radius;
}ShapeDefinition[ShapeCount]<optimize=false>;

FSeek(TransformDefOffset + 8);
struct
{
    char MeshName[16];
    float Matrix4x4[16];
}TransformDefinition[TransformCount];

FSeek(UnknownDef0Offset + 8);
struct
{
    char Name[16];
}Unknown0Definition[UnknownDef0Count];

FSeek(UnknownDef1Offset + 8);
struct
{
    char Name[16];
    uint32 Unknown_0;
    uint32 Unknown_1;
    uint32 Unknown_2;
    uint32 Unknown_3;
}Unknown1Definition[UnknownDef1Count];

FSeek(TextureDefOffset + 8);
struct
{
    char TextureName[16];
}TextureDefinition[TextureCount];

Some progress....

image.png

Noesis script. If anything went wrong just let me know. Some textures are missing from scene, maybe in another file.

# Script by h3x3r

from inc_noesis import *
import noesis
import rapi
import os

def registerNoesisTypes():
   handle = noesis.register("UFC 3 - Mesh", ".ymx")
   noesis.setHandlerTypeCheck(handle, noepyCheckType)
   noesis.setHandlerLoadModel(handle, noepyLoadModel)
   noesis.logPopup()
   return 1
        
def noepyCheckType(data):
	bs = NoeBitStream(data, NOE_BIGENDIAN)
	if len(data) < 20:
	    return 0
	if bs.readUInt() != 0x4A424F59:
	    return 0
	return 1
        
def noepyLoadModel(data, mdlList):
	bs = NoeBitStream(data, NOE_BIGENDIAN)
	baseName = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
	ctx = rapi.rpgCreateContext()
	rapi.rpgSetOption(noesis.RPGOPT_BIGENDIAN, 1)
	Underline = "_"
    
	TextureNameList = []
	MeshNameList = []
	TransformList = []

	# Base Info
	bs.read(24)
	ShapeCount = bs.readUInt()
	ShapeDefOffset = bs.readUInt() + 8
	TransformCount = bs.readUInt()
	bs.read(4)
	TransformDefOffset = bs.readUInt() + 8
	bs.read(28)
	TextureCount = bs.readUInt()
	TextureDefOffset = bs.readUInt() + 8
    
	# Texture Definition
	bs.seek(TextureDefOffset, NOESEEK_ABS)
	for i in range(0, TextureCount):
		CurPos = bs.tell()
		TextureNameList.append(bs.readString())
		bs.seek(CurPos)
		bs.read(16)
        
	# Transform Definition
	bs.seek(TransformDefOffset, NOESEEK_ABS)
	for i in range(0, TransformCount):
		CurPos = bs.tell()
		MeshNameList.append(bs.readString())
		bs.seek(CurPos)
		bs.read(16)
		TransformBytes = bs.read(64)
		TransformList.append(TransformBytes)
        
	# Shape Definition
	bs.seek(ShapeDefOffset, NOESEEK_ABS)
	for j in range(0, ShapeCount):
		ShapeNum = "{:04d}".format(j)
		ElementCount = bs.readUInt()
		bs.read(8)
		TransformIndex = bs.readUInt() - 1
		bs.read(88)
		ElementBufferOffset = bs.readUInt() + 8
		bs.read(4)
		UnitVectorBufferOffset = bs.readUInt() + 8
		bs.read(4)
		TextureIndex = bs.readUInt()
		bs.read(32)
		IndexBufferOffset = bs.readUInt() + 8
		bs.read(24)
		EndOfInfo = bs.tell()
        
		bs.seek(ElementBufferOffset, NOESEEK_ABS)
		bs.read(4)
		ElementBuffer = bs.read(ElementCount * 28)
        
		bs.seek(UnitVectorBufferOffset, NOESEEK_ABS)
		UnitVectorBuffer = bs.read(ElementCount * 16)
        
		bs.seek(IndexBufferOffset, NOESEEK_ABS)
		bs.read(8)
		IndexCountOffset = bs.readUInt()
        
		bs.seek(IndexCountOffset, NOESEEK_ABS)
		IndexCount = bs.readUInt()
		bs.read(4)
		IndexBuffer = bs.read(IndexCount * 2)
        
		rapi.rpgBindPositionBufferOfs(ElementBuffer, noesis.RPGEODATA_FLOAT, 28, 0)
		rapi.rpgBindNormalBufferOfs(ElementBuffer, noesis.RPGEODATA_FLOAT, 28, 12)
		rapi.rpgBindUV1BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 16, 0)
		rapi.rpgBindUV2BufferOfs(UnitVectorBuffer, noesis.RPGEODATA_FLOAT, 16, 8)
        
		rapi.rpgSetName(baseName + Underline + MeshNameList[TransformIndex] + Underline + ShapeNum)
		rapi.rpgSetMaterial(TextureNameList[TextureIndex])
		rapi.rpgCommitTriangles(IndexBuffer, noesis.RPGEODATA_USHORT, IndexCount, noesis.RPGEO_TRIANGLE_STRIP)
		bs.seek(EndOfInfo, NOESEEK_ABS)

	mdl = rapi.rpgConstructModel()
	mdlList.append(mdl)
	return 1

Tried to use the noesis script, and most of the files worked, but some did not giving this error. Most of these "error files" are the "oct" files. Seeing if re-extracting the game will help.

Thanks for your help so far.

error ufc.png

Edited by Zanthrman9
Changed how I typed the sentence, but get the same point across.

  • Author

Sorry, should have clarified. It gives this error to all ymx files with oct in the name. As mentioned before, other ymx files are able to be viewed just fine, but for some reason, some cannot be opened.

  • Supporter

Post them...

EDiT: Yeah i see they are in octagon_00.pac etc... I will look at them.

Found the problem. It reads invalid character at TextureName.

Also these doesn't use 2 uv sets so i must create exception.

EDiT: Updated script, you can try now.

Edited by h3x3r

  • Author
On 7/18/2026 at 3:55 AM, h3x3r said:
##############################
get BaseFileName basename
get FileExtension extension
get FileSize asize

endian big

get ResourceCount uint32
getdstring Dummy 0x8
get TOCOffset uint32

goto TOCOffset

for i = 0 < ResourceCount
	getdstring ResourceName 0x10
	getdstring ResourceType 0x4
	get ResourceSize uint32
	get ResourceOffset uint32
	getdstring Dummy 0x4
	savepos cPos
	
	if ResourceType == "tex"
		goto ResourceOffset
		savepos ResourceBaseOffset
		get TexResourceCount uint32
		getdstring Dummy 0x8
		get TexTOCOffset uint32
		
		for j = 0 < TexResourceCount
			getdstring ResourceName 0x10
			getdstring ResourceType 0x4
			get TexResourceSize uint32
			get TexResourceOffset uint32
			getdstring Dummy 0x4
			savepos EndOfInfo
			
			math TexResourceOffset + ResourceBaseOffset
			math TexResourceSize - 16
			
			goto TexResourceOffset
			getdstring Dummy 0x4
			endian little
			get DecompressedSize uint32
			getdstring Dummy 0x8
			savepos Offset
			endian big
			goto EndOfInfo

			string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
			clog Name Offset TexResourceSize DecompressedSize
		next j
		goto cPos	
	else
		string Name p "%s/%s.%s" BaseFileName ResourceName ResourceType
		log Name ResourceOffset ResourceSize
	endif	
next i

I got the meshes from the octagon exported with no issues, but it seems that the .dds files the .tex quickbms script unpacks are unable to opened in GIMP, or PaintNET. Attached is a .dds file, not sure if it would be different compared to the ones you extracted.

c_pad_c_n.dds

  • Author
3 hours ago, h3x3r said:

Hmmm strange... it's compressed. Tell me name of the file. I'll take a look.

Had to zip up this one file to send it here. It should be this one. (it should also be in the stage folder named oct.tex if you still have it)

oct.zip

  • Supporter

That's wierd. When there is dds extension it should by uncompressed. But this one isn't. I will rewrite bms.

EDiT: Updated bms script... Now it should unpack it.

Edited by h3x3r

  • Author
19 hours ago, h3x3r said:

That's wierd. When there is dds extension it should by uncompressed. But this one isn't. I will rewrite bms.

EDiT: Updated bms script... Now it should unpack it.

I’ll test it when I am able.

  • Author
21 hours ago, h3x3r said:

That's wierd. When there is dds extension it should by uncompressed. But this one isn't. I will rewrite bms.

EDiT: Updated bms script... Now it should unpack it.

Unfortunately, it still does not open even after running the script with the new code. Really not sure what magic EA used to keep these files from being seen outside of the consoles. Still giving the same errors as before, saying its an invalid .dds.

Here's the first part of the Paint.NET error if that helps.

Exception:

System.FormatException: The DDS file is invalid.

at DdsFileTypePlus.DdsNative.Load(Stream stream, DDSLoadInfo& info) in D:\Dev_projects\DDSFileTypePlus\src\DdsNative.cs:line 57

at DdsFileTypePlus.DdsReader.Load(Stream input, IServiceProvider services) in D:\Dev_projects\DDSFileTypePlus\src\DdsReader.cs:line 30

at PaintDotNet.FileType.Load(Stream input) in D:\src\pdn\src_vPrev\Data\FileType.cs:line 513

at PaintDotNet.FileType.Load(Stream input) in D:\src\pdn\src_vPrev\Data\FileType.cs:line 513

at PaintDotNet.Functional.Func.Eval[T1,TRet](Func`2 f, T1 arg1) in D:\src\pdn\src_vPrev\Fundamentals\Functional\Func.cs:line 58

EDIT: Added the affected file along with the file sent previously, but with this new script.

g_a_00_blue.dds c_pad_c_n.dds

Edited by Zanthrman9

  • Supporter

Well it looks like i must download whole game then. These files are compresed too. Anyway thanks for feedback.

Are those files loose or did you unpack them?

Well the variation of compressed/uncompressed assets is insane. Characters are compressed but levels not. Same for textures.

Tested on characters but there are some fuckups.

image.png

Edited by h3x3r

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.