Is there a way to do damage

LOL! See where it says “Tag”? That’s the tag of the area.
It says “start” there in your picture.

So in my script, to clarify:

void Pseudoheartbeat()
{
	object oPC = GetFirstPC();
	object oArea = GetObjectByTag("areatag"); //change the tag to the tag of your area, for example "desert" or whatever.
	
	
	if(GetArea(oPC) != oArea) return;
	if(GetLocalInt(oPC,"drankwater")) return;
	
	int nDamage = GetLocalInt(oArea, "damage");	
	nDamage = nDamage + 2;
	SetLocalInt(oArea, "damage", nDamage);
	ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_DIVINE), oPC);
	
		
	if(!GetLocalInt(OBJECT_SELF,"FirstTime"))
	{
		
		SetLocalInt(OBJECT_SELF,"FirstTime",1);
		string sThirsty = "Whew…it’s so hot and I’m thirsty and tired.";
		AssignCommand(oPC, ActionSpeakString(sThirsty));	
	
	}
	
	DelayCommand(300.0, Pseudoheartbeat());
		
}


void main()
{
	object oPC = GetFirstPC();
	object oArea = GetObjectByTag("areatag"); //change the tag to the tag of your area, for example "desert" or whatever.
	
	if(GetLocalInt(oPC,"drankwater")) return;	
	if(GetArea(oPC) != oArea) return;

	Pseudoheartbeat();
}

Ah crap…I am dumb…lol

I swear…I’m so dumb. Thanks

Here is the script from that vault entry that Vivienne above recommended.

I have tried to implement it too…but I find the instructions too overwhelming and confusing. I can get the script to work in the area, but i can’t figure out the trigger stuff. And drinking water did not work.

I do like some of the script. But I find it lags in the area.

here is his OnEnter script for the area:

///////////////////////////////////////////////////////
// DESERT HEAT 2.0 - OnAreaEnter
// By Deva Bryson Winblood
// 10/10/2003
///////////////////////////////////////////////////////

////////////////////////////
// Prototypes
////////////////////////////
void fnHeatEffects(object oPC,object oArea);

//////////////////////////////////////////// MAIN
void main()
{
   object oPC=GetEnteringObject();
   object oIntensity=GetNearestObjectByTag("DH2_INTENSITY",oPC);
   object oArea=GetArea(oPC);
   int nIntensity=30;
   if (oIntensity!=OBJECT_INVALID)
    nIntensity=StringToInt(GetName(oIntensity));
   SetLocalInt(oPC,"DH2_Intensity",nIntensity);
   if (nIntensity<5) nIntensity=30;
   if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nIntensity=nIntensity*2;
   if (GetIsPC(oPC)==TRUE)
   { // is PC
     DelayCommand(IntToFloat(nIntensity),fnHeatEffects(oPC,oArea));
   } // is PC
}
//////////////////////////////////////////// MAIN

///////////////////////////
// Functions
///////////////////////////
void fnHeatEffects(object oPC,object oArea)
{
  int nHeat;
  effect eCon=EffectAbilityDecrease(ABILITY_CONSTITUTION,1);
  effect eMov=EffectMovementSpeedDecrease(20);
  effect eStr=EffectAbilityDecrease(ABILITY_STRENGTH,1);
  effect eLight=EffectVisualEffect(VFX_IMP_DAZED_S);
  effect eFull=EffectVisualEffect(VFX_IMP_SLOW);
  effect eDmg=EffectDamage(1);
  if (GetArea(oPC)==oArea)
  { // still in same area
    //SendMessageToPC(oPC,"fnHeatEffects("+GetName(oPC)+","+GetName(oArea)+") current area:"+GetName(GetArea(oPC)));
    nHeat=GetLocalInt(oPC,"DH2_HeatLevel");
    nHeat=nHeat+1;
    SetLocalInt(oPC,"DH2_HeatLevel",nHeat);
    if (nHeat==2)
      SendMessageToPC(oPC,"You are starting to feel thirsty.");
    else if (nHeat==3)
      SendMessageToPC(oPC,"You need a drink of water soon.");
    else if (nHeat==4)
    {
      SendMessageToPC(oPC,"You are extremely thirsty.");
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eLight,oPC,5.0);
    }
    else if (nHeat>4)
    { // suffer heat problems
      SendMessageToPC(oPC,"You are suffering from thirst");
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eCon,oPC,140.0);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eMov,oPC,130.0);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eStr,oPC,120.0);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eFull,oPC,5.0);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eDmg,oPC,1.0);
    } // suffer heat problems
    nHeat=GetLocalInt(oPC,"DH2_Intensity");
    if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nHeat=nHeat*2;
    DelayCommand(IntToFloat(nHeat),fnHeatEffects(oPC,oArea));
  } // still in same area
} // fnHeatEffects()

