#include "zcommon.acs" #library "strfhelp" #define VDOORSPEED 16 #define VDOORWAIT 150 str QuestItems[32] = { "QuestItemThatDoesNotExist", "QuestItem1", "QuestItem2", "QuestItem3", "QuestItem4", "QuestItem5", "QuestItem6", "QuestItem7", "QuestItem8", "QuestItem9", "QuestItem10", "QuestItem11", "QuestItem12", "QuestItem13", "QuestItem14", "QuestItem15", "QuestItem16", "QuestItem17", "QuestItem18", "QuestItem19", "QuestItem20", "QuestItem21", "QuestItem22", "QuestItem23", "QuestItem24", "QuestItem25", "QuestItem26", "QuestItem27", "QuestItem28", "QuestItem29", "QuestItem30", "QuestItem31" }; str MusicNames[34] = { "", "d_action", "d_tavern", "d_danger", "d_fast", "d_intro", "d_darker", "d_strike", "d_slide", "d_tribal", "d_march", "d_danger", "d_mood", "d_castle", "d_darker", "d_action", "d_fight", "d_spense", "d_slide", "d_strike", "d_dark", "d_tech", "d_slide", "d_drone", "d_panthr", "d_sad", "d_instry", "d_tech", "d_action", "d_instry", "d_drone", "d_fight", "d_happy", "d_end" }; // Script 0 is used to implement several of Strife's unique line types. // It's also used to implement the sky change after the Programmer dies. script << 0 >> (int type, int tag) { int i; switch (type) { // WALK TRIGGERS case 230: i = GetLineRowOffset() & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { Door_Open (tag, VDOORSPEED); clearlinespecial (); } break; case 227: i = GetLineRowOffset() & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { Door_Close (tag, VDOORSPEED); clearlinespecial (); } break; case 228: if (CheckInventory ("QuestItem24")) { if (CheckInventory ("QuestItem28")) { LocalAmbientSound ("svox/voc130", 127); } else { LocalAmbientSound ("svox/voc128", 127); } clearlinespecial (); } break; case 196: if (GetSigilPieces() > 1) { Floor_LowerToLowest (tag, 8); clearlinespecial (); } break; case 197: if (GetSigilPieces() > 1) { Door_Close (tag, VDOORSPEED*4); clearlinespecial (); } break; case 212: if (CheckInventory ("FlameThrower")) { Floor_LowerToLowest (tag, 8); clearlinespecial (); } break; case 193: i = GetLineRowOffset() & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { Floor_LowerToLowest (tag, 8); clearlinespecial (); } break; case 11: if (tag == 0) { Exit_Normal (0); } else { Teleport_NewMap (tag, 0, FALSE); } break; case 52: tag /= 100; if (tag == 0) { Exit_Normal (0); } else { Teleport_NewMap (tag, 0, FALSE); } break; case 187: i = GetLineRowOffset() & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { ClearForceField (tag); clearlinespecial (); } break; case 188: if (CheckInventory ("QuestItem16") || gametype() == GAME_NET_DEATHMATCH) { Door_Open (tag, VDOORSPEED); clearlinespecial (); } break; case 200: if (CheckInventory ("Sigil")) { Door_Open (tag, VDOORSPEED); clearlinespecial (); } break; case 215: i = (tag % 100) & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { SendToCommunicator (tag/100, 0, 1, 0); clearlinespecial (); } break; case 204: case 203: if (tag >= 0 && tag <= 33) { SetMusic (MusicNames[tag]); } break; // WALK RETRIGGERS case 216: i = GetLineRowOffset() & 31; if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH) { Door_Raise (tag, VDOORSPEED, VDOORWAIT); } break; case 186: if (lineside() != LINE_FRONT) break; case 145: if (gametype() == GAME_NET_DEATHMATCH) { Floor_RaiseByValue (tag, 128, 64); clearlinespecial(); } else { Teleport_NewMap (tag/100, tag%100, TRUE); } break; case 175: if (GetActorFloorZ(0) + 16.0 > GetActorZ(0)) { NoiseAlert (0, 0); } break; case 198: if (!CheckInventory ("OfficersUniform")) { NoiseAlert (0, 0); } break; case 208: if (CheckInventory ("FlameThrower")) { NoiseAlert (0, 0); } break; case 206: if (CheckInventory ("OfferingChalice")) { NoiseAlert (0, 0); } break; case 184: if (Plat_UpNearestWaitDownStay (tag, 16, 35)) { // FIXME } break; case 213: if (!CheckInventory ("OfferingChalice")) { print (s:"You need the chalice !"); activatorsound ("*usefail", 127); SetResultValue (0); } else { SetResultValue (Door_Raise (0, VDOORSPEED, VDOORWAIT, tag)); } break; case 232: if (!CheckInventory ("QuestItem18") && gametype() != GAME_NET_DEATHMATCH) { print (s:"You need the Oracle Pass!"); activatorsound ("*usefail", 127); SetResultValue (0); } else { SetResultValue (Door_Raise (0, VDOORSPEED, VDOORWAIT, tag)); } break; case 180: case 181: SetResultValue (Floor_RaiseByValueTxTy (tag, 8, 512)); break; case 194: if (Door_Open (tag, VDOORSPEED)) { print (s:"You've freed the prisoners!"); GiveInventory ("QuestItem13", 1); } else { SetResultValue (0); } break; case 199: if (Ceiling_LowerAndCrush (tag, 8, 10)) { print (s:"You've destroyed the Converter!"); GiveInventory ("QuestItem25", 1); GiveInventory ("UpgradeStamina", 10); GiveInventory ("UpgradeAccuracy", 1); } else { SetResultValue (0); } break; case 209: if (CheckInventory ("OfferingChalice")) { SetResultValue (Generic_Stairs (tag, 16, 16, 0, 0)); } else { print (s:"You need the chalice!"); activatorsound ("*usefail", 127); SetResultValue (0); } break; case 219: case 220: SetResultValue (Floor_LowerToHighest (tag, 8, 128)); break; case 226: if (Floor_LowerToHighest (tag, 8, 128)) { GiveInventory ("UpgradeStamina", 10); GiveInventory ("UpgradeAccuracy", 1); print (s:"Congratulations! You have completed the training area"); } else { SetResultValue (0); } break; case 154: SetResultValue (Plat_DownWaitUpStayLip (tag, 32, 105, 0)); break; case 177: SetResultValue (Plat_DownWaitUpStayLip (tag, 32, 105, 0)); break; case 214: // This only needs to be ACS for the long delay SetResultValue (Plat_DownWaitUpStayLip (tag, 8, 1050, 0, 1)); break; case 235: if (GetSigilPieces() < 5) { SetResultValue (0); break; } // Intentional fall-through case 174: case 40: case 189: case 233: i = Door_Open (tag, VDOORSPEED/2); i = i | Floor_LowerToLowest (tag, VDOORSPEED/2); SetResultValue (i); if (type == 233 && i) { SendToCommunicator (70, 0, 0, 0); } break; case 183: i = Door_Open (tag, VDOORSPEED/2); i = i | Floor_LowerToHighest (tag, VDOORSPEED/2, 128); SetResultValue (i); break; case 229: SetResultValue (0); if (GetSigilPieces() == 5) { SetResultValue (Door_Animated (tag, 4, 105)); } break; case 234: if (CheckInventory ("QuestItem3") || gametype() == GAME_NET_DEATHMATCH) { SetResultValue (Door_Raise (tag, VDOORSPEED, VDOORWAIT)); } else { SetResultValue (Door_LockedRaise (0, 0, 0, 102)); } break; case 256: // Not a line type, but used by the Programmer death script. ChangeSky ("SKYMNT01", "SKYMNT01"); break; } }