Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

how do sprite rotations affect mods?

Recommended Posts

hey gusy so ive been told before that freedoom can add missing rotations to sprites, for example the freedoom techpillar is 8 directional, but the vanilla one only has 1 angle. but ive also been told that adding sprites that arent in the original affects mod compatability. the baron replacement im working on has an assymetrycal design, meaning that it needs to be 8 directional. would this affect mods like BTSX or brutal doom? would the monsters switch back a forth from vanilla to freedoom on some angles? something like this maybe?

i need to know this so that i can adjust the design while im still in the early stages of the spriting, so can someone, preferably one of the maintainers give a definitive answer?


Share this post

Link to post

I'm pretty sure the below is wrong on further reflection. Vanilla Doom will bomb out if you try and make it install the same sprite frame twice.

I can't check it ATM, but it looks like it ought to be fine. R_InitSpriteDefs goes through all the 4-letter sprite suffixes and does this for each (yes I am aware this whole post is overkill):

for (l=start+1 ; l<end ; l++)
	    if (*(int *)lumpinfo[l].name == intname)
		frame = lumpinfo[l].name[4] - 'A';
		rotation = lumpinfo[l].name[5] - '0';

		if (modifiedgame)
		    patched = W_GetNumForName (lumpinfo[l].name);
		    patched = l;

		R_InstallSpriteLump (patched, frame, rotation, false);

		if (lumpinfo[l].name[6])
		    frame = lumpinfo[l].name[6] - 'A';
		    rotation = lumpinfo[l].name[7] - '0';
		    R_InstallSpriteLump (l, frame, rotation, true);
When it is processing TROO*, it will first hit the IWAD's TROOA1. It will look up that name using W_GetNumForName, which scans backwards, so it will install the PWAD sprite frame instead, like you want.

Next it will hit TROOA2 in the IWAD lump and look for it using W_GetNumForName. Because the PWAD lump is TROOA2C8 or whatever, which is not the same name, it will find the IWAD lump instead and install it. It does this through TROOA8, with everything but TROOA1 and TROOA5 being the IWAD frames.

But then eventually the engine gets down to the PWAD's TROOA1 in the list of lumps, where it reinstalls the PWAD frame, and then hits TROOA2C8, where it installs it as TROOA2, and then installs the mirrored version as TROOC8, etc, overwriting the IWAD ones. So I think it ought to work alright.

(As an aside, recasting the lump names as an integer in order to only grab the first 4 bytes/letters is really evil.)

Share this post

Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now