testing it now

Maybe, when testing, try and decrease the

DelayCommand(300.0, Pseudoheartbeat());

to

DelayCommand(2.0, Pseudoheartbeat());

to see that things are really happening, without having to wait 5 min.

Ok…tested before your last comments above (delay commands)

It still does not have the string of words come up, but it does not lag thankfully as does the script from the vault I got above I posted.

Still wondering how the “drankwater” works. Do I have to create a potion with the resref called that?

Maybe look t the script above I posted from the vault to see how his string of words work as his show up and yours don’t for some weird reason.

You create a potion or something where you have a script attached that sets the local int called “drankwater”. After that the script for the area should stop so you no longer take damage.

Here’s an edited version of my script then with SendMessageToPC instead:

void Pseudoheartbeat()
{
	object oPC = GetFirstPC();
	object oArea = GetObjectByTag("areatag"); //change the tag to the tag of your area, for example "desert" or whatever.
	
	
	if(GetArea(oPC) != oArea) return;
	if(GetLocalInt(oPC,"drankwater")) return;
	
	int nDamage = GetLocalInt(oArea, "damage");	
	nDamage = nDamage + 2;
	SetLocalInt(oArea, "damage", nDamage);
	ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_DIVINE), oPC);
	
		
	if(!GetLocalInt(OBJECT_SELF,"FirstTime"))
	{
		
		SetLocalInt(OBJECT_SELF,"FirstTime",1);
		//string sThirsty = "Whew…it’s so hot and I’m thirsty and tired.";
		//AssignCommand(oPC, ActionSpeakString(sThirsty));	
		SendMessageToPC(oPC,"Whew…it’s so hot and I’m thirsty and tired.");
	
	}
	
	DelayCommand(300.0, Pseudoheartbeat());
		
}


void main()
{
	object oPC = GetFirstPC();
	object oArea = GetObjectByTag("areatag"); //change the tag to the tag of your area, for example "desert" or whatever.
	
	if(GetLocalInt(oPC,"drankwater")) return;	
	if(GetArea(oPC) != oArea) return;

	Pseudoheartbeat();
}

Just so you know when I quoted your script above I did change the tag to the proper tag of my area…lol

Good!

I changed my script with the SendMessageToPC above.

1 Like

Yup…I put the up dated one in. Testing it now (with time change).

Also, is it possible to do what he does with changing the wording to what his comments say after the PC gets thirstier?..as time progesses. And add back in the Constitution reduction and strength and slow the PC down as he does in his?

EDIT: To confirm…this goes on the OnHeartBeat event not the OnEnter…correct?

Yes. On the OnHeartBeat.

Well, you’re asking a lot of me who is but a basic scripter. Can’t do advanced stuff. I have to go sleep soon. Way past midnight where I live.

I kind of understand most of the other script you posted from the vault, but it’s more advanced than my own scripts tend to be so…

All of what you’re asking is possible, just takes a lot of time for me to figure out.

1 Like

Thanks bud…have a good sleep.

Perhaps the community can help with this. We can all make a good one here for everyone.

Anyone else have input?

The problem I find at the moment is that I can’t seem to figure out how to remove the decreasing of the constitution. It should work the way I did it, but it doesn’t for some reason. I have another version of the “taking-away-the-decreased-constitution” but that involves removing ALL effects from the PC, and you probably won’t want that. However, I’ll post that particular script here. This script works and removes the decreased constitution but takes away all other effect too unfortunately.

void RemoveAllEffects(object oCreature)
{
	effect eLoop = GetFirstEffect(oCreature);
	while (GetIsEffectValid(eLoop))
	{
		RemoveEffect(oCreature, eLoop);
		eLoop = GetFirstEffect(oCreature); // go back to the 'first' effect each time.
	}
}

void main()
{
		object oPC = GetFirstPC();
		
		SetLocalInt(oPC,"drankwater",1);
		/*
		int nRealConstitution = GetLocalInt(oPC,"pcconstitution");
		int nCurrentContitution = GetAbilityScore(oPC,ABILITY_CONSTITUTION);
		
		int nIncrease = nRealConstitution - nCurrentContitution;
		
		effect eAbility = EffectAbilityIncrease(ABILITY_CONSTITUTION,nIncrease);
		
		ApplyEffectToObject(DURATION_TYPE_PERMANENT,eAbility,oPC);
		*/
		RemoveAllEffects(oPC);
	
}

