ref: 2f326ebddc4f4de18909b557fa69fe74ac849e82
parent: e9e7b85ab932b70caea5c1f7a40561f36c953d32
author: James Haley <haleyjd@hotmail.com>
date: Sun Sep 26 02:26:50 EDT 2010
Identified quest #7 (killed Blue Acolytes), fixed a bug in P_SpawnMobj (Strife doesn't withhold mobj->reactioncount in skill 5), added static line specials 142, 143, and 149 for vertical texture scrolling, and made note of a bug with Irale's door line type. Subversion-branch: /branches/strife-branch Subversion-revision: 2142
--- a/src/strife/doomdef.h
+++ b/src/strife/doomdef.h
@@ -247,7 +247,7 @@
QF_QUEST4 = (1 << tk_quest4),
QF_QUEST5 = (1 << tk_quest5),
QF_QUEST6 = (1 << tk_quest6), // Destroyed the Power Coupling
- QF_QUEST7 = (1 << tk_quest7),
+ QF_QUEST7 = (1 << tk_quest7), // Killed Blue Acolytes ("Scanning Team")
QF_QUEST8 = (1 << tk_quest8),
QF_QUEST9 = (1 << tk_quest9),
QF_QUEST10 = (1 << tk_quest10),
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -2803,9 +2803,7 @@
//
void A_MissileTick(mobj_t* actor)
{
- int r = actor->reactiontime--;
-
- if(r - 1 <= 0)
+ if(--actor->reactiontime <= 0)
{
P_ExplodeMissile(actor);
actor->flags &= ~MF_MISSILE;
@@ -3339,6 +3337,7 @@
for(i = 0; i < sec->linecount; i++)
{
secline = sec->lines[i];
+ // BUG: will crash if 1S line has TWOSIDED flag!
if(!(secline->flags & ML_TWOSIDED))
continue;
if(secline->special != 148)
--- a/src/strife/p_inter.c
+++ b/src/strife/p_inter.c
@@ -173,6 +173,7 @@
gaveweapon = true;
player->weaponowned[weapon] = true;
+ // Alternate "sister" weapons that you also get as a bonus:
switch(weapon)
{
case wp_elecbow:
@@ -1152,7 +1153,7 @@
// villsa [STRIFE] handle fieldguard damage
if(target->type == MT_FIELDGUARD)
{
- // degin ores are only allowed to damage the fieldguard
+ // degnin ores are only allowed to damage the fieldguard
if(!inflictor || inflictor->type != MT_DEGNINORE)
return;
@@ -1215,12 +1216,12 @@
// villsa [STRIFE] flame attacks don't damage player if wearing envirosuit??
if(player->powers[pw_ironfeet] && inflictor)
{
- if(inflictor->type == MT_SFIREBALL
- || inflictor->type == MT_C_FLAME
- || inflictor->type == MT_PFLAME)
- {
- damage = 0;
- }
+ if(inflictor->type == MT_SFIREBALL ||
+ inflictor->type == MT_C_FLAME ||
+ inflictor->type == MT_PFLAME)
+ {
+ damage = 0;
+ }
}
if(player->armortype)
--- a/src/strife/p_mobj.c
+++ b/src/strife/p_mobj.c
@@ -597,11 +597,11 @@
mobj_t* mobj;
state_t* st;
mobjinfo_t* info;
-
+
mobj = Z_Malloc (sizeof(*mobj), PU_LEVEL, NULL);
memset (mobj, 0, sizeof (*mobj));
info = &mobjinfo[type];
-
+
mobj->type = type;
mobj->info = info;
mobj->x = x;
@@ -611,8 +611,10 @@
mobj->flags = info->flags;
mobj->health = info->spawnhealth;
- if (gameskill != sk_nightmare)
- mobj->reactiontime = info->reactiontime;
+ // haleyjd 09/25/10: [STRIFE] Doesn't do this; messes up flamethrower
+ // and a lot of other stuff.
+ //if (gameskill != sk_nightmare)
+ mobj->reactiontime = info->reactiontime;
mobj->lastlook = P_Random () % MAXPLAYERS;
// do not set the state with P_SetMobjState,
@@ -626,13 +628,13 @@
// set subsector and/or block links
P_SetThingPosition (mobj);
-
+
mobj->floorz = mobj->subsector->sector->floorheight;
mobj->ceilingz = mobj->subsector->sector->ceilingheight;
if (z == ONFLOORZ)
{
- mobj->z = mobj->floorz;
+ mobj->z = mobj->floorz;
// villsa [STRIFE]
if(P_GetTerrainType(mobj) != FLOOR_SOLID)
@@ -640,12 +642,12 @@
}
else if (z == ONCEILINGZ)
- mobj->z = mobj->ceilingz - mobj->info->height;
+ mobj->z = mobj->ceilingz - mobj->info->height;
else
- mobj->z = z;
+ mobj->z = z;
mobj->thinker.function.acp1 = (actionf_p1)P_MobjThinker;
-
+
P_AddThinker (&mobj->thinker);
return mobj;
--- a/src/strife/p_spec.c
+++ b/src/strife/p_spec.c
@@ -1462,6 +1462,8 @@
// Called every tic frame
// that the player origin is in a special sector
//
+// [STRIFE] Modified for new sector types and changes to old ones.
+//
void P_PlayerInSpecialSector (player_t* player)
{
sector_t* sector;
@@ -1523,7 +1525,6 @@
case 18:
// haleyjd 08/30/10: [STRIFE] Water current
- // STRIFE-TODO: Verify this works as the ASM is shifty
{
int tagval = sector->tag - 100;
fixed_t force;
@@ -1554,82 +1555,104 @@
// P_UpdateSpecials
// Animate planes, scroll walls, etc.
//
-boolean levelTimer;
-int levelTimeCount;
+// [STRIFE] Modifications to support multiple scrolling line types.
+//
+boolean levelTimer;
+int levelTimeCount;
void P_UpdateSpecials (void)
{
- anim_t* anim;
- int pic;
- int i;
- line_t* line;
+ anim_t* anim;
+ int pic;
+ int i;
+ line_t* line;
-
- // LEVEL TIMER
+
+ // LEVEL TIMER
if (levelTimer == true)
{
- levelTimeCount--;
- if (!levelTimeCount)
- G_ExitLevel(0);
+ if(levelTimeCount) // [STRIFE] Does not allow to go negative
+ levelTimeCount--;
+
+ /*
+ // [STRIFE] Not done here. Exit lines check this manually instead.
+ if (!levelTimeCount)
+ G_ExitLevel(0);
+ */
}
-
- // ANIMATE FLATS AND TEXTURES GLOBALLY
+
+ // ANIMATE FLATS AND TEXTURES GLOBALLY
for (anim = anims ; anim < lastanim ; anim++)
{
- for (i=anim->basepic ; i<anim->basepic+anim->numpics ; i++)
- {
- pic = anim->basepic + ( (leveltime/anim->speed + i)%anim->numpics );
- if (anim->istexture)
- texturetranslation[i] = pic;
- else
- flattranslation[i] = pic;
- }
+ for (i=anim->basepic ; i<anim->basepic+anim->numpics ; i++)
+ {
+ pic = anim->basepic + ( (leveltime/anim->speed + i)%anim->numpics );
+ if (anim->istexture)
+ texturetranslation[i] = pic;
+ else
+ flattranslation[i] = pic;
+ }
}
- // ANIMATE LINE SPECIALS
+ // ANIMATE LINE SPECIALS
for (i = 0; i < numlinespecials; i++)
{
- line = linespeciallist[i];
- switch(line->special)
- {
- case 48:
- // EFFECT FIRSTCOL SCROLL +
- sides[line->sidenum[0]].textureoffset += FRACUNIT;
- break;
- }
+ line = linespeciallist[i];
+ switch(line->special)
+ {
+ case 48:
+ // EFFECT FIRSTCOL SCROLL +
+ sides[line->sidenum[0]].textureoffset += FRACUNIT;
+ break;
+
+ case 142:
+ // haleyjd 09/25/10 [STRIFE] Scroll Up Slow
+ sides[line->sidenum[0]].rowoffset += FRACUNIT;
+ break;
+
+ case 143:
+ // haleyjd 09/25/10 [STRIFE] Scroll Down Fast (3 Units/Tic)
+ sides[line->sidenum[0]].rowoffset -= 3*FRACUNIT;
+ break;
+
+ case 149:
+ // haleyjd 09/25/10 [STRIFE] Scroll Down Slow
+ sides[line->sidenum[0]].rowoffset -= FRACUNIT;
+ break;
+ }
}
- // DO BUTTONS
+ // DO BUTTONS
for (i = 0; i < MAXBUTTONS; i++)
- if (buttonlist[i].btimer)
- {
- buttonlist[i].btimer--;
- if (!buttonlist[i].btimer)
- {
- switch(buttonlist[i].where)
- {
- case top:
- sides[buttonlist[i].line->sidenum[0]].toptexture =
- buttonlist[i].btexture;
- break;
-
- case middle:
- sides[buttonlist[i].line->sidenum[0]].midtexture =
- buttonlist[i].btexture;
- break;
-
- case bottom:
- sides[buttonlist[i].line->sidenum[0]].bottomtexture =
- buttonlist[i].btexture;
- break;
- }
- S_StartSound(&buttonlist[i].soundorg,sfx_swtchn);
- memset(&buttonlist[i],0,sizeof(button_t));
- }
- }
-}
+ if (buttonlist[i].btimer)
+ {
+ buttonlist[i].btimer--;
+ if (!buttonlist[i].btimer)
+ {
+ switch(buttonlist[i].where)
+ {
+ case top:
+ sides[buttonlist[i].line->sidenum[0]].toptexture =
+ buttonlist[i].btexture;
+ break;
+
+ case middle:
+ sides[buttonlist[i].line->sidenum[0]].midtexture =
+ buttonlist[i].btexture;
+ break;
+
+ case bottom:
+ sides[buttonlist[i].line->sidenum[0]].bottomtexture =
+ buttonlist[i].btexture;
+ break;
+ }
+ S_StartSound(&buttonlist[i].soundorg,sfx_swtchn);
+ memset(&buttonlist[i],0,sizeof(button_t));
+ }
+ }
+}
//
@@ -1838,17 +1861,21 @@
// Parses command line parameters.
+//
+// haleyjd 09/25/10: [STRIFE] Modifications for more scrolling line types and
+// for initialization of sliding door resources.
+//
void P_SpawnSpecials (void)
{
- sector_t* sector;
- int i;
- int episode;
+ sector_t* sector;
+ int i;
+ int episode;
episode = 1;
if (W_CheckNumForName(DEH_String("texture2")) >= 0)
- episode = 2;
+ episode = 2;
-
+
// See if -TIMER was specified.
if (timelimit > 0)
@@ -1858,99 +1885,100 @@
}
else
{
- levelTimer = false;
+ levelTimer = false;
}
-
- // Init special SECTORs.
+
+ // Init special SECTORs - [STRIFE] Verified unmodified.
sector = sectors;
for (i=0 ; i<numsectors ; i++, sector++)
{
- if (!sector->special)
- continue;
-
- switch (sector->special)
- {
- case 1:
- // FLICKERING LIGHTS
- P_SpawnLightFlash (sector);
- break;
+ if (!sector->special)
+ continue;
- case 2:
- // STROBE FAST
- P_SpawnStrobeFlash(sector,FASTDARK,0);
- break;
-
- case 3:
- // STROBE SLOW
- P_SpawnStrobeFlash(sector,SLOWDARK,0);
- break;
-
- case 4:
- // STROBE FAST/DEATH SLIME
- P_SpawnStrobeFlash(sector,FASTDARK,0);
- sector->special = 4;
- break;
-
- case 8:
- // GLOWING LIGHT
- P_SpawnGlowingLight(sector);
- break;
- case 9:
- // SECRET SECTOR
- totalsecret++;
- break;
-
- case 10:
- // DOOR CLOSE IN 30 SECONDS
- P_SpawnDoorCloseIn30 (sector);
- break;
-
- case 12:
- // SYNC STROBE SLOW
- P_SpawnStrobeFlash (sector, SLOWDARK, 1);
- break;
+ switch (sector->special)
+ {
+ case 1:
+ // FLICKERING LIGHTS
+ P_SpawnLightFlash (sector);
+ break;
- case 13:
- // SYNC STROBE FAST
- P_SpawnStrobeFlash (sector, FASTDARK, 1);
- break;
+ case 2:
+ // STROBE FAST
+ P_SpawnStrobeFlash(sector,FASTDARK,0);
+ break;
- case 14:
- // DOOR RAISE IN 5 MINUTES
- P_SpawnDoorRaiseIn5Mins (sector, i);
- break;
-
- case 17:
- P_SpawnFireFlicker(sector);
- break;
- }
+ case 3:
+ // STROBE SLOW
+ P_SpawnStrobeFlash(sector,SLOWDARK,0);
+ break;
+
+ case 4:
+ // STROBE FAST/DEATH SLIME
+ P_SpawnStrobeFlash(sector,FASTDARK,0);
+ sector->special = 4;
+ break;
+
+ case 8:
+ // GLOWING LIGHT
+ P_SpawnGlowingLight(sector);
+ break;
+ case 9:
+ // SECRET SECTOR
+ totalsecret++;
+ break;
+
+ case 10:
+ // DOOR CLOSE IN 30 SECONDS
+ P_SpawnDoorCloseIn30 (sector);
+ break;
+
+ case 12:
+ // SYNC STROBE SLOW
+ P_SpawnStrobeFlash (sector, SLOWDARK, 1);
+ break;
+
+ case 13:
+ // SYNC STROBE FAST
+ P_SpawnStrobeFlash (sector, FASTDARK, 1);
+ break;
+
+ case 14:
+ // DOOR RAISE IN 5 MINUTES
+ P_SpawnDoorRaiseIn5Mins (sector, i);
+ break;
+
+ case 17:
+ P_SpawnFireFlicker(sector);
+ break;
+ }
}
-
+
// Init line EFFECTs
numlinespecials = 0;
for (i = 0;i < numlines; i++)
{
- switch(lines[i].special)
- {
- case 48:
- // EFFECT FIRSTCOL SCROLL+
- linespeciallist[numlinespecials] = &lines[i];
- numlinespecials++;
- break;
- }
+ switch(lines[i].special)
+ {
+ case 48: // EFFECT FIRSTCOL SCROLL+
+ case 142: // [STRIFE] TODO: verify scroll types
+ case 143:
+ case 149:
+ linespeciallist[numlinespecials] = &lines[i];
+ numlinespecials++;
+ break;
+ }
}
-
// Init other misc stuff
for (i = 0;i < MAXCEILINGS;i++)
- activeceilings[i] = NULL;
+ activeceilings[i] = NULL;
for (i = 0;i < MAXPLATS;i++)
- activeplats[i] = NULL;
-
+ activeplats[i] = NULL;
+
for (i = 0;i < MAXBUTTONS;i++)
- memset(&buttonlist[i],0,sizeof(button_t));
+ memset(&buttonlist[i],0,sizeof(button_t));
// villsa [STRIFE]
P_InitSlidingDoorFrames();
--- a/src/strife/p_switch.c
+++ b/src/strife/p_switch.c
@@ -1055,6 +1055,8 @@
// haleyjd 09/24/10: [STRIFE] SR Raise Door if Quest 3
if(!(thing->player->questflags & QF_QUEST3)) // QUEST3 == Irale
{
+ // BUG: doesn't make sfx_oof sound like all other message-
+ // giving door types. I highly doubt this was intentional.
DEH_snprintf(usemessage, sizeof(usemessage),
"That doesn't seem to work!");
thing->player->message = usemessage;