[SOURCE FILES]Unreal Basic Skeletal Character[227i]
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
[SOURCE FILES]Unreal Basic Skeletal Character[227i]
SteadZ and me decided to share usable resources for Unreal skinmakers, who want to port human characters from other different games!
This is a basic Skeletal Model files with UT99 skeleton and animations. SteadZ fixed animation files for making them usable.
Gamebanana Link: https://gamebanana.com/skins/186725
Model is taken from: viewtopic.php?f=13&t=14355
Credits:
SteadZ - Coding
Rikia - Rigging
This is a basic Skeletal Model files with UT99 skeleton and animations. SteadZ fixed animation files for making them usable.
Gamebanana Link: https://gamebanana.com/skins/186725
Model is taken from: viewtopic.php?f=13&t=14355
Credits:
SteadZ - Coding
Rikia - Rigging
Last edited by Rikia on Mon Feb 01, 2021 11:19 am, edited 17 times in total.
-
- Average
- Posts: 67
- Joined: Mon Mar 10, 2014 11:19 pm
- Personal rank: 1337
- Location: Scotland
Re: Which file is responsible to skeletal player class
Are you using the OldUnreal patch 227? Skeletal meshes aren't supported on lower versions of Unreal. I'm guessing you're also using SkeletalChars package as a base somehow, but Unreal's implementation of Skeletal Meshes is slightly different from UT's. Would be easier to get an idea of what you're doing wrong if you shared the code for the class(es) you're trying to import 
~SZ