I think I’ll go to bed now. I’ll be back and try something more perhaps in about 9 hours or something like that…

Ok tested it. The string of words appear once upon the first time he is damaged.

I am going away for about 4 hours and going to try a hybird of your script and others (the one above and my winter script).

I normally pull them apart and reinsert stuff and delete stuff until the script works…lol…hopefully

Looking for the following for the script:

  • On enter the area 2 minutes in you say: “Whew it’s hot”

  • then after another 2 minutes get 1 point of damage (damage type I will think about) then say: “I’m getting sunburned”

  • then 2 minutes later take 2 points of damage and say: “Dam it’s hot!”

  • then another 2 minutes later take 4 points of damage and 1 point of Constitution and say: “Whew, I’m getting thirsty”.

  • then another 2 minutes later take 8 points of damage and another 1 point of Constitution (cumulative) and say: “I’m really thirsty and feeling tired”

  • then another 2 minutes later take 16 points of damage and another 1 point of Constitution (cumulative) and 1 point of Strength and slow PC (I don’t know the percentage of speed reduce, but maybe 10% slower…if possible). Say: “I’m so thirsty…I’m dying here…I need water soon”

  • then another 2 minutes later take 32 points of damage and another 1 point of Constitution and Strength (both cumulative) and even slow down more and say: “Need…waaater…need help…gods it’s …hot”

  • then another 2 minutes later 64 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 64 HP and 5 Constitution points and 2 Strength points and is slowed. He says: “I’m dying…need waaater…gods please…waater”

  • then another 2 minutes later 128 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 192 HP and 6 Constitution points and 3 Strength points and is slowed. he says: “Can’t go …much longer”. Assuming the PC hasn’t died at this point.

  • then another 2 minutes later 256 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 384 HP and 7 Constitution points and 4 Strength points and is slowed. he says: “uuug…ohh…groan”. Assuming the PC hasn’t died at this point.

-then the last 2 minutes (22 min has elapsed real time). The PC would have taken in total without healing 896 HP. and 8 Constitution points and 5 Strength points and becomes immobile (if possible). he says: “I’m … dead”. Assuming the PC hasn’t died by this point. Keep in mind…healing can occur or drinking water to reset his Strength and Constitution and Hit points restored with each drink should be equivalent to Cure Serious Wounds.

  • If it is possible to live beyond that…keep doubling HP loss and Constitution and Strength Loss until dead or healed.

Extras would be to reduce damage if PC is not wearing clothes (-5 points of damage). You can see the winter script above I posted reduces damage when wearing clothing. The more clothing the less damage. If it is possible to script this. Also, another extra is to give the PC the dazed effect at minute 6 and thereafter.

1.69: execute script a known object to apply. check effect creator to remove/check/etc.
ee: TagEffect
nwn2: think you can set the effect spellid? if not there’s other ways to do, but think that most straightforward.

Ok so I mixed your stuff with the script from the vault that Vivienne suggested above:

https://neverwintervault.org/project/nwn1/script/desert-heat-242

This combined scripting does work. When you exit the area the effect (the continuing damage stops) but, you still have the constitution and strength reduction and slow effects until you use a Greater Restoration (which removes the Const and Str decreases and then you have to rest to remove the slow effect).

I like your point damaging system much much better than his. Also, his “SendMessageToPC” I am leaving in as it shows in the bottom left hand box more detail of what is going on. I included your "string sThirsty = “Whew…it’s so hot and I’m thirsty and tired.”; because I like to see the PC speak about his being thirsty and tired.

I put those strings in two places (see script) I wish I could put different strings of sayings alongside each yellow description that shows up in the lower box. Like I mentioned in my list above. Don’t know if you or some other scripter can do that.

I did manage to add the (vault script) onactivateitem module event script (his part) to the bottom of my current onactivateitem script. I need to test his water system AND make sure I didn’t break my items (make sure they still work) when activating them since I am not so good at scripting.

I will do further testing.

