I was about to do a scene where a cave is starting to collapse. Are there any like falling rocks animations somewhere or something similar that one could use? I have some vague memory that there was something like this for NWN1, but maybe there doesn’t exist any such thing for NWN2?
Wasn’t there a rock fall in the OC, I know there was some piles of rocks you had to blow up so they came from somewhere… If so steal it !
Ok, but where in the OC would I find it? Don’t know which module or area to look for…
EDIT: @travus or @kevL_s helped me before with making a screen shaking effect. Looking at that script, a heartbeat script, I tried some other VFX, but none did what I wanted. When trying VFX_FNF_METEOR_SWARM the screen shook like the other effect I used before: VFX_FNF_SCREEN_SHAKE but no rocks or meteors are visible. Maybe it’s because I’m using an indoor area? Maybe there’s a spell effect one could use, but in that case, which one?
player starts a rockslide in 3000_Neverwinter_A3 iirc.
but it’s just a “use your imagination” thing, iirc.
dialog: 3031_text_boulders
There are a few large boulders here, resting near the edge of the cliff. If moved, they could probably crush some of the fire giants below.
script: 3031a_text_boulders
to simulate roof collapse, I’d try screenshake, lots of dust/smoke, and the tricky part:
place a bunch of waypoints in the air between the floor and ceiling … script various sizes of boulders to appear and get destroyed very quickly at each waypoint … does not have to be sequential, just show the flavor of it … just a bunch of random boulders appearing and disappearing in masses of dust and smoke, w/ screenshake
Ok, that sounds a bit advanced but I guess I could give it a try.
EDIT: @kevL_s One thing I’m thinking is to place this script on heartbeat of the area, but there’s a whole lot of stuff going to happen before this kicks in in the area. A heartbeat script can be pretty heavy for the game, I think. But if I have a global int to go on the area, I could set that to trigger the heartbeat script. The heartbeat script still checks every 6 seconds if it’s going to fire. Maybe that won’t bog the game down too much that it checks and the “returns” every 6 seconds. Or maybe not. Still, I’ve had a few CTD in a few places in my module, so I’m worried this will mess with things since I have quite a big battle in there, and if the area is supposed to check the heartbeat…well, I hope you know what I’m getting at…
hb scripts with an early return shouldn’t be any problem. eg →
// 'hb_area'
void main()
{
if (GetLocalInt(OBJECT_SELF, "ready_for_cavein"))
{
SetLocalInt(OBJECT_SELF, "ready_for_cavein", FALSE);
// do cavein
}
}
and ofc set ready_for_cavein
when you want it to happen.
But it’d be a lot better to just trigger the cavein from wherever ready_for_cavein
is set TRUE
…
[edit] in my idea above, you could forget about the waypoints and ‘falling’ boulders and just create a bunch of boulders on the floor (hidden by the dust until it clears)
Ok, let’s see if I understand you correctly… I was thinking of setting the ready_for_cavein to TRUE through a dialogue or something similar. What do you you mean with “But it’d be a lot better…” Where else would I have otherwise set the ready_for_cavein to TRUE?
You still think I should use the heartbeat script on the area?
Not so sure about this idea. The cave is pretty much without dust before this happens so…
well, lets see if i get what yer doing …
I assume you want the PC to be near the cavein when it happens, so the player can see it (and cope with it or whatever in realtime).
But i don’t know how far away the Speaker is from where the cavein happens. If he/she is close to the cavein, just invoke it in the dialog. If he/she is further away, you could have that dialog set ready_for_cavein
… and use a trigger to invoke it.
- why don’t you use a trigger-object (painted on the floor) to start the cavein, as the PC walks through the area?
i think there’d be plenty of dust when the roof of a cave collapses …
Yeah, maybe that’s easier. It is a pretty large cave, and my thought is that the cave starts to collapse very, very slowly, but the PC and the party needs to get out of there and not linger around. With the trigger object I’m just wondering how to make the boulders continue to appear and disappear. Don’t you need a heartbeat script for that?
Perhaps, but if the dust just appears on the ground it won’t look like it’s coming from the roof…
ah i see … creating a sense of impending doom/dread … cool
id place ground-triggers throughout the large cave. Each can trigger a smallish, and perhaps increasingly larger,* roof collapse near to (or onto) its trigger. PC party may take damage. Flag each trigger done after it runs (or not).
If the collapses should not start until after (eg.) PC talks to someone, condition your triggers’ OnEnter scripts with ready_for_cavein
(or whatever).
* (extra variable required)
I honestly see no need for a HB script here.
let them use their imaginations. Rocks hit the ground, they throw up dust. Or don’t use dust … graphics is secondary to mechanics in my opinion
Precisely. My thought was that once the pull a lever, things start to happen. I still think I would like it to shake all the time so maybe I should use the area heartbeat script for that and the triggers for falling rocks, I don’t know. It would be a whole lot of triggers throughout the area…Hmmm, still not sure how to best approach this…
thinking about it, you could use a HB script that sort of randomly triggers collapses. But I think the result would be much the same as arbitrary triggers placed here and there …
I’d do screenshake only when a collapse happens, and increase the collapse+screenshakes in frequency … that’d be HB-scripted … but not necessarily : the triggers could be conditioned on (1) lever pulled and (2) Random(int)
where int
increases over time (whether by heartbeat or when a collapse happens).
I still think that using the HB script for the shaking would be good, but I’m not sure.
then choose one and go with it :)
Corgano on Discord just told me that there is a falling rocks animation. However it is an Appearance effect applied to creatures, so I will have to think on this for a bit. He suggested spawning an invisible creature with this effect every now and then.
EDIT: @kevL_s Do you know how one can make an invisible creature? Do you apply an effect like EFFECT_TYPE_INVISIBILITY to a creature?
tldr;
In TWA 2 (The Wizard's Apprentice Chapter II: The Talisman and the Eye | The Neverwinter Vault) if I remember well there’s a falling stalactites scenes.
Oh? I played that one, but I didn’t remember that. That series was very good!
Still, I think I’d like to try using the fx_rockslide_after
that according to Corgano works really well, but I still need the creature to be invisible that I spawn in with this effect. I wonder if you can have both an invisible effect and that one simultanously on a creature.
EDIT: This is my first attempt at scripting this. Not tested yet…
void PrepForDestruction(object oTarget)
{
SetPlotFlag(oTarget,FALSE);
SetImmortal(oTarget,FALSE);
AssignCommand(oTarget,SetIsDestroyable(TRUE,FALSE,FALSE));
}
void CreateEffects(object oPC)
{
effect eVis = EffectVisualEffect( VFX_DUR_INVISIBILITY );
effect eInvis = EffectInvisibility(INVISIBILITY_TYPE_IMPROVED);
object oCreature = GetObjectByTag("invisibleman");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectNWN2SpecialEffectFile("fx_rockslide_after"), oCreature);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eInvis, oCreature);
effect eShake = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eShake, GetLocation(oPC));
PrepForDestruction(oCreature);
DestroyObject(oCreature,0.5);
}
void CreateCreature(object oPC)
{
CreateObject(OBJECT_TYPE_CREATURE, "invisibleman", GetLocation(oPC), FALSE);
}
void main()
{
object oPC = GetFirstPC();
object oArea = GetObjectByTag("sanctumhalls");
//if(!GetGlobalInt("cavecollapse")) return;
if(GetArea(oPC) != oArea) return;
DelayCommand(4.0,CreateCreature(oPC));
DelayCommand(4.2,CreateEffects(oPC));
}
EDIT: I tried this now on the area’s HB script. For some reason the creature is not invisible and it’s not destroyed after spawning.
EDIT2: Well, when using the eVis instead of eInvis, the creature is kind of invisible. It’s like when you use invisibility as a potion or spell ingame. I would have wished that he really was invisible.
EDIT3: The script works well now apart from that I can still see the creature. He’s only half invisible.
to create an invisible human
there’s Appearance type InvisibleMan … not sure how that works …
but in the OC they used (more or less) Appearance Human with
Appearance (facial hair) False
Appearance (hair) 0
Appearance (head) 99
with Armor Set
Main type: Default (Cloth) 98
Helm type: off
Boots type: Default (Cloth) 98
Gloves type: Default (Cloth) 98
Belt type: off
Cloak type: off
tbh, the OC actually equipped special items to hide the hands and feet: Invisible Gloves, Invisible Boots
ref: 3000_Neverwinter_A3, {3052}westharbor
Area Contents: 3052|Rabbit
(its not a rabbit)
Yes!! That worked. So simple. I just chose Appearance Type InvisibleMan and he became invisible.
EDIT: Alright. Now things begin to look good. But sadly the effect fx_rockslide_after is only smoke/dust as far as I can see. It still looks quite good now, but maybe I should spawn in rocks that break or something too…