Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Strange DefaultProperties for Mirror's Edge??
#1
I'm still new to using UE explorer, so this is probably my fault in some way, but I'm stuck trying to deserialize two lists, which I can't figure out for the life of me. I'm using the newest version of Mirror's edge, not the launch version, for PC, but loading the same file from both versions of the game gives me the same result.

Here is the problem, under TdGame.u (decompressed) at class TdTeamInfo:

defaultproperties
{
    MaxTeamMembers=8
    TeamBaseColor(0)=
/* Exception thrown while deserializing TeamBaseColor
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at UELib.Core.UDefaultProperty.DeserializeTagUE3()
   at UELib.Core.UDefaultProperty.Deserialize()
   at UELib.Core.UDefaultProperty.DeserializeDefaultPropertyValue(PropertyType type, DeserializeFlags& deserializeFlags) */
    TeamBaseColor(1)=TeamColorNames=/* Array type was not detected. */,
/* Exception thrown while deserializing TeamBaseColor
System.ArgumentException: Requested value '1HandedDrop_1702194241' was not found.
   at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   at UELib.Core.UDefaultProperty.DeserializeTagUE3()
   at UELib.Core.UDefaultProperty.Deserialize()
   at UELib.Core.UDefaultProperty.DeserializeDefaultPropertyValue(PropertyType type, DeserializeFlags& deserializeFlags) */
    TeamColorNames(0)="Red"
    TeamColorNames(1)="Blue"
}


And here are the two "undetected" arrays, defined under the same class:

var array<Color> TeamBaseColor;
var array<string> TeamColorNames;


What makes this weird is that both arrays, despite being defined in the same class, cannot be detected. Even weirder, TeamBaseColor(1), a Color defined under Core.Object that only uses Bytes, is being set to array of strings. Also, there are somehow two separate arrays(?) called TeamColorNames, since one can be detected and the other can't. 

Setting TeamColorNames to a String property doesn't work. Setting it to a Name property does, but no matter what I choose, the enclosing array still doesn't deserialize.

Like I said, I'm very new to this (and don't really know that much about the unrealscript bytecode), so if I'm making an obvious mistake, sorry about that. Anyway, if someone can help me understand what I should do to fix this, that would be greatly appreciated!
Reply
#2
Try set TeamBaseColor to "StructProperty" or "Color", see https://github.com/UE-Explorer/UE-Explor...rer/FAQ.md
Reply
#3
I just tried both of those options for both Package.Class and TdGame.TeamInfo, and nothing seemed to change.
Reply
#4
Alright, sorry for the late response, but I've delved into the package myself to see what's truly going on!

I have to conclude that this is indeed a bug in UE Explorer and has nothing to do with any possible changes of the package format in Mirror's Edge.

I've looked at the UELib's code to see what may theoretically explain why it can resolve 'TeamColorNames' but not 'TeamBaseColors',
see this hacky code: https://github.com/EliotVU/Unreal-Librar...#L135-L136

As you see, 'TeamColorNames' is a string but 'TeamBaseColors' has a more complicated data type i.e. 'StructProperty' my bet the code to handle this type is failing, but I've yet to debug step through it.

This also explains why setting the data type yourself does not help, because according to the code, it will first resolve the property by looking up the inherited classes, if it can find the property, then it will not look at your custom definitions, which indeed implies that it can find 'TeamBaseColors' but somehow gets stuck.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)