I noticed with the mixed script below in testing that the Constitution never dips below 9 (it somehow manages to get down to 9 then bounces back up to 10. While strength goes down as far as 9. I would like to keep making these go down.

I love your damage as the damages keep increasing…even after drinking potions of Cure Critical wounds. Drinking “Heals” cures everything but the slow effect. yet even after a heal…the damage numbers continue to increase (they never stopped). I like this. I think the only way it should stop is by drinking the water which I need to figure out how to use his scripts to do that.

So when I get a chance tomorrow…I will test how the drinking water works.

The improved script below for the OnEnter (area):

///////////////////////////////////////////////////////
// DESERT HEAT 2.0 - OnAreaEnter
// By Deva Bryson Winblood
// 10/10/2003
///////////////////////////////////////////////////////

////////////////////////////
// Prototypes
////////////////////////////
void fnHeatEffects(object oPC,object oArea);

//////////////////////////////////////////// MAIN
void main()
{
   object oPC=GetEnteringObject();
   object oIntensity=GetNearestObjectByTag("DH2_INTENSITY",oPC);
   object oArea=GetArea(oPC);
   int nIntensity=30;
   if (oIntensity!=OBJECT_INVALID)
    nIntensity=StringToInt(GetName(oIntensity));
   SetLocalInt(oPC,"DH2_Intensity",nIntensity);
   if (nIntensity<5) nIntensity=30;
   if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nIntensity=nIntensity*2;
   if (GetIsPC(oPC)==TRUE)
   { // is PC
     DelayCommand(IntToFloat(nIntensity),fnHeatEffects(oPC,oArea));
   } // is PC
}
//////////////////////////////////////////// MAIN

///////////////////////////
// Functions
///////////////////////////
void fnHeatEffects(object oPC,object oArea)
{
  int nHeat;
  effect eCon=EffectAbilityDecrease(ABILITY_CONSTITUTION,1);
  effect eMov=EffectMovementSpeedDecrease(20);
  effect eStr=EffectAbilityDecrease(ABILITY_STRENGTH,1);
  effect eLight=EffectVisualEffect(VFX_IMP_DAZED_S);
  effect eFull=EffectVisualEffect(VFX_IMP_SLOW);
  int nDamage = GetLocalInt(oArea, "damage");
    nDamage = nDamage + 2;
    SetLocalInt(oArea, "damage", nDamage);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage, DAMAGE_TYPE_DIVINE), oPC);
  if (GetArea(oPC)==oArea)
  { // still in same area
    //SendMessageToPC(oPC,"fnHeatEffects("+GetName(oPC)+","+GetName(oArea)+") current area:"+GetName(GetArea(oPC)));
    nHeat=GetLocalInt(oPC,"DH2_HeatLevel");
    nHeat=nHeat+1;
    SetLocalInt(oPC,"DH2_HeatLevel",nHeat);
    string sThirsty = "Whew…it’s so hot and I’m thirsty and tired.";
            AssignCommand(oPC, ActionSpeakString(sThirsty));
    if (nHeat==2)
      SendMessageToPC(oPC,"You are starting to feel thirsty.");
    else if (nHeat==3)
      SendMessageToPC(oPC,"You need a drink of water soon.");
    else if (nHeat==4)
    {
      SendMessageToPC(oPC,"You are extremely thirsty.");
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eLight,oPC,5.0);
    }
    else if (nHeat>4)
    { // suffer heat problems
      SendMessageToPC(oPC,"You are suffering from thirst");
      string sThirsty = "Whew…it’s so hot and I’m thirsty and tired.";
            AssignCommand(oPC, ActionSpeakString(sThirsty));
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eCon,oPC,140.0);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eMov,oPC,130.0);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eStr,oPC,120.0);
      ApplyEffectToObject(DURATION_TYPE_INSTANT,eFull,oPC,5.0);

    } // suffer heat problems
    nHeat=GetLocalInt(oPC,"DH2_Intensity");
    if (GetIsNight()==TRUE&&GetWaypointByTag("DH2_DAYNIGHT")!=OBJECT_INVALID) nHeat=nHeat*2;
    DelayCommand(IntToFloat(nHeat),fnHeatEffects(oPC,oArea));
  } // still in same area
} // fnHeatEffects()

Try this script then:

