Page 1 of 1

Sprite Edits

Posted: Mon Jan 25, 2016 12:53 am
by ANUBITEK
EDIT:
Standing and walking directional sprites of Fei Fong Wong from XenoGears available now! I got a little busy with life so the running and jumping sprites still need to be ripped, but I shall get those out as soon as possible. I'll post screens of the sprites when I also have something to show them off. Ultimately these sprites are intended as place holders for my own mod, but I thought I'd share them because why not.

Re: Texture test pls?

Posted: Mon Jan 25, 2016 2:52 am
by JackGriffin
Just tested, not going to take the time to screenshot and convert. It works fine. BTW, you can google whatever you are looking for and add the term "sprite sheet" to get a sheet of animation frames to use. I did that for multiple animated textures I've made and it turns out well.

Re: Texture test pls?

Posted: Mon Jan 25, 2016 3:03 am
by ANUBITEK
Thanks mate, I appreciate it. I'll upload the end result because I bet people would like to see this when it is finished. However, and this may sound rude. . . But go on Google and look for XenoGears sprite sheets. The majority of them are incomplete because sprite rips from the game are apparently pretty difficult to do through emulation and using this tool, that I forget the name of, per screen. Apparently it is like:
> For each frame of gameplay take a screenshot
> Pause the game
> Shrink ePSXe
> Pull up the tool
> Change color palette until it looks right
> Save and put all of the sprites together (because they come in pieces per sprite, per sheet so you'd have like 30 sets of legs here and 20 sets of heads there)
> Repeat.

I would definitely have done that by now if I had found Fei's full sprite sheet online. However Google also personalizes search results so I could just be not seeing results that actually have a full Fei Fong Wong sprite sheet. That being said, it is kinda pointless now as I have the running/walking/idle/jumping animations of at least 2 directions already ripped with only needing to do 3 more. Plus the sprites are just placeholders until I can pay a sprite artist to make new sprites as these are just to be used as a template.

Re: [in progress] Fei Sprites

Posted: Mon Jan 25, 2016 3:50 am
by JackGriffin
Never apologize for adding information brother. I knew you had already seen sprite sheets seeing your choice in what to use ;) I mentioned that more for google searches that ran into this thread. BTW your texture looks not so good in-game. It really needs better res even at half scale.

Re: Texture test pls?

Posted: Mon Jan 25, 2016 3:26 pm
by Gustavo6046
LannFyre wrote:([...] you'd have like 30 sets of legs here and 20 sets of heads there)
WRONG! Since each head had 2 legs and 2 arms and 1 body, if you have 20 sets of head, you'd need 40 sets of legs and arms & 20 set of body.

Do the math dawg! ;)

Re: [in progress] Fei Sprites

Posted: Mon Jan 25, 2016 3:33 pm
by papercoffee
Gustavo6046 wrote:
LannFyre wrote:([...] you'd have like 30 sets of legs here and 20 sets of heads there)
WRONG! Since each head had 2 legs and 2 arms and 1 body, if you have 20 sets of head, you'd need 40 sets of legs and arms & 20 set of body.

Do the math dawg! ;)
Do the research dawg! :wth:

That's not how sprites work. Believe me, I know what I'm saying.

Re: [in progress] Fei Sprites

Posted: Mon Jan 25, 2016 3:52 pm
by Gustavo6046
papercoffee wrote: Do the research dawg! :wth:

That's not how sprites work. Believe me, I know what I'm saying.
Do the mercy dawg! 8) You are getting too hot angry, you will OVERHEAT!

Anyway, back to the serious. I know that atleast in Doom the sprites aren't divided, they are one only and they are rotational -- the same effect I am trying to achieve:

Code: Select all

//=============================================================================
// RotationalSpriteActor.
//=============================================================================
class RotationalSpriteActor expands Actor;

var(Sprites)	Texture	FrontSprite, FrontRightSprite, RightSprite, RearRightSprite, RearSprite, RearLeftSprite, LeftSprite, FrontLeftSprite;
var				byte	ClientSpriteNum;

