Once you get your replacement code done just share it with a couple of people here and we will point out any extra checks you might need to make. As for default skins, you ought to strongly consider not replacing anything that's not default or at least having the option not to do so. Lots of mappers use custom skins from inside their maps and those should remain as intended.
This is a great project but your final implementation will have to be done quite carefully. Do your replacements with a surgical scalpel and not a hammer. By respecting unique work within map projects you'll get much wider usage and acceptance.
[Released] Unreal HD Skins [UT] [227]
- gopostal
- Skaarj Lord
- Posts: 152
- Joined: 01 Aug 2008, 06:35
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 09 Sep 2016, 16:26
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 09 Sep 2016, 20:06
gopostal wrote:Once you get your replacement code done just share it with a couple of people here and we will point out any extra checks you might need to make. As for default skins, you ought to strongly consider not replacing anything that's not default or at least having the option not to do so. Lots of mappers use custom skins from inside their maps and those should remain as intended.
Buddy, don't worry so much (many of your posts both here and at OldUnreal have shown a lot of concern). You are talking to a perfectionist that would never release a project without first testing every possible aspect of it. Haven't you seen me around here long enough to respect the effort I put in my projects? None of my projects to date have needed a version 2 for bug fixing (RTNPUE still stands strong as version1). I always test each project extensively through my own testing, and through beta testers. I would never release it without first checking custom maps to make sure the skins appear as intended. RTNPUE has 75+ custom skins, and believe me - I will make sure they all work. Other packs to be tested include ONP, Xidia, Deja Vu, Illhaven, Shrakitha, and more.
This is a great project but your final implementation will have to be done quite carefully. Do your replacements with a surgical scalpel and not a hammer. By respecting unique work within map projects you'll get much wider usage and acceptance.
If I was going to release this project in a hurry, it would already be out. Like I said, I do not make half-assed releases. Keeping support for custom maps is my top priority, and always has been. I probably play more custom maps here than anyone else (I have even considered doing high-res skins for some of the custom packs much later in the future). If you really want to make sure everything works well, why don't you sign up to be a beta tester? I will need some later.
Also, here is the current code. All the completed skins are now included (except the RTNPUE skins, which I have decided to include in an HD version of RTNPUE instead). I have already checked multiple custom skins, and so far it appears that custom skins used in both MultiSkins[0] and in the Skins field will take priority over the HD skins. No custom content is replaced as far as I can tell (but more testing will be done later).
Code: Select all
#exec OBJ LOAD FILE="HDSkins2.utx"
//=============================================================================
// HDSkinNotify.
//=============================================================================
class HDSkinsNotify expands SpawnNotify;
//============================================================
simulated function PostBeginPlay()
{
local Actor A;
foreach AllActors( Class'Actor', A )
ModifyThing(A);
Super.PostBeginPlay();
}
//============================================================
event Actor SpawnNotification( actor A )
{
ModifyThing(A);
return A;
}
//============================================================
function ModifyThing( Actor A )
{
//........Scripted Pawns..............
//Skaarj Warrior
if( A.Mesh == LodMesh'UnrealShare.Skaarjw' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDSkaarjw1';
else if( A.Skin == Texture'SkaarjL' )
A.Skin = Texture'HDSkins2.HDSkaarjL';
else if( A.Skin == Texture'Skaarjw2' )
A.Skin = Texture'HDSkins2.HDSkaarjw2';
else if( A.Skin == Texture'Skaarjw3' )
A.Skin = Texture'HDSkins2.HDSkaarjw3';
else if( A.Skin == Texture'Skaarjw4' )
A.Skin = Texture'HDSkins2.HDSkaarjw4';
else if( A.Skin == Texture'Skaarjw5' )
A.Skin = Texture'HDSkins2.HDSkaarjw5';
}
//Skaarj Trooper
if( A.Mesh == LodMesh'UnrealI.sktrooper' )
{
if( A.Skin == Texture'sktrooper1' )
A.Skin = Texture'HDSkins2.HDsktrooper1';
else if( A.Skin == None ) //Replaces pre-placed Carcass skins
A.Skin = Texture'HDSkins2.HDsktrooper1';
else if( A.Skin == Texture'sktrooper2' )
A.Skin = Texture'HDSkins2.HDsktrooper2';
else if( A.Skin == Texture'sktrooper3' )
A.Skin = Texture'HDSkins2.HDsktrooper3';
}
//Skaarj Warlord
if( A.Mesh == LodMesh'UnrealI.WarlordM' )
{
if( A.MultiSkins[0] == None )
A.MultiSkins[0] = Texture'HDSkins2.HDJWarlord1';
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJWarlord1';
}
//Skaarj Queen
if( A.Mesh == LodMesh'UnrealI.SkQueen' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJQueen1';
}
//Pupae
if( A.Mesh == LodMesh'UnrealI.Pupae1' )
{
if( A.MultiSkins[0] == None )
A.MultiSkins[0] = Texture'HDSkins2.HDJPupae1';
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPupae1';
}
//Gasbag
if( A.Mesh == LodMesh'UnrealI.GasbagM' )
{
if( A.MultiSkins[5] == None )
A.MultiSkins[5] = Texture'HDSkins2.HDGasbag1';
if( A.MultiSkins[6] == None )
A.MultiSkins[6] = Texture'HDSkins2.HDGasbag2';
}
//Titan
if( A.Mesh == LodMesh'UnrealI.Titan1' )
{
A.Mesh = LodMesh'HDSkins.TitanX';
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJTitan1';
else if( A.Skin == Texture'JTitan2' )
A.Skin = Texture'HDSkins2.HDJTitan2';
}
//Brute
if( A.Mesh == LodMesh'UnrealShare.Brute1' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJBrute1';
else if( A.Skin == Texture'Brute2' )
A.Skin = Texture'HDSkins2.HDBrute2';
else if( A.Skin == Texture'Brute3' )
A.Skin = Texture'HDSkins2.HDBrute3';
}
//Krall
if( A.Mesh == LodMesh'UnrealI.KrallM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJKrall';
else if( A.Skin == Texture'EKrall' )
A.Skin = Texture'HDSkins2.HDEKrall';
}
//Mercenary
if( A.Mesh == LodMesh'UnrealI.Merc' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJMerc1';
else if( A.Skin == Texture'JMerc2' )
A.Skin = Texture'HDSkins2.HDJMerc2';
}
//Devilfish
if( A.Mesh == LodMesh'UnrealShare.fish' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFish1';
}
//Squid
if( A.Mesh == LodMesh'UnrealI.Squid1' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJSquid1';
}
//Fly
if( A.Mesh == LodMesh'UnrealShare.FlyM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFly1';
}
//Manta
if( A.Mesh == LodMesh'UnrealShare.Manta1' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJManta1';
else if( A.Skin == Texture'JManta2' )
A.Skin = Texture'HDSkins2.HDJManta2';
}
//Tentacle
if( A.Mesh == LodMesh'UnrealShare.Tentacle1' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTentacle1';
}
//Slith
if( A.Mesh == LodMesh'UnrealShare.Slith1' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJSlith1';
}
//Cow
if( A.Mesh == LodMesh'UnrealShare.NaliCow' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJCow1';
}
//Nali
if( A.Mesh == LodMesh'UnrealShare.Nali1' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJNali1';
else if( A.Skin == Texture'JNali2' )
A.Skin = Texture'HDSkins2.HDJNali2';
}
//Crucified Nali
if( A.Mesh == LodMesh'UnrealShare.CrossNali' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJNali1';
else if( A.Skin == Texture'JNali2' )
A.Skin = Texture'HDSkins2.HDJNali2';
}
//Predator
if( A.Mesh == LodMesh'Upak.Predator' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPredator1';
if( A.MultiSkins[2] == None )
A.MultiSkins[2] = Texture'HDSkins2.HDJPredator2';
else if( A.MultiSkins[1] == Texture'JGPredator1' )
A.MultiSkins[1] = Texture'HDSkins2.HDJGPredator1';
if( A.MultiSkins[2] == Texture'JGPredator2' )
A.MultiSkins[2] = Texture'HDSkins2.HDJGPredator2';
}
//Spinner
if( A.Mesh == LodMesh'Upak.Spinner' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJSpinner1';
if( A.MultiSkins[2] == None )
A.MultiSkins[2] = Texture'HDSkins2.HDJSpinner2';
}
//........Flock Pawns..............
//Nali Rabbit
if( A.Mesh == LodMesh'UnrealShare.Rabbit' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJRabbit1';
}
//Bird
if( A.Mesh == LodMesh'UnrealShare.Bird' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJBird11';
}
//........Player Skins.............
//Female One (Gina)
if( A.Mesh == LodMesh'UnrealShare.Female1' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDgina';
else if( A.Skin == Texture'Gina' )
A.Skin = Texture'HDSkins2.HDgina';
}
//........Player Carcasses.........
//Female One Body
if( A.Mesh == LodMesh'UnrealShare.Fem1body' )
{
//This fixes the longstanding incorrect skin bug in Unreal
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDgina';
//Just in case someone set the correct Gina skin in a map
else if( A.Skin == Texture'Gina' )
A.Skin = Texture'HDSkins2.HDgina';
}
//Female Two Body (No high-res skin yet; merely fixes bug)
if( A.Mesh == LodMesh'UnrealShare.Fem2Body' )
{
//This fixes the longstanding incorrect skin bug in Unreal
if( A.Skin == None )
A.Skin = Texture'UnrealShare.Skins.Sonya';
}
//........Decorations.........
//Tree1
if( A.Mesh == LodMesh'UnrealShare.Tree1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree11';
}
//Tree2
if( A.Mesh == LodMesh'UnrealShare.Tree2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree21';
}
//Tree3
if( A.Mesh == LodMesh'UnrealShare.Tree3M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree31';
}
//Tree4
if( A.Mesh == LodMesh'UnrealShare.Tree4M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree41';
}
//Tree5
if( A.Mesh == LodMesh'UnrealShare.Tree5M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree51';
}
//Tree6
if( A.Mesh == LodMesh'UnrealShare.Tree6M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree61';
}
//Tree7
if( A.Mesh == LodMesh'UnrealShare.Tree7M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree71';
}
//Tree8
if( A.Mesh == LodMesh'UnrealShare.Tree8M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree81';
}
//Tree9
if( A.Mesh == LodMesh'UnrealShare.Tree9M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree91';
}
//Tree10
if( A.Mesh == LodMesh'UnrealShare.Tree10M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree101';
}
//Tree11
if( A.Mesh == LodMesh'UnrealShare.Tree11M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree111';
}
//Tree12
if( A.Mesh == LodMesh'UnrealShare.Tree12M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTree121';
}
//Plant1
if( A.Mesh == LodMesh'UnrealShare.Plant1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant11';
}
//Plant2
if( A.Mesh == LodMesh'UnrealShare.Plant2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant21';
}
//Plant3
if( A.Mesh == LodMesh'UnrealShare.Plant3M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant31';
}
//Plant4
if( A.Mesh == LodMesh'UnrealShare.Plant4M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant41';
}
//Plant5
if( A.Mesh == LodMesh'UnrealShare.Plant5M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant41';
}
//Plant6
if( A.Mesh == LodMesh'UnrealShare.Plant6M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant61';
}
//Plant7
if( A.Mesh == LodMesh'UnrealShare.Plant7M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPlant61';
}
//SeaWeed
if( A.Mesh == Mesh'UnrealShare.SeaWeedM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJSeaWeed1';
}
//Wooden Box
if( A.Mesh == LodMesh'UnrealShare.WoodenBoxM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJWoodenBox1';
}
//Steel Box
if( A.Mesh == LodMesh'UnrealShare.SteelBoxM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJSteelBox1';
}
//Barrel
if( A.Mesh == LodMesh'UnrealShare.BarrelM' )
{
if( A.Skin == Texture'JBarrel1' )
A.Skin = Texture'HDSkins2.HDJBarrel1';
}
//Steel Barrel
if( A.Mesh == LodMesh'UnrealShare.steelbarrelM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJSteelBarrel1';
else if( A.Skin == Texture'Jsteelbarrel2' )
A.Skin = Texture'HDSkins2.HDJSteelBarrel2';
}
//Sludge Barrel
if( A.Mesh == LodMesh'UnrealI.sbarrel' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJsbarrel1';
}
//Book
if( A.Mesh == LodMesh'UnrealShare.BookM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJBook1';
else if( A.Skin == Texture'JBook2' )
A.Skin = Texture'HDSkins2.HDJBook2';
else if( A.Skin == Texture'JBook3' )
A.Skin = Texture'HDSkins2.HDJBook3';
else if( A.Skin == Texture'JBook4' )
A.Skin = Texture'HDSkins2.HDJBook4';
}
//Boulder
if( A.Mesh == LodMesh'UnrealShare.BoulderM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJBoulder1';
}
//Boulder1M (In case a custom mapper uses it; not used in Unreal anywhere)
if( A.Mesh == LodMesh'UnrealShare.Boulder1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJBoulder1';
}
//TBoulder (thrown by Titans)
if( A.Mesh == LodMesh'UnrealI.TBoulder' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJBoulder1';
}
//Chest
if( A.Mesh == LodMesh'UnrealShare.ChestM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJChest1';
}
//Sign
if( A.Mesh == LodMesh'UnrealShare.Sign1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJSign11';
}
//Flag 1
if( A.Mesh == LodMesh'UnrealI.Flag1M' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJFlag11';
else if( A.Skin == Texture'JFlag12' )
A.Skin = Texture'HDSkins2.HDJFlag12';
}
//Flag 2
if( A.Mesh == LodMesh'UnrealI.Flag2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFlag21';
}
//Flag 3
if( A.Mesh == LodMesh'UnrealI.Flag3M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFlag31';
}
//Tapestry1
if( A.Mesh == LodMesh'UnrealI.Tap' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTap1';
}
//Moon One
if( A.Mesh == Mesh'UnrealI.Moon1' )
{
if( A.Skin == Texture'JMoon1' )
A.Skin = Texture'HDSkins2.HDJMoon1';
//Moon Two
else if( A.Skin == Texture'MoonTwo' )
A.Skin = Texture'HDSkins2.HDMoonTwo';
}
//Moon Three
if( A.Mesh == Mesh'UnrealI.Moon3M' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJMoon3';
}
//Monk Statue
if( A.Mesh == LodMesh'UnrealShare.MonkStatueM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJMonkStatue1';
}
//Monk Statue
if( A.Mesh == LodMesh'UnrealShare.NaliStatueM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJNaliStatue1';
}
//Lantern
if( A.Mesh == LodMesh'UnrealShare.LanternM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJLantern1';
}
//Knife (Uses same skin as Lantern for some reason)
if( A.Mesh == Mesh'UnrealShare.KnifeM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJLantern1';
}
//Lantern2
if( A.Mesh == LodMesh'UnrealShare.Lantern2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJLantern1';
}
//Lamp1
if( A.Mesh == LodMesh'UnrealI.Lamp1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJLamp11';
}
//Lamp4
if( A.Mesh == LodMesh'UnrealI.Lamp4M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJLamp41';
}
//Sconce
if( A.Mesh == Mesh'UnrealShare.sconceM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJsconce1';
}
//Table1
if( A.Mesh == LodMesh'UnrealI.Table1' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJTable11';
}
//Chair
if( A.Mesh == LodMesh'UnrealI.Chair1' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJChair11';
}
//Pottery0
if( A.Mesh == LodMesh'UnrealShare.Pottery0M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPottery01';
}
//Pottery1
if( A.Mesh == LodMesh'UnrealShare.Pottery1M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPottery11';
}
//Pottery2
if( A.Mesh == LodMesh'UnrealShare.Pottery2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJPottery21';
}
//Vase1
if( A.Mesh == LodMesh'UnrealShare.vaseM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJVase1';
}
//Urn
if( A.Mesh == LodMesh'UnrealShare.UrnM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJUrn1';
}
//Escape Pod
if( A.Mesh == LodMesh'UnrealI.Escapep' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJEscapep1';
}
//Cryopod
if( A.Mesh == LodMesh'UnrealI.CryopodM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJCryopod1';
}
//Fan
if( A.Mesh == LodMesh'UnrealShare.Fan2M' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFan21';
}
//Dice
if( A.Mesh == Mesh'UnrealI.DiceM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJDice1';
}
//Wire
if( A.Mesh == LodMesh'UnrealShare.WireM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJWire1';
}
//Candle
if( A.Mesh == LodMesh'UnrealShare.CandleM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJCandle1';
}
//Candle2
if( A.Mesh == LodMesh'UnrealShare.Candl2' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJCandl21';
}
//UMS Dropbox
if( A.Mesh == LodMesh'UPak.dropbox' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJdropbox1';
}
//..........Inventory.............
//Dispersion Pistol
if( A.Mesh == LodMesh'UnrealShare.DPistolPick' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDDPistol1';
}
//Clip
if( A.Mesh == LodMesh'UnrealShare.ClipM' )
{
if( A.MultiSkins[2] == None )
A.MultiSkins[2] = Texture'HDSkins2.HDJClip1';
}
//Amplifier
if( A.Mesh == LodMesh'UnrealShare.AmplifierM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJAmplifier1';
}
//Flare
if( A.Mesh == LodMesh'UnrealShare.FlareM' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJMisc1';
}
//Flare
if( A.Mesh == LodMesh'UnrealShare.Flashl' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJFlashl1';
}
//Bandage
if( A.Mesh == LodMesh'UnrealShare.bandage' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJband1';
}
//Health
if( A.Mesh == LodMesh'UnrealShare.HealthM' )
{
if( A.Skin == None )
A.Skin = Texture'HDSkins2.HDJHealth1';
}
//Nali Fruit
if( A.Mesh == LodMesh'UnrealShare.NaliFruitMesh' )
{
if( A.MultiSkins[1] == None )
A.MultiSkins[1] = Texture'HDSkins2.HDJNaliFruit1';
}
}
By the way, there are some major advantages to this code over the previous mutator code I used. The most obvious advantage is no lag. The other advantage is that boulders thrown by Titans are replaced by HD skins now, and the player skins are also replaced (only Gina has an HD skin at the moment). Also, I took this opportunity to fix a longstanding bug in Unreal in which the Fem1body and Fem2body meshes had the incorrect skins (Vortex Rikers has a messed up skin right near the start in the ventilation shafts).
- Buff Skeleton
- >:E
- Posts: 4173
- Joined: 15 Dec 2007, 00:46
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 09 Sep 2016, 23:07
If you want to reeeeeally optimize the if/else checks to minimize them, order them by most statistically common actors. I.e. first you check to see if Actor A is a projectile, because those are going to be spawned more than anything else. Next you check if it's a Pawn. Then Inventory, then Decoration, etc. And within each group, you order by most common projectiles, then most common pawns, etc.
I'm not 100% sure what will appear most often all of the time, and it depends on the map / mod too, but generally in a game where you have guns that shoot gun things, you will end up having more projectiles generated in a game session than any other actor by far (if we're not counting Effects, at least -- high-detail mods often spawn a shit ton of them for even a single projectile, so those would probably be even more numerous). Except maybe gibs, but that's usually only true if someone has MoreGore enabled or is playing a mod with tons of enemies all the time.
All that said, splitting hairs over fine tuning the code isn't really necessary. Whatever was eating up the performance was likely just some kind of really inefficient read/write operation, whereas the checks you're doing now are simple and easy to calculate, even if there are a lot of them. It's not even clear that the old code would have caused problems on other machines -- maybe your install or hardware is struggling in a way others wouldn't, though that's moot. You are, after all, making this effort for your own sake, so it's important that it runs well for you more than anything else.
The engine can evaluate that entire function in tens of milliseconds and never notice it processing, and it can do that for far more complicated logic as well. It's good to aim for optimization, but you're probably as close as you can get already for this style of mutator. The main thing is to ensure it works as intended in as many possible scenarios as you can come up with when testing.
I'm not 100% sure what will appear most often all of the time, and it depends on the map / mod too, but generally in a game where you have guns that shoot gun things, you will end up having more projectiles generated in a game session than any other actor by far (if we're not counting Effects, at least -- high-detail mods often spawn a shit ton of them for even a single projectile, so those would probably be even more numerous). Except maybe gibs, but that's usually only true if someone has MoreGore enabled or is playing a mod with tons of enemies all the time.
All that said, splitting hairs over fine tuning the code isn't really necessary. Whatever was eating up the performance was likely just some kind of really inefficient read/write operation, whereas the checks you're doing now are simple and easy to calculate, even if there are a lot of them. It's not even clear that the old code would have caused problems on other machines -- maybe your install or hardware is struggling in a way others wouldn't, though that's moot. You are, after all, making this effort for your own sake, so it's important that it runs well for you more than anything else.
The engine can evaluate that entire function in tens of milliseconds and never notice it processing, and it can do that for far more complicated logic as well. It's good to aim for optimization, but you're probably as close as you can get already for this style of mutator. The main thing is to ensure it works as intended in as many possible scenarios as you can come up with when testing.
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 12 Sep 2016, 23:23
I have some good news. I have been staying silent on my current work until I could verify there would be no lag or problems in-game with the new mutator code. Everything looks stable, so I think I can safely announce that I have created high-res skins for all the gibs. There are around 100 gibs in Unreal using about 30 skins. I just now tested the mutator running all the HD skins on Waffnuffly's Deja Vu map (which is very laggy in general on old systems). I also enabled DieHard's ExtremeEnd S3TC textures, and about 5 other mutators that I regularly run while playing SP (Limbo Mutator, Gore mods, and more). On my 3 year old computer, everything ran with no lag. I think that's a pretty successful test. Most of the gib skins are 1024x1024. I decided not to make them too big, since a lot of gibs can be spawned in Unreal. The boss skins (like the Titan) are 4096x4096.
The only issue I initially came across was the game crashing with a "ran out of virtual memory" error, but I eventually traced this to CacheSizeMegs being set to 1024 (I have no idea when I set it so high). I reduced it to 256, and the game hasn't crashed since. Evidently, reducing the amount of cache the game uses actually improves performance. It might just be an odd quirk on my system, but it is now resolved (maybe this solution will help other people resolve this error).
Anyway, a few screens:
The only issue I initially came across was the game crashing with a "ran out of virtual memory" error, but I eventually traced this to CacheSizeMegs being set to 1024 (I have no idea when I set it so high). I reduced it to 256, and the game hasn't crashed since. Evidently, reducing the amount of cache the game uses actually improves performance. It might just be an odd quirk on my system, but it is now resolved (maybe this solution will help other people resolve this error).
Anyway, a few screens:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 14 Sep 2016, 01:44
I was never all that great at weapon skins (always been better at monster skins), but here is my attempt at the Automag. What do you all think?
Old:
Old:
- Tarydax
- Skaarj Elder
- Posts: 1052
- Joined: 11 Apr 2009, 04:10
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 14 Sep 2016, 02:06
That looks exactly like what i would expect an HD automag skin to look like. Very nice work.
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 14 Sep 2016, 08:25
Thanks, Teridax.
I just now skinned the Stinger in less than 2 hours, which I think beats my own personal best record.
Old Stinger:
Pickup:
I just now skinned the Stinger in less than 2 hours, which I think beats my own personal best record.
Old Stinger:
Pickup:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 17 Sep 2016, 08:59
Completed the Razor Jack and GES Bio Rifle:
Old:
Old:
Old:
Old:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 18 Sep 2016, 09:51
Bleh, the Rifle was the most annoying model to work with so far. The skin is pretty stretched over certain parts, and the model is kind of warped. I had to tweak it for hours to look right.
- Sat42
- Skaarj Warlord
- Posts: 865
- Joined: 14 Jul 2013, 16:42
- Contact:
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 18 Sep 2016, 13:50
Lovely rework of the textures as usual, Lightning Hunter! I like the Razor Jack and the gibs in particular
Nali: Magic or Telekinesis
Waffnuffly wrote:It's tarydium-doped smoothies. Drunk by the player, I mean. The player is tripping balls. The whole game actually takes place in a large city and the player thinks he's on an alien world.
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 19 Sep 2016, 07:31
Thanks Sat.
Here is the Minigun:
Old:
Here is the Minigun:
Old:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 20 Sep 2016, 08:45
I never did like the original ASMD skin much. I always felt it was very blurry and low quality. It is hard to even tell what the red stuff is. I made the assumption that it is some kind of acid/fluid coming from the ASMD, and ran with that idea. Here is the result:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 21 Sep 2016, 08:22
Here is the Flak cannon. I based this skin on a version created by J-Rts. I scrapped some parts created by him to make it more faithful to the original. In the end, I did about 5-6 hours of work on it (longer than doing the Stinger skin from scratch, ironically). The skin by J-Rts is still a good skin however, and I posted a screenshot below so people can see his original.
Old:
Here is the version created by J-Rts that I based some parts on:
Old:
Here is the version created by J-Rts that I based some parts on:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 26 Sep 2016, 09:33
It took way too long for me to tweak this one, but I think I finally have a good faithful rendition of the Eightball Gun. Ahaigh over at OldUnreal made the original HD skin for this model, and I modified it to look more faithful to the original. This particular mesh was a nightmare to work with...
Old:
The original HD version by Ahaigh01:
And for fun, the pickup model:
Old:
The original HD version by Ahaigh01:
And for fun, the pickup model:
- Lightning Hunter
- Skaarj Elder
- Posts: 1291
- Joined: 11 Nov 2007, 22:12
- Location: Pervert.
Subject: Re: High-Res Skin Project / Request for Skinners!
Post Posted: 27 Sep 2016, 09:59
Surprise:
old:
Pickup:
old:
Pickup:
Who is online
Users browsing this forum: No registered users and 57 guests