For direct access use https://forums.oldunreal.com
It's been quite a while since oldunreal had an overhaul, but we are moving to another server which require some updates and changes. The biggest change is the migration of our old reliable YaBB forum to phpBB. This system expects you to login with your username and old password known from YaBB.
If you experience any problems there is also the usual "password forgotten" function. Don't forget to clear your browser cache!
If you have any further concerns feel free to contact me: Smirftsch@oldunreal.com
It's been quite a while since oldunreal had an overhaul, but we are moving to another server which require some updates and changes. The biggest change is the migration of our old reliable YaBB forum to phpBB. This system expects you to login with your username and old password known from YaBB.
If you experience any problems there is also the usual "password forgotten" function. Don't forget to clear your browser cache!
If you have any further concerns feel free to contact me: Smirftsch@oldunreal.com
[RELEASED] Unreal HD Skins [UT] [227]
Moderator: ahaigh01
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
I considered keeping this one a surprise, but figured what the heck. This is a heavily modified beta skaarj skin that will take the place of one of the RTNPUE Skaarj skins. Can anybody guess which one?
[img]http://i6.photobucket.com/albums/y226/l_hunter8/SkaarjCrypt.jpg[/img]
[img]http://i6.photobucket.com/albums/y226/l_hunter8/SkaarjCrypt.jpg[/img]
-
gopostal
- OldUnreal Member
- Posts: 1007
- Joined: Thu Jul 31, 2008 9:29 pm
Re: High-Res Skin Project / Request for Skinners!
That is flat bad ass work right there.
I don't want to give the end away
but we're all going to die one day
but we're all going to die one day
-
Skywolf
- OldUnreal Member
- Posts: 880
- Joined: Sun Aug 02, 2009 12:20 pm
Re: High-Res Skin Project / Request for Skinners!
Time for a holy enlightening fan-tastic pot update 8-).
The holy:
[img]http://imgur.com/gsQe2cW.jpg[/img]
The enlightenment:
[img]http://imgur.com/hAm8GiD.jpg[/img]
[img]http://imgur.com/P23W391.jpg[/img]
The fan-tastic:
[img]http://imgur.com/O0EcOZu.jpg[/img]
The pot:
[img]http://imgur.com/F1VPMcK.jpg[/img]
The holy:
[img]http://imgur.com/gsQe2cW.jpg[/img]
The enlightenment:
[img]http://imgur.com/hAm8GiD.jpg[/img]
[img]http://imgur.com/P23W391.jpg[/img]
The fan-tastic:
[img]http://imgur.com/O0EcOZu.jpg[/img]
The pot:
[img]http://imgur.com/F1VPMcK.jpg[/img]
Last edited by Skywolf on Fri Jun 17, 2016 5:42 pm, edited 1 time in total.
I hate it when people ask me what my favorite game is. Just try to explain you're not talking about Unreal Tournament
.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Looks awesome! Thanks for doing these models. I do have a question though. Are the dimensions of these models as close as possible to the originals? Some maps have the models in very specific locations, and they would be out of place if the dimensions were different. Also, the position of the model has to be exact, or the model will be floating above the ground, or under the ground.
-
Skywolf
- OldUnreal Member
- Posts: 880
- Joined: Sun Aug 02, 2009 12:20 pm
Re: High-Res Skin Project / Request for Skinners!
The dimensions are pretty much the same but origin is harder to get right due to how UnrealED exports them with a huge offset for some reason.
Not that it matters. You can change the origin and scale of models in the mesh viewer or during import. So all models are as close to the original as possible and all you have to do is swap the mesh in the mesh field under display for the decorations.
Not that it matters. You can change the origin and scale of models in the mesh viewer or during import. So all models are as close to the original as possible and all you have to do is swap the mesh in the mesh field under display for the decorations.
I hate it when people ask me what my favorite game is. Just try to explain you're not talking about Unreal Tournament
.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Does anyone know a way to import DXT1 files directly in to UnrealShare to replace the old textures? I was testing my skins today with SN's mutator, and noticed some severe lag issues that likely have to do with the code and not my textures. Even if I completely disable ALL skins, the game lags every time I destroy a carcass or turn a corner and look at some stuff. There is no lag if I disable the mutator. However, I can't test my theory until I can import DXT1 directly in to UnrealShare to bypass the mutator. I know UnrealEd2.1 can modify UnrealShare, but that doesn't help me since I need to modify UT99's UnrealShare! There appears to be no way to get UnrealED2.1 running using UT99's UnrealShare.u file.
Also, here is the code of the mutator. Can anyone figure out why it is lagging? It especially lags when you destroy ANY carcass in the game. SN has disappeared and is not responding to my PM's...
Also, here is the code of the mutator. Can anyone figure out why it is lagging? It especially lags when you destroy ANY carcass in the game. SN has disappeared and is not responding to my PM's...
Code: Select all
class HDSkins_mutator expands Mutator;
#exec OBJ LOAD FILE=TitanX.u PACKAGE=HDSkins
struct STex
{
var string Old[8];
var string New[8];
};
struct SData
{
var string Mesh;
var string MeshNew;
var bool bMultiSkins;
var int TexNum;
var STex Tex[24];
};
var struct SGroup
{
var int DataNum;
var SData Data[70];
} Group[3];
function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
local int g, i, j, m;
local bool bDone;
if (Other.Mesh == None)
return true;
if (Other.IsA('ScriptedPawn') || Other.IsA('Carcass') || Other.IsA('FlockPawn'))
g = 0;
else if (Other.IsA('Decoration'))
g = 1;
else if (Other.IsA('Inventory'))
g = 2;
else
return true;
for (i = 0; i < Group[g].DataNum; i++)
{
if (string(Other.Mesh) ~= Group[g].Data[i].Mesh)
{
if (Group[g].Data[i].MeshNew != "")
Other.Mesh = mesh(DynamicLoadObject(Group[g].Data[i].MeshNew, Class'Mesh'));
for (j = 0; j < Group[g].Data[i].TexNum; j++)
{
if (!(Group[g].Data[i].bMultiSkins))
{
if (string(Other.Skin) ~= Group[g].Data[i].Tex[j].Old[0])
{
Other.Skin = texture(DynamicLoadObject(Group[g].Data[i].Tex[j].New[0], Class'Texture'));
return true;
}
}
else
{
for (m = 0; m < 8; m++)
{
if (Group[g].Data[i].Tex[j].New[m] != "")
{
if (string(Other.MultiSkins[m]) ~= Group[g].Data[i].Tex[j].Old[m])
{
Other.MultiSkins[m] = texture(DynamicLoadObject(Group[g].Data[i].Tex[j].New[m], Class'Texture'));
bDone = True;
}
}
}
if (bDone)
return true;
}
}
}
}
return true;
}
function PreBeginPlay()
{
//ScriptedPawn and Carcass--------------------------------------------------------------------------
Group[0].DataNum = 24;
//SkaarjWarrior Group
Group[0].Data[0].Mesh = "UnrealShare.Skaarjw";
Group[0].Data[0].TexNum = 17;
//Skaarj Warrior
Group[0].Data[0].Tex[0].Old[0] = "None";
Group[0].Data[0].Tex[0].New[0] = "HDSkins2.HDSkaarjw1";
//Skaarj Berserker
Group[0].Data[0].Tex[1].Old[0] = "UnrealI.Skins.Skaarjw2";
Group[0].Data[0].Tex[1].New[0] = "HDskins2.HDSkaarjw2";
//Ice Skaarj
Group[0].Data[0].Tex[2].Old[0] = "UnrealI.Skins.Skaarjw3";
Group[0].Data[0].Tex[2].New[0] = "HDskins2.HDSkaarjw3";
//Skaarj Scout
Group[0].Data[0].Tex[3].Old[0] = "UnrealShare.Skins.Skaarjw4";
Group[0].Data[0].Tex[3].New[0] = "HDskins2.HDSkaarjw4";
//Skaarj Assassin
Group[0].Data[0].Tex[4].Old[0] = "UnrealI.Skins.Skaarjw5";
Group[0].Data[0].Tex[4].New[0] = "HDskins2.HDSkaarjw5";
//Skaarj Lord
Group[0].Data[0].Tex[5].Old[0] = "UnrealI.Skins.SkaarjL";
Group[0].Data[0].Tex[5].New[0] = "HDskins2.HDSkaarjL";
//Skaarj Berserker Crypt
Group[0].Data[0].Tex[6].Old[0] = "RTNPUE_Skins.SkaarjBerserkerCrypt";
Group[0].Data[0].Tex[6].New[0] = "HDRTNPUE.HDSkaarjBerserkerCrypt";
//Skaarj Crypt
Group[0].Data[0].Tex[7].Old[0] = "RTNPUE_Skins.Skaarjcrypt";
Group[0].Data[0].Tex[7].New[0] = "HDRTNPUE.HDSkaarjcrypt";
//Skaarj Crypt 2
Group[0].Data[0].Tex[8].Old[0] = "RTNPUE_Skins.Skaarjcrypt2";
Group[0].Data[0].Tex[8].New[0] = "HDRTNPUE.HDSkaarjcrypt2";
//Skaarj Crypt 2 v3
Group[0].Data[0].Tex[9].Old[0] = "RTNPUE_Skins.Skaarjcrypt2v3";
Group[0].Data[0].Tex[9].New[0] = "HDRTNPUE.HDSkaarjcrypt2v3";
//Skaarj Crypt 3
Group[0].Data[0].Tex[10].Old[0] = "RTNPUE_Skins.Skaarjcrypt3";
Group[0].Data[0].Tex[10].New[0] = "HDRTNPUE.HDSkaarjcrypt3";
//Skaarj Crypt 3 v2
Group[0].Data[0].Tex[11].Old[0] = "RTNPUE_Skins.Skaarjcrypt3v2";
Group[0].Data[0].Tex[11].New[0] = "HDRTNPUE.HDSkaarjcrypt3v2";
//Skaarj Crypt Scout
Group[0].Data[0].Tex[12].Old[0] = "RTNPUE_Skins.SkaarjCryptScout";
Group[0].Data[0].Tex[12].New[0] = "HDRTNPUE.HDSkaarjCryptScout";
//Skaarj Warrior Crypt
Group[0].Data[0].Tex[13].Old[0] = "RTNPUE_Skins.SkaarjWarriorCrypt";
Group[0].Data[0].Tex[13].New[0] = "HDRTNPUE.HDSkaarjWarriorCrypt";
//Skaarj Warrior Crypt 2
Group[0].Data[0].Tex[14].Old[0] = "RTNPUE_Skins.SkaarjWarriorCrypt2";
Group[0].Data[0].Tex[14].New[0] = "HDRTNPUE.HDSkaarjWarriorCrypt2";
//Toxic Skaarj
Group[0].Data[0].Tex[15].Old[0] = "RTNPUE_Skins.ToxicSkaarj";
Group[0].Data[0].Tex[15].New[0] = "HDRTNPUE.HDToxicSkaarj";
//Beta Skaarj
Group[0].Data[0].Tex[16].Old[0] = "RTNPUE_Skins.BetaSkaarj";
Group[0].Data[0].Tex[16].New[0] = "HDRTNPUE.HDBetaSkaarj";
//SkaarjTrooper Group
Group[0].Data[1].Mesh = "UnrealI.sktrooper";
Group[0].Data[1].TexNum = 3;
//Skaarj Trooper
Group[0].Data[1].Tex[0].Old[0] = "UnrealI.Skins.sktrooper1";
Group[0].Data[1].Tex[0].New[0] = "HDSkins2.HDsktrooper1";
//Skaarj Gunner
Group[0].Data[1].Tex[1].Old[0] = "UnrealI.Skins.sktrooper2";
Group[0].Data[1].Tex[1].New[0] = "HDskins2.HDsktrooper2";
//Skaarj Officer
Group[0].Data[1].Tex[2].Old[0] = "UnrealI.Skins.sktrooper3";
Group[0].Data[1].Tex[2].New[0] = "HDskins2.HDsktrooper3";
//Warlord Group
Group[0].Data[2].Mesh = "UnrealI.WarlordM";
Group[0].Data[2].bMultiSkins = True;
Group[0].Data[2].TexNum = 3;
//Warlord
Group[0].Data[2].Tex[0].Old[0] = "None";
Group[0].Data[2].Tex[0].New[0] = "HDSkins2.HDJWarlord1";
Group[0].Data[2].Tex[0].Old[1] = "None";
Group[0].Data[2].Tex[0].New[1] = "HDSkins2.HDJWarlord1";
//Lesser Warlord
Group[0].Data[2].Tex[1].Old[0] = "RTNPUE_Skins.LesserWarlord";
Group[0].Data[2].Tex[1].New[0] = "HDRTNPUE.HDLesserWarlord";
Group[0].Data[2].Tex[1].Old[1] = "RTNPUE_Skins.LesserWarlord";
Group[0].Data[2].Tex[1].New[1] = "HDRTNPUE.HDLesserWarlord";
//Great Warlord
Group[0].Data[2].Tex[2].Old[0] = "RTNPUE_Skins.GreatWarlord";
Group[0].Data[2].Tex[2].New[0] = "HDRTNPUE.HDGreatWarlord";
Group[0].Data[2].Tex[2].Old[1] = "RTNPUE_Skins.GreatWarlord";
Group[0].Data[2].Tex[2].New[1] = "HDRTNPUE.HDGreatWarlord";
//Skaarj Queen Group
Group[0].Data[3].Mesh = "UnrealI.SkQueen";
Group[0].Data[3].bMultiSkins = True;
Group[0].Data[3].TexNum = 1;
//Skaarj Queen
Group[0].Data[3].Tex[0].Old[1] = "None";
Group[0].Data[3].Tex[0].New[1] = "HDSkins2.HDJQueen1";
//Pupae Group
Group[0].Data[4].Mesh = "UnrealI.Pupae1";
Group[0].Data[4].bMultiSkins = True;
Group[0].Data[4].TexNum = 1;
//Pupae
Group[0].Data[4].Tex[0].Old[0] = "None";
Group[0].Data[4].Tex[0].New[0] = "HDSkins2.HDJPupae1";
Group[0].Data[4].Tex[0].Old[1] = "None";
Group[0].Data[4].Tex[0].New[1] = "HDSkins2.HDJPupae1";
//Titan Group
Group[0].Data[5].Mesh = "UnrealI.Titan1";
Group[0].Data[5].MeshNew = "HDSkins.TitanX";
Group[0].Data[5].TexNum = 4;
//Titan
Group[0].Data[5].Tex[0].Old[0] = "None";
Group[0].Data[5].Tex[0].New[0] = "HDSkins2.HDJTitan1";
//Stone Titan
Group[0].Data[5].Tex[1].Old[0] = "UnrealI.Skins.JTitan2";
Group[0].Data[5].Tex[1].New[0] = "HDSkins2.HDJTitan2";
//Temple Titan
Group[0].Data[5].Tex[2].Old[0] = "RTNPUE_Skins.TempleTitan2";
Group[0].Data[5].Tex[2].New[0] = "HDRTNPUE.HDTempleTitan2";
//Titan Alt
Group[0].Data[5].Tex[3].Old[0] = "RTNPUE_Skins.Jtitan1_alt";
Group[0].Data[5].Tex[3].New[0] = "HDRTNPUE.HDJtitan1_alt";
//Brute Group
Group[0].Data[6].Mesh = "UnrealShare.Brute1";
Group[0].Data[6].TexNum = 6;
//Brute
Group[0].Data[6].Tex[0].Old[0] = "None";
Group[0].Data[6].Tex[0].New[0] = "HDSkins2.HDBrute1";
//Behemoth
Group[0].Data[6].Tex[1].Old[0] = "UnrealI.Skins.Brute2";
Group[0].Data[6].Tex[1].New[0] = "HDskins2.HDBrute2";
//Lesser Brute
Group[0].Data[6].Tex[2].Old[0] = "UnrealShare.Skins.Brute3";
Group[0].Data[6].Tex[2].New[0] = "HDskins2.HDBrute3";
//Beta Brute
Group[0].Data[6].Tex[3].Old[0] = "zcu97Unreali.Skins.jbetabrute2";
Group[0].Data[6].Tex[3].New[0] = "HDRTNPUE.HDjbetabrute2";
//Beta Lesser Brute
Group[0].Data[6].Tex[4].Old[0] = "zcu97Unreali.Skins.jbetabrute3";
Group[0].Data[6].Tex[4].New[0] = "HDRTNPUE.HDjbetabrute3";
//Beta Brute Behemoth
Group[0].Data[6].Tex[5].Old[0] = "zcu97Unreali.Skins.jbetabrute1";
Group[0].Data[6].Tex[5].New[0] = "HDRTNPUE.HDjbetabrute1";
//Krall Group
Group[0].Data[7].Mesh = "UnrealI.KrallM";
Group[0].Data[7].TexNum = 7;
//Krall
Group[0].Data[7].Tex[0].Old[0] = "None";
Group[0].Data[7].Tex[0].New[0] = "HDSkins2.HDJKrall";
//Krall Elite
Group[0].Data[7].Tex[1].Old[0] = "UnrealI.Skins.EKrall";
Group[0].Data[7].Tex[1].New[0] = "HDSkins2.HDEKrall";
//Beta Krall
Group[0].Data[7].Tex[2].Old[0] = "zcu97Unreali.Skins.jbetakrall";
Group[0].Data[7].Tex[2].New[0] = "HDRTNPUE.HDjbetakrall";
//Beta Krall Elite
Group[0].Data[7].Tex[3].Old[0] = "zcu97Unreali.Skins.jbetaekrall";
Group[0].Data[7].Tex[3].New[0] = "HDRTNPUE.HDjbetaekrall";
//Beta Krall Crypt
Group[0].Data[7].Tex[4].Old[0] = "RTNPUE_Skins.KrallCrypt";
Group[0].Data[7].Tex[4].New[0] = "HDRTNPUE.HDKrallCrypt";
//Beta Krall Elite Crypt
Group[0].Data[7].Tex[5].Old[0] = "RTNPUE_Skins.KrallEliteCrypt";
Group[0].Data[7].Tex[5].New[0] = "HDRTNPUE.HDKrallEliteCrypt";
//Krall Fanatic
Group[0].Data[7].Tex[6].Old[0] = "RTNPUE_Skins.EnhKFanatic";
Group[0].Data[7].Tex[6].New[0] = "HDRTNPUE.HDEnhKFanatic";
//Mercenary Group
Group[0].Data[8].Mesh = "UnrealI.Merc";
Group[0].Data[8].TexNum = 6;
//Mercenary
Group[0].Data[8].Tex[0].Old[0] = "None";
Group[0].Data[8].Tex[0].New[0] = "HDSkins2.HDJMerc1";
//Mercenary Elite
Group[0].Data[8].Tex[1].Old[0] = "UnrealI.Skins.JMerc2";
Group[0].Data[8].Tex[1].New[0] = "HDSkins2.HDJMerc2";
//Beta Mercenary
Group[0].Data[8].Tex[2].Old[0] = "zcu97Unreali.Skins.jbetamerc1";
Group[0].Data[8].Tex[2].New[0] = "HDRTNPUE.HDjbetamerc1";
//Beta Mercenary Elite
Group[0].Data[8].Tex[3].Old[0] = "zcu97Unreali.Skins.jbetamerc2";
Group[0].Data[8].Tex[3].New[0] = "HDRTNPUE.HDjbetamerc2";
//Beta Mercenary Elite
Group[0].Data[8].Tex[4].Old[0] = "zcu97Unreali.Skins.jbetamerc2";
Group[0].Data[8].Tex[4].New[0] = "HDRTNPUE.HDjbetamerc2";
//Mercenary Master
Group[0].Data[8].Tex[5].Old[0] = "RTNPUE_Skins.ToughMerc";
Group[0].Data[8].Tex[5].New[0] = "HDRTNPUE.HDToughMerc";
//Gasbag Group
Group[0].Data[9].Mesh = "UnrealI.GasbagM";
Group[0].Data[9].bMultiSkins = True;
Group[0].Data[9].TexNum = 1;
//Gasbag
Group[0].Data[9].Tex[0].Old[5] = "None";
Group[0].Data[9].Tex[0].New[5] = "HDSkins2.HDGasbag1";
Group[0].Data[9].Tex[0].Old[6] = "None";
Group[0].Data[9].Tex[0].New[6] = "HDSkins2.HDGasbag2";
//Devilfish Group
Group[0].Data[10].Mesh = "UnrealShare.fish";
Group[0].Data[10].bMultiSkins = True;
Group[0].Data[10].TexNum = 2;
//Devilfish
Group[0].Data[10].Tex[0].Old[1] = "None";
Group[0].Data[10].Tex[0].New[1] = "HDSkins2.HDJFish1";
//Beta Shark
Group[0].Data[10].Tex[1].Old[1] = "RTNPUE_Skins.BetaShark";
Group[0].Data[10].Tex[1].New[1] = "HDRTNPUE.HDBetaShark";
//Squid Group
Group[0].Data[11].Mesh = "UnrealI.Squid1";
Group[0].Data[11].bMultiSkins = True;
Group[0].Data[11].TexNum = 1;
//Squid
Group[0].Data[11].Tex[0].Old[1] = "None";
Group[0].Data[11].Tex[0].New[1] = "HDSkins2.HDJSquid1";
//Fly Group
Group[0].Data[12].Mesh = "UnrealShare.FlyM";
Group[0].Data[12].bMultiSkins = True;
Group[0].Data[12].TexNum = 1;
//Fly
Group[0].Data[12].Tex[0].Old[1] = "None";
Group[0].Data[12].Tex[0].New[1] = "HDSkins2.HDJFly1";
//Manta Group
Group[0].Data[13].Mesh = "UnrealShare.Manta1";
Group[0].Data[13].TexNum = 2;
//Manta
Group[0].Data[13].Tex[0].Old[0] = "None";
Group[0].Data[13].Tex[0].New[0] = "HDSkins2.HDJManta1";
//Cave Manta
Group[0].Data[13].Tex[1].Old[0] = "UnrealShare.Skins.JManta2";
Group[0].Data[13].Tex[1].New[0] = "HDSkins2.HDJManta2";
//Tentacle Group
Group[0].Data[14].Mesh = "UnrealShare.Tentacle1";
Group[0].Data[14].bMultiSkins = True;
Group[0].Data[14].TexNum = 1;
//Tentacle
Group[0].Data[14].Tex[0].Old[1] = "None";
Group[0].Data[14].Tex[0].New[1] = "HDSkins2.HDJTentacle1";
//Slith Group
Group[0].Data[15].Mesh = "UnrealShare.Slith1";
Group[0].Data[15].TexNum = 3;
//Slith
Group[0].Data[15].Tex[0].Old[0] = "None";
Group[0].Data[15].Tex[0].New[0] = "HDSkins2.HDJSlith1";
//Fire Slith
Group[0].Data[15].Tex[1].Old[0] = "zcu97Unreali.Skins.jbetaslithF";
Group[0].Data[15].Tex[1].New[0] = "HDRTNPUE.HDjbetaslithF";
//Nitrogen Slith
Group[0].Data[15].Tex[2].Old[0] = "U2rtnp.Skins.JNSlith1";
Group[0].Data[15].Tex[2].New[0] = "HDRTNPUE.HDJNSlith1";
//Cow Group
Group[0].Data[16].Mesh = "UnrealShare.NaliCow";
Group[0].Data[16].TexNum = 1;
//Cow
Group[0].Data[16].Tex[0].Old[0] = "None";
Group[0].Data[16].Tex[0].New[0] = "HDSkins2.HDJCow1";
//Nali Group
Group[0].Data[17].Mesh = "UnrealShare.Nali1";
Group[0].Data[17].TexNum = 4;
//Nali
Group[0].Data[17].Tex[0].Old[0] = "None";
Group[0].Data[17].Tex[0].New[0] = "HDSkins2.HDJNali1";
//Nali Priest
Group[0].Data[17].Tex[1].Old[0] = "UnrealShare.Skins.JNali2";
Group[0].Data[17].Tex[1].New[0] = "HDSkins2.HDJNali2";
//Beta Nali
Group[0].Data[17].Tex[2].Old[0] = "RTNPUE_Skins.BetaNaliHybrid";
Group[0].Data[17].Tex[2].New[0] = "HDRTNPUE.HDBetaNaliHybrid";
//Beta Nali Priest
Group[0].Data[17].Tex[3].Old[0] = "RTNPUE_Skins.BetaNaliHybridPriest";
Group[0].Data[17].Tex[3].New[0] = "HDRTNPUE.HDBetaNaliHybridPriest";
//Predator Group
Group[0].Data[18].Mesh = "Upak.Predator";
Group[0].Data[18].bMultiSkins = True;
Group[0].Data[18].TexNum = 3;
//Predator
Group[0].Data[18].Tex[0].Old[1] = "None";
Group[0].Data[18].Tex[0].New[1] = "HDSkins2.HDJPredator1";
Group[0].Data[18].Tex[0].Old[2] = "None";
Group[0].Data[18].Tex[0].New[2] = "HDSkins2.HDJPredator2";
//Undead Predator
Group[0].Data[18].Tex[1].Old[1] = "Upak.JGPredator1";
Group[0].Data[18].Tex[1].New[1] = "HDSkins2.HDJGPredator1";
Group[0].Data[18].Tex[1].Old[2] = "Upak.Skins.JGPredator2";
Group[0].Data[18].Tex[1].New[2] = "HDSkins2.HDJGPredator2";
//Snow Predator
Group[0].Data[18].Tex[2].Old[1] = "RTNPUE_Skins.SnowPredator1";
Group[0].Data[18].Tex[2].New[1] = "HDRTNPUE.HDSnowPredator1";
Group[0].Data[18].Tex[2].Old[2] = "RTNPUE_Skins.SnowPredator";
Group[0].Data[18].Tex[2].New[2] = "HDRTNPUE.HDSnowPredator";
//Spinner Group
Group[0].Data[19].Mesh = "Upak.Spinner";
Group[0].Data[19].bMultiSkins = True;
Group[0].Data[19].TexNum = 1;
//Spinner
Group[0].Data[19].Tex[0].Old[1] = "None";
Group[0].Data[19].Tex[0].New[1] = "HDSkins2.HDJSpinner1";
Group[0].Data[19].Tex[0].Old[2] = "None";
Group[0].Data[19].Tex[0].New[2] = "HDSkins2.HDJSpinner2";
//Crucified Nali
Group[0].Data[20].Mesh = "UnrealShare.CrossNali";
Group[0].Data[20].TexNum = 4;
//Nali
Group[0].Data[20].Tex[0].Old[0] = "None";
Group[0].Data[20].Tex[0].New[0] = "HDSkins2.HDJNali1";
//Nali Priest
Group[0].Data[20].Tex[1].Old[0] = "UnrealShare.Skins.JNali2";
Group[0].Data[20].Tex[1].New[0] = "HDSkins2.HDJNali2";
//Beta Nali
Group[0].Data[20].Tex[2].Old[0] = "RTNPUE_Skins.BetaNaliHybrid";
Group[0].Data[20].Tex[2].New[0] = "HDRTNPUE.HDBetaNaliHybrid";
//Beta Nali Priest
Group[0].Data[20].Tex[3].Old[0] = "RTNPUE_Skins.BetaNaliHybridPriest";
Group[0].Data[20].Tex[3].New[0] = "HDRTNPUE.HDBetaNaliHybridPriest";
//Player Carcasses
//Female One Carcass Group
Group[0].Data[21].Mesh = "UnrealShare.Fem1body";
Group[0].Data[21].TexNum = 2;
//Gina Carcass Default Skin (fixes bug in Unreal)
Group[0].Data[21].Tex[0].Old[0] = "None";
Group[0].Data[21].Tex[0].New[0] = "HDSkins2.HDgina";
//Gina Carcass Skin (Just in case someone set the correct skin)
Group[0].Data[21].Tex[1].Old[0] = "UnrealShare.Skins.Gina";
Group[0].Data[21].Tex[1].New[0] = "HDSkins2.HDgina";
//Flock Pawns
//Nali Rabbit Group
Group[0].Data[22].Mesh = "UnrealShare.Rabbit";
Group[0].Data[22].bMultiSkins = True;
Group[0].Data[22].TexNum = 1;
//Nali Rabbit
Group[0].Data[22].Tex[0].Old[1] = "None";
Group[0].Data[22].Tex[0].New[1] = "HDSkins2.HDJRabbit1";
//Bird Group
Group[0].Data[23].Mesh = "UnrealShare.Bird";
Group[0].Data[23].bMultiSkins = True;
Group[0].Data[23].TexNum = 1;
//Bird
Group[0].Data[23].Tex[0].Old[1] = "None";
Group[0].Data[23].Tex[0].New[1] = "HDSkins2.HDJBird11";
//Decorations-----------------------------------------------------------------------------
Group[1].DataNum = 67;
//Trees
//Tree1 Group
Group[1].Data[0].Mesh = "UnrealShare.Tree1M";
Group[1].Data[0].bMultiSkins = True;
Group[1].Data[0].TexNum = 1;
//Tree1
Group[1].Data[0].Tex[0].Old[1] = "None";
Group[1].Data[0].Tex[0].New[1] = "HDSkins2.HDJTree11";
//Tree2 Group
Group[1].Data[1].Mesh = "UnrealShare.Tree2M";
Group[1].Data[1].bMultiSkins = True;
Group[1].Data[1].TexNum = 1;
//Tree2
Group[1].Data[1].Tex[0].Old[1] = "None";
Group[1].Data[1].Tex[0].New[1] = "HDSkins2.HDJTree21";
//Tree3 Group
Group[1].Data[2].Mesh = "UnrealShare.Tree3M";
Group[1].Data[2].bMultiSkins = True;
Group[1].Data[2].TexNum = 1;
//Tree3
Group[1].Data[2].Tex[0].Old[1] = "None";
Group[1].Data[2].Tex[0].New[1] = "HDSkins2.HDJTree31";
//Tree4 Group
Group[1].Data[3].Mesh = "UnrealShare.Tree4M";
Group[1].Data[3].bMultiSkins = True;
Group[1].Data[3].TexNum = 1;
//Tree4
Group[1].Data[3].Tex[0].Old[1] = "None";
Group[1].Data[3].Tex[0].New[1] = "HDSkins2.HDJTree41";
//Tree5 Group
Group[1].Data[4].Mesh = "UnrealShare.Tree5M";
Group[1].Data[4].bMultiSkins = True;
Group[1].Data[4].TexNum = 1;
//Tree5
Group[1].Data[4].Tex[0].Old[1] = "None";
Group[1].Data[4].Tex[0].New[1] = "HDSkins2.HDJTree51";
//Tree6 Group
Group[1].Data[5].Mesh = "UnrealShare.Tree6M";
Group[1].Data[5].bMultiSkins = True;
Group[1].Data[5].TexNum = 1;
//Tree6
Group[1].Data[5].Tex[0].Old[1] = "None";
Group[1].Data[5].Tex[0].New[1] = "HDSkins2.HDJTree61";
//Tree7 Group
Group[1].Data[6].Mesh = "UnrealShare.Tree7M";
Group[1].Data[6].bMultiSkins = True;
Group[1].Data[6].TexNum = 1;
//Tree7
Group[1].Data[6].Tex[0].Old[1] = "None";
Group[1].Data[6].Tex[0].New[1] = "HDSkins2.HDJTree71";
//Tree8 Group
Group[1].Data[7].Mesh = "UnrealShare.Tree8M";
Group[1].Data[7].bMultiSkins = True;
Group[1].Data[7].TexNum = 1;
//Tree8
Group[1].Data[7].Tex[0].Old[1] = "None";
Group[1].Data[7].Tex[0].New[1] = "HDSkins2.HDJTree81";
//Tree9 Group
Group[1].Data[8].Mesh = "UnrealShare.Tree9M";
Group[1].Data[8].bMultiSkins = True;
Group[1].Data[8].TexNum = 1;
//Tree9
Group[1].Data[8].Tex[0].Old[1] = "None";
Group[1].Data[8].Tex[0].New[1] = "HDSkins2.HDJTree91";
//Tree10 Group
Group[1].Data[9].Mesh = "UnrealShare.Tree10M";
Group[1].Data[9].bMultiSkins = True;
Group[1].Data[9].TexNum = 1;
//Tree10
Group[1].Data[9].Tex[0].Old[1] = "None";
Group[1].Data[9].Tex[0].New[1] = "HDSkins2.HDJTree101";
//Tree11 Group
Group[1].Data[10].Mesh = "UnrealShare.Tree11M";
Group[1].Data[10].bMultiSkins = True;
Group[1].Data[10].TexNum = 1;
//Tree11
Group[1].Data[10].Tex[0].Old[1] = "None";
Group[1].Data[10].Tex[0].New[1] = "HDSkins2.HDJTree111";
//Tree12 Group
Group[1].Data[11].Mesh = "UnrealShare.Tree12M";
Group[1].Data[11].bMultiSkins = True;
Group[1].Data[11].TexNum = 1;
//Tree12
Group[1].Data[11].Tex[0].Old[1] = "None";
Group[1].Data[11].Tex[0].New[1] = "HDSkins2.HDJTree121";
//Plants
//Plant1 Group
Group[1].Data[12].Mesh = "UnrealShare.Plant1M";
Group[1].Data[12].bMultiSkins = True;
Group[1].Data[12].TexNum = 1;
//Plant1
Group[1].Data[12].Tex[0].Old[1] = "None";
Group[1].Data[12].Tex[0].New[1] = "HDSkins2.HDJPlant11";
//Plant2 Group
Group[1].Data[13].Mesh = "UnrealShare.Plant2M";
Group[1].Data[13].bMultiSkins = True;
Group[1].Data[13].TexNum = 1;
//Plant2
Group[1].Data[13].Tex[0].Old[1] = "None";
Group[1].Data[13].Tex[0].New[1] = "HDSkins2.HDJPlant21";
//Plant3 Group
Group[1].Data[14].Mesh = "UnrealShare.Plant3M";
Group[1].Data[14].bMultiSkins = True;
Group[1].Data[14].TexNum = 1;
//Plant3
Group[1].Data[14].Tex[0].Old[1] = "None";
Group[1].Data[14].Tex[0].New[1] = "HDSkins2.HDJPlant31";
//Plant4 Group
Group[1].Data[15].Mesh = "UnrealShare.Plant4M";
Group[1].Data[15].bMultiSkins = True;
Group[1].Data[15].TexNum = 1;
//Plant4
Group[1].Data[15].Tex[0].Old[1] = "None";
Group[1].Data[15].Tex[0].New[1] = "HDSkins2.HDJPlant41";
//Plant5 Group
Group[1].Data[16].Mesh = "UnrealShare.Plant5M";
Group[1].Data[16].bMultiSkins = True;
Group[1].Data[16].TexNum = 1;
//Plant4
Group[1].Data[16].Tex[0].Old[1] = "None";
Group[1].Data[16].Tex[0].New[1] = "HDSkins2.HDJPlant41";
//Plant6 Group
Group[1].Data[17].Mesh = "UnrealShare.Plant6M";
Group[1].Data[17].bMultiSkins = True;
Group[1].Data[17].TexNum = 1;
//Plant6
Group[1].Data[17].Tex[0].Old[1] = "None";
Group[1].Data[17].Tex[0].New[1] = "HDSkins2.HDJPlant61";
//Plant7 Group
Group[1].Data[18].Mesh = "UnrealShare.Plant7M";
Group[1].Data[18].bMultiSkins = True;
Group[1].Data[18].TexNum = 1;
//Plant7
Group[1].Data[18].Tex[0].Old[1] = "None";
Group[1].Data[18].Tex[0].New[1] = "HDSkins2.HDJPlant61";
//Boxes
//Wooden Box Group
Group[1].Data[20].Mesh = "UnrealShare.WoodenBoxM";
Group[1].Data[20].bMultiSkins = True;
Group[1].Data[20].TexNum = 1;
//Wooden Box
Group[1].Data[20].Tex[0].Old[1] = "None";
Group[1].Data[20].Tex[0].New[1] = "HDSkins2.HDJWoodenBox1";
//Steel Box Group
Group[1].Data[21].Mesh = "UnrealShare.SteelBoxM";
Group[1].Data[21].bMultiSkins = True;
Group[1].Data[21].TexNum = 1;
//Steel Box
Group[1].Data[21].Tex[0].Old[1] = "None";
Group[1].Data[21].Tex[0].New[1] = "HDSkins2.HDJSteelBox1";
//Barrels
//Barrel Group
Group[1].Data[22].Mesh = "UnrealShare.BarrelM";
Group[1].Data[22].TexNum = 1;
//Barrel
Group[1].Data[22].Tex[0].Old[0] = "UnrealShare.Skins.JBarrel1";
Group[1].Data[22].Tex[0].New[0] = "HDSkins2.HDJBarrel1";
//Steel Barrel Group
Group[1].Data[23].Mesh = "UnrealShare.steelbarrelM";
Group[1].Data[23].TexNum = 2;
//Steel Barrel
Group[1].Data[23].Tex[0].Old[0] = "None";
Group[1].Data[23].Tex[0].New[0] = "HDSkins2.HDJSteelBarrel1";
//Tarydium Barrel
Group[1].Data[23].Tex[1].Old[0] = "UnrealShare.Skins.Jsteelbarrel2";
Group[1].Data[23].Tex[1].New[0] = "HDSkins2.HDJSteelBarrel2";
//Barrel Group
Group[1].Data[24].Mesh = "UnrealI.sbarrel";
Group[1].Data[24].bMultiSkins = True;
Group[1].Data[24].TexNum = 1;
//Barrel
Group[1].Data[24].Tex[0].Old[1] = "None";
Group[1].Data[24].Tex[0].New[1] = "HDSkins2.HDJsbarrel1";
//Book Group
Group[1].Data[25].Mesh = "UnrealShare.BookM";
Group[1].Data[25].TexNum = 4;
//Red Book (default)
Group[1].Data[25].Tex[0].Old[0] = "None";
Group[1].Data[25].Tex[0].New[0] = "HDSkins2.HDJBook1";
//Yellow Book
Group[1].Data[25].Tex[1].Old[0] = "UnrealShare.Skins.JBook2";
Group[1].Data[25].Tex[1].New[0] = "HDSkins2.HDJBook2";
//Green Book
Group[1].Data[25].Tex[2].Old[0] = "UnrealShare.Skins.JBook3";
Group[1].Data[25].Tex[2].New[0] = "HDSkins2.HDJBook3";
//Blue Book
Group[1].Data[25].Tex[3].Old[0] = "UnrealShare.Skins.JBook4";
Group[1].Data[25].Tex[3].New[0] = "HDSkins2.HDJBook4";
//Boulder Group
Group[1].Data[26].Mesh = "UnrealShare.BoulderM";
Group[1].Data[26].bMultiSkins = True;
Group[1].Data[26].TexNum = 1;
//Boulder
Group[1].Data[26].Tex[0].Old[1] = "None";
Group[1].Data[26].Tex[0].New[1] = "HDSkins2.HDJBoulder1";
//Chest Group
Group[1].Data[27].Mesh = "UnrealShare.ChestM";
Group[1].Data[27].bMultiSkins = True;
Group[1].Data[27].TexNum = 1;
//Chest
Group[1].Data[27].Tex[0].Old[1] = "None";
Group[1].Data[27].Tex[0].New[1] = "HDSkins2.HDJChest1";
//Sign Group
Group[1].Data[28].Mesh = "UnrealShare.Sign1M";
Group[1].Data[28].bMultiSkins = True;
Group[1].Data[28].TexNum = 1;
//Sign
Group[1].Data[28].Tex[0].Old[1] = "None";
Group[1].Data[28].Tex[0].New[1] = "HDSkins2.HDJSign11";
//Moons
//Moon One Group
Group[1].Data[29].Mesh = "UnrealI.Moon1";
Group[1].Data[29].TexNum = 1;
//Moon One
Group[1].Data[29].Tex[0].Old[0] = "UnrealI.Skins.JMoon1";
Group[1].Data[29].Tex[0].New[0] = "HDSkins2.HDJMoon1";
//Moon Two Group
Group[1].Data[30].Mesh = "UnrealI.Moon1";
Group[1].Data[30].TexNum = 1;
//Moon Two
Group[1].Data[30].Tex[0].Old[0] = "UnrealI.Skins.MoonTwo";
Group[1].Data[30].Tex[0].New[0] = "HDSkins2.HDMoonTwo";
//Moon Three Group
Group[1].Data[31].Mesh = "UnrealI.Moon3M";
Group[1].Data[31].TexNum = 1;
//Moon Three
Group[1].Data[31].Tex[0].Old[0] = "None";
Group[1].Data[31].Tex[0].New[0] = "HDSkins2.HDJMoon3";
//Flags
//Flag 1 Group
Group[1].Data[32].Mesh = "UnrealI.Flag1M";
Group[1].Data[32].TexNum = 2;
//Flag 1
Group[1].Data[32].Tex[0].Old[0] = "None";
Group[1].Data[32].Tex[0].New[0] = "HDSkins2.HDJFlag11";
//Flag 1b
Group[1].Data[32].Tex[1].Old[0] = "UnrealI.Skins.JFlag12";
Group[1].Data[32].Tex[1].New[0] = "HDSkins2.HDJFlag12";
//Flag 2 Group
Group[1].Data[33].Mesh = "UnrealI.Flag2M";
Group[1].Data[33].bMultiSkins = True;
Group[1].Data[33].TexNum = 1;
//Flag 2
Group[1].Data[33].Tex[0].Old[1] = "None";
Group[1].Data[33].Tex[0].New[1] = "HDSkins2.HDJFlag21";
//Flag 3 Group
Group[1].Data[34].Mesh = "UnrealI.Flag3M";
Group[1].Data[34].bMultiSkins = True;
Group[1].Data[34].TexNum = 1;
//Flag 3
Group[1].Data[34].Tex[0].Old[1] = "None";
Group[1].Data[34].Tex[0].New[1] = "HDSkins2.HDJFlag31";
//Tapestry1 Group
Group[1].Data[35].Mesh = "UnrealI.Tap";
Group[1].Data[35].bMultiSkins = True;
Group[1].Data[35].TexNum = 1;
//Tapestry1
Group[1].Data[35].Tex[0].Old[1] = "None";
Group[1].Data[35].Tex[0].New[1] = "HDSkins2.HDJTap1";
//Statues
//Monk Statue Group
Group[1].Data[36].Mesh = "UnrealShare.MonkStatueM";
Group[1].Data[36].bMultiSkins = True;
Group[1].Data[36].TexNum = 1;
//Monk Statue
Group[1].Data[36].Tex[0].Old[1] = "None";
Group[1].Data[36].Tex[0].New[1] = "HDSkins2.HDJMonkStatue1";
//Nali Statue Group
Group[1].Data[37].Mesh = "UnrealShare.NaliStatueM";
Group[1].Data[37].bMultiSkins = True;
Group[1].Data[37].TexNum = 1;
//Nali Statue
Group[1].Data[37].Tex[0].Old[1] = "None";
Group[1].Data[37].Tex[0].New[1] = "HDSkins2.HDJNaliStatue1";
//Lantern & Lamps
//Lantern Group
Group[1].Data[38].Mesh = "UnrealShare.LanternM";
Group[1].Data[38].bMultiSkins = True;
Group[1].Data[38].TexNum = 1;
//Lantern
Group[1].Data[38].Tex[0].Old[1] = "None";
Group[1].Data[38].Tex[0].New[1] = "HDSkins2.HDJLantern1";
//Lantern2 Group
Group[1].Data[39].Mesh = "UnrealShare.Lantern2M";
Group[1].Data[39].bMultiSkins = True;
Group[1].Data[39].TexNum = 1;
//Lantern2
Group[1].Data[39].Tex[0].Old[1] = "None";
Group[1].Data[39].Tex[0].New[1] = "HDSkins2.HDJLantern1";
//Lamp1 Group
Group[1].Data[40].Mesh = "UnrealI.Lamp1M";
Group[1].Data[40].bMultiSkins = True;
Group[1].Data[40].TexNum = 1;
//Lamp1
Group[1].Data[40].Tex[0].Old[1] = "None";
Group[1].Data[40].Tex[0].New[1] = "HDSkins2.HDJLamp11";
//Lamp4 Group
Group[1].Data[41].Mesh = "UnrealI.Lamp4M";
Group[1].Data[41].bMultiSkins = True;
Group[1].Data[41].TexNum = 1;
//Lamp4
Group[1].Data[41].Tex[0].Old[1] = "None";
Group[1].Data[41].Tex[0].New[1] = "HDSkins2.HDJLamp41";
//Sconce Group
Group[1].Data[42].Mesh = "UnrealShare.sconceM";
Group[1].Data[42].TexNum = 1;
//Sconce
Group[1].Data[42].Tex[0].Old[0] = "None";
Group[1].Data[42].Tex[0].New[0] = "HDSkins2.HDJsconce1";
//Knife
//Knife Group (uses same skin as lamp)
Group[1].Data[43].Mesh = "UnrealShare.KnifeM";
Group[1].Data[43].bMultiSkins = True;
Group[1].Data[43].TexNum = 1;
//Knife
Group[1].Data[43].Tex[0].Old[1] = "None";
Group[1].Data[43].Tex[0].New[1] = "HDSkins2.HDJLantern1";
//Table & Chair
//Table Group
Group[1].Data[44].Mesh = "UnrealI.Table1";
Group[1].Data[44].bMultiSkins = True;
Group[1].Data[44].TexNum = 1;
//Table
Group[1].Data[44].Tex[0].Old[1] = "None";
Group[1].Data[44].Tex[0].New[1] = "HDSkins2.HDJTable11";
//Chair Group
Group[1].Data[45].Mesh = "UnrealI.Chair1";
Group[1].Data[45].bMultiSkins = True;
Group[1].Data[45].TexNum = 1;
//Chair
Group[1].Data[45].Tex[0].Old[1] = "None";
Group[1].Data[45].Tex[0].New[1] = "HDSkins2.HDJChair11";
//Pottery
//Pottery0 Group
Group[1].Data[46].Mesh = "UnrealShare.Pottery0M";
Group[1].Data[46].bMultiSkins = True;
Group[1].Data[46].TexNum = 1;
//Potter0
Group[1].Data[46].Tex[0].Old[1] = "None";
Group[1].Data[46].Tex[0].New[1] = "HDSkins2.HDJPottery01";
//Pottery1 Group
Group[1].Data[47].Mesh = "UnrealShare.Pottery1M";
Group[1].Data[47].bMultiSkins = True;
Group[1].Data[47].TexNum = 1;
//Pottery1
Group[1].Data[47].Tex[0].Old[1] = "None";
Group[1].Data[47].Tex[0].New[1] = "HDSkins2.HDJPottery11";
//Pottery2 Group
Group[1].Data[48].Mesh = "UnrealShare.Pottery2M";
Group[1].Data[48].bMultiSkins = True;
Group[1].Data[48].TexNum = 1;
//Pottery2
Group[1].Data[48].Tex[0].Old[1] = "None";
Group[1].Data[48].Tex[0].New[1] = "HDSkins2.HDJPottery21";
//Vase1 Group
Group[1].Data[49].Mesh = "UnrealShare.vaseM";
Group[1].Data[49].bMultiSkins = True;
Group[1].Data[49].TexNum = 1;
//Vase1
Group[1].Data[49].Tex[0].Old[1] = "None";
Group[1].Data[49].Tex[0].New[1] = "HDSkins2.HDJVase1";
//Urn Group
Group[1].Data[50].Mesh = "UnrealShare.UrnM";
Group[1].Data[50].bMultiSkins = True;
Group[1].Data[50].TexNum = 1;
//Urn
Group[1].Data[50].Tex[0].Old[1] = "None";
Group[1].Data[50].Tex[0].New[1] = "HDSkins2.HDJUrn1";
//Pods
//EscapePod Group
Group[1].Data[51].Mesh = "UnrealI.Escapep";
Group[1].Data[51].bMultiSkins = True;
Group[1].Data[51].TexNum = 1;
//EscapePod
Group[1].Data[51].Tex[0].Old[1] = "None";
Group[1].Data[51].Tex[0].New[1] = "HDSkins2.HDJEscapep1";
//Cryopod Group
Group[1].Data[52].Mesh = "UnrealI.CryopodM";
Group[1].Data[52].bMultiSkins = True;
Group[1].Data[52].TexNum = 1;
//Cryopod
Group[1].Data[52].Tex[0].Old[1] = "None";
Group[1].Data[52].Tex[0].New[1] = "HDSkins2.HDJCryopod1";
//Fan
//Fan2 Group
Group[1].Data[53].Mesh = "UnrealShare.Fan2M";
Group[1].Data[53].bMultiSkins = True;
Group[1].Data[53].TexNum = 1;
//Fan2
Group[1].Data[53].Tex[0].Old[1] = "None";
Group[1].Data[53].Tex[0].New[1] = "HDSkins2.HDJFan21";
//Small Objects
//Dice Group
Group[1].Data[54].Mesh = "UnrealI.DiceM";
Group[1].Data[54].TexNum = 1;
//Dice
Group[1].Data[54].Tex[0].Old[0] = "None";
Group[1].Data[54].Tex[0].New[0] = "HDSkins2.HDJDice1";
//Wire Group
Group[1].Data[55].Mesh = "UnrealShare.WireM";
Group[1].Data[55].bMultiSkins = True;
Group[1].Data[55].TexNum = 1;
//Wire
Group[1].Data[55].Tex[0].Old[1] = "None";
Group[1].Data[55].Tex[0].New[1] = "HDSkins2.HDJWire1";
//Candle Group
Group[1].Data[56].Mesh = "UnrealShare.CandleM";
Group[1].Data[56].bMultiSkins = True;
Group[1].Data[56].TexNum = 1;
//Candle
Group[1].Data[56].Tex[0].Old[1] = "None";
Group[1].Data[56].Tex[0].New[1] = "HDSkins2.HDJCandle1";
//Candle2 Group
Group[1].Data[57].Mesh = "UnrealShare.Candl2";
Group[1].Data[57].bMultiSkins = True;
Group[1].Data[57].TexNum = 1;
//Candle2
Group[1].Data[57].Tex[0].Old[1] = "None";
Group[1].Data[57].Tex[0].New[1] = "HDSkins2.HDJCandl21";
//SeaWeed
//Seaweed Group
Group[1].Data[58].Mesh = "UnrealShare.SeaWeedM";
Group[1].Data[58].bMultiSkins = True;
Group[1].Data[58].TexNum = 1;
//Seaweed
Group[1].Data[58].Tex[0].Old[1] = "None";
Group[1].Data[58].Tex[0].New[1] = "HDSkins2.HDJSeaWeed1";
//RTNPUE DECORATIONS---------------------------
//Pine Group
Group[1].Data[59].Mesh = "rtnpdec.Pinem";
Group[1].Data[59].TexNum = 1;
//Pine
Group[1].Data[59].Tex[0].Old[0] = "None";
Group[1].Data[59].Tex[0].New[0] = "HDRTNPUE.HDJPine1";
//Anvil Group
Group[1].Data[60].Mesh = "rtnpdec.anvilm";
Group[1].Data[60].bMultiSkins = True;
Group[1].Data[60].TexNum = 1;
//Anvil
Group[1].Data[60].Tex[0].Old[1] = "None";
Group[1].Data[60].Tex[0].New[1] = "HDRTNPUE.HDJanvil1";
Group[1].Data[60].Tex[0].Old[2] = "None";
Group[1].Data[60].Tex[0].New[2] = "HDRTNPUE.HDJsStone";
Group[1].Data[60].Tex[0].Old[3] = "None";
Group[1].Data[60].Tex[0].New[3] = "HDRTNPUE.HDJsHammer";
//TableW Group
Group[1].Data[61].Mesh = "rtnpdec.TableSTm";
Group[1].Data[61].bMultiSkins = True;
Group[1].Data[61].TexNum = 1;
//TableW
Group[1].Data[61].Tex[0].Old[1] = "None";
Group[1].Data[61].Tex[0].New[1] = "HDRTNPUE.HDJTablest1";
//Vase10 Group
Group[1].Data[62].Mesh = "rtnpdec.vase10m";
Group[1].Data[62].bMultiSkins = True;
Group[1].Data[62].TexNum = 1;
//Vase10
Group[1].Data[62].Tex[0].Old[1] = "None";
Group[1].Data[62].Tex[0].New[1] = "HDRTNPUE.HDJvase10";
//Vase11 Group
Group[1].Data[63].Mesh = "rtnpdec.vasecm";
Group[1].Data[63].bMultiSkins = True;
Group[1].Data[63].TexNum = 1;
//Vase11
Group[1].Data[63].Tex[0].Old[1] = "None";
Group[1].Data[63].Tex[0].New[1] = "HDRTNPUE.HDJvase13";
Group[1].Data[63].Tex[0].Old[2] = "None";
Group[1].Data[63].Tex[0].New[2] = "HDRTNPUE.HDJvasebase";
//Vase12 Group
Group[1].Data[64].Mesh = "rtnpdec.vase12m";
Group[1].Data[64].bMultiSkins = True;
Group[1].Data[64].TexNum = 1;
//Vase12
Group[1].Data[64].Tex[0].Old[1] = "None";
Group[1].Data[64].Tex[0].New[1] = "HDRTNPUE.HDJvasebase2";
Group[1].Data[64].Tex[0].Old[2] = "None";
Group[1].Data[64].Tex[0].New[2] = "HDRTNPUE.HDJvase12";
//Banetree Group
Group[1].Data[65].Mesh = "rtnpdec.Banetreem";
Group[1].Data[65].bMultiSkins = True;
Group[1].Data[65].TexNum = 1;
//Banetree
Group[1].Data[65].Tex[0].Old[1] = "None";
Group[1].Data[65].Tex[0].New[1] = "HDRTNPUE.HDJbtree1";
Group[1].Data[65].Tex[0].Old[2] = "None";
Group[1].Data[65].Tex[0].New[2] = "HDRTNPUE.HDJbtree1";
//Pine Group
Group[1].Data[66].Mesh = "UnrealShare.BookM";
Group[1].Data[66].TexNum = 1;
//Pirate Book
Group[1].Data[66].Tex[0].Old[0] = "Fhub6.PirateBook";
Group[1].Data[66].Tex[0].New[0] = "HDRTNPUE.HDPirateBook";
//Inventory------------------------------------------------------------------------------
Group[2].DataNum = 8;
//Weapons
//Dispersion Pistol Group
Group[2].Data[0].Mesh = "UnrealShare.DPistolPick";
Group[2].Data[0].bMultiSkins = True;
Group[2].Data[0].TexNum = 1;
//Dispersion Pistol
Group[2].Data[0].Tex[0].Old[1] = "None";
Group[2].Data[0].Tex[0].New[1] = "HDSkins2.HDDPistol1";
//Ammo
//Clip Group
Group[2].Data[1].Mesh = "UnrealShare.ClipM";
Group[2].Data[1].bMultiSkins = True;
Group[2].Data[1].TexNum = 1;
//Clip
Group[2].Data[1].Tex[0].Old[2] = "None";
Group[2].Data[1].Tex[0].New[2] = "HDSkins2.HDJClip1";
//Powerups & Pickups
//Amplifier Group
Group[2].Data[2].Mesh = "UnrealShare.AmplifierM";
Group[2].Data[2].bMultiSkins = True;
Group[2].Data[2].TexNum = 1;
//Amplifier
Group[2].Data[2].Tex[0].Old[1] = "None";
Group[2].Data[2].Tex[0].New[1] = "HDSkins2.HDJAmplifier1";
//Flare Group
Group[2].Data[3].Mesh = "UnrealShare.FlareM";
Group[2].Data[3].bMultiSkins = True;
Group[2].Data[3].TexNum = 1;
//Flare
 
Last edited by Lightning_Hunter on Thu Jun 23, 2016 9:22 pm, edited 1 time in total.
-
gopostal
- OldUnreal Member
- Posts: 1007
- Joined: Thu Jul 31, 2008 9:29 pm
Re: High-Res Skin Project / Request for Skinners!
You need to pre-spawn the assets ahead of time to load everything into the current game.
Looking at all these checks I'm not surprised you are starting to see lag. Replacing SO many things on-the-fly is going to start taking a toll. I love the work and I'm a fan but you are wanting to retexture the entire game and this isn't the way to do it. I said it before and I'll reiterate it here again: you should seriously consider breaking this into packages (monsters, skins, decos, etc). The issue is that you can swap most of these in post (when the map loads) but the problems start when you need to change stuff live in-game and this is what you are seeing. The replacement skin for carcass or gib or whatever isn't in memory so the engine needs to run through all these checks a bunch of times and also load the texture swap. The players will see this as pockets of lag.
Pre-spawning the assets will help some but this is a lot of checking that has to go on. It's going to run like ass on a server when you start adding in ping. Let me know and we can throw this on my password test server and I'll show you what's going to happen.
Looking at all these checks I'm not surprised you are starting to see lag. Replacing SO many things on-the-fly is going to start taking a toll. I love the work and I'm a fan but you are wanting to retexture the entire game and this isn't the way to do it. I said it before and I'll reiterate it here again: you should seriously consider breaking this into packages (monsters, skins, decos, etc). The issue is that you can swap most of these in post (when the map loads) but the problems start when you need to change stuff live in-game and this is what you are seeing. The replacement skin for carcass or gib or whatever isn't in memory so the engine needs to run through all these checks a bunch of times and also load the texture swap. The players will see this as pockets of lag.
Pre-spawning the assets will help some but this is a lot of checking that has to go on. It's going to run like ass on a server when you start adding in ping. Let me know and we can throw this on my password test server and I'll show you what's going to happen.
I don't want to give the end away
but we're all going to die one day
but we're all going to die one day
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Retexturing the "entire" game is NOT the cause of the lag here, though. As you have stated, the mutator itself is causing the lag. The game still lags even if I move all of the textures out of the folder. The mutator by itself is causing the lag, and based on what you are saying, it appears this happens because it is checking for too much. If this is the case, then I may have to go back to my original plan of releasing this mod as replacement UnrealShare and UnrealI files, with batch files that swap the old out and the new in. Although I do not prefer to do it this way, it is a whole lot better than causing slowdowns. I don't see how releasing this mod in parts will resolve this issue. The mutator still has to check for all of the textures, regardless of whether or not I release them in parts. I seriously doubt there are many people who just want to use the monster skins, and disable the other skins. I have already finished everything except the inventory, so I am not about to dump all my work.You need to pre-spawn the assets ahead of time to load everything into the current game.
Looking at all these checks I'm not surprised you are starting to see lag. Replacing SO many things on-the-fly is going to start taking a toll. I love the work and I'm a fan but you are wanting to retexture the entire game and this isn't the way to do it. I said it before and I'll reiterate it here again: you should seriously consider breaking this into packages (monsters, skins, decos, etc). The issue is that you can swap most of these in post (when the map loads) but the problems start when you need to change stuff live in-game and this is what you are seeing. The replacement skin for carcass or gib or whatever isn't in memory so the engine needs to run through all these checks a bunch of times and also load the texture swap. The players will see this as pockets of lag.
Pre-spawning the assets will help some but this is a lot of checking that has to go on. It's going to run like ass on a server when you start adding in ping. Let me know and we can throw this on my password test server and I'll show you what's going to happen.
If you just want a version of this mutator that only replaces the monster skins for your server, I'm sure I can send you the files later on so you can set that up yourself. However, the truth is that most people will not be using these files on a server. For this reason, it may be more practical to release this as replacement packages, rather than a mutator. That is, of course, unless someone can write better code that does not slow the game down.
Last edited by Lightning_Hunter on Fri Jun 24, 2016 3:26 am, edited 1 time in total.
-
gopostal
- OldUnreal Member
- Posts: 1007
- Joined: Thu Jul 31, 2008 9:29 pm
Re: High-Res Skin Project / Request for Skinners!
I'm not trying to be argumentative but both of those statements cannot be logically true. You first need to see the problem for what it is before you can try to address it. The mutator is causing the lag because it is replacing so incredibly many things that are spawning into the player's game. This part is important because it is not the server causing this. You as a player do not have texture "X" loaded into memory when the swap is called and so it must take a microsecond and fetch it. That's why I said prespawning them might help but you are loading a ton and it may be too much to force onto clients with weaker machines. I'd be a good person to test this on as my gaming computer is a very weak workstation level desktop. I am confident that if it will run on my rig it'll run on almost anyone better than a toaster.Retexturing the "entire" game is NOT the cause of the lag here, though. As you have stated, the mutator itself is causing the lag.
I can only speak for myself but I have no interest whatsoever in replacing anything else except the monsters. I'll be frank that if you release this as an entire package I'm going to remove everything but the monster skins for my server anyway and redo the mod. It's not that I don't like your work, I think it's very inspired. I just like the look and feel of Unreal as a game and I'm not willing to 'upgrade' en masse so it looks like I'm playing Unreal in UT2004. For me something gets lost if I move too far away from 'my game'.I don't see how releasing this mod in parts will resolve this issue. The mutator still has to check for all of the textures, regardless of whether or not I release them in parts. I seriously doubt there are many people who just want to use the monster skins, and disable the other skins. I have already finished everything except the inventory, so I am not about to dump all my work.
It's a good idea to remember that just because you spend time working on something, well that alone doesn't make it either good or something that players will want. I've been there so I know. I spent the better part of a summer creating "Survival" and it bombed SO bad. I stopped listening to people and did what I wanted to do. I didn't playtest enough, and I forced things in that I'd spent a lot of time on because I didn't want it 'wasted'. Man, did I learn a lesson.
anyway, not saying any of your work is bad but you have to know when to stop and that's often (surprisingly) really hard.
:waves hand vigorously: I'll certainly code this as a server friendly version if you condone that. I think you are wrong though, server use is where this belongs. Mappers would just use the textures as they create and likely not be interested in the mod as you have it since they can insert the textures manually when the map is done and place everything in mylevel. BTW this is something you ought to consider too. You should release the textures as a zip file for direct usage.
If you just want a version of this mutator that only replaces the monster skins for your server, I'm sure I can send you the files later on so you can set that up yourself. However, the truth is that most people will not be using these files on a server. For this reason, it may be more practical to release this as replacement packages, rather than a mutator. That is, of course, unless someone can write better code that does not slow the game down.
This got a little long so I apologize. I've followed this project with a great deal of interest and I would hate to see it stopped or undone. Please, please consider letting me code a server friendly version that uses the monsters skins only and let's get that out there for server usage. I can assure you it would go on most of them within a very short time. Incremental improvements to the game are always welcome.
I don't want to give the end away
but we're all going to die one day
but we're all going to die one day
-
sn260591
- OldUnreal Member
- Posts: 116
- Joined: Wed Aug 17, 2011 2:54 am
Re: High-Res Skin Project / Request for Skinners!
Sorry for silence in PM - I didn't notice new messages.
The mutator really causes delays with a large number of monsters, and I do not know how to do it faster.
The mutator really causes delays with a large number of monsters, and I do not know how to do it faster.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
I can separate the RTNPUE skins to normal packages. That might help a tiny bit. If it still causes lag however, then I may have to just merge the DXT1 textures directly in the packages and release with a batch file that swaps them in and out. However, first I need someone to tell me a possible way to import DXT1 textures in to UnrealShare! UED2.1 does not help me, because I cannot open UT99's UnrealShare using it. Any help would be appreciated.
The easiest method would be if I could somehow open UT99's UnrealShare and UnrealI files using UED2.1.
The easiest method would be if I could somehow open UT99's UnrealShare and UnrealI files using UED2.1.
Last edited by Lightning_Hunter on Fri Jun 24, 2016 4:50 pm, edited 1 time in total.
-
han
- Global Moderator
- Posts: 686
- Joined: Wed Dec 10, 2014 12:38 am
Re: High-Res Skin Project / Request for Skinners!
Option #1:However, first I need someone to tell me a possible way to import DXT1 textures in to UnrealShare
Create *.utx packages. Place them into a directory *NOT* inside the search path and use #exec obj load file=bla.utx
However this leaves the textures in a group with that package name. So you would probably want to call that package Skins.utx.
Option #2:
Simply store them as 24bit files. #exec texture import will auto dxt compress them.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Maybe I am reading your post wrong Han, but how does that replace textures in UnrealShare.u? Don't your method simply create a new .utx file?
-
BobIsUnreal
- OldUnreal Member
- Posts: 808
- Joined: Mon Apr 12, 2010 12:34 am
Re: High-Res Skin Project / Request for Skinners!
can you do some trickery , such as importing the dxt into the file with unrealed 2.1 , then obj import texturefile.utx into unrealshare.u in ut?
-
han
- Global Moderator
- Posts: 686
- Joined: Wed Dec 10, 2014 12:38 am
Re: High-Res Skin Project / Request for Skinners!
I was assuming that you rebuild the package, not editing it. Why don't you rebuild it and put the old one in SystemConform?
But then again texture import command afaik replaces the old object so you can input that into the editor log window, but you need to specify package/group.
But then again texture import command afaik replaces the old object so you can input that into the editor log window, but you need to specify package/group.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
I have to be honest, I have no clue what SystemConform is... In fact, I have no idea how to use any of these methods you are talking about. I don't have any knowledge of importing DXT1 textures. This project is at a standstill right now, because I don't know how to get these DXT1 textures in to UnrealShare. All the skins are pretty much done, except for the inventory (and I will likely do a separate release for that). I just need a good method to compile all these skins, and I can release the project. Until then, this project will unfortunately get nowhere.I was assuming that you rebuild the package, not editing it. Why don't you rebuild it and put the old one in SystemConform?
But then again texture import command afaik replaces the old object so you can input that into the editor log window, but you need to specify package/group.
Last edited by Lightning_Hunter on Sat Jul 02, 2016 12:24 am, edited 1 time in total.
-
SP2000
- OldUnreal Member
- Posts: 33
- Joined: Fri Feb 06, 2004 8:14 pm
Re: High-Res Skin Project / Request for Skinners!
Why not just use a mutator? It would be a shame to have all this work go to waste just ecause of a slowdown.I have to be honest, I have no clue what SystemConform is... In fact, I have no idea how to use any of these methods you are talking about. I don't have any knowledge of importing DXT1 textures. This project is at a standstill right now, because I don't know how to get these DXT1 textures in to UnrealShare. All the skins are pretty much done, except for the inventory (and I will likely do a separate release for that). I just need a good method to compile all these skins, and I can release the project. Until then, this project will unfortunately get nowhere.I was assuming that you rebuild the package, not editing it. Why don't you rebuild it and put the old one in SystemConform?
But then again texture import command afaik replaces the old object so you can input that into the editor log window, but you need to specify package/group.
At the very least, put out a alpha/beta version using the same functionality you used in the prior screeenshots.
Long Live UnReAl
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Why not just use a mutator? It would be a shame to have all this work go to waste just ecause of a slowdown.
At the very least, put out a alpha/beta version using the same functionality you used in the prior screeenshots.
I can release a mutator version, but the lag really is unacceptable. I would prefer to release two versions - one that replaces UnrealShare and causes no lag whatsoever, and the other in mutator form. Maybe I can make the mutator version for online play (to avoid mismatches), and have it replace only the main objects (a lighter version of the mod). The other version can be SP only, which will replace everything using new UnrealShare and UnrealI files. However, I still need someone to give me a proper way to replace UnrealShare/UnrealI textures with DXT1. I have stopped working on this project for about a week because work is busy for me, and I don't have much time to mess around with this stuff. If someone can give a simple tutorial on how to replace textures using any method that works, I would be extremely grateful.
Last edited by Lightning_Hunter on Sun Jul 10, 2016 9:17 pm, edited 1 time in total.
-
[]KAOS[]Casey
- OldUnreal Member
- Posts: 4497
- Joined: Sun Aug 07, 2011 4:22 am
- Location: over there
Re: High-Res Skin Project / Request for Skinners!
http://www.klankaos.com/TextureMerger.dll (built for 227i, this code doesn't work on UT even if I compile it for UT)
make a folder named S3TCMerge like this:
c:\path\to\unreal\system
c:\path\to\unreal\S3TCMerge
then in the S3TCMerge you can place folders to correspond to package names
like UnrealShare
and in the UnrealShare folder you can put .dds, pcx, bmp, whatever the unreal editor will import normally
then in a command prompt
cd c:\path\to\unreal\system
UCC TextureMerger.TextureMerger UnrealShare
It will then jam in the textures to the .u file, with preserved online functionality using a conforming package linker. It will export a NAMEOFPACKAGE_MERGED.utx
even though it's named .utx you can just rename it to UnrealShare.u and it will work again.
you need to name all the new textures the same as they are named in unreal
here is an example of where I merge in some s3tc stuff from diehard
make a folder named S3TCMerge like this:
c:\path\to\unreal\system
c:\path\to\unreal\S3TCMerge
then in the S3TCMerge you can place folders to correspond to package names
like UnrealShare
and in the UnrealShare folder you can put .dds, pcx, bmp, whatever the unreal editor will import normally
then in a command prompt
cd c:\path\to\unreal\system
UCC TextureMerger.TextureMerger UnrealShare
It will then jam in the textures to the .u file, with preserved online functionality using a conforming package linker. It will export a NAMEOFPACKAGE_MERGED.utx
even though it's named .utx you can just rename it to UnrealShare.u and it will work again.
you need to name all the new textures the same as they are named in unreal
here is an example of where I merge in some s3tc stuff from diehard
obviously, this will break anticheats.e:\UnrealGold\227iSystem>ucc TextureMerger.TextureMerger UnrealShare
Found Package UnrealShare
Merging ..\S3TCMerge\UnrealShare\JWoodenBox1.dds into Texture UnrealShare.Skins.JWoodenBox1
Merging ..\S3TCMerge\UnrealShare\Jmisc1.dds into Texture UnrealShare.Skins.Jmisc1
Merging ..\S3TCMerge\UnrealShare\gina.dds into Texture UnrealShare.Skins.gina
Merging ..\S3TCMerge\UnrealShare\DPistol1.dds into Texture UnrealShare.Skins.DPistol1
Merging ..\S3TCMerge\UnrealShare\JLantern1.dds into Texture UnrealShare.Skins.JLantern1
Merging ..\S3TCMerge\UnrealShare\Jsteelbarrel2.dds into Texture UnrealShare.Skins.Jsteelbarrel2
Merging ..\S3TCMerge\UnrealShare\JBarrel1.dds into Texture UnrealShare.Skins.JBarrel1
Merging ..\S3TCMerge\UnrealShare\JPlant61.dds into Texture UnrealShare.Skins.JPlant61
Merging ..\S3TCMerge\UnrealShare\JPlant41.dds into Texture UnrealShare.Skins.JPlant41
Merging ..\S3TCMerge\UnrealShare\JBook1.dds into Texture UnrealShare.Skins.JBook1
Merging ..\S3TCMerge\UnrealShare\JBook4.dds into Texture UnrealShare.Skins.JBook4
Merging ..\S3TCMerge\UnrealShare\JChest1.dds into Texture UnrealShare.Skins.JChest1
Merging ..\S3TCMerge\UnrealShare\JMonkStatue1.dds into Texture UnrealShare.Skins.JMonkStatue1
Merging ..\S3TCMerge\UnrealShare\JPlant11.dds into Texture UnrealShare.Skins.JPlant11
Merging ..\S3TCMerge\UnrealShare\JPlant21.dds into Texture UnrealShare.Skins.JPlant21
Merging ..\S3TCMerge\UnrealShare\JPlant31.dds into Texture UnrealShare.Skins.JPlant31
Merging ..\S3TCMerge\UnrealShare\JTree121.dds into Texture UnrealShare.Skins.JTree121
Merging ..\S3TCMerge\UnrealShare\JTree21.dds into Texture UnrealShare.Skins.JTree21
Merging ..\S3TCMerge\UnrealShare\JTree31.dds into Texture UnrealShare.Skins.JTree31
Merging ..\S3TCMerge\UnrealShare\JTree51.dds into Texture UnrealShare.Skins.JTree51
Merging ..\S3TCMerge\UnrealShare\JTree61.dds into Texture UnrealShare.Skins.JTree61
Merging ..\S3TCMerge\UnrealShare\JTree91.dds into Texture UnrealShare.Skins.JTree91
Merging ..\S3TCMerge\UnrealShare\JBook2.dds into Texture UnrealShare.Skins.JBook2
Merging ..\S3TCMerge\UnrealShare\JBook3.dds into Texture UnrealShare.Skins.JBook3
Merging ..\S3TCMerge\UnrealShare\JBoulder1.dds into Texture UnrealShare.Skins.JBoulder1
Merging ..\S3TCMerge\UnrealShare\JAmplifier1.dds into Texture UnrealShare.Skins.JAmplifier1
Merging ..\S3TCMerge\UnrealShare\JHealth1.dds into Texture UnrealShare.Skins.Jhealth1
Merging ..\S3TCMerge\UnrealShare\JSign11.dds into Texture UnrealShare.Skins.JSign11
Merging ..\S3TCMerge\UnrealShare\Jband1.dds into Texture UnrealShare.Skins.Jband1
Merging ..\S3TCMerge\UnrealShare\JNaliFruit1.dds into Texture UnrealShare.Skins.JNaliFruit1
Merging ..\S3TCMerge\UnrealShare\JFlashl1.dds into Texture UnrealShare.Skins.JFlashl1
Merging ..\S3TCMerge\UnrealShare\Jsteelbarrel1.dds into Texture UnrealShare.Skins.Jsteelbarrel1
Merging ..\S3TCMerge\UnrealShare\JTree11.dds into Texture UnrealShare.Skins.JTree11
Merging ..\S3TCMerge\UnrealShare\JTree101.dds into Texture UnrealShare.Skins.JTree101
Merging ..\S3TCMerge\UnrealShare\JTree111.dds into Texture UnrealShare.Skins.JTree111
Merging ..\S3TCMerge\UnrealShare\JTree41.dds into Texture UnrealShare.Skins.JTree41
Merging ..\S3TCMerge\UnrealShare\JTree71.dds into Texture UnrealShare.Skins.JTree71
Merging ..\S3TCMerge\UnrealShare\JTree81.dds into Texture UnrealShare.Skins.JTree81
Merging ..\S3TCMerge\UnrealShare\JRabbit1.dds into Texture UnrealShare.Skins.JRabbit1
Merging ..\S3TCMerge\UnrealShare\Jmisc1.dds into Texture UnrealShare.Jmisc1
Are you sure you want to save 'UnrealShare_merged.utx' (new filesize 154510 kb, old filesize 154517 kb)? (Y/N): Y
Succesfully wrote UnrealShare_merged.utx
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Thanks Casey, but you say it will not work for UT. Does this mean I cannot use this method to modify UnrealShare that comes with UT? UT is actually my prime platform. 227 will come later.
-
[]KAOS[]Casey
- OldUnreal Member
- Posts: 4497
- Joined: Sun Aug 07, 2011 4:22 am
- Location: over there
Re: High-Res Skin Project / Request for Skinners!
Yeah, the same code causes a crash in UT. What is odd though is if I build for Unreal Gold(same compiler settings as UT, 227 is slightly different) it works there too.
However, it is possible that dropping in the UT unrealshare and running it through the 227i build of the texture merger could result in a working package in UT. I have not tried this, but it could work.
However, it is possible that dropping in the UT unrealshare and running it through the 227i build of the texture merger could result in a working package in UT. I have not tried this, but it could work.
-
han
- Global Moderator
- Posts: 686
- Joined: Wed Dec 10, 2014 12:38 am
Re: High-Res Skin Project / Request for Skinners!
I noticed that the Trees also have issue regarding the normal. They have some bottom plate in the same smoothing group turning the normal of the bottom vertices into the ground, which is bad for lighting.
-
han
- Global Moderator
- Posts: 686
- Joined: Wed Dec 10, 2014 12:38 am
Re: High-Res Skin Project / Request for Skinners!
Okay I noticed a couple of more problems when it comes to normals. One common situation are spiky cone like objects (like the tip of the spider legs in DeusEx). The top vertex will face in the direction the cone is pointing to, but is nearly perpendicular to the other faces and thus interpolated normals will be totally off for most of the cone. Again adding some small banding before the tip is recommended.
However, I noticed a far more severe problem, which I haven't considered at the time I suggested the addition of bands to improve normals. In Unreal Engine 1 each faces normal the vertex is part of in the smoothing group use the same weight.
This is fine in situation (i) as shown below, but in situation (ii) this produces an undesirable normal.
[img]http://coding.hanfling.de/SmoothingSketch.jpg[/img]
One solution would be to weight the triangle normals by the angle the triangle spans at the shared vertex as shown in (iii) where it produces the correct result.
However, without modifications to the vertex normal calculation code the only solution is to come up with triangle patters which won't cause this issue, though this is usually not feasable as it adds a lot of extra geometry and isn't always possible at all.
To visualize the issue, I made the MeshView Polygon view mode show the dot product between normal and normalized vector to the fragment. If the dot product is abve 0 (e.g. facing towards the viewer) it is shown in green, and if the dot product is below 0 it is shown in red (e.g. facing away from the viewer).
The screenshots below are made off two different angles, and highlights how large this effect is:
[img]http://coding.hanfling.de/CubeNormals_1.jpg[/img]
[img]http://coding.hanfling.de/CubeNormals_2.jpg[/img]
However, I noticed a far more severe problem, which I haven't considered at the time I suggested the addition of bands to improve normals. In Unreal Engine 1 each faces normal the vertex is part of in the smoothing group use the same weight.
This is fine in situation (i) as shown below, but in situation (ii) this produces an undesirable normal.
[img]http://coding.hanfling.de/SmoothingSketch.jpg[/img]
One solution would be to weight the triangle normals by the angle the triangle spans at the shared vertex as shown in (iii) where it produces the correct result.
However, without modifications to the vertex normal calculation code the only solution is to come up with triangle patters which won't cause this issue, though this is usually not feasable as it adds a lot of extra geometry and isn't always possible at all.
To visualize the issue, I made the MeshView Polygon view mode show the dot product between normal and normalized vector to the fragment. If the dot product is abve 0 (e.g. facing towards the viewer) it is shown in green, and if the dot product is below 0 it is shown in red (e.g. facing away from the viewer).
The screenshots below are made off two different angles, and highlights how large this effect is:
[img]http://coding.hanfling.de/CubeNormals_1.jpg[/img]
[img]http://coding.hanfling.de/CubeNormals_2.jpg[/img]
Last edited by han on Sat Aug 13, 2016 3:10 pm, edited 1 time in total.
-
han
- Global Moderator
- Posts: 686
- Joined: Wed Dec 10, 2014 12:38 am
Re: High-Res Skin Project / Request for Skinners!
When weighting the vertices based on their angle on the vertex the distortions go away and you get the symetry back the cube actually has. It now looks basically like a ball, which is sort of gets for the normals when smoothing and really the most you can get out of it this way. Still far from beeing what you want the normals to be, but certainly an improvement, adding bands would sort out the rest.
[img]http://coding.hanfling.de/WeightedCubeNormals.jpg[/img]
Another issue I noticed occurs wheneither two normals at the vertices face away from the light source, while the surface actually would not.
[img]http://coding.hanfling.de/WoodenBoxBug.jpg[/img]
So it looks like this certainly needs to be taken into account too when creating a mesh. At least there might be an improvement possible for the vertex normal generation. Suppose z is the up axis, and that x,y would face inside the cube, at the inner edge by weighting you would get 1*(1,0,0) + 1*(0,1,0) 3*(0,0,1) = (3,1,1), where as imho (1,1,1) would be better normal for this vertex, though this certainly would make the situation worse for the box.
[img]http://coding.hanfling.de/WeightedCubeNormals.jpg[/img]
Another issue I noticed occurs wheneither two normals at the vertices face away from the light source, while the surface actually would not.
[img]http://coding.hanfling.de/WoodenBoxBug.jpg[/img]
So it looks like this certainly needs to be taken into account too when creating a mesh. At least there might be an improvement possible for the vertex normal generation. Suppose z is the up axis, and that x,y would face inside the cube, at the inner edge by weighting you would get 1*(1,0,0) + 1*(0,1,0) 3*(0,0,1) = (3,1,1), where as imho (1,1,1) would be better normal for this vertex, though this certainly would make the situation worse for the box.
Last edited by han on Tue Aug 16, 2016 9:40 am, edited 1 time in total.
-
Lightning_Hunter
- OldUnreal Member
- Posts: 279
- Joined: Tue Mar 04, 2003 9:30 pm
Re: High-Res Skin Project / Request for Skinners!
Well, the busy season for my job is finally over - so I was going to try and start up work again on this project. Casey, could you post a new link to that Texture Merger? The old link seems to be invalid now. I really need to start packaging these skins so I can prepare for a first release!
Last edited by Lightning_Hunter on Wed Aug 31, 2016 11:10 pm, edited 1 time in total.
