PRC8/nwn/nwnprc/trunk/ocfixerf/q4a_statue_cut.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

178 lines
7.7 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name q4a_statue_cut
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
This script will start a tiny cutscene that
will show the statues in front of the cave
blowing up to open the path.
*/
//:://////////////////////////////////////////////
//:: Created By: Brad Prince
//:: Created On: Jan 14, 2003
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "x2_inc_cutscenep"
void StartCutscene(object oPC, int iCut);
void main()
{
object oPC = GetLastUsedBy();
int iPulled = GetLocalInt(OBJECT_SELF, "on");
// Cutscene number.
int iCut = 50;
//SendMessageToPC(oPC, "Debug: "+Get2DAString("racialtypes", "Appearance", GetRacialType(oPC)));
// Don't let a polymorphed PC pull the switch. Give them appropriate
// feedback
if(GetAppearanceType(oPC) == APPEARANCE_TYPE_FAIRY) {
//SpeakString("[NOT IN STRING EDITOR] You are too small to operate the lever.");
SpeakStringByStrRef(85508);
}
else if(GetAppearanceType(oPC) == APPEARANCE_TYPE_DOG_WOLF) {
//SpeakString("[NOT IN STRING EDITOR] You cannot pull the lever with your paws.");
SpeakStringByStrRef(85509);
}
else if(GetAppearanceType(oPC) == APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER) {
//SpeakString("[NOT IN STRING EDITOR] You are too large to operate the lever.");
SpeakStringByStrRef(85510);
}
else if(GetAppearanceType(oPC) != StringToInt(Get2DACache("racialtypes", "Appearance", GetRacialType(oPC)))
/* GetAppearanceType(oPC) != APPEARANCE_TYPE_DWARF &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_ELF &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_HUMAN &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_HALF_ORC &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_HALFLING &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_GNOME &&
GetAppearanceType(oPC) != APPEARANCE_TYPE_HALF_ELF
*/
) {
//SpeakString("[NOT IN STRING EDITOR] You cannot operate the lever in this form");
SpeakStringByStrRef(85511);
}
else if(iPulled == 0) {
PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
SetLocalInt(OBJECT_SELF, "on", 1);
// Store the camera.
// CutStoreCameraFacing(iCut, 0.0, oPC);
// Set the cutscene number on the PC.
// SetLocalInt(oPC, "nCutsceneNumber", iCut);
// Set the PC location.
CutSetActiveCutscene(iCut, CUT_DELAY_TYPE_CONSTANT);
CutSetActiveCutsceneForObject(oPC, iCut, TRUE);
CutDisableAbort(iCut);
CutSetLocation(0.0, oPC);
DelayCommand(1.0, StartCutscene(oPC, iCut));
}
else {
// Don't let a polymorphed PC pull the switch. Give them appropriate
// feedback
if(GetAppearanceType(oPC) == APPEARANCE_TYPE_FAIRY) {
//SpeakString("[NOT IN STRING EDITOR] You are too small to operate the lever.");
SpeakStringByStrRef(85508);
}
else if(GetAppearanceType(oPC) == APPEARANCE_TYPE_DOG_WOLF) {
//SpeakString("[NOT IN STRING EDITOR] You cannot pull the lever with your paws.");
SpeakStringByStrRef(85509);
}
else if(GetAppearanceType(oPC) == APPEARANCE_TYPE_ELEMENTAL_EARTH_ELDER) {
//SpeakString("[NOT IN STRING EDITOR] You cannot operate the lever in this form");
SpeakStringByStrRef(85510);
}
else
//SpeakString("[NOT IN STRING EDITOR] Nothing happens.");
SpeakStringByStrRef(85512);
}
}
void StartCutscene(object oPC, int iCut) {
// Store locations for the copy.
//StoreCampaignObject("cutscene50", "ThePlayer", oPC);
//SetLocalLocation(oPC, "cut50", GetLocation(oPC));
location lLoc2 = GetLocation(oPC);
//object oCopy = RetrieveCampaignObject("cutscene50", "ThePlayer", lLoc2);
object oCopy = CutCreatePCCopy(oPC, lLoc2, "PC_Copy");
// Cutscene objects - statues and trigger.
// Statues.
object oStatue1 = GetObjectByTag("q4a_statue1");
object oStatue2 = GetObjectByTag("q4a_statue2");
object oStatue3 = GetObjectByTag("q4a_statue3");
object oStatue4 = GetObjectByTag("q4a_statue4");
object oStatue5 = GetObjectByTag("q4a_statue5");
CutSetActiveCutsceneForObject(oStatue1, iCut);
CutSetActiveCutsceneForObject(oStatue2, iCut);
CutSetActiveCutsceneForObject(oStatue3, iCut);
CutSetActiveCutsceneForObject(oStatue4, iCut);
CutSetActiveCutsceneForObject(oStatue5, iCut);
// Trigger.
object oStatue6 = GetObjectByTag("q4a_statue6");
CutSetActiveCutsceneForObject(oStatue6, iCut);
// Jump location.
location lLoc = GetLocation(GetWaypointByTag("q4a_cutjump_wp"));
// Setup the cutscene. Destroy the trigger now. Adjust the camera.
CutBlackScreen(0.0, oPC);
CutJumpToLocation(0.3, oPC, lLoc);
CutSetCutsceneMode(0.1, oPC, TRUE, CUT_CAMERA_HEIGHT_LOW);
CutRemoveEffects(0.1, oPC);
CutDestroyObject(0.1, oStatue6);
//CutApplyEffectToObject(0.1, DURATION_TYPE_PERMANENT, VFX_DUR_CUTSCENE_INVISIBILITY, oPC);
CutSetCamera(0.1, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 17.0, 50.0,
CAMERA_TRANSITION_TYPE_SNAP);
//CutJumpToLocation(0.2, oCopy, lLoc2);
CutStopFade(0.5, oPC);
// Set ints on the plot statues so they know what cutscene is running.
// This will allow them to bypass the check. Do this for the copy too.
/*SetLocalInt(oStatue1, "nCutsceneNumber", iCut);
SetLocalInt(oStatue2, "nCutsceneNumber", iCut);
SetLocalInt(oStatue3, "nCutsceneNumber", iCut);
SetLocalInt(oStatue4, "nCutsceneNumber", iCut);
SetLocalInt(oStatue5, "nCutsceneNumber", iCut);
SetLocalInt(oStatue6, "nCutsceneNumber", iCut);
SetLocalInt(oCopy, "nCutsceneNumber", iCut);
*/
// Destroy the statues. First turn their plots off.
CutSetPlotFlag(0.5, oStatue1, 0);
CutSetPlotFlag(0.5, oStatue2, 0);
CutSetPlotFlag(0.5, oStatue3, 0);
CutSetPlotFlag(0.5, oStatue4, 0);
CutSetPlotFlag(0.5, oStatue5, 0);
// Dramatic camera movement.
CutSetCamera(1.0, oPC, CAMERA_MODE_TOP_DOWN, 180.0, 7.0, 50.0,
CAMERA_TRANSITION_TYPE_SLOW);
// Apply effects to the statues.
CutApplyEffectToObject(1.3, DURATION_TYPE_INSTANT, VFX_FNF_SCREEN_SHAKE, oStatue4);
CutApplyEffectToObject(1.5, DURATION_TYPE_INSTANT, VFX_FNF_IMPLOSION, oStatue4);
CutApplyEffectToObject2(5.2, DURATION_TYPE_INSTANT, EffectDamage(1000), oStatue4);
CutApplyEffectToObject(3.3, DURATION_TYPE_INSTANT, VFX_FNF_SCREEN_SHAKE, oStatue3);
CutApplyEffectToObject(3.5, DURATION_TYPE_INSTANT, VFX_FNF_IMPLOSION, oStatue3);
CutApplyEffectToObject2(7.2, DURATION_TYPE_INSTANT, EffectDamage(1000), oStatue3);
CutApplyEffectToObject(5.3, DURATION_TYPE_INSTANT, VFX_FNF_SCREEN_SHAKE, oStatue2);
CutApplyEffectToObject(5.5, DURATION_TYPE_INSTANT, VFX_FNF_IMPLOSION, oStatue2);
CutApplyEffectToObject2(9.2, DURATION_TYPE_INSTANT, EffectDamage(1000), oStatue2);
CutApplyEffectToObject(7.3, DURATION_TYPE_INSTANT, VFX_FNF_SCREEN_SHAKE, oStatue1);
CutApplyEffectToObject(7.5, DURATION_TYPE_INSTANT, VFX_FNF_IMPLOSION, oStatue1);
CutApplyEffectToObject2(11.2, DURATION_TYPE_INSTANT, EffectDamage(1000), oStatue1);
CutApplyEffectToObject(9.3, DURATION_TYPE_INSTANT, VFX_FNF_SCREEN_SHAKE, oStatue5);
CutApplyEffectToObject(9.5, DURATION_TYPE_INSTANT, VFX_FNF_IMPLOSION, oStatue5);
CutApplyEffectToObject2(13.2, DURATION_TYPE_INSTANT, EffectDamage(1000), oStatue5);
// Reset the PC postion and camera settings. Get rid of the PC copy.
//CutJumpToLocation(14.2, oCopy, GetLocation(GetWaypointByTag("wp_cut20_pccopy_start")));
//CutDestroyObject(14.2, oCopy);
//CutRestoreLocation(14.4, oPC);
//CutRestoreCameraFacing(14.4, oPC);
//CutRemoveEffects(14.4, oPC);
CutFadeOutAndIn(15.5, oPC, 1.5);
CutDisableCutscene(iCut, 16.4, 14.4);
}