Making a new Gargoyle produce different gibs

Ask about ACS, DECORATE, ZScript, or any other scripting questions here!

Moderator: GZDoom Developers

Forum rules
Before asking on how to use a ZDoom feature, read the ZDoom wiki first. If you still don't understand how to use a feature, then ask here.

Please bear in mind that the people helping you do not automatically know how much you know. You may be asked to upload your project file to look at. Don't be afraid to ask questions about what things mean, but also please be patient with the people trying to help you. (And helpers, please be patient with the person you're trying to help!)
User avatar
SiFi270
Posts: 453
Joined: Tue Feb 10, 2015 2:51 am
Location: Does anyone put a serious answer here?

Making a new Gargoyle produce different gibs

Post by SiFi270 »

I'm working on a Heretic mod that makes the melee-only Gargoyles green, which means also making their blood green for consistency's sake. But when they die, they still produce two red chunks, and it seems I have to make a new version of A_ImpExplode to deal with that, but I'm completely new to editing that kind of thing and have no idea where to start.
User avatar
ramon.dexter
Posts: 1562
Joined: Tue Oct 20, 2015 12:50 pm
Graphics Processor: nVidia with Vulkan support
Location: Kozolupy, Bohemia

Re: Making a new Gargoyle produce different gibs

Post by ramon.dexter »

Opne gzdoom.pk3 and take a look yourself how its defined. Its zscript.
User avatar
SiFi270
Posts: 453
Joined: Tue Feb 10, 2015 2:51 am
Location: Does anyone put a serious answer here?

Re: Making a new Gargoyle produce different gibs

Post by SiFi270 »

That means converting what I've already got for the gargoyle from decorate to zscript, and I'm not sure what to do for the "translation" property in that case, and neither did RockstarRaccoon's converter.

If I were to find a way to do the A_ImpExplode thing with decorate, people who, for whatever reason, prefer a port that doesn't support zscript would also be able to use the mod if they want to, and broader compatibility seems to me like a decent reason to stick to decorate whenever possible. But if there's a reason I'm missing for absolutely having to use zscript for this, I'd like to know.
User avatar
ramon.dexter
Posts: 1562
Joined: Tue Oct 20, 2015 12:50 pm
Graphics Processor: nVidia with Vulkan support
Location: Kozolupy, Bohemia

Re: Making a new Gargoyle produce different gibs

Post by ramon.dexter »

The translation property works in zscript.
User avatar
SiFi270
Posts: 453
Joined: Tue Feb 10, 2015 2:51 am
Location: Does anyone put a serious answer here?

Re: Making a new Gargoyle produce different gibs

Post by SiFi270 »

But obviously I have to change something about it because this:

Code: Select all

class TioliGragoyle : HereticImp replaces HereticImp
{
	bloodcolor green;
	translation "145:168=209:224", "247:254=225:240"
}
is giving me this:
You do not have the required permissions to view the files attached to this post.
User avatar
ramon.dexter
Posts: 1562
Joined: Tue Oct 20, 2015 12:50 pm
Graphics Processor: nVidia with Vulkan support
Location: Kozolupy, Bohemia

Re: Making a new Gargoyle produce different gibs

Post by ramon.dexter »

Well, you should really learn how to use zscript.

The actor properties goes into

Default{} block, every line ends with ";". Correct it and it will work.

And read through the zscript reference on zdoom wiki. The difference between decorate and zscript is described pretty clearly :wink:

https://zdoom.org/wiki/ZScript

The translation property works perfectly. I must know it, cause I use translation to make variety with stock strife peasants. Take a look:

Also, dont use any kind of converter - converting by hand is easy and you will learn something (with converter, you will learn nothing, so whats the point of using it?).

Code: Select all

class tekPeasant01_gold : tekPeasant01_base
{
	Default
	{
		//$Title "tekPeasant - baldy gold"
		Translation "128:143=80:95";
	}
}
User avatar
SiFi270
Posts: 453
Joined: Tue Feb 10, 2015 2:51 am
Location: Does anyone put a serious answer here?

Re: Making a new Gargoyle produce different gibs

Post by SiFi270 »

I thought I could learn from the converter by comparing its input and output, and I imagine I still can in a number of situations. I had tried before with the "default" and semicolon in place like that (but now I can't remember if I ever had them both at once :oops:) and the reason I ditched them was because the startup error message didn't seem to be any different with or without them so I figured it wasn't necessary to use them there. And I did also check that wiki page, but I struggled to find the information I wanted with my approach of clicking the links under "zscript topics" and ctrl-f'ing "translate" or "translation" and...

And suddenly this post is going to take a 180 because my mind's kind of in a tangle because I'm angry at both myself and you and in the latter case I'm pretty sure it's because I'm getting an impression from your posts that you probably never intended but is frustrating me nonetheless and so the closest thing to a solution I can think of is just trying to get it off my chest like this.

edit: well it's finally working, but I'd still like to ask if any of this is being done hilariously inefficiently just in case

Code: Select all

class TioliGragoyle : HereticImp replaces HereticImp
{
   default
   {
   bloodcolor "green";
   translation "145:168=209:224", "247:254=225:240";
   }
   states
   {
   Crash:
   IMPX I 7 A_GrImpExplode;
   IMPX J 7 A_Scream;
   IMPX K 7;
   IMPX L -1;
   Stop;
   }
   	void A_GrImpExplode()
	{
		Actor chunk;

		bNoGravity = false;

		chunk = Spawn("HereticImpChunk3", pos, ALLOW_REPLACE);
		if (chunk != null)
		{
			chunk.vel.x = random2[ImpExplode]() / 64.;
			chunk.vel.y = random2[ImpExplode]() / 64.;
			chunk.vel.z = 9;
		}

		chunk = Spawn("HereticImpChunk4", pos, ALLOW_REPLACE);
		if (chunk != null)
		{
			chunk.vel.x = random2[ImpExplode]() / 64.;
			chunk.vel.y = random2[ImpExplode]() / 64.;
			chunk.vel.z = 9;
		}
		
		if (extremecrash)
		{
			SetStateLabel ("XCrash");
		}
	}
}

class HereticImpChunk3 : HereticImpChunk1
{
	default
	{
   translation "145:168=209:224", "247:254=225:240";
	}
}

class HereticImpChunk4 : HereticImpChunk2
{
	default
	{
   translation "145:168=209:224", "247:254=225:240";
	}
}

Return to “Scripting”