UTzone.de

UTzone.de (https://www.utzone.de/forum/index.php)
-   ini - Bearbeitung (Scripting) (https://www.utzone.de/forum/forumdisplay.php?f=42)
-   -   Animationen & Texturen werden im Code nicht erkannt (https://www.utzone.de/forum/showthread.php?t=1810)

Sly. 12.02.2011 01:32

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

Wormbo 12.02.2011 09:41

Moment, du kompilierst nicht wirklich ein Package mit dem Namen "myLevel" außerhalb des UnrealEd? Das ist ein Packagename den man niemals belegen darf. Wenn du dein Package später in die Map integieren möchtest, verwendest du "obj load file=packagename package=mylevel" an der Editorkonsole.

Sly. 12.02.2011 20:19

Naja, ich habe mal in einem Tutorial gelesen (wo genau, weiß ich nicht mehr, auch schon lange her), dass das angeblich gehen soll, aber wenn du es sagst, dann ändere ich das lieber. Ich denke mal du hast da wesentlich mehr Ahnung.

PS: Gesagt, getan. Hab's jetzt umgeändert.

EDIT: Gerade vorhin weitere Dateien gefunden, die im Zusammenhang mit den Meshes stehen. Scheint so, als ob die Errors einfach damit zu tun haben, dass ich ein paar Dateien verbummelt habe (Schande über mein Haupt!) :o Ich habe jetzt nur noch 2 Errors, die Texturen. Ich denke mal das kriege ich ab hier schon hin. Auf jeden Fall schon mein ein großes, fettes "Danke" für die Hilfe Wormbo :)

EDIT2: *glücklich* Geschafft.

EDIT3: Das mit den Texturen war simpel: Ich hatte Skins(0) bzw. Skins(1)=Texture'Name der Textur', doch es waren Shader, also musste es Skins(Nummer)=Shader'Name der Textur' heißen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
CopyRight-Licence © 1999 - 2024 by UTzone.de