~SZ
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: Which file is responsible to skeletal player class
I use 227i.SteadZ wrote: ↑Mon Jan 25, 2021 8:55 pm Are you using the OldUnreal patch 227? Skeletal meshes aren't supported on lower versions of Unreal. I'm guessing you're also using SkeletalChars package as a base somehow, but Unreal's implementation of Skeletal Meshes is slightly different from UT's. Would be easier to get an idea of what you're doing wrong if you shared the code for the class(es) you're trying to import
~SZ
ONIKonokoFsrv.uc
Code: Select all
//=============================================================================
// ONI KonokoFsrv.
//=============================================================================
class ONIKonokoFsrv extends SkeletalPlayer;
#exec MESH MODELIMPORT MESH=KonokoFsrv MODELFILE=models\KonokoFsrv.PSK LODSTYLE=12
#exec MESH ORIGIN MESH=KonokoFsrv X=0 Y=0 Z=135 YAW=192
#exec MESH WEAPONATTACH MESH=KonokoFsrv BONE="Bip01 R Hand"
#exec MESH WEAPONPOSITION MESH=KonokoFsrv YAW=0 PITCH=0 ROLL=128 X=1.0 Y=0.0 Z=0.0
#exec MESHMAP SCALE MESHMAP=KonokoFsrv X=0.3125 Y=0.3125 Z=0.3125
#exec MESH DEFAULTANIM MESH=KonokoFsrv ANIM=SoldierAnim
//#exec TEXTURE IMPORT NAME=KonokoFsrvDoll FILE=TEXTURES\KonokoFsrvSDoll.PCX GROUP="Icons" MIPS=OFF
//#exec TEXTURE IMPORT NAME=KonokoFsrvBelt FILE=TEXTURES\KonokoFsrvSBelt.PCX GROUP="Icons" MIPS=OFF
static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum)
{
local string MeshName, SkinItem, SkinPackage;
MeshName = SkinActor.GetItemName(string(SkinActor.Mesh));
SkinItem = SkinActor.GetItemName(SkinName);
SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem));
if(SkinPackage == "")
{
SkinPackage="KonokoFsrvSkins.";
SkinName=SkinPackage$SkinName;
}
if( TeamNum != 255 )
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum)))
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName$"1"))
{
SetSkinElement(SkinActor, 0, default.DefaultSkinName$"1T_"$String(TeamNum), default.DefaultSkinName$"1T_"$String(TeamNum));
SkinName=default.DefaultSkinName;
}
}
SetSkinElement(SkinActor, 1, SkinName$"2T_"$String(TeamNum), SkinName$"2T_"$String(TeamNum));
SetSkinElement(SkinActor, 2, SkinName$"3T_"$String(TeamNum), SkinName$"3T_"$String(TeamNum));
SetSkinElement(SkinActor, 3, SkinName$"4T_"$String(TeamNum), SkinName$"4T_"$String(TeamNum));
}
else
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1", default.DefaultSkinName))
SkinName=default.DefaultSkinName;
SetSkinElement(SkinActor, 1, SkinName$"2", SkinName$"2");
SetSkinElement(SkinActor, 2, SkinName$"3", SkinName$"3");
SetSkinElement(SkinActor, 3, SkinName$"4", SkinName$"4");
}
if( Pawn(SkinActor) != None )
Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"3Face", class'Texture'));
}
defaultproperties
{
DefaultSkinName="KonokoFsrvSkins.KonF"
DefaultPackage="KonokoFsrvSkins."
SelectionMesh="ONIKonokoFsrv.KonokoFsrv"
Mesh=SkeletalMesh'ONIKonokoFsrv.KonokoFsrv'
MenuName="ONI KonokoFsrv"
}
Code: Select all
//=============================================================================
// ONIKonokoFsrv Bot.
//=============================================================================
class ONIKonokoFsrvBot extends SkeletalBot;
static function SetMultiSkin(Actor SkinActor, string SkinName, string FaceName, byte TeamNum)
{
local string MeshName, SkinItem, SkinPackage;
MeshName = SkinActor.GetItemName(string(SkinActor.Mesh));
SkinItem = SkinActor.GetItemName(SkinName);
SkinPackage = Left(SkinName, Len(SkinName) - Len(SkinItem));
if(SkinPackage == "")
{
SkinPackage="KonokoFsrvSkins.";
SkinName=SkinPackage$SkinName;
}
if( TeamNum != 255 )
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1T_"$String(TeamNum), ""))
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1", ""))
{
SetSkinElement(SkinActor, 0, "KonokoFsrvSkins.KonF1T_"$String(TeamNum), "KonokoFsrvSkins.KonF1");
SkinName="KonokoFsrvSkins.KonF";
}
}
SetSkinElement(SkinActor, 1, SkinName$"2T_"$String(TeamNum), SkinName$"2");
SetSkinElement(SkinActor, 2, SkinName$"3T_"$String(TeamNum), SkinName$"3");
SetSkinElement(SkinActor, 3, SkinName$"4T_"$String(TeamNum), SkinName$"4");
}
else
{
if(!SetSkinElement(SkinActor, 0, SkinName$"1", "KonokoFsrvSkins.KonF1"))
SkinName="KonokoFsrvSkins.KonF";
SetSkinElement(SkinActor, 1, SkinName$"2", "");
SetSkinElement(SkinActor, 2, SkinName$"3", "");
SetSkinElement(SkinActor, 3, SkinName$"4", "");
}
if( Pawn(SkinActor) != None )
Pawn(SkinActor).PlayerReplicationInfo.TalkTexture = Texture(DynamicLoadObject(SkinName$"3Face", class'Texture'));
}
defaultproperties
{
DefaultSkinName="KonokoFsrvSkins.KonF"
DefaultPackage="KonokoFsrvSkins."
SelectionMesh="ONIKonokoFsrv.KonokoFsrv"
Mesh=SkeletalMesh'ONIKonokoFsrv.KonokoFsrv'
MenuName="ONI KonokoFsrv"
}
Code: Select all
//=============================================================================
// Select ONI KonokoFsrv.
//=============================================================================
class SelectONIKonokoFsrv extends SelectionDude;
#exec ANIM IMPORT ANIM=KonokoFsrvSelectAnim ANIMFILE=models\KonokoFsrvSelect.PSA COMPRESS=0.5 IMPORTSEQS=0
#exec ANIM SEQUENCE ANIM=KonokoFsrvSelectAnim SEQ=All STARTFRAME=0 NUMFRAMES=48 RATE=15
#exec ANIM SEQUENCE ANIM=KonokoFsrvSelectAnim SEQ=Breath3 STARTFRAME=0 NUMFRAMES=26 RATE=15
#exec ANIM SEQUENCE ANIM=KonokoFsrvSelectAnim SEQ=Breath2 STARTFRAME=26 NUMFRAMES=31 RATE=15
#exec ANIM SEQUENCE ANIM=KonokoFsrvSelectAnim SEQ=Breath1 STARTFRAME=57 NUMFRAMES=31 RATE=15
#exec MESH MODELIMPORT MESH=SelectionKonokoFsrv MODELFILE=models\KonokoFsrv.PSK LODSTYLE=12
#exec MESH ORIGIN MESH=SelectionKonokoFsrv X=0 Y=0 Z=135 YAW=192
#exec MESHMAP SCALE MESHMAP=SelectionKonokoFsrv X=0.3125 Y=0.3125 Z=0.3125
#exec MESH DEFAULTANIM MESH=SelectionKonokoFsrv ANIM=KonokoFsrvSelectAnim
defaultproperties
{
}
You do not have the required permissions to view the files attached to this post.
Last edited by Rikia on Tue Jan 26, 2021 6:12 pm, edited 3 times in total.
-
- Godlike
- Posts: 10360
- Joined: Thu Jun 30, 2011 8:12 pm
- Personal rank: God of Fudge
- Location: Palo Alto, CA
Re: Which file is responsible to skeletal player class
Most of the U1 characters are a single texture, with the exception of those with team colors but the average UT character is at least 4 textures, also with more for team colors.
Porting characters from U1 to UT is apparently doable, but i'm not sure how well that works in reverse.
Porting characters from U1 to UT is apparently doable, but i'm not sure how well that works in reverse.
· http://unreal-games.livejournal.com/
· https://unrealarchive.org/authors/evilgrins.html
· https://www.facebook.com/groups/UTcorps
· https://x.com/EvilGrinsIsBack
· https://unrealarchive.org/authors/evilgrins.html
· https://www.facebook.com/groups/UTcorps
· https://x.com/EvilGrinsIsBack