function PreBeginPlay()
{
	DrawType = DT_Sprite;
}

replication
{
	reliable if (role == ROLE_Authority)
		FrontSprite, FrontRightSprite, RightSprite, RearRightSprite, RearSprite, RearLeftSprite, LeftSprite, FrontLeftSprite;
	unreliable if (role == ROLE_Authority)
		ClientSpriteNum;
}

function Tick(float Delta)
{
	local Rotator ViewAngle;

	Super.Tick(Delta);
	//do the math

	//placeholder

	//end math estimation of life B-)

	ClientSpriteNum = (ViewAngle.Roll * 8) / 360

	switch ClientSpriteNum:
		case 1:
			Sprite = FrontSprite;
		case 2:
			Sprite = FrontRightSprite;
		case 3:
			Sprite = RightSprite;
		case 4:
			Sprite = RearRightSprite;
		case 5:
			Sprite = RearSprite;
		case 6:
			Sprite = HearLeftSprite;
		case 7:
			Sprite = LeftSprite;
		case 8:
			Sprite = FrontLeftSprite;
		default:
			log('Invalid ClientSpriteNum: ' + string(ClientSpriteNum) + ' Destroying actor...');
			Destroy();
}


Re: [in progress] Fei Sprites

Posted: Tue Jan 26, 2016 2:26 am
by Dr.Flay
Gustavo6046 wrote:
papercoffee wrote: Do the research dawg! :wth:

That's not how sprites work. Believe me, I know what I'm saying.
Do the mercy dawg! 8) You are getting too hot angry, you will OVERHEAT!
Then stop annoying him, and as speak politely as you would in someone else's home.
Think about it like this;
Many of us here are at least twice your age (I am 4x as old as you), with at least your entire life-span modding with UEd (Ouch I just felt a whole lot older).
This game is older than you are, and admittedly no-one here knows all there is to know about it, but Papercoffee knows a lot more than you or me.

Learn from me as an Aspergers powered freak. This is something I only learned in my 30s.
When other people are saying things that are wrong or opposite to what I believe, 2 things are possible;
1) I am missing a vital piece of info, so there is a gap in my knowledge that I must now fill.
2) They are missing a vital piece of info, so there is a gap in their knowledge that they must now fill.

By being rude and leaping in with "WRONG!...blah,blah,blah " people do not care if I am right or wrong.
I must find the contextual evidence online, so that I can post proof/reference shared by other people.
However if I cannot find any supporting evidence for this situation, it often leads me to realise that the "fact" I know, does not apply here or is not relevant.

UEd and other development engines often have quirks and oddities that are not shared between them.
Whenever you move to a new engine, throw the rule-book out the window and start a new one.

Re: [in progress] Fei Sprites

Posted: Wed Jan 27, 2016 2:57 am
by papercoffee
Gustavo6046 wrote: Do the mercy dawg! 8) You are getting too hot angry, you will OVERHEAT!
You have to put out more get me angry.
I'm just mildly annoyed that you were disrespectful towards LannFyre, without a reason.

Re: [in progress] Fei Sprites

Posted: Thu Jan 28, 2016 4:37 am
by ANUBITEK
Boom mates, updated the OP. Now you can download the full standing/walking sprites, no running or jumping sprites quite yet. Read the OP and check for download link if you want the sprites. But first, take note: the sprites look bad. Like really bad. The reason they do is because XenoGears pieces together each sprite to animate each part like how Terraria animates its characters. The sprites are pieced together via animation skeleton, but each sprite is scaled according to camera position. Even if this was possible, for the love of all that is good I would never do this. It is a cheaper animation method and probably an ultimately good decision, but god it makes sprite ripping a FUn task.

Re: [in progress] Fei Sprites

