Einzelnen Beitrag anzeigen
Alt 12.02.2011, 00:32   #1
Sly.
UT-Freak
 
Benutzerbild von Sly.
 
Registriert seit: 14.04.2010
Ort: zu Hause
Beiträge: 3.229
Beigetretene Cups: 0
Cup Siege: 0
Downloads: 62
Uploads: 7
Frage Animationen & Texturen werden im Code nicht erkannt

Man ist mir das peinlich... Ich dachte, ich kriege das auch so hin

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


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.

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


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
Sly. ist offline   Mit Zitat antworten