gzdoom-gles/wadsrc/static/strifehelp.acs

418 lines
7.3 KiB
Text

#library "strfhelp"
#include "zcommon.acs"
#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 (i == 0) break;
if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH)
{
Door_Open (tag, VDOORSPEED);
clearlinespecial ();
}
break;
case 227:
i = GetLineRowOffset() & 31;
if (i == 0) break;
if (CheckInventory (QuestItems[i]) || gametype() == GAME_NET_DEATHMATCH)
{
Door_Close (tag, VDOORSPEED);
clearlinespecial ();
}
break;
case 228:
if (CheckInventory ("QuestItem24"))
{
int logNum = 128;
if (CheckInventory ("QuestItem28"))
{
logNum = 130;
}
str soundToPlay = StrParam(s: "svox/voc", d: logNum);
LocalAmbientSound(soundToPlay, 127);
SetSubtitleNumber(logNum, soundToPlay);
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 (i == 0) break;
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 (i == 0) break;
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 (i == 0) break;
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 (l:"TXT_NEED_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 (l:"TXT_NEED_OPASS");
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 (l:"TXT_FREED_PRISONERS");
GiveInventory ("QuestItem13", 1);
}
else
{
SetResultValue (0);
}
break;
case 199:
if (Ceiling_LowerAndCrush (tag, 8, 10))
{
print (l:"TXT_DESTROYED_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 (l:"TXT_NEED_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 (l:"TXT_COMPLETED_TRAINING");
}
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;
}
}