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

[RELEASED] Unreal HD Skins [UT] [227]

URP - the Unreal Retexturing Project: for those who are interested in High-Resolution Textures for Unreal & UnrealTournament or may want to take part in creating them

Moderator: ahaigh01

User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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]
For High-Res Unreal skins, click here.
Image
User avatar
gopostal
OldUnreal Member
Posts: 1007
Joined: Thu Jul 31, 2008 9:29 pm

Re: High-Res Skin Project / Request for Skinners!

Post by gopostal »

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
User avatar
Skywolf
OldUnreal Member
Posts: 880
Joined: Sun Aug 02, 2009 12:20 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Skywolf »

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]

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 ::).
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
For High-Res Unreal skins, click here.
Image
User avatar
Skywolf
OldUnreal Member
Posts: 880
Joined: Sun Aug 02, 2009 12:20 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Skywolf »

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.
I hate it when people ask me what my favorite game is. Just try to explain you're not talking about Unreal Tournament ::).
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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...

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
     &nbsp
Last edited by Lightning_Hunter on Thu Jun 23, 2016 9:22 pm, edited 1 time in total.
For High-Res Unreal skins, click here.
Image
User avatar
gopostal
OldUnreal Member
Posts: 1007
Joined: Thu Jul 31, 2008 9:29 pm

Re: High-Res Skin Project / Request for Skinners!

Post by gopostal »

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.
I don't want to give the end away
but we're all going to die one day
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
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.

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.
For High-Res Unreal skins, click here.
Image
User avatar
gopostal
OldUnreal Member
Posts: 1007
Joined: Thu Jul 31, 2008 9:29 pm

Re: High-Res Skin Project / Request for Skinners!

Post by gopostal »

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'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.
  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.
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'.
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.

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.
: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.

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
sn260591
OldUnreal Member
Posts: 116
Joined: Wed Aug 17, 2011 2:54 am

Re: High-Res Skin Project / Request for Skinners!

Post by sn260591 »

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.
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
Last edited by Lightning_Hunter on Fri Jun 24, 2016 4:50 pm, edited 1 time in total.
For High-Res Unreal skins, click here.
Image
User avatar
han
Global Moderator
Posts: 686
Joined: Wed Dec 10, 2014 12:38 am

Re: High-Res Skin Project / Request for Skinners!

Post by han »

However, first I need someone to tell me a possible way to import DXT1 textures in to UnrealShare
Option #1:
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.
HX on Mod DB. Revision on Steam. Löffels on Patreon.
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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?
For High-Res Unreal skins, click here.
Image
User avatar
BobIsUnreal
OldUnreal Member
Posts: 808
Joined: Mon Apr 12, 2010 12:34 am

Re: High-Res Skin Project / Request for Skinners!

Post by BobIsUnreal »

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?
User avatar
han
Global Moderator
Posts: 686
Joined: Wed Dec 10, 2014 12:38 am

Re: High-Res Skin Project / Request for Skinners!

Post by han »

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.
HX on Mod DB. Revision on Steam. Löffels on Patreon.
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
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.
Last edited by Lightning_Hunter on Sat Jul 02, 2016 12:24 am, edited 1 time in total.
For High-Res Unreal skins, click here.
Image
User avatar
SP2000
OldUnreal Member
Posts: 33
Joined: Fri Feb 06, 2004 8:14 pm

Re: High-Res Skin Project / Request for Skinners!

Post by SP2000 »

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.
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.
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.
Long Live UnReAl
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
For High-Res Unreal skins, click here.
Image
User avatar
[]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!

Post by []KAOS[]Casey »

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
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
obviously, this will break anticheats.
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
For High-Res Unreal skins, click here.
Image
User avatar
[]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!

Post by []KAOS[]Casey »

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.
User avatar
han
Global Moderator
Posts: 686
Joined: Wed Dec 10, 2014 12:38 am

Re: High-Res Skin Project / Request for Skinners!

Post by han »

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.
HX on Mod DB. Revision on Steam. Löffels on Patreon.
User avatar
han
Global Moderator
Posts: 686
Joined: Wed Dec 10, 2014 12:38 am

Re: High-Res Skin Project / Request for Skinners!

Post by han »

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]

Last edited by han on Sat Aug 13, 2016 3:10 pm, edited 1 time in total.
HX on Mod DB. Revision on Steam. Löffels on Patreon.
User avatar
han
Global Moderator
Posts: 686
Joined: Wed Dec 10, 2014 12:38 am

Re: High-Res Skin Project / Request for Skinners!

Post by han »

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.
Last edited by han on Tue Aug 16, 2016 9:40 am, edited 1 time in total.
HX on Mod DB. Revision on Steam. Löffels on Patreon.
User avatar
Lightning_Hunter
OldUnreal Member
Posts: 279
Joined: Tue Mar 04, 2003 9:30 pm

Re: High-Res Skin Project / Request for Skinners!

Post by Lightning_Hunter »

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.
For High-Res Unreal skins, click here.
Image

Return to “High-Res Textures for Unreal & UnrealTournament”