Posted: Thu Jan 28, 2016 2:20 pm
by Gustavo6046
I tried not to being disrespectful with LannFyre. I told her that Doom had sprites animated as a entire just to fill his/her knowledge, um... "database", and I just was surprised that at least somewhere, there were animated SPRITES and PARTIAL SPRITES after 1996 when Quake came and inutilized sprites.

Sorry man, I didn't want this to happen...

Re: [in progress] Fei Sprites

Posted: Mon Sep 05, 2016 11:09 pm
by ANUBITEK
Hey Gustavo, is it cool if I use what you posted and I modify it a bit? I want to see about putting it into a manager that adjusts based on a camera's position.

Re: [in progress] Fei Sprites

Posted: Tue Sep 06, 2016 12:44 am
by Gustavo6046
LannFyre wrote:Hey Gustavo, is it cool if I use what you posted and I modify it a bit? I want to see about putting it into a manager that adjusts based on a camera's position.
Sure! Anyone is free to use my code :3

(despite mostly being more advanced like this:)

Code: Select all

//=============================================================================
// Breadcrumb.
//=============================================================================
class Breadcrumb expands Actor;

var		BreadcrumbPath	Pathes;
var()	float			MaxBreadcrumbDistance;
var		bool			bFindingPath;

function BreadcrumbPath AppendPathes(BreadcrumbPath A, BreadcrumbPath B)
{
	A.AddPath(B);
	return A;
}

function UpdatePathes()
{	
	local Breadcrumb BC;
	local Breadcrumbpath NewPath;
	local Breadcrumbpath Current;

	foreach AllActors(class'Breadcrumb', BC)
		if ( BreadcrumbReachable(BC) )
			for ( Current = Pathes; Current != None; Current = Current.Next )
				if ( Current.Next == None )
				{
					NewPath = Spawn(class'BreadcrumbPath', self);

					NewPath.Destination = BC;
					Current.Next = NewPath;

					break;
				}
}

function bool BreadcrumbReachable(Breadcrumb Other)
{
	return FastTrace(Other.Location) && -1024 < Other.Location.Z - Location.Z && Other.Location.Z - Location.Z < 256 && VSize(Other.Location - Location) < MaxBreadcrumbDistance;
}

function BreadcrumbPath FindPathToBreadcrumb(Breadcrumb Destination, BreadcrumbPath Path)
{
	local BreadcrumbPath Current;
	local BreadcrumbPath NewPath;
	local BreadcrumbPath BP;

	for ( Current = Pathes; Current.Next != None; Current = Current.Next )
		if ( Current.Destination == Destination )
			return AppendPathes(Path, Current);
		
		else 
			if ( !BreadcrumbInPathes(Current.Destination, Path) )
				return Current.Destination.FindPathToBreadcrumb(Destination, AppendPathes(Path, Current));

	return None;
}

function PostBeginPlay()
{
	UpdatePathes();
}

function bool BreadcrumbInPathes(Breadcrumb Current, BreadcrumbPath Pathes)
{
	local BreadcrumbPath BP;

	for ( BP = Pathes; BP.Next != None; BP = BP.Next )
		if ( BP.Next == Current )
			return true;

	return false;
}

function BreadcrumbPath PathAt(BreadcrumbPath Root, int Index)
{
	local int i;
	local BreadcrumbPath BP;

	for ( BP = Root; BP.Next != None; BP = BP.Next )
	{
		if ( i == Index )
			return BP;

		i++;
	}

	return none;
}

function Leaving(Pawn Other, BreadcrumbPath Next, Breadcrumb Destination)
{
	Next.ControlEntrance(Other, Destination);

	Destination.Entering(Other, Next, Destination);
}

function Entering(Pawn Other, BreadcrumbPath Origin, Breadcrumb Destination);

auto	state()	Activated	{}
	state()	Deactivated	{}

Code: Select all

//=============================================================================
// AutoRocket.
//=============================================================================
class AutoRocket expands UT_SeekingRocket;

