mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-06 13:01:14 +00:00
412 lines
7.2 KiB
Text
412 lines
7.2 KiB
Text
#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;
|
|
}
|
|
}
|