gzdoom-gles/strifehelp.acs
Christoph Oelckers 42ac64d964 - Fixed: Strife's quest based line actions also work in Deathmatch.
- Fixed: Gravity application was not correct. For actors with no vertical 
  momentum the initial pull is supposed to be twice as strong as when 
  vertical movement already takes place.
- added invquery CCMD like in Strife. Also removed all underscores from the
  tag strings so that they can be printed properly.
- Fixed: Skill baby was missing 'autousehealth' for all games.
- Added a new CVAR: sv_disableautohealth
- Autouse of health items is no longer hardwired to the default item classes. 
  There's a new property HealthPickup.Autouse. 0 means no autouse, 1 a small 
  Raven health item, 2 a large Raven health item and 3 a Strife item.



SVN r1452 (trunk)
2009-02-28 21:38:20 +00:00

401 lines
7.5 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 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;
}
}