var()	float	SeekAcceleration, SeekSpeed, TargetAcquiringRadius, WallAvoidSpeed, WallPredictionFactor, WallAvoidSlowdown;
var		Pawn	User;
var		int		Slowdown;
var		bool	bFoundUser;

replication
{
	reliable if ( Role == ROLE_Authority )
		User,
		Slowdown,
		bFoundUser;
}

simulated event Vector EstimateLocation(Actor Other)
{
	return Other.Location + (Other.Velocity / VSize(Velocity)) * 0.5;
}

simulated event HomeAt(Actor Other)
{
	Velocity *= VSize(Velocity cross (EstimateLocation(Seeking) - Location)) * SeekAcceleration;
	Acceleration = (EstimateLocation(Seeking) - Location) * SeekSpeed;
}

simulated event Actor WillHitWall(optional out Vector Location, optional out Vector OutNormal)
{
	return Trace(Location, OutNormal, Self.Location + Velocity * WallPredictionFactor);
}

simulated event bool CheckSeekable(Pawn Other, Pawn FireAgent)
{
	if
	(
		Other != None
		&&
		(
			FireAgent == None
			||
			(
				FastTrace(Other.Location)
				&& Other != FireAgent
				&& !Other.IsInState('Dying')
				&&
				(
					(
						ScriptedPawn(FireAgent) != None
						&& ScriptedPawn(FireAgent).AttitudeTo(Other) != ATTITUDE_Friendly
					)
					||
					(
						ScriptedPawn(Other) != None
						&& ScriptedPawn(Other).AttitudeTo(FireAgent) != ATTITUDE_Friendly
					)
					||
					(
						PlayerPawn(FireAgent) != None
						&& Other.AttitudeToPlayer != ATTITUDE_Friendly
						&& Other.PlayerReplicationInfo.Team != FireAgent.PlayerReplicationInfo.Team
					)
					|| Other.PlayerReplicationInfo.Team != FireAgent.PlayerReplicationInfo.Team
				)
			)
		)
	)	
	{
		return True;
	}

	return False;
}

function BeginPlay()
{
	if ( Owner == None )
		return;

	if ( Pawn(Owner) != None )
		User = Pawn(Owner);

	else
		User = Pawn(Owner.Owner);

	if ( User == None )
		return;
}

simulated function SetTarget(Pawn Other)
{
	Seeking = Other;

	Log(self@"is now seeking after:"@Other);
}

simulated event Timer()
{
	local Pawn P;
	local Pawn Target;
	local Actor A;
	local Vector WallNorm, WallLoc;

	SetRotation(Rotator(Velocity));

	A = WillHitWall(WallLoc, WallNorm);

	if ( A != None && ( LevelInfo(A) != None || !CheckSeekable(Pawn(A), User) ) && WallNorm dot (Velocity + Acceleration) < 0.9 )
	{
		Velocity /= WallAvoidSlowdown;
		Slowdown *= WallAvoidSlowdown;
		Acceleration -= WallAvoidSpeed * 2 * (WallNorm dot Velocity) * WallNorm;
	}

	else if ( Slowdown > 1 )
	{
		Velocity *= Slowdown;
		Slowdown = 1;
	}

	else bFoundUser = True;

	if ( Seeking != None && ( Pawn(Seeking) == None || !Pawn(Seeking).IsInState('Dying') || ( ScriptedPawn(Seeking) == None && User != None && ScriptedPawn(Seeking).AttitudeTo(User) == ATTITUDE_Friendly ) ) )
	{
		HomeAt(Seeking);
	}

	else
	{
		foreach RadiusActors(class'Pawn', P, TargetAcquiringRadius)
		{
			if ( Target == None || VSize(P.Location - Location) < VSize(Target.Location - Location) )
			{
				Target = P;

				if ( CheckSeekable(Target, User) )
					SetTarget(Target);
			}
		}
	}
}


Also, don't mind what I did ages ago. I was a d#@k back then :P

Also, if you are trying to find for something to de-sheet sprite sheets, then use ShoeBox. Just a tip. It works perfectly for me :)