Like I said, certain Meshes can be altered with MultiSkins not Skin - see pupae as example.
I don't know if weapon won't do something with aspect when it's initialized, I'd rather prefer to wait a bit for assigning a different skin and perhaps changing default skin for that actor. Pawn usually won't alter their skins/multiskins unless they are custom ones doing this on purpose.
For pawn - let's consider a few stock types used in a map and all of them loading a custom skin. This Custom SpawnPoint generates a modified monster, player doesn't know that this Pawn is a stock one
Code: Select all
final function AddOtherProperties(ScriptedPawn S)
{
local bool bInvalidTarget;
local int PropNum;
local E_CreatureFactory pawnFactory;
pawnFactory = E_CreatureFactory(factory);
bInvalidTarget = ( S == None || S.bDeleteMe || pawnFactory == None );
if ( !bInvalidTarget )
{
for ( PropNum = 0; PropNum < 16; PropNum++ )
{
if ( pawnFactory.AProperty[PropNum] != "" && pawnFactory.AVal[PropNum] != "" )
S.SetPropertyText(pawnFactory.AProperty[PropNum],pawnFactory.AVal[PropNum]);
}
if ( pawnFactory.Skin != None ) //Hosting skin here because it won't be seen in DT_Sprite
S.Skin = pawnFactory.Skin;
if ( pawnFactory.MultiSkins[0] != None ) //Same as above
S.MultiSkins[0] = pawnFactory.MultiSkins[0];
if ( pawnFactory.Multiskins[1] != None )
S.MultiSkins[1] = pawnFactory.MultiSkins[1];
if ( pawnFactory.MultiSkins[2] != None )
S.MultiSkins[2] = pawnFactory.MultiSkins[2];
if ( pawnFactory.MultiSkins[3] != None )
S.MultiSkins[3] = pawnFactory.MultiSkins[3];
if ( pawnFactory.Multiskins[4] != None )
S.MultiSkins[4] = pawnFactory.MultiSkins[4];
if ( pawnFactory.MultiSkins[5] != None )
S.MultiSkins[5] = pawnFactory.MultiSkins[5];
if ( pawnFactory.MultiSkins[6] != None )
S.MultiSkins[6] = pawnFactory.MultiSkins[6];
if ( pawnFactory.MultiSkins[7] != None )
S.MultiSkins[7] = pawnFactory.MultiSkins[7];
if ( pawnFactory.Style != STY_Normal )
S.Style = pawnFactory.Style;
if ( pawnFactory.LightBrightness > 0 ) //If needed
{
S.LightBrightness = pawnFactory.LightBrightness;
S.LightHue = pawnFactory.LightHue;
S.LightSaturation = pawnFactory.LightSaturation;
S.LightRadius = pawnFactory.LightRadius;
S.LightCone = pawnFactory.LightCone;
S.LightEffect = pawnFactory.LightEffect;
S.LightPeriod = pawnFactory.LightPeriod;
S.LightPhase = pawnFactory.LightPhase;
S.LightType = pawnFactory.LightType;
}
if ( pawnFactory.ScaleGlow != 1 )
S.ScaleGlow = pawnFactory.ScaleGlow;
if ( pawnFactory.itemHealth != 0 ) //Yay !
S.Health = pawnFactory.itemHealth;
if ( pawnFactory.itemProjectile != None )
S.RangedProjectile = pawnFactory.itemProjectile;
if ( pawnFactory.itemDropWhenKilled != None )
S.DropWhenKilled = pawnFactory.itemDropWhenKilled;
if ( pawnFactory.itemPrePivotZ != 0 ) //Pupaes not biting ground while are running
S.PrePivot.Z += pawnFactory.itemPrePivotZ;
if ( pawnFactory.itemSightRadius > 0 )
S.SightRadius = pawnFactory.itemSightRadius;
if ( pawnFactory.itemAggressiveness != 0 )
S.Aggressiveness = pawnFactory.itemAggressiveness;
if ( pawnFactory.itemPeripheralVision != 0 )
S.PeripheralVision = pawnFactory.itemPeripheralVision;
if ( pawnFactory.itemHearingThreshold > 0 )
S.HearingThreshold = pawnFactory.itemHearingThreshold;
if ( pawnFactory.itembIsBoss)
S.bIsBoss = True;
if ( pawnFactory.itembIgnoreFriends )
S.bIgnoreFriends = True;
if ( pawnFactory.itembNoWait )
S.bNoWait = True;
if ( pawnFactory.itembDelayedPatrol )
S.bDelayedPatrol = True;
if ( pawnFactory.itembHateWhenTriggered )
S.bHateWhenTriggered = True;
if ( pawnFactory.itemMenuName != "" )
S.MenuName = pawnFactory.itemMenuName;
if ( pawnFactory.itemNameArticle != "" )
S.NameArticle = pawnFactory.itemNameArticle;
if ( pawnFactory.itemTeamTag != '' )
S.TeamTag = pawnFactory.itemTeamTag;
if ( pawnFactory.itemTeam != 0 ) //Some monsters recognize this byte and will react accordingly
S.Team = pawnFactory.itemTeam;
}
}
If in map MH-DarkWhite weapons look different definitely a code can do that too. There is about default properties. If I well recall some ECoop things and memory doesn't cheat me, certain actors were using a double measure for some reason of their own code:
Code: Select all
Wep.Default.MultiSkins[1]=Texture'Edit2021'; //if actor reinforces a default, change this default
Wep.Multiskinks[1]=Texture'Edit2021'; //if actor is simple this should work
I'm going to try something next days as I consider:
#1 Try a code in PrebeginPlay/PostBeginPlay
#2 Testing a code delayed - here the most of things which I touched in Run-Time were working - After a few ticks or in whatever Auto State behind a "Sleep(0.00)" - it's about a tick or something like that.