/*
    On enter the area 2 minutes in you say: “Whew it’s hot”
    then after another 2 minutes get 1 point of damage (damage type fire) then say: “I’m getting sunburned”
    then 2 minutes later take 2 points of damage and say: “Damn it’s hot!”
    then another 2 minutes later take 4 points of damage and 1 point of Constitution and say: “Whew, I’m getting thirsty”.
    then another 2 minutes later take 8 points of damage and another 1 point of Constitution (cumulative) and say: “I’m really thirsty and feeling tired”
    then another 2 minutes later take 16 points of damage and another 1 point of Constitution (cumulative) and 1 point of Strength and slow PC (I don’t know the percentage of speed reduce, but maybe 10% slower…if possible). Say: “I’m so thirsty…I’m dying here…I need water soon”
    then another 2 minutes later take 32 points of damage and another 1 point of Constitution and Strength (both cumulative) and even slow down more and say: “Need…waaater…need help…gods it’s …hot”
    then another 2 minutes later 64 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 127 HP and 5 Constitution points and 2 Strength points and is slowed. He says: “I’m dying…need waaater…gods please…waater”
    then another 2 minutes later 128 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 255 HP and 6 Constitution points and 3 Strength points and is slowed. he says: “Can’t go …much longer”. Assuming the PC hasn’t died at this point.
    then another 2 minutes later 256 points of damage and another 1 point of Constitution and Strength (both cumulative). At this point PC has lost (if not healed) 411 HP and 7 Constitution points and 4 Strength points and is slowed. he says: “uuug…ohh…groan”. Assuming the PC hasn’t died at this point.
*/

void ApplyHeatEffects()
{
    object oPC = GetFirstPC();
    object oArea = GetObjectByTag("areatag"); //change the tag to the tag of your area, for example "desert" or whatever.
    if (GetArea(oPC) != oArea) return; // PC exited the desert, no heat effect any more
    if (GetLocalInt(oPC,"drankwater")) return;// PPC drank water, no heat effect any more
    int nDamageLevel = GetLocalInt(oArea, "damage");	//the more we stay, the heavier the damage will be
    int nDamageAmount = 2^(nDamageLevel - 1); // nDamage amount will be 0, 1, 2, 4, 8 etc...
    nDamageLevel += 1;
    SetLocalInt(oArea, "damage", nDamageLevel);
    effect eHeat = EffectDamage(nDamageAmount, DAMAGE_TYPE_FIRE, DAMAGE_POWER_NORMAL);
    effect eConDec = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1);
    effect eStrDec = EffectAbilityDecrease(ABILITY_STRENGTH, 1);
    effect eSlowPC = EffectSlow();
    switch (nDamageLevel)
    {
        case 1:
            SendMessageToPC(oPC, "Phew it's hot");
            break;
        case 2:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            SendMessageToPC(oPC, "I'm getting sunburnt");
            break;
        }
        case 3:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            SendMessageToPC(oPC, "Damn it's hot");
            break;
        }
        case 4:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            SendMessageToPC(oPC, "Whew, I'm getting thirsty");
            break;
        }
        case 5:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            SendMessageToPC(oPC, "I’m really thirsty and feeling tired");
            break;
        }
        case 6:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStrDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eSlowPC, oPC);
            SendMessageToPC(oPC, "I’m so thirsty…I’m dying here…I need water soon");
            break;
        }
        case 7:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStrDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eSlowPC, oPC);
            SendMessageToPC(oPC, "Need…waaater…need help…gods it’s …hot");
            break;
        }
        case 8:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStrDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eSlowPC, oPC);
            SendMessageToPC(oPC, "I’m dying…need waaater…gods please…waater");
            break;
        }
        case 9:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStrDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eSlowPC, oPC);
            SendMessageToPC(oPC, "Can’t go …much longer");
            break;
        }
        default:
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeat, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eConDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eStrDec, oPC);
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eSlowPC, oPC);
            SendMessageToPC(oPC, "uug…ohh…groan");
            break;
        }
    }
    DelayCommand(120.0, ApplyHeatEffects());
}


void main()
{
    ApplyHeatEffects();
}
2 Likes

@4760 Wow! Now that’s a nice script alright! As I may have said before, you’re about 10 times better at scripting than I am. And you also know modelling, and xml scripting, and animation, and beta testing etc. Just as the character in module ASW4 based on you, you are very knowledgable! @Imtherealthing - For your information, 4760 is my go to guy for mostly everything regarding my own modules. He’s also an NWN2 guy, even though I think he has tampered with NWN1 in the past.
I don’t even know what this means in your script:

I think I see what you mean. Now I remember @kevL_s teaching me about that. I have to dig up one of his scripts, see how it was done, and then I could probably make the constitution effect go away…hopefully.

It’s the C/C++/nwscript way to calculate powers of 2.
2^2 = 2²