ref: 023964e40ac8804b7efa50b530c7c46a632fe6b8
parent: 7ebb9ded133a0838d32d69d1ce2f26044e2e5c81
author: James Haley <[email protected]>
date: Wed Sep 8 03:40:16 EDT 2010
Numbered most of the sprite enums for easy reference. Added more comments, and coded P_FreePrisoners, P_DestroyConverter, and A_ClaxonBlare. Fixed A_Listen (had some order of operations problems). Subversion-branch: /branches/strife-branch Subversion-revision: 2044
--- a/src/strife/info.c
+++ b/src/strife/info.c
@@ -145,7 +145,7 @@
void A_CrystalExplode();
void A_DeathMsg();
void A_ExtraLightOff();
-void A_DeathExplode4();
+void A_CrystalRadiusAtk();
void A_DeathExplode5();
void A_DeathExplode1();
void A_DeathExplode2();
@@ -1389,7 +1389,7 @@
/*S_RING_00*/ { SPR_RING, 0, -1, { NULL }, S_NULL }, //1188
/*S_EARS_00*/ { SPR_EARS, 0, -1, { NULL }, S_NULL }, //1189
/*S_COMM_00*/ { SPR_COMM, 0, -1, { NULL }, S_NULL }, //1190
-/*S_BOOM_00*/ { SPR_BOOM, 32768, 1, { A_DeathExplode4 }, S_BOOM_01 }, //1191
+/*S_BOOM_00*/ { SPR_BOOM, 32768, 1, { A_CrystalRadiusAtk }, S_BOOM_01 }, //1191
/*S_BOOM_01*/ { SPR_BOOM, 32769, 3, { A_DeathMsg }, S_BOOM_02 }, //1192
/*S_BOOM_02*/ { SPR_BOOM, 32770, 2, { A_CrystalExplode }, S_BOOM_03 }, //1193
/*S_BOOM_03*/ { SPR_BOOM, 32771, 3, { A_SpawnSparkPuff }, S_BOOM_04 }, //1194
@@ -1396,7 +1396,7 @@
/*S_BOOM_04*/ { SPR_BOOM, 32772, 3, { NULL }, S_BOOM_05 }, //1195
/*S_BOOM_05*/ { SPR_BOOM, 32773, 3, { NULL }, S_BOOM_06 }, //1196
/*S_BOOM_06*/ { SPR_BOOM, 32774, 3, { A_SpawnSparkPuff }, S_BOOM_07 }, //1197
-/*S_BOOM_07*/ { SPR_BOOM, 32775, 1, { A_DeathExplode4 }, S_BOOM_08 }, //1198
+/*S_BOOM_07*/ { SPR_BOOM, 32775, 1, { A_CrystalRadiusAtk }, S_BOOM_08 }, //1198
/*S_BOOM_08*/ { SPR_BOOM, 32776, 3, { NULL }, S_BOOM_09 }, //1199
/*S_BOOM_09*/ { SPR_BOOM, 32777, 3, { A_SpawnSparkPuff }, S_BOOM_10 }, //1200
/*S_BOOM_10*/ { SPR_BOOM, 32778, 3, { A_SpawnSparkPuff }, S_BOOM_11 }, //1201
--- a/src/strife/info.h
+++ b/src/strife/info.h
@@ -35,269 +35,269 @@
// villsa [STRIFE]
typedef enum
{
- SPR_PLAY,
- SPR_PNCH,
- SPR_WAVE,
- SPR_RBPY,
- SPR_TRGT,
- SPR_XBOW,
- SPR_MMIS,
- SPR_RIFG,
- SPR_RIFF,
- SPR_FLMT,
- SPR_FLMF,
- SPR_BLST,
- SPR_BLSF,
- SPR_GREN,
- SPR_GREF,
- SPR_SIGH,
- SPR_SIGF,
- SPR_POW1,
- SPR_POW2,
- SPR_POW3,
- SPR_ZAP1,
- SPR_SPRY,
- SPR_BLOD,
- SPR_PUFY,
- SPR_SHT1,
- SPR_SHT2,
- SPR_GRIN,
- SPR_GRAP,
- SPR_UBAM,
- SPR_BNG2,
- SPR_BNG4,
- SPR_BNG3,
- SPR_FLBE,
- SPR_XPRK,
- SPR_OCLW,
- SPR_CCLW,
- SPR_TEND,
- SPR_MICR,
- SPR_MISS,
- SPR_AROW,
- SPR_ARWP,
- SPR_TORP,
- SPR_THIT,
- SPR_TWAV,
- SPR_MISL,
- SPR_TFOG,
- SPR_IFOG,
- SPR_SHRD,
- SPR_RGIB,
- SPR_MRYS,
- SPR_MRNO,
- SPR_MRST,
- SPR_MRLK,
- SPR_MRBD,
- SPR_MRPN,
- SPR_MRGT,
- SPR_BURN,
- SPR_DISR,
- SPR_PEAS,
- SPR_GIBS,
- SPR_AGRD,
- SPR_ARMR,
- SPR_SACR,
- SPR_TNK1,
- SPR_TNK2,
- SPR_TNK3,
- SPR_TNK4,
- SPR_TNK5,
- SPR_TNK6,
- SPR_NEAL,
- SPR_BEGR,
- SPR_HMN1,
- SPR_LEDR,
- SPR_LEAD,
- SPR_ROB1,
- SPR_PGRD,
- SPR_ROB2,
- SPR_MLDR,
- SPR_ORCL,
- SPR_PRST,
- SPR_PDED,
- SPR_ALN1,
- SPR_AL1P,
- SPR_NODE,
- SPR_MTHD,
- SPR_MNAM,
- SPR_MNAL,
- SPR_MDTH,
- SPR_NEST,
- SPR_PODD,
- SPR_ZAP6,
- SPR_ZOT3,
- SPR_ZAP7,
- SPR_ZOT1,
- SPR_ZAP5,
- SPR_ZOT2,
- SPR_SEWR,
- SPR_SPID,
- SPR_ROB3,
- SPR_RBB3,
- SPR_PRGR,
- SPR_BASE,
- SPR_FRBL,
- SPR_KLAX,
- SPR_TURT,
- SPR_BALL,
- SPR_PSTN,
- SPR_SECR,
- SPR_TARG,
- SPR_RING,
- SPR_EARS,
- SPR_COMM,
- SPR_BOOM,
- SPR_RATT,
- SPR_HOGN,
- SPR_DEAD,
- SPR_SBAN,
- SPR_BOTR,
- SPR_HATR,
- SPR_TOPR,
- SPR_COUP,
- SPR_BUBB,
- SPR_BUBF,
- SPR_BUBC,
- SPR_ASPR,
- SPR_SPDL,
- SPR_TOKN,
- SPR_OTOK,
- SPR_HELT,
- SPR_GUNT,
- SPR_FULL,
- SPR_MEAT,
- SPR_JUNK,
- SPR_FFOT,
- SPR_DIE1,
- SPR_BEAC,
- SPR_ARM1,
- SPR_ARM2,
- SPR_BARW,
- SPR_BART,
- SPR_LAMP,
- SPR_LANT,
- SPR_BARL,
- SPR_BOWL,
- SPR_BRAZ,
- SPR_TRCH,
- SPR_LTRH,
- SPR_LMPC,
- SPR_LOGS,
- SPR_TRHO,
- SPR_WATR,
- SPR_MUGG,
- SPR_FUSL,
- SPR_CRD1,
- SPR_CRD2,
- SPR_TPAS,
- SPR_KY1G,
- SPR_KY2S,
- SPR_KY3B,
- SPR_HAND,
- SPR_CRYS,
- SPR_PRIS,
- SPR_PWR1,
- SPR_PWR2,
- SPR_PWR3,
- SPR_ORAC,
- SPR_GYID,
- SPR_FUBR,
- SPR_WARE,
- SPR_RCRY,
- SPR_BCRY,
- SPR_CHAP,
- SPR_TUNL,
- SPR_BLTK,
- SPR_SECK,
- SPR_MINE,
- SPR_REBL,
- SPR_PROC,
- SPR_ANKH,
- SPR_GOID,
- SPR_STMP,
- SPR_MDKT,
- SPR_COIN,
- SPR_CRED,
- SPR_SACK,
- SPR_CHST,
- SPR_SHD1,
- SPR_MASK,
- SPR_UNIF,
- SPR_OFIC,
- SPR_PMAP,
- SPR_PMUP,
- SPR_BLIT,
- SPR_BBOX,
- SPR_MSSL,
- SPR_ROKT,
- SPR_BRY1,
- SPR_CPAC,
- SPR_PQRL,
- SPR_XQRL,
- SPR_GRN1,
- SPR_GRN2,
- SPR_BKPK,
- SPR_RELC,
- SPR_RIFL,
- SPR_FLAM,
- SPR_BFLM,
- SPR_MMSL,
- SPR_TRPD,
- SPR_GRND,
- SPR_CBOW,
- SPR_SIGL,
- SPR_LITE,
- SPR_CNDL,
- SPR_CLBR,
- SPR_LITS,
- SPR_LITB,
- SPR_LITG,
- SPR_ROK1,
- SPR_ROK2,
- SPR_ROK3,
- SPR_ROK4,
- SPR_LOGG,
- SPR_RUB1,
- SPR_RUB2,
- SPR_RUB3,
- SPR_RUB4,
- SPR_RUB5,
- SPR_RUB6,
- SPR_RUB7,
- SPR_RUB8,
- SPR_CHAN,
- SPR_STAT,
- SPR_DSTA,
- SPR_CRAB,
- SPR_CAGE,
- SPR_TREE,
- SPR_TRE1,
- SPR_BUSH,
- SPR_SHRB,
- SPR_STAK,
- SPR_BAR1,
- SPR_VASE,
- SPR_STOL,
- SPR_POT1,
- SPR_TUB1,
- SPR_ANVL,
- SPR_TLMP,
- SPR_TRAY,
- SPR_APOW,
- SPR_AFED,
- SPR_DRIP,
- SPR_CDRP,
- SPR_SPLH,
- SPR_WTFT,
- SPR_HERT,
- SPR_TELP,
- SPR_MONI,
- SPR_STEL,
- SPR_STLA,
- SPR_STLE,
- SPR_HUGE,
- SPR_STLG,
+ SPR_PLAY, // 0
+ SPR_PNCH, // 1
+ SPR_WAVE, // 2
+ SPR_RBPY, // 3
+ SPR_TRGT, // 4
+ SPR_XBOW, // 5
+ SPR_MMIS, // 6
+ SPR_RIFG, // 7
+ SPR_RIFF, // 8
+ SPR_FLMT, // 9
+ SPR_FLMF, // 10
+ SPR_BLST, // 11
+ SPR_BLSF, // 12
+ SPR_GREN, // 13
+ SPR_GREF, // 14
+ SPR_SIGH, // 15
+ SPR_SIGF, // 16
+ SPR_POW1, // 17
+ SPR_POW2, // 18
+ SPR_POW3, // 19
+ SPR_ZAP1, // 20
+ SPR_SPRY, // 21
+ SPR_BLOD, // 22
+ SPR_PUFY, // 23
+ SPR_SHT1, // 24
+ SPR_SHT2, // 25
+ SPR_GRIN, // 26
+ SPR_GRAP, // 27
+ SPR_UBAM, // 28
+ SPR_BNG2, // 29
+ SPR_BNG4, // 30
+ SPR_BNG3, // 31
+ SPR_FLBE, // 32
+ SPR_XPRK, // 33
+ SPR_OCLW, // 34
+ SPR_CCLW, // 35
+ SPR_TEND, // 36
+ SPR_MICR, // 37
+ SPR_MISS, // 38
+ SPR_AROW, // 39
+ SPR_ARWP, // 40
+ SPR_TORP, // 41
+ SPR_THIT, // 42
+ SPR_TWAV, // 43
+ SPR_MISL, // 44
+ SPR_TFOG, // 45
+ SPR_IFOG, // 46
+ SPR_SHRD, // 47
+ SPR_RGIB, // 48
+ SPR_MRYS, // 49
+ SPR_MRNO, // 50
+ SPR_MRST, // 51
+ SPR_MRLK, // 52
+ SPR_MRBD, // 53
+ SPR_MRPN, // 54
+ SPR_MRGT, // 55
+ SPR_BURN, // 56
+ SPR_DISR, // 57
+ SPR_PEAS, // 58
+ SPR_GIBS, // 59
+ SPR_AGRD, // 60
+ SPR_ARMR, // 61
+ SPR_SACR, // 62
+ SPR_TNK1, // 63
+ SPR_TNK2, // 64
+ SPR_TNK3, // 65
+ SPR_TNK4, // 66
+ SPR_TNK5, // 67
+ SPR_TNK6, // 68
+ SPR_NEAL, // 69
+ SPR_BEGR, // 70
+ SPR_HMN1, // 71
+ SPR_LEDR, // 72
+ SPR_LEAD, // 73
+ SPR_ROB1, // 74
+ SPR_PGRD, // 75
+ SPR_ROB2, // 76
+ SPR_MLDR, // 77
+ SPR_ORCL, // 78
+ SPR_PRST, // 79
+ SPR_PDED, // 80
+ SPR_ALN1, // 81
+ SPR_AL1P, // 82
+ SPR_NODE, // 83
+ SPR_MTHD, // 84
+ SPR_MNAM, // 85
+ SPR_MNAL, // 86
+ SPR_MDTH, // 87
+ SPR_NEST, // 88
+ SPR_PODD, // 89
+ SPR_ZAP6, // 90
+ SPR_ZOT3, // 91
+ SPR_ZAP7, // 92
+ SPR_ZOT1, // 93
+ SPR_ZAP5, // 94
+ SPR_ZOT2, // 95
+ SPR_SEWR, // 96
+ SPR_SPID, // 97
+ SPR_ROB3, // 98
+ SPR_RBB3, // 99
+ SPR_PRGR, // 100
+ SPR_BASE, //
+ SPR_FRBL, //
+ SPR_KLAX, //
+ SPR_TURT, //
+ SPR_BALL, // 105
+ SPR_PSTN, //
+ SPR_SECR, //
+ SPR_TARG, //
+ SPR_RING, //
+ SPR_EARS, // 110
+ SPR_COMM, //
+ SPR_BOOM, //
+ SPR_RATT, //
+ SPR_HOGN, //
+ SPR_DEAD, // 115
+ SPR_SBAN, //
+ SPR_BOTR, //
+ SPR_HATR, //
+ SPR_TOPR, //
+ SPR_COUP, // 120
+ SPR_BUBB, //
+ SPR_BUBF, //
+ SPR_BUBC, //
+ SPR_ASPR, //
+ SPR_SPDL, // 125
+ SPR_TOKN, //
+ SPR_OTOK, //
+ SPR_HELT, //
+ SPR_GUNT, //
+ SPR_FULL, // 130
+ SPR_MEAT, //
+ SPR_JUNK, //
+ SPR_FFOT, //
+ SPR_DIE1, //
+ SPR_BEAC, // 135
+ SPR_ARM1, //
+ SPR_ARM2, //
+ SPR_BARW, //
+ SPR_BART, //
+ SPR_LAMP, // 140
+ SPR_LANT, //
+ SPR_BARL, //
+ SPR_BOWL, //
+ SPR_BRAZ, //
+ SPR_TRCH, // 145
+ SPR_LTRH, //
+ SPR_LMPC, //
+ SPR_LOGS, //
+ SPR_TRHO, //
+ SPR_WATR, // 150
+ SPR_MUGG, //
+ SPR_FUSL, //
+ SPR_CRD1, //
+ SPR_CRD2, //
+ SPR_TPAS, // 155
+ SPR_KY1G, //
+ SPR_KY2S, //
+ SPR_KY3B, //
+ SPR_HAND, //
+ SPR_CRYS, // 160
+ SPR_PRIS, //
+ SPR_PWR1, //
+ SPR_PWR2, //
+ SPR_PWR3, //
+ SPR_ORAC, // 165
+ SPR_GYID, //
+ SPR_FUBR, //
+ SPR_WARE, //
+ SPR_RCRY, //
+ SPR_BCRY, // 170
+ SPR_CHAP, //
+ SPR_TUNL, //
+ SPR_BLTK, //
+ SPR_SECK, //
+ SPR_MINE, // 175
+ SPR_REBL, //
+ SPR_PROC, //
+ SPR_ANKH, //
+ SPR_GOID, //
+ SPR_STMP, // 180
+ SPR_MDKT, //
+ SPR_COIN, //
+ SPR_CRED, //
+ SPR_SACK, //
+ SPR_CHST, // 185
+ SPR_SHD1, //
+ SPR_MASK, //
+ SPR_UNIF, //
+ SPR_OFIC, //
+ SPR_PMAP, // 190
+ SPR_PMUP, //
+ SPR_BLIT, //
+ SPR_BBOX, //
+ SPR_MSSL, //
+ SPR_ROKT, // 195
+ SPR_BRY1, //
+ SPR_CPAC, //
+ SPR_PQRL, //
+ SPR_XQRL, //
+ SPR_GRN1, // 200
+ SPR_GRN2, //
+ SPR_BKPK, //
+ SPR_RELC, //
+ SPR_RIFL, //
+ SPR_FLAM, // 205
+ SPR_BFLM, //
+ SPR_MMSL, //
+ SPR_TRPD, //
+ SPR_GRND, //
+ SPR_CBOW, // 210
+ SPR_SIGL, //
+ SPR_LITE, //
+ SPR_CNDL, //
+ SPR_CLBR, //
+ SPR_LITS, // 215
+ SPR_LITB, //
+ SPR_LITG, //
+ SPR_ROK1, //
+ SPR_ROK2, //
+ SPR_ROK3, // 220
+ SPR_ROK4, //
+ SPR_LOGG, //
+ SPR_RUB1, //
+ SPR_RUB2, //
+ SPR_RUB3, // 225
+ SPR_RUB4, //
+ SPR_RUB5, //
+ SPR_RUB6, //
+ SPR_RUB7, //
+ SPR_RUB8, // 230
+ SPR_CHAN, //
+ SPR_STAT, //
+ SPR_DSTA, //
+ SPR_CRAB, //
+ SPR_CAGE, // 235
+ SPR_TREE, //
+ SPR_TRE1, //
+ SPR_BUSH, //
+ SPR_SHRB, //
+ SPR_STAK, // 240
+ SPR_BAR1, //
+ SPR_VASE, //
+ SPR_STOL, //
+ SPR_POT1, //
+ SPR_TUB1, // 245
+ SPR_ANVL, //
+ SPR_TLMP, //
+ SPR_TRAY, //
+ SPR_APOW, //
+ SPR_AFED, // 250
+ SPR_DRIP, //
+ SPR_CDRP, //
+ SPR_SPLH, //
+ SPR_WTFT, //
+ SPR_HERT, //
+ SPR_TELP, //
+ SPR_MONI, //
+ SPR_STEL, //
+ SPR_STLA, //
+ SPR_STLE, // 260
+ SPR_HUGE, // 261
+ SPR_STLG, // 262
NUMSPRITES
} spritenum_t;
--- a/src/strife/p_dialog.h
+++ b/src/strife/p_dialog.h
@@ -69,6 +69,7 @@
void P_DialogLoad(void);
void P_DialogStart(player_t *player);
void P_DialogDoChoice(int choice);
+boolean P_GiveItemToPlayer(player_t *player, int sprnum, mobjtype_t type);
#endif
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -46,6 +46,9 @@
// Data.
#include "sounds.h"
+// [STRIFE] Dialog / Inventory
+#include "p_dialog.h"
+
// Forward Declarations:
void A_RandomWalk(mobj_t *);
void A_ProgrammerAttack(mobj_t* actor);
@@ -995,9 +998,9 @@
soundtarget = actor->subsector->sector->soundtarget;
- if(soundtarget && soundtarget->flags & MF_SHOOTABLE)
+ if(soundtarget && (soundtarget->flags & MF_SHOOTABLE))
{
- if(actor->flags & MF_ALLY != soundtarget->flags & MF_ALLY)
+ if((actor->flags & MF_ALLY) != (soundtarget->flags & MF_ALLY))
{
actor->target = soundtarget;
@@ -2191,6 +2194,8 @@
// A_ProgrammerMelee
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Melee attack for the Programmer.
+// haleyjd - fixed damage formula
//
void A_ProgrammerMelee(mobj_t* actor)
{
@@ -2201,7 +2206,7 @@
if(P_CheckMeleeRange(actor))
{
S_StartSound(actor, sfx_mtalht);
- P_DamageMobj(actor->target, actor, actor, 2 * P_Random());
+ P_DamageMobj(actor->target, actor, actor, 8 * (P_Random() % 10 + 1));
}
}
@@ -2215,8 +2220,9 @@
//
// A_Scream
//
-// villsa [STRIFE] has no random death sounds, so play
-// deathsound directly
+// villsa [STRIFE]
+// * Has no random death sounds, so play deathsound directly
+// * Full-volume roars for the Entity and Inquisitor.
//
void A_Scream(mobj_t* actor)
{
@@ -2225,16 +2231,16 @@
// Check for bosses.
if(actor->type == MT_ENTITY || actor->type == MT_INQUISITOR)
- S_StartSound(NULL, actor->info->deathsound); // full volume
+ S_StartSound(NULL, actor->info->deathsound); // full volume
else
- S_StartSound(actor, actor->info->deathsound);
+ S_StartSound(actor, actor->info->deathsound);
}
//
// A_XScream
//
-// villsa [STRIFE] robots will play deathsound
-// while non-robots play the slop sfx
+// villsa [STRIFE]
+// * Robots will play deathsound while non-robots play the slop sfx
//
void A_XScream(mobj_t* actor)
{
@@ -2246,14 +2252,13 @@
sound = sfx_slop;
S_StartSound(actor, sound);
-
}
//
// A_Pain
//
-// villsa [STRIFE] play random peasant sounds
-// otherwise play painsound directly
+// villsa [STRIFE]
+// * Play random peasant sounds; otherwise play painsound directly
//
void A_Pain(mobj_t* actor)
{
@@ -2261,7 +2266,7 @@
if(sound)
{
- if(sound >= sfx_pespna && sound <= sfx_pespnd)
+ if(sound >= sfx_pespna && sound <= sfx_pespnd)
sound = sfx_pespna + (P_Random() % 4);
S_StartSound(actor, sound);
@@ -2272,9 +2277,15 @@
// A_PeasantCrash
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Called from Peasant's "crash" state (not to be confused with
+// Heretic crash states), which is invoked when the Peasant has taken
+// critical but sub-fatal damage. It will "bleed out" the rest of its
+// health by calling this function repeatedly.
//
void A_PeasantCrash(mobj_t* actor)
{
+ // Set INCOMBAT, because you probably wouldn't feel like talking either
+ // if somebody just stabbed you in the gut with a punch dagger...
actor->flags |= MF_INCOMBAT;
if(!(P_Random() % 5))
@@ -2285,16 +2296,19 @@
if(actor->health <= 0)
P_KillMobj(actor->target, actor);
-
}
//
// A_Fall
//
+// [STRIFE]
+// * Set INCOMBAT, and clear NOGRAVITY and SHADOW
+//
void A_Fall (mobj_t *actor)
{
- // villsa [STRIFE] set incombat flag
+ // villsa [STRIFE] set incombat flag to stop dialog
actor->flags |= MF_INCOMBAT;
+
// actor is on ground, it can be walked over
// villsa [STRIFE] remove nogravity/shadow flags as well
actor->flags &= ~(MF_SOLID|MF_NOGRAVITY|MF_SHADOW);
@@ -2320,6 +2334,8 @@
// A_MerchantPain
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Pain pointer for merchant characters. They close up shop for
+// a while and set off the alarm.
//
void A_MerchantPain(mobj_t* actor)
{
@@ -2343,6 +2359,9 @@
// A_ProgrammerDie
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Action routine for the Programmer's grisly death. Spawns the
+// separate mechanical base object and sends it flying off in some random
+// direction.
//
void A_ProgrammerDie(mobj_t* actor)
{
@@ -2365,6 +2384,7 @@
// A_InqTossArm
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Inquisitor death action. Spawns an arm and tosses it.
//
void A_InqTossArm(mobj_t* actor)
{
@@ -2386,7 +2406,11 @@
//
// A_SpawnSpectreA
//
-// villsa [STRIFE] new codepointer
+// villsa [STRIFE] new codepointer (unused)
+// 09/08/10: Spawns Spectre A. Or would, if anything actually used this.
+// This is evidence that the Programmer's spectre, which appears in the
+// catacombs in the final version, was originally meant to be spawned
+// after his death.
//
void A_SpawnSpectreA(mobj_t* actor)
{
@@ -2400,6 +2424,7 @@
// A_SpawnSpectreB
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Action function to spawn the Bishop's spectre.
//
void A_SpawnSpectreB(mobj_t* actor)
{
@@ -2412,7 +2437,11 @@
//
// A_SpawnSpectreC
//
-// villsa [STRIFE] new codepointer
+// villsa [STRIFE] new codepointer (unused)
+// 09/08/10: Action function to spawn the Oracle's spectre. Also
+// unused, because the Oracle's spectre is already present on the
+// map and is awakened on his death. Also left over from the
+// unreleased beta (and demo) versions.
//
void A_SpawnSpectreC(mobj_t* actor)
{
@@ -2426,6 +2455,7 @@
// A_SpawnSpectreD
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Action function to spawn Macil's Spectre.
//
void A_SpawnSpectreD(mobj_t* actor)
{
@@ -2439,6 +2469,7 @@
// A_SpawnSpectreE
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Action function to spawn the Loremaster's Spectre.
//
void A_SpawnSpectreE(mobj_t* actor)
{
@@ -2448,15 +2479,18 @@
mo->momz = P_Random() << 9;
}
+// [STRIFE] New statics - Remember the Entity's spawning position.
+static fixed_t entity_pos_x = 0;
+static fixed_t entity_pos_y = 0;
+static fixed_t entity_pos_z = 0;
+
//
// A_SpawnEntity
//
// villsa [STRIFE] new codepointer
+// 09/08/10: You will fall on your knees before the True God, the
+// One Light.
//
-static fixed_t entity_pos_x = 0;
-static fixed_t entity_pos_y = 0;
-static fixed_t entity_pos_z = 0;
-
void A_SpawnEntity(mobj_t* actor)
{
mobj_t* mo;
@@ -2471,11 +2505,11 @@
//
// P_ThrustMobj
+//
// villsa [STRIFE] new function
// Thrusts an thing in a specified force/direction
// Beware! This is inlined everywhere in the asm
//
-
void P_ThrustMobj(mobj_t *actor, angle_t angle, fixed_t force)
{
angle_t an = angle >> ANGLETOFINESHIFT;
@@ -2483,9 +2517,17 @@
actor->momy += FixedMul(finesine[an], force);
}
+//
+// A_EntityDeath
+//
+// [STRIFE]
+// haleyjd 09/08/10: The death of the Entity's spectre brings forth
+// three subentities, which are significantly less dangerous on their
+// own but threatening together.
+//
void A_EntityDeath(mobj_t* actor)
{
-
+ // STRIFE-TODO
}
//
@@ -2500,23 +2542,70 @@
void A_ZombieInSpecialSector(mobj_t* actor)
{
-
+ // STRIFE-TODO
}
void A_CrystalExplode(mobj_t* actor)
{
+ // STRIFE-TODO
+}
+// [STRIFE] New static global - buffer used for various player messages.
+static char pmsgbuffer[80];
+
+//
+// P_FreePrisoners
+//
+// haleyjd 09/08/10: [STRIFE] New function
+// * Called when the prisoners get freed, obviously. Gives a
+// message and awards quest token 13.
+//
+void P_FreePrisoners(void)
+{
+ int i;
+
+ sprintf(pmsgbuffer, "You've freed the prisoners!");
+
+ for(i = 0; i < MAXPLAYERS; i++)
+ {
+ P_GiveItemToPlayer(&players[i], SPR_TOKN, MT_TOKEN_QUEST13);
+ players[i].message = pmsgbuffer;
+ }
}
-void A_DeathMsg(mobj_t* actor)
+//
+// P_DestroyConverter
+//
+// haleyjd 09/08/10: [STRIFE] New function
+// * Called when the converter is shut down in the factory.
+// Gives several items and a message.
+//
+void P_DestroyConverter(void)
{
+ int i;
+ sprintf(pmsgbuffer, "You've destroyed the Converter!");
+
+ for(i = 0; i < MAXPLAYERS; i++)
+ {
+ P_GiveItemToPlayer(&players[i], SPR_TOKN, MT_TOKEN_QUEST25);
+ P_GiveItemToPlayer(&players[i], SPR_TOKN, MT_TOKEN_STAMINA);
+ P_GiveItemToPlayer(&players[i], SPR_TOKN, MT_TOKEN_NEW_ACCURACY);
+ players[i].message = pmsgbuffer;
+ }
}
+void A_DeathMsg(mobj_t* actor)
+{
+ // STRIFE-TODO
+}
+
//
// A_ExtraLightOff
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Called by the Power Crystal to turn off the extended
+// flash of light caused by its explosion.
//
void A_ExtraLightOff(mobj_t* actor)
{
@@ -2530,20 +2619,19 @@
}
//
-// A_DeathExplode4
+// A_CrystalRadiusAtk
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Called by the power crystal when it dies.
//
-void A_DeathExplode4(mobj_t* actor)
+void A_CrystalRadiusAtk(mobj_t* actor)
{
P_RadiusAttack(actor, actor->target, 512);
- if(!actor->target)
+ if(!(actor->target && actor->target->player))
return;
- if(!actor->target->player)
- return;
-
+ // set extralight to 5 for near full-bright
actor->target->player->extralight = 5;
}
@@ -2599,6 +2687,7 @@
// A_RaiseAlarm
//
// villsa [STRIFE] new codepointer
+// 09/08/10: Set off the infamous alarm. This is just a noise alert.
//
void A_RaiseAlarm(mobj_t* actor)
{
@@ -2681,7 +2770,7 @@
void A_AcolyteSpecial(mobj_t* actor)
{
-
+ // STRIFE-TODO
}
//
@@ -2705,15 +2794,18 @@
}
//
-// A_StalkerChase
+// A_PlayerScream
//
+// [STRIFE]
+// * Modified to eliminate gamemode check and to use Strife sound.
+//
void A_PlayerScream (mobj_t* mo)
{
// Default death sound.
int sound = sfx_pldeth;
- if(/*(gamemode == commercial) // villsa [STRIFE] don't check for gamemode
- && */(mo->health < -50))
+ // villsa [STRIFE] don't check for gamemode
+ if(mo->health < -50)
{
// IF THE PLAYER DIES
// LESS THAN -50% WITHOUT GIBBING
@@ -2725,7 +2817,7 @@
void A_TeleportBeacon(mobj_t* actor)
{
-
+ // STRIFE-TODO
}
//
@@ -2757,9 +2849,39 @@
mo->momz += (P_Random() & 0x0f) << FRACBITS;
}
+//
+// A_ClaxonBlare
+//
+// [STRIFE] New function
+// haleyjd 09/08/10: The ever-dreadful Strife alarm!
+//
void A_ClaxonBlare(mobj_t* actor)
{
+ // Timer ran down?
+ if(--actor->reactiontime < 0)
+ {
+ // reset to initial state
+ actor->target = NULL;
+ actor->reactiontime = actor->info->reactiontime;
+ // listen for more noise
+ A_Listen(actor);
+
+ // If we heard something, stay on for a while,
+ // otherwise return to spawnstate.
+ if(actor->target)
+ actor->reactiontime = 50;
+ else
+ P_SetMobjState(actor, actor->info->spawnstate);
+ }
+
+ // When almost ran down, clear the soundtarget so it doesn't
+ // retrigger the alarm.
+ // Also, play the harsh, grating claxon.
+ if(actor->reactiontime == 2)
+ actor->subsector->sector->soundtarget = NULL;
+ else if(actor->reactiontime > 50)
+ S_StartSound(actor, sfx_alarm);
}
//
@@ -2792,7 +2914,7 @@
void A_DropBurnFlesh(mobj_t* actor)
{
-
+ // STRIFE-TODO
}
//
@@ -2809,6 +2931,6 @@
void A_ClearForceField(mobj_t* actor)
{
-
+ // STRIFE-TODO
}