Smilies · https://ut99.org/viewtopic.php?f=8&t=13758medor wrote:Replace Skaarj with EvilGrins
-
- Godlike
- Posts: 3765
- Joined: Sat Sep 12, 2015 8:46 pm
Re: Which file is responsible to skeletal player class
Several UT custom models have been ported to Unreal and these can be found on the Snipers Paradise website. I'm not sure though if any of these are skeletal models.
The problem the OP has is that there is no (for example) SkeletalPlayer class in Unreal because there is no SkeletalChars class and so it can't be subclassed. A different method of implementing skeletal players in Unreal needs to be used but I have no idea what that might be.
-
- Godlike
- Posts: 10554
- Joined: Wed Jul 15, 2009 11:36 am
- Personal rank: coffee addicted !!!
- Location: Cologne, the city with the big cathedral.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: Which file is responsible to skeletal player class
I succesfully compiled the model and classes, but I'm unable to select the model in player setup.
The log file does not show any warnings about that.
.int files
The log file does not show any warnings about that.
.int files
Code: Select all
[Public]
Object=(Name=ONIKonokoFsrv.ONIKonokoFsrvBot,Class=Class,MetaClass=BotPack.Bot,Description="ONI KonokoFsrv")
Object=(Name=ONIKonokoFsrv.ONIKonokoFsrv,Class=Class,MetaClass=BotPack.TournamentPlayer,Description="ONI KonokoFsrv")
Object=(Name=ONIKonokoFsrv.ONIKonokoFsrv,Class=Texture,Description="ONI KonokoFsrv")
Object=(Name=BotPack.VoiceFemaleTwo,Class=Class,MetaClass=BotPack.VoiceMale,Description="Female TwoM")
Code: Select all
[public]
Object=(Name=KonokoFsrvSkins.KonF0,Class=Texture,Description="ONI KonokoFsrv")
Object=(Name=KonokoFsrvSkins.KonF1t_0,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF1t_1,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF1t_2,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF1t_3,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF1,Class=Texture,Description="ONI KonokoFsrv")
Object=(Name=KonokoFsrvSkins.KonF2t_0,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF2t_1,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF2t_2,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF2t_3,Class=Texture)
Object=(Name=KonokoFsrvSkins.KonF3Face,Class=Texture,Description="ONI KonokoFsrv")
Last edited by Rikia on Thu Apr 14, 2022 8:39 pm, edited 1 time in total.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: Which file is responsible to skeletal player class
I recompiled .psa file with UnPSA Tool and re-exported .psk file with MilkShape3D.
Then I united skeletal player and bot classes with my character classes.
After, I compiled everything with Umake and got "0 warnings".
The animations did not even compile into .u file, because the file is too small(with anims it must have weight near 2mb, while it's only near 100 kb).
And I have no options to import .psk, .psa files into editor.
But the more scarier, I'm getting this, when I'm trying to open my compiled .u package: The code I have:
Player's class ".uc"
Bot's class ".uc"
Then I united skeletal player and bot classes with my character classes.
After, I compiled everything with Umake and got "0 warnings".
The animations did not even compile into .u file, because the file is too small(with anims it must have weight near 2mb, while it's only near 100 kb).
And I have no options to import .psk, .psa files into editor.
But the more scarier, I'm getting this, when I'm trying to open my compiled .u package: The code I have:
Player's class ".uc"
Code: Select all
class ONIKonokoFsrv extends Male
abstract;
function PlayDying(name DamageType, vector HitLoc)
{
BaseEyeHeight = Default.BaseEyeHeight;
PlayDyingSound();
if ( DamageType == 'Suicided' )
{
PlayAnim('Dead8',, 0.1);
return;
}
// check for head hit
if ( (DamageType == 'Decapitated') && !class'GameInfo'.Default.bLowGore )
{
PlayDecap();
return;
}
if ( FRand() < 0.15 )
{
PlayAnim('Dead2',,0.1);
return;
}
// check for big hit
if ( (Velocity.Z > 250) && (FRand() < 0.75) )
{
if ( FRand() < 0.5 )
PlayAnim('Dead1',,0.1);
else
PlayAnim('Dead11',, 0.1);
return;
}
// check for repeater death
if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) )
{
PlayAnim('Dead9',, 0.1);
return;
}
if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !class'GameInfo'.Default.bLowGore )
{
if ( FRand() < 0.5 )
PlayDecap();
else
PlayAnim('Dead7',, 0.1);
return;
}
if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back
PlayAnim('Dead3',, 0.1);
else
PlayAnim('Dead8',, 0.1);
}
function PlayDecap()
{
PlayAnim('Dead4',, 0.1);
}
function PlayGutHit(float tweentime)
{
if ( (AnimSequence == 'GutHit') || (AnimSequence == 'Dead2') )
{
if (FRand() < 0.5)
TweenAnim('LeftHit', tweentime);
else
TweenAnim('RightHit', tweentime);
}
else if ( FRand() < 0.6 )
TweenAnim('GutHit', tweentime);
else
TweenAnim('Dead8', tweentime);
}
function PlayHeadHit(float tweentime)
{
if ( (AnimSequence == 'HeadHit') || (AnimSequence == 'Dead7') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('HeadHit', tweentime);
else
TweenAnim('Dead7', tweentime);
}
function PlayLeftHit(float tweentime)
{
if ( (AnimSequence == 'LeftHit') || (AnimSequence == 'Dead9') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('LeftHit', tweentime);
else
TweenAnim('Dead9', tweentime);
}
function PlayRightHit(float tweentime)
{
if ( (AnimSequence == 'RightHit') || (AnimSequence == 'Dead1') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('RightHit', tweentime);
else
TweenAnim('Dead1', tweentime);
}
#exec MESH MODELIMPORT MESH=KonokoFsrv MODELFILE=Models/KonokoFsrv.psk
#exec MESH LODPARAMS MESH=KonokoFsrv HYSTERESIS=0.00 STRENGTH=0.01 MINVERTS=10.00 MORPH=0.30 ZDISP=0.00
#exec MESH ORIGIN MESH=KonokoFsrv X=0 Y=0 Z=0 YAW=0 PITCH=0 ROLL=0
#exec ANIM IMPORT ANIM=SoldierAnim ANIMFILE=Models/SoldierAnim.psa COMPRESS=1
#exec MESHMAP SCALE MESHMAP=KonokoFsrv X=1.0 Y=1.0 Z=1.0
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Breath1L STARTFRAME=0 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Breath2L STARTFRAME=24 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=CockGun STARTFRAME=48 NUMFRAMES=14 RATE=14
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=CockGunL STARTFRAME=62 NUMFRAMES=29 RATE=29
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DeathEnd STARTFRAME=91 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DeathEnd3 STARTFRAME=92 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Duck STARTFRAME=93 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DuckWlkL STARTFRAME=117 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DuckWlkS STARTFRAME=141 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=GutHit STARTFRAME=165 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=HeadHit STARTFRAME=166 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=JumpLgFr STARTFRAME=167 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Look STARTFRAME=168 NUMFRAMES=22 RATE=22
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=StillFrRp STARTFRAME=190 NUMFRAMES=11 RATE=11
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=StillLgFr STARTFRAME=201 NUMFRAMES=12 RATE=12
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=StillSmFr STARTFRAME=213 NUMFRAMES=12 RATE=12
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=AimDnLg STARTFRAME=225 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=AimUpSm STARTFRAME=226 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=AimDnSm STARTFRAME=227 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Fighter STARTFRAME=228 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=TurnLg STARTFRAME=229 NUMFRAMES=3 RATE=3
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=TurnSm STARTFRAME=232 NUMFRAMES=5 RATE=5
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Flip STARTFRAME=237 NUMFRAMES=19 RATE=19
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=LeftHit STARTFRAME=256 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=RightHit STARTFRAME=257 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=SwimLg STARTFRAME=258 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=SwimSm STARTFRAME=276 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=TreadLg STARTFRAME=294 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=TreadSm STARTFRAME=312 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Wave STARTFRAME=330 NUMFRAMES=21 RATE=21
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Thrust STARTFRAME=351 NUMFRAMES=54 RATE=54
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Taunt1 STARTFRAME=405 NUMFRAMES=22 RATE=22
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Victory1 STARTFRAME=427 NUMFRAMES=21 RATE=21
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DeathEnd2 STARTFRAME=448 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Chat2 STARTFRAME=449 NUMFRAMES=41 RATE=41
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Chat1 STARTFRAME=490 NUMFRAMES=40 RATE=40
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead1 STARTFRAME=530 NUMFRAMES=20 RATE=20
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead2 STARTFRAME=550 NUMFRAMES=17 RATE=17
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead3 STARTFRAME=567 NUMFRAMES=22 RATE=22
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead4 STARTFRAME=589 NUMFRAMES=20 RATE=20
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead5 STARTFRAME=609 NUMFRAMES=29 RATE=29
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead7 STARTFRAME=638 NUMFRAMES=29 RATE=29
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead8 STARTFRAME=667 NUMFRAMES=29 RATE=29
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead9 STARTFRAME=696 NUMFRAMES=12 RATE=12
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead9B STARTFRAME=708 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Breath1 STARTFRAME=732 NUMFRAMES=25 RATE=25
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Breath2 STARTFRAME=757 NUMFRAMES=21 RATE=21
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=WalkLg STARTFRAME=778 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=WalkLgFr STARTFRAME=802 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=WalkSm STARTFRAME=826 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=WalkSmFr STARTFRAME=850 NUMFRAMES=24 RATE=24
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=RunLg STARTFRAME=874 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=RunLgFr STARTFRAME=892 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=RunSm STARTFRAME=910 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=RunSmFr STARTFRAME=928 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=StrafeL STARTFRAME=946 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=StrafeR STARTFRAME=964 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=BackRun STARTFRAME=982 NUMFRAMES=18 RATE=18
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=AimUpLg STARTFRAME=1000 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Dead11 STARTFRAME=1001 NUMFRAMES=26 RATE=26
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DodgeB STARTFRAME=1027 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DodgeF STARTFRAME=1028 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DodgeL STARTFRAME=1029 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=DodgeR STARTFRAME=1030 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=JumpSmFr STARTFRAME=1031 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=LandLgFr STARTFRAME=1032 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=LandSmFr STARTFRAME=1033 NUMFRAMES=1 RATE=1
#exec ANIM SEQUENCE ANIM=SoldierAnim SEQ=Challenge STARTFRAME=1034 NUMFRAMES=43 RATE=43
#exec ANIM DIGEST ANIM=SoldierAnim
#exec MESH DEFAULTANIM MESH=KonokoFsrv ANIM=SoldierAnim
// *** ANIMATION NOTIFIES ***
#exec ANIM DIGEST ANIM=SoldierAnim VERBOSE
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunLG TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunLG TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunLGFR TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunLGFR TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunSM TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunSM TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunSMFR TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=RunSMFR TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=StrafeL TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=StrafeL TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=StrafeR TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=StrafeR TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=BackRun TIME=0.25 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=BackRun TIME=0.75 FUNCTION=PlayFootStep
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead1 TIME=0.7 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead2 TIME=0.9 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead3 TIME=0.45 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead4 TIME=0.6 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead7 TIME=0.7 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead8 TIME=0.7 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead9B TIME=0.8 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Dead11 TIME=0.57 FUNCTION=LandThump
#exec ANIM NOTIFY ANIM=SoldierAnim SEQ=Challenge TIME=0.35 FUNCTION=PlayLoudStep
//#exec TEXTURE IMPORT NAME=KonokoFsrvDoll FILE=TEXTURES\KonokoFsrvSDoll.PCX GROUP="Icons" MIPS=OFF
//#exec TEXTURE IMPORT NAME=KonokoFsrvBelt FILE=TEXTURES\KonokoFsrvSBelt.PCX GROUP="Icons" MIPS=OFF
defaultproperties
{
Skin=Texture'KonokoFsrvSkins.KonF'
MenuName="ONI KonokoFsrv"
Mesh=SkeletalMesh'ONIKonokoFsrv.KonokoFsrv'
CarcassType=Class'UnrealShare.HumanCarcass'
}
Code: Select all
class ONIKonokoFsrvBot extends HumanBot
abstract;
function PlayVictoryDance()
{
local float decision;
decision = FRand();
if ( decision < 0.4 )
PlayAnim('Victory1',0.7, 0.2);
else if ( decision < 0.7 )
PlayAnim('Thrust',0.7, 0.2);
else
PlayAnim('Taunt1',0.7, 0.2);
}
function PlayDying(name DamageType, vector HitLoc)
{
BaseEyeHeight = Default.BaseEyeHeight;
PlayDyingSound();
if ( DamageType == 'Suicided' )
{
PlayAnim('Dead8',, 0.1);
return;
}
// check for head hit
if ( (DamageType == 'Decapitated') && !Level.Game.bVeryLowGore )
{
PlayDecap();
return;
}
if ( FRand() < 0.15 )
{
PlayAnim('Dead2',,0.1);
return;
}
// check for big hit
if ( (Velocity.Z > 250) && (FRand() < 0.75) )
{
if ( FRand() < 0.5 )
PlayAnim('Dead1',,0.1);
else
PlayAnim('Dead11',, 0.1);
return;
}
// check for repeater death
if ( (Health > -10) && ((DamageType == 'shot') || (DamageType == 'zapped')) )
{
PlayAnim('Dead9',, 0.1);
return;
}
if ( (HitLoc.Z - Location.Z > 0.7 * CollisionHeight) && !Level.Game.bVeryLowGore )
{
if ( FRand() < 0.5 )
PlayDecap();
else
PlayAnim('Dead7',, 0.1);
return;
}
if ( Region.Zone.bWaterZone || (FRand() < 0.5) ) //then hit in front or back
PlayAnim('Dead3',, 0.1);
else
PlayAnim('Dead8',, 0.1);
}
function PlayDecap()
{
PlayAnim('Dead4',, 0.1);
}
function PlayGutHit(float tweentime)
{
if ( (AnimSequence == 'GutHit') || (AnimSequence == 'Dead2') )
{
if (FRand() < 0.5)
TweenAnim('LeftHit', tweentime);
else
TweenAnim('RightHit', tweentime);
}
else if ( FRand() < 0.6 )
TweenAnim('GutHit', tweentime);
else
TweenAnim('Dead8', tweentime);
}
function PlayHeadHit(float tweentime)
{
if ( (AnimSequence == 'HeadHit') || (AnimSequence == 'Dead7') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('HeadHit', tweentime);
else
TweenAnim('Dead7', tweentime);
}
function PlayLeftHit(float tweentime)
{
if ( (AnimSequence == 'LeftHit') || (AnimSequence == 'Dead9') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('LeftHit', tweentime);
else
TweenAnim('Dead9', tweentime);
}
function PlayRightHit(float tweentime)
{
if ( (AnimSequence == 'RightHit') || (AnimSequence == 'Dead1') )
TweenAnim('GutHit', tweentime);
else if ( FRand() < 0.6 )
TweenAnim('RightHit', tweentime);
else
TweenAnim('Dead1', tweentime);
}
defaultproperties
{
Skin=Texture'KonokoFsrvSkins.KonF'
MenuName="ONI KonokoFsrv"
Mesh=SkeletalMesh'ONIKonokoFsrv.KonokoFsrv'
CarcassType=Class'UnrealShare.HumanCarcass'
}
You do not have the required permissions to view the files attached to this post.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: [EXPERIMENTAL][WIP]Unreal Basic Skeletal Character
Screenshots for now:
Normal model sizes and lilliput collision
Death animation glitch(but it's common bug, even for a skeletal character in UT99)Normal model sizes and lilliput collision
You do not have the required permissions to view the files attached to this post.
-
- Godlike
- Posts: 3765
- Joined: Sat Sep 12, 2015 8:46 pm
Re: [EXPERIMENTAL][WIP]Unreal Basic Skeletal Character
I don't really know but - if you summon the carcass in-game, it appears and it's standing up - so the OniKonokoFsrvCarcass class does work, though not when she is killed in-game.
I may be totally wrong but you have 'AnimSequence="Dead1"' in the script. Perhaps this is being 'read' as the 'Dead1' anim sequence of the model which has 10 or 12 anims rather than a single one. What if you replace that 'Dead1' with one of the DeadEnd anims in the model as these have only one animation?
More generally, you could use the hit/death etc sounds from your KonokoSounds.uax rather than the default female sounds - this would make her sound a bit more like 'her'.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: [EXPERIMENTAL][WIP]Unreal Basic Skeletal Character
The bot carcass works instead of the player's one.
You mean a death animation glitch that also was in UT99?OjitroC wrote: ↑Thu Jan 28, 2021 8:28 pm I may be totally wrong but you have 'AnimSequence="Dead1"' in the script. Perhaps this is being 'read' as the 'Dead1' anim sequence of the model which has 10 or 12 anims rather than a single one. What if you replace that 'Dead1' with one of the DeadEnd anims in the model as these have only one animation?
Are the UT2004 sound packages compatible with Unreal?
---------------------------------------------------------------------
There are 4 hours before the game will be 20!
-
- Godlike
- Posts: 3765
- Joined: Sat Sep 12, 2015 8:46 pm
Re: [EXPERIMENTAL][WIP]Unreal Basic Skeletal Character
No - I was suggesting to change the AnimSequence in the default properties of the Carcass but I tried it and it didn't work, so you can ignore my comment there.Rikia wrote: ↑Thu Jan 28, 2021 8:49 pmYou mean a death animation glitch that also was in UT99?OjitroC wrote: ↑Thu Jan 28, 2021 8:28 pm I may be totally wrong but you have 'AnimSequence="Dead1"' in the script. Perhaps this is being 'read' as the 'Dead1' anim sequence of the model which has 10 or 12 anims rather than a single one. What if you replace that 'Dead1' with one of the DeadEnd anims in the model as these have only one animation?
Should be as the uax just contains .wav files that are useable by UT and Unreal. You can just import the wav files into the model's .u file if you want - probably better than assigning sounds from the uax as it means you don't have to distribute the uax (particularly when you probably won't use all the sounds in the uax).
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: [SOURCE FILES]Unreal Basic Skeletal Character[227i]
Actual Screenshots:
You do not have the required permissions to view the files attached to this post.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: [SOURCE FILES]Unreal Basic Skeletal Character[227i]
Important things that I discovered:
1. You musn't edit your .ini file while you installing custom model/skin(that's feature of 227i patch)
2. If you are gonna compile a new model, you must remove "EditPackages= * " of your older model from your .ini file
That's because when packages are selected, UCC/UMake scan everything of them. If your new model has same content, for example, animations, which has your older model, then these animations will not be imported into your new model and you wouldn't get it work properly.
1. You musn't edit your .ini file while you installing custom model/skin(that's feature of 227i patch)
2. If you are gonna compile a new model, you must remove "EditPackages= * " of your older model from your .ini file
That's because when packages are selected, UCC/UMake scan everything of them. If your new model has same content, for example, animations, which has your older model, then these animations will not be imported into your new model and you wouldn't get it work properly.
-
- Experienced
- Posts: 118
- Joined: Thu Jan 07, 2021 12:50 pm
- Personal rank: Masterful
- Location: Planet Na-Pali, Bluff Eversmoking
Re: [SOURCE FILES]Unreal Basic Skeletal Character[227i]
New model port made on this base:
https://gamebanana.com/skins/186893
https://gamebanana.com/skins/186893
You do not have the required permissions to view the files attached to this post.