Animationen & Texturen werden im Code nicht erkannt
Man ist mir das peinlich... Ich dachte, ich kriege das auch so hin :o
Hoffe mal, das hier ist der richtige Ort, darum bitte verschieben, wenn nicht. Heißt ja eigentlich ini-Bearbeitung ( Scripting), bin mir aber dennoch nicht sicher gewesen, ob das hier wirklich reinpasst (keine andere passende Kategorie gefunden). :o
Um schonmal ein paar Fragen zu klären: Betrifft UT2004, ich arbeite mit WOTgreal und benutze UMake 1-2.
Nun ein paar Details zum Problem:
Ich habe vor ein paar Tagen ein Paket mit Animationen, eins mit Texturen, eins mit Karma und ein Static Mesh Paket mit Gibs gefunden.
Genaugenommen sind es Animationen inkl. dazugehörigen Texturen, Karma und Gibs von den Unreal 2 Skaarjs. Von woher genau ich die habe... das weiß ich nicht mehr, schon zu lange her.
Dann habe ich mich entschlossen einen Unreal 2 Skaarj zu machen. Bin aber noch Anfänger, was das Scripten in Uscript angeht, aber bin bereits in der Lage einen simplen Mutator zu entwerfen. :o
Und hier fängt's an:
Ich habe eine neue Unterklasse der Skaarj-Klasse erstellt, das alte Skaarj Mesh, die Animationen, sowie Texturen durch die aus Unreal 2 in den DefaultProperties und in Teilen des Codes, in denen es notwendig bzw. besser war und aussehen würde, ersetzt.
Hier der Code für die Helfer, falls er gebraucht wird (die Dateien kann ich auch noch als Anhang hochladen, falls es jemand selbst ausprobieren möchte):
Klappen
Code:
//=============================================================================
// SPMonster_Unreal2SkaarjAdvancedSly
//=============================================================================
class SPMonster_Unreal2SkaarjAdvancedSly extends Skaarj;
#exec OBJ LOAD FILE=U2Skaarj.ukx
#exec OBJ LOAD FILE=SkaarjGibs.usx
#exec OBJ LOAD FILE=U2Skaarjtex.utx
var sound FootStep[2];
var name DeathAnim[4];
function PlayVictory()
{
Controller.bPreparingMove = true;
Acceleration = vect(0,0,0);
bShotAnim = true;
PlaySound(sound'roam11s',SLOT_Interact);
SetAnimAction('IdleCharacter02');
Controller.Destination = Location;
Controller.GotoState('TacticalMove','WaitForAnim');
}
function bool SameSpeciesAs(Pawn P)
{
return ( (Monster(P) != None) && (P.IsA('Skaarj') || P.IsA('WarLord')) );
}
function vector GetFireStart(vector X, vector Y, vector Z)
{
return Location + 0.9 * CollisionRadius * X + 0.9 * CollisionRadius * Y + 0.4 * CollisionHeight * Z;
}
function SpawnTwoShots()
{
local vector X,Y,Z, FireStart;
local rotator FireRotation;
GetAxes(Rotation,X,Y,Z);
FireStart = GetFireStart(X,Y,Z);
if ( !SavedFireProperties.bInitialized )
{
SavedFireProperties.AmmoClass = MyAmmo.Class;
SavedFireProperties.ProjectileClass = MyAmmo.ProjectileClass;
SavedFireProperties.WarnTargetPct = MyAmmo.WarnTargetPct;
SavedFireProperties.MaxRange = MyAmmo.MaxRange;
SavedFireProperties.bTossed = MyAmmo.bTossed;
SavedFireProperties.bTrySplash = MyAmmo.bTrySplash;
SavedFireProperties.bLeadTarget = MyAmmo.bLeadTarget;
SavedFireProperties.bInstantHit = MyAmmo.bInstantHit;
SavedFireProperties.bInitialized = true;
}
FireRotation = Controller.AdjustAim(SavedFireProperties,FireStart,600);
Spawn(MyAmmo.ProjectileClass,,,FireStart,FireRotation);
FireStart = FireStart - 1.8 * CollisionRadius * Y;
FireRotation.Yaw += 400;
spawn(MyAmmo.ProjectileClass,,,FireStart, FireRotation);
}
simulated function AnimEnd(int Channel)
{
local name Anim;
local float frame,rate;
if ( Channel == 0 )
{
GetAnimParams(0, Anim,frame,rate);
if ( Anim == 'looking' )
IdleWeaponAnim = 'guncheck';
else if ( (Anim == 'guncheck') && (FRand() < 0.5) )
IdleWeaponAnim = 'looking';
}
Super.AnimEnd(Channel);
}
function RunStep()
{
PlaySound(FootStep[Rand(2)], SLOT_Interact);
}
function WalkStep()
{
PlaySound(FootStep[Rand(2)], SLOT_Interact,0.2);
}
simulated function PlayDying(class<DamageType> DamageType, vector HitLoc)
{
AmbientSound = None;
bCanTeleport = false;
bReplicateMovement = false;
bTearOff = true;
bPlayedDeath = true;
HitDamageType = DamageType; // these are replicated to other clients
TakeHitLocation = HitLoc;
LifeSpan = RagdollLifeSpan;
GotoState('Dying');
Velocity += TearOffMomentum;
BaseEyeHeight = Default.BaseEyeHeight;
SetPhysics(PHYS_Falling);
if ( (DamageType == class'DamTypeSniperHeadShot')
|| ((HitLoc.Z > Location.Z + 0.75 * CollisionHeight) && (FRand() > 0.5)
&& (DamageType != class'DamTypeAssaultBullet') && (DamageType != class'DamTypeMinigunBullet') && (DamageType != class'DamTypeFlakChunk')) )
{
PlayAnim('Death5',1,0.05);
CreateGib('head',DamageType,Rotation);
return;
}
if ( Velocity.Z > 300 )
{
if ( FRand() < 0.5 )
PlayAnim('Death',1.2,0.05);
else
PlayAnim('Death2',1.2,0.05);
return;
}
PlayAnim(DeathAnim[Rand(4)],1.2,0.05);
}
function SpinDamageTarget()
{
if (MeleeDamageTarget(20, (30000 * Normal(Controller.Target.Location - Location))) )
PlaySound(sound'clawhit1s', SLOT_Interact);
}
function ClawDamageTarget()
{
if ( MeleeDamageTarget(25, (25000 * Normal(Controller.Target.Location - Location))) )
PlaySound(sound'clawhit1s', SLOT_Interact);
}
function RangedAttack(Actor A)
{
local name Anim;
local float frame,rate;
if ( bShotAnim )
return;
bShotAnim = true;
if ( Physics == PHYS_Swimming )
SetAnimAction('SwimFire');
else if ( VSize(A.Location - Location) < MeleeRange + CollisionRadius + A.CollisionRadius )
{
if ( FRand() < 0.7 )
{
SetAnimAction('Spin');
PlaySound(sound'spin1s', SLOT_Interact);
Acceleration = AccelRate * Normal(A.Location - Location);
return;
}
SetAnimAction('Claw');
PlaySound(sound'Claw2s', SLOT_Interact);
Controller.bPreparingMove = true;
Acceleration = vect(0,0,0);
}
else if ( Velocity == vect(0,0,0) )
{
SetAnimAction('Firing');
Controller.bPreparingMove = true;
Acceleration = vect(0,0,0);
}
else
{
GetAnimParams(0,Anim,frame,rate);
if ( Anim == 'RunL' )
SetAnimAction('StrafeLeftFr');
else if ( Anim == 'RunR' )
SetAnimAction('StrafeRightFr');
else
SetAnimAction('JogFire');
}
}
defaultproperties
{
Footstep(0)=SkaarjPack_rc.Cow.walkC
Footstep(1)=SkaarjPack_rc.Cow.walkC
DeathAnim(0)="Death"
DeathAnim(1)="Death2"
DeathAnim(2)="Death4"
DeathAnim(3)="Death5"
HitSound(0)=SkaarjPack_rc.Skaarj.injur1sk
HitSound(1)=SkaarjPack_rc.Skaarj.injur2sk
HitSound(2)=SkaarjPack_rc.Skaarj.injur3sk
HitSound(3)=SkaarjPack_rc.Skaarj.injur3sk
DeathSound(0)=SkaarjPack_rc.Skaarj.death1sk
DeathSound(1)=SkaarjPack_rc.Skaarj.death2sk
ChallengeSound(0)=SkaarjPack_rc.Skaarj.chalnge1s
ChallengeSound(1)=SkaarjPack_rc.Skaarj.chalnge3s
ChallengeSound(2)=SkaarjPack_rc.Skaarj.roam11s
ChallengeSound(3)=SkaarjPack_rc.Skaarj.roam11s
AmmunitionClass=SkaarjPack.SkaarjAmmo
ScoringValue=6
IdleHeavyAnim="Idle_Biggun"
IdleRifleAnim="Breath"
MeleeRange=60.000000
JumpZ=550.000000
Health=150
MovementAnims(1)="JogFire"
MovementAnims(2)="RunR"
MovementAnims(3)="RunL"
SwimAnims(0)="Swim"
SwimAnims(1)="Swim"
SwimAnims(2)="Swim"
SwimAnims(3)="Swim"
WalkAnims(1)="WalkF"
WalkAnims(2)="WalkF"
WalkAnims(3)="WalkF"
AirAnims(0)="Jump_Mid"
AirAnims(1)="Jump_Mid"
AirAnims(2)="Jump_Mid"
AirAnims(3)="Jump_Mid"
LandAnims(0)="Jump_Land"
LandAnims(1)="Jump_Land"
LandAnims(2)="Jump_Land"
LandAnims(3)="Jump_Land"
DodgeAnims(0)="DodgeF"
DodgeAnims(1)="DodgeB"
DodgeAnims(2)="DodgeL"
DodgeAnims(3)="DodgeR"
AirStillAnim="InAir"
TakeoffStillAnim="Jump"
IdleSwimAnim="Swim"
IdleWeaponAnim="Looking"
IdleRestAnim="Breath"
mesh=SkeletalMesh'U2Skaarj.U2Skaarj2'
Skins(0)=texture'U2Skaarjtex.new.Sbody'
Skins(1)=texture'U2Skaarjtex.new.Shead'
Mass=150.000000
Buoyancy=150.000000
RotationRate=(Yaw=60000)
HearingThreshold=4096
SightRadius=6000
AmbientSound=sound'SkaarjPack_rc.WarLord.breath1WL'
}
Der Code ist noch im Anfangsstadium und muss noch optimiert werden, jedoch spuckt der Compiler bereits jetzt schon folgenden Error aus, wenn ich ihn kompilieren will:
Code:
[...]
----- myLevel (Release)
Analyzing...
Parsing SPMonster_Unreal2SkaarjAdvancedSly
Failed loading package: Can't find file for package 'Humangibtex'
Failed loading package: Can't find file for package 'Humangibtex'
D:\Programme\Unreal Anthology\UT2004\myLevel\Classes\SPMonster_Unreal2SkaarjAdvancedSly.uc(10) : Warning, 'Footstep' obscures 'Footstep' defined in base class 'Skaarj'.
D:\Programme\Unreal Anthology\UT2004\myLevel\Classes\SPMonster_Unreal2SkaarjAdvancedSly.uc(11) : Warning, 'DeathAnim' obscures 'DeathAnim' defined in base class 'Skaarj'.
Compiling SPMonster_Unreal2SkaarjAdvancedSly
Importing Defaults for SPMonster_Unreal2SkaarjAdvancedSly
ObjectProperty Engine.Actor.Mesh: unresolved reference to 'SkeletalMesh'U2Skaarj.U2Skaarj2''
ObjectProperty Engine.Actor.Skins.Skins: unresolved reference to 'texture'U2Skaarjtex.new.Sbody''
ObjectProperty Engine.Actor.Skins.Skins: unresolved reference to 'texture'U2Skaarjtex.new.Shead''
Compile aborted due to errors.
Failure - 3 error(s), 2 warning(s)
Code:
ObjectProperty Skins.Skins: unresolved reference to texture'U2Skaarjtex.new.Shead'.
Explanation
The compiler wasn't able to find the texture object named U2Skaarjtex.new.Shead you tried to set the Skins variable to in the "defaultproperties" section.
Die Warnungen sind nur eine Nebensache und denen werde ich mich später annehmen. Erst will ich mich meinem Hauptproblem annehmen.
Wie man sehen kann, können die Texturen, sowie Animationen, nicht gefunden werden.
Folgendes habe ich bereits getan/versucht:
Ich habe (wie man im Code sieht) die Packages zu Beginn des Codes in die Klasse geladen:
Code:
#exec OBJ LOAD FILE=U2Skaarj.ukx
#exec OBJ LOAD FILE=SkaarjGibs.usx //werden laut Compiler verlangt, wieso weiss ich nicht. Zugehoerige Texturdatei (HumangibTex) fehlt noch im Code
#exec OBJ LOAD FILE=U2Skaarjtex.utx
und hier der Part aus den DefaultProperties:
Code:
mesh=SkeletalMesh'U2Skaarj.U2Skaarj2'
Skins(0)=texture'U2Skaarjtex.new.Sbody'
Skins(1)=texture'U2Skaarjtex.new.Shead'
Ich habe auch überprüft, ob die Namen korrekt geschrieben sind. Habe ich schon x-mal gemacht, nur um dann festzustellen, dass ich alles richtig aufgeschrieben habe.. :slant:
Wahrscheinlich habe ich einen ganz dummen Fehler gemacht, den ich einfach nicht sehe.
Ich bin für jegliche Hilfe überaus dankbar, denn wäre ja schade, wenn ich die Meshes nicht für eines meiner Freizeitprojekte nutzen könnte (U1 Meshes passen in eine UE2 Umgebung nur schlecht rein), nur weil ich (momentan) zu dumm dazu bin und später dann die Motivation verliere :)
|