diff --git a/src/doomdef.h b/src/doomdef.h index 00c6b0a12..fd61076ce 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -101,7 +101,7 @@ extern "C" { #endif -//#define NOMD5 +#define NOMD5 // Uncheck this to compile debugging code //#define RANGECHECK diff --git a/src/info/actions.h b/src/info/actions.h index 2ae93080f..d0515684f 100644 --- a/src/info/actions.h +++ b/src/info/actions.h @@ -4,9 +4,6 @@ _(A_Fall, FALL) _(A_Look, LOOK) _(A_Chase, CHASE) _(A_FaceStabChase, FACESTABCHASE) -_(A_FaceStabRev, FACESTABREV) -_(A_FaceStabHurl, FACESTABHURL) -_(A_FaceStabMiss, FACESTABMISS) _(A_StatueBurst, STATUEBURST) _(A_FaceTarget, FACETARGET) _(A_FaceTracer, FACETRACER) @@ -69,10 +66,8 @@ _(A_JetJawRoam, JETJAWROAM) _(A_JetJawChomp, JETJAWCHOMP) _(A_PointyThink, POINTYTHINK) _(A_CheckBuddy, CHECKBUDDY) -_(A_HoodFire, HOODFIRE) _(A_HoodThink, HOODTHINK) -_(A_HoodFall, HOODFALL) -_(A_ArrowBonks, ARROWBONKS) +_(A_ArrowCheck, ARROWCHECK) _(A_SnailerThink, SNAILERTHINK) _(A_SharpChase, SHARPCHASE) _(A_SharpSpin, SHARPSPIN) @@ -83,9 +78,6 @@ _(A_CrushclawAim, CRUSHCLAWAIM) _(A_CrushclawLaunch, CRUSHCLAWLAUNCH) _(A_VultureVtol, VULTUREVTOL) _(A_VultureCheck, VULTURECHECK) -_(A_VultureHover, VULTUREHOVER) -_(A_VultureBlast, VULTUREBLAST) -_(A_VultureFly, VULTUREFLY) _(A_SkimChase, SKIMCHASE) _(A_SkullAttack, SKULLATTACK) _(A_LobShot, LOBSHOT) @@ -224,16 +216,10 @@ _(A_Boss5MakeItRain, BOSS5MAKEITRAIN) _(A_Boss5MakeJunk, BOSS5MAKEJUNK) _(A_LookForBetter, LOOKFORBETTER) _(A_Boss5BombExplode, BOSS5BOMBEXPLODE) -_(A_TNTExplode, TNTEXPLODE) -_(A_DebrisRandom, DEBRISRANDOM) -_(A_TrainCameo, TRAINCAMEO) -_(A_TrainCameo2, TRAINCAMEO2) _(A_CanarivoreGas, CANARIVOREGAS) _(A_KillSegments, KILLSEGMENTS) _(A_SnapperSpawn, SNAPPERSPAWN) _(A_SnapperThinker, SNAPPERTHINKER) -_(A_SaloonDoorSpawn, SALOONDOORSPAWN) -_(A_MinecartSparkThink, MINECARTSPARKTHINK) _(A_ModuloToState, MODULOTOSTATE) _(A_LavafallRocks, LAVAFALLROCKS) _(A_LavafallLava, LAVAFALLLAVA) diff --git a/src/info/mobjs.h b/src/info/mobjs.h index 8d48fbf21..c4204ca8d 100644 --- a/src/info/mobjs.h +++ b/src/info/mobjs.h @@ -34,7 +34,6 @@ _(POINTY) // Pointy _(POINTYBALL) // Pointy Ball _(ROBOHOOD) // Robo-Hood _(FACESTABBER) // Castlebot Facestabber -_(FACESTABBERSPEAR) // Castlebot Facestabber spear aura _(EGGGUARD) // Egg Guard _(EGGSHIELD) // Egg Guard's shield _(GSNAPPER) // Green Snapper @@ -348,7 +347,6 @@ _(CEZPOLE1) // Pole (with red banner) _(CEZPOLE2) // Pole (with blue banner) _(CEZBANNER1) // Banner (red) _(CEZBANNER2) // Banner (blue) -_(PINETREE) // Pine Tree _(CEZBUSH1) // Bush 1 _(CEZBUSH2) // Bush 2 _(CANDLE) // Candle @@ -367,42 +365,10 @@ _(BRAMBLES) // Brambles // Arid Canyon Scenery _(BIGTUMBLEWEED) _(LITTLETUMBLEWEED) -_(CACTI1) // Tiny Red Flower Cactus -_(CACTI2) // Small Red Flower Cactus -_(CACTI3) // Tiny Blue Flower Cactus -_(CACTI4) // Small Blue Flower Cactus -_(CACTI5) // Prickly Pear -_(CACTI6) // Barrel Cactus -_(CACTI7) // Tall Barrel Cactus -_(CACTI8) // Armed Cactus -_(CACTI9) // Ball Cactus -_(CACTI10) // Tiny Cactus -_(CACTI11) // Small Cactus -_(CACTITINYSEG) // Tiny Cactus Segment -_(CACTISMALLSEG) // Small Cactus Segment -_(ARIDSIGN_CAUTION) // Caution Sign -_(ARIDSIGN_CACTI) // Cacti Sign -_(ARIDSIGN_SHARPTURN) // Sharp Turn Sign -_(OILLAMP) -_(TNTBARREL) -_(PROXIMITYTNT) -_(DUSTDEVIL) -_(DUSTLAYER) -_(ARIDDUST) -_(MINECART) -_(MINECARTSEG) -_(MINECARTSPAWNER) -_(MINECARTEND) -_(MINECARTENDSOLID) -_(MINECARTSIDEMARK) -_(MINECARTSPARK) -_(SALOONDOOR) -_(SALOONDOORCENTER) -_(TRAINCAMEOSPAWNER) -_(TRAINSEG) -_(TRAINDUSTSPAWNER) -_(TRAINSTEAMSPAWNER) -_(MINECARTSWITCHPOINT) +_(CACTI1) +_(CACTI2) +_(CACTI3) +_(CACTI4) // Red Volcano Scenery _(FLAMEJET) @@ -991,8 +957,8 @@ _(CDTREEA) _(CDTREEB) // Daytona Speedway -_(DAYTONAPINETREE) -_(DAYTONAPINETREE_SIDE) +_(PINETREE) +_(PINETREE_SIDE) // Egg Zeppelin _(EZZPROPELLER) diff --git a/src/info/sprites.h b/src/info/sprites.h index 4609e4bfa..5c27aa74c 100644 --- a/src/info/sprites.h +++ b/src/info/sprites.h @@ -239,21 +239,6 @@ _(CABR) // Brambles _(BTBL) // Big tumbleweed _(STBL) // Small tumbleweed _(CACT) // Cacti -_(WWSG) // Caution Sign -_(WWS2) // Cacti Sign -_(WWS3) // Sharp Turn Sign -_(OILL) // Oil lamp -_(OILF) // Oil lamp flare -_(BARR) // TNT barrel -_(REMT) // TNT proximity shell -_(TAZD) // Dust devil -_(ADST) // Arid dust -_(MCRT) // Minecart -_(MCSP) // Minecart spark -_(SALD) // Saloon door -_(TRAE) // Train cameo locomotive -_(TRAI) // Train cameo wagon -_(STEA) // Train steam // Red Volcano Scenery _(FLME) // Flame jet diff --git a/src/info/states.h b/src/info/states.h index 5b30c3705..3a97968a7 100644 --- a/src/info/states.h +++ b/src/info/states.h @@ -258,12 +258,11 @@ _(POINTYBALL1) // Robo-Hood _(ROBOHOOD_LOOK) -_(ROBOHOOD_STAND) -_(ROBOHOOD_FIRE1) -_(ROBOHOOD_FIRE2) -_(ROBOHOOD_JUMP1) +_(ROBOHOOD_STND) +_(ROBOHOOD_SHOOT) +_(ROBOHOOD_JUMP) _(ROBOHOOD_JUMP2) -_(ROBOHOOD_JUMP3) +_(ROBOHOOD_FALL) // Castlebot Facestabber _(FACESTABBER_STND1) @@ -276,11 +275,6 @@ _(FACESTABBER_CHARGE1) _(FACESTABBER_CHARGE2) _(FACESTABBER_CHARGE3) _(FACESTABBER_CHARGE4) -_(FACESTABBER_PAIN) -_(FACESTABBER_DIE1) -_(FACESTABBER_DIE2) -_(FACESTABBER_DIE3) -_(FACESTABBERSPEAR) // Egg Guard _(EGGGUARD_STND) @@ -298,7 +292,6 @@ _(EGGGUARD_RUN4) // Egg Shield for Egg Guard _(EGGSHIELD) -_(EGGSHIELDBREAK) // Green Snapper _(SNAPPER_SPAWN) @@ -1373,7 +1366,8 @@ _(CANNONBALL1) // Arrow _(ARROW) -_(ARROWBONK) +_(ARROWUP) +_(ARROWDOWN) // Glaregoyle Demon fire _(DEMONFIRE) @@ -1561,7 +1555,6 @@ _(CEZFLOWER) _(CEZPOLE) _(CEZBANNER1) _(CEZBANNER2) -_(PINETREE) _(CEZBUSH1) _(CEZBUSH2) _(CANDLE) @@ -1605,100 +1598,6 @@ _(CACTI1) _(CACTI2) _(CACTI3) _(CACTI4) -_(CACTI5) -_(CACTI6) -_(CACTI7) -_(CACTI8) -_(CACTI9) -_(CACTI10) -_(CACTI11) -_(CACTITINYSEG) -_(CACTISMALLSEG) - -// Warning signs -_(ARIDSIGN_CAUTION) -_(ARIDSIGN_CACTI) -_(ARIDSIGN_SHARPTURN) - -// Oil lamp -_(OILLAMP) -_(OILLAMPFLARE) - -// TNT barrel -_(TNTBARREL_STND1) -_(TNTBARREL_EXPL1) -_(TNTBARREL_EXPL2) -_(TNTBARREL_EXPL3) -_(TNTBARREL_EXPL4) -_(TNTBARREL_EXPL5) -_(TNTBARREL_EXPL6) -_(TNTBARREL_EXPL7) -_(TNTBARREL_FLYING) - -// TNT proximity shell -_(PROXIMITY_TNT) -_(PROXIMITY_TNT_TRIGGER1) -_(PROXIMITY_TNT_TRIGGER2) -_(PROXIMITY_TNT_TRIGGER3) -_(PROXIMITY_TNT_TRIGGER4) -_(PROXIMITY_TNT_TRIGGER5) -_(PROXIMITY_TNT_TRIGGER6) -_(PROXIMITY_TNT_TRIGGER7) -_(PROXIMITY_TNT_TRIGGER8) -_(PROXIMITY_TNT_TRIGGER9) -_(PROXIMITY_TNT_TRIGGER10) -_(PROXIMITY_TNT_TRIGGER11) -_(PROXIMITY_TNT_TRIGGER12) -_(PROXIMITY_TNT_TRIGGER13) -_(PROXIMITY_TNT_TRIGGER14) -_(PROXIMITY_TNT_TRIGGER15) -_(PROXIMITY_TNT_TRIGGER16) -_(PROXIMITY_TNT_TRIGGER17) -_(PROXIMITY_TNT_TRIGGER18) -_(PROXIMITY_TNT_TRIGGER19) -_(PROXIMITY_TNT_TRIGGER20) -_(PROXIMITY_TNT_TRIGGER21) -_(PROXIMITY_TNT_TRIGGER22) -_(PROXIMITY_TNT_TRIGGER23) - -// Dust devil -_(DUSTDEVIL) -_(DUSTLAYER1) -_(DUSTLAYER2) -_(DUSTLAYER3) -_(DUSTLAYER4) -_(DUSTLAYER5) -_(ARIDDUST1) -_(ARIDDUST2) -_(ARIDDUST3) - -// Minecart -_(MINECART_IDLE) -_(MINECART_DTH1) -_(MINECARTEND) -_(MINECARTSEG_FRONT) -_(MINECARTSEG_BACK) -_(MINECARTSEG_LEFT) -_(MINECARTSEG_RIGHT) -_(MINECARTSIDEMARK1) -_(MINECARTSIDEMARK2) -_(MINECARTSPARK) - -// Saloon door -_(SALOONDOOR) -_(SALOONDOORCENTER) - -// Train cameo -_(TRAINCAMEOSPAWNER_1) -_(TRAINCAMEOSPAWNER_2) -_(TRAINCAMEOSPAWNER_3) -_(TRAINCAMEOSPAWNER_4) -_(TRAINCAMEOSPAWNER_5) -_(TRAINPUFFMAKER) - -// Train -_(TRAINDUST) -_(TRAINSTEAM) // Flame jet _(FLAMEJETSTND) @@ -4056,8 +3955,8 @@ _(CDTREEASP) _(CDTREEBSP) // Daytona Speedway -_(DAYTONAPINETREE) -_(DAYTONAPINETREE_SIDE) +_(PINETREE) +_(PINETREE_SIDE) // Egg Zeppelin _(EZZPROPELLER) diff --git a/src/p_enemy.c b/src/p_enemy.c index e79b11c4e..b701300e7 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -741,191 +741,6 @@ static void P_SharpDust(mobj_t *actor, mobjtype_t type, angle_t ang) P_SetObjectMomZ(dust, P_RandomRange(1, 4)<angle, actor->radius), - -P_ReturnThrustY(actor, actor->angle, actor->radius), - actor->height/3, - MT_PARTICLE); - flume->destscale = actor->scale*3; - P_SetScale(flume, flume->destscale); - P_SetTarget(&flume->target, actor); - flume->sprite = SPR_JETF; - flume->frame = FF_FULLBRIGHT; - flume->tics = 2; -} - -// Function: A_FaceStabRev -// -// Description: Facestabber rev action -// -// var1 = effective duration -// var2 = effective nextstate -// -void A_FaceStabRev(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - - if (LUA_CallAction(A_FACESTABREV, actor)) - return; - - if (!actor->target) - { - P_SetMobjState(actor, actor->info->spawnstate); - return; - } - - actor->extravalue1 = 0; - - if (!actor->reactiontime) - { - actor->reactiontime = locvar1; - S_StartSound(actor, actor->info->activesound); - } - else - { - if ((--actor->reactiontime) == 0) - { - S_StartSound(actor, actor->info->attacksound); - P_SetMobjState(actor, locvar2); - } - else - { - P_TryMove(actor, actor->x - P_ReturnThrustX(actor, actor->angle, 2<y - P_ReturnThrustY(actor, actor->angle, 2<target) - { - angle_t visang = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y); - // Calculate new direction. - angle_t dirang = actor->angle; - angle_t diffang = visang - dirang; - - if (locvar1) // Allow homing? - { - if (diffang > ANGLE_180) - { - angle_t workang = locvar1*(InvAngle(diffang)>>5); - diffang += InvAngle(workang); - } - else - diffang += (locvar1*(diffang>>5)); - } - diffang += ANGLE_45; - - // Check the sight cone. - if (diffang < ANGLE_90) - { - actor->angle = dirang; - if (++actor->extravalue2 < 4) - actor->extravalue2 = 4; - else if (actor->extravalue2 > 26) - actor->extravalue2 = 26; - - if (P_TryMove(actor, - actor->x + P_ReturnThrustX(actor, dirang, actor->extravalue2<y + P_ReturnThrustY(actor, dirang, actor->extravalue2<extravalue1); - fixed_t basesize = FRACUNIT/MAXVAL; - mobj_t *hwork = actor; - INT32 dist = 113; - fixed_t xo = P_ReturnThrustX(actor, actor->angle, dist*basesize); - fixed_t yo = P_ReturnThrustY(actor, actor->angle, dist*basesize); - - while (step > 0) - { - if (!hwork->hnext) - P_SetTarget(&hwork->hnext, P_SpawnMobjFromMobj(actor, 0, 0, 0, MT_FACESTABBERSPEAR)); - hwork = hwork->hnext; - hwork->angle = actor->angle + ANGLE_90; - hwork->destscale = FixedSqrt(step*basesize); - P_SetScale(hwork, hwork->destscale); - hwork->fuse = 2; - P_MoveOrigin(hwork, actor->x + xo*(15-step), actor->y + yo*(15-step), actor->z + (actor->height - hwork->height)/2 + (P_MobjFlip(actor)*(8<extravalue1 >= MAXVAL) - actor->extravalue1 -= NUMGRADS; - - if ((step % 5) == 0) - P_SharpDust(actor, MT_SPINDUST, actor->angle); - - P_FaceStabFlume(actor); - return; -#undef MAXVAL -#undef NUMGRADS -#undef NUMSTEPS - } - } - } - - P_SetMobjState(actor, locvar2); - actor->reactiontime = actor->info->reactiontime; -} - -// Function: A_FaceStabMiss -// -// Description: Facestabber miss action -// -// var1 = unused -// var2 = effective nextstate -// -void A_FaceStabMiss(mobj_t *actor) -{ - INT32 locvar2 = var2; - - if (LUA_CallAction(A_FACESTABMISS, actor)) - return; - - if (++actor->extravalue1 >= 3) - { - actor->extravalue2 -= 2; - actor->extravalue1 = 0; - S_StartSound(actor, sfx_s3k47); - P_SharpDust(actor, MT_SPINDUST, actor->angle); - } - - if (actor->extravalue2 <= 0 || !P_TryMove(actor, - actor->x + P_ReturnThrustX(actor, actor->angle, actor->extravalue2<y + P_ReturnThrustY(actor, actor->angle, actor->extravalue2<extravalue2 = 0; - P_SetMobjState(actor, locvar2); - } -} - // Function: A_StatueBurst // // Description: For suspicious statues only... @@ -1173,60 +988,6 @@ void A_CheckBuddy(mobj_t *actor) P_RemoveMobj(actor); } -// Helper function for the Robo Hood. -// Don't ask me how it works. Nev3r made it with dark majyks. -static void P_ParabolicMove(mobj_t *actor, fixed_t x, fixed_t y, fixed_t z, fixed_t speed) -{ - fixed_t dh; - - x -= actor->x; - y -= actor->y; - z -= actor->z; - - dh = P_AproxDistance(x, y); - - actor->momx = FixedMul(FixedDiv(x, dh), speed); - actor->momy = FixedMul(FixedDiv(y, dh), speed); - - if (!gravity) - return; - - dh = FixedDiv(FixedMul(dh, gravity), speed); - actor->momz = (dh>>1) + FixedDiv(z, dh<<1); -} - -// Function: A_HoodFire -// -// Description: Firing Robo-Hood -// -// var1 = object type to fire -// var2 = unused -// -void A_HoodFire(mobj_t *actor) -{ - mobj_t *arrow; - INT32 locvar1 = var1; - - if (LUA_CallAction(A_HOODFIRE, actor)) - return; - - // Check target first. - if (!actor->target) - { - actor->reactiontime = actor->info->reactiontime; - P_SetMobjState(actor, actor->info->spawnstate); - return; - } - - A_FaceTarget(actor); - - if (!(arrow = P_SpawnMissile(actor, actor->target, (mobjtype_t)locvar1))) - return; - - // Set a parabolic trajectory for the arrow. - P_ParabolicMove(arrow, actor->target->x, actor->target->y, actor->target->z, arrow->info->speed); -} - // Function: A_HoodThink // // Description: Thinker for Robo-Hood @@ -1236,108 +997,94 @@ void A_HoodFire(mobj_t *actor) // void A_HoodThink(mobj_t *actor) { - fixed_t dx, dy, dz, dm; - boolean checksight; - if (LUA_CallAction(A_HOODTHINK, actor)) return; - // Check target first. + // Currently in the air... + if (!(actor->eflags & MFE_VERTICALFLIP) && actor->z > actor->floorz) + { + if (actor->momz > 0) + P_SetMobjStateNF(actor, actor->info->xdeathstate); // Rising + else + P_SetMobjStateNF(actor, actor->info->raisestate); // Falling + + return; + } + else if ((actor->eflags & MFE_VERTICALFLIP) && actor->z + actor->height < actor->ceilingz) + { + if (actor->momz < 0) + P_SetMobjStateNF(actor, actor->info->xdeathstate); // Rising + else + P_SetMobjStateNF(actor, actor->info->raisestate); // Falling + + return; + } + + if (actor->state == &states[actor->info->xdeathstate] + || actor->state == &states[actor->info->raisestate]) + P_SetMobjStateNF(actor, actor->info->seestate); + if (!actor->target) { - actor->reactiontime = actor->info->reactiontime; P_SetMobjState(actor, actor->info->spawnstate); return; } - dx = (actor->target->x - actor->x), dy = (actor->target->y - actor->y), dz = (actor->target->z - actor->z); - dm = P_AproxDistance(dx, dy); - // Target dangerously close to robohood, retreat then. - if ((dm < 256<info->attacksound); - P_SetMobjState(actor, actor->info->raisestate); - return; - } + A_FaceTarget(actor); // Aiming... aiming... - // If target on sight, look at it. - if ((checksight = P_CheckSight(actor, actor->target))) - { - angle_t dang = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y); - if (actor->angle >= ANGLE_180) - { - actor->angle = InvAngle(actor->angle)>>1; - actor->angle = InvAngle(actor->angle); - } - else - actor->angle >>= 1; - - if (dang >= ANGLE_180) - { - dang = InvAngle(dang)>>1; - dang = InvAngle(dang); - } - else - dang >>= 1; - - actor->angle += dang; - } - - // Check whether to do anything. - if ((--actor->reactiontime) <= 0) - { - actor->reactiontime = actor->info->reactiontime; - - // If way too far, don't shoot. - if ((dm < (3072<info->missilestate); - return; - } - } -} - -// Function: A_HoodFall -// -// Description: Falling Robo-Hood -// -// var1 = unused -// var2 = unused -// -void A_HoodFall(mobj_t *actor) -{ - if (LUA_CallAction(A_HOODFALL, actor)) + if (--actor->reactiontime > 0) return; - if (!P_IsObjectOnGround(actor)) - return; + // Shoot, if not too close (cheap shots are lame) + if ((P_AproxDistance(actor->x-actor->target->x, actor->y-actor->target->y) > FixedMul(192*FRACUNIT, actor->scale)) + || (actor->spawnpoint && (actor->spawnpoint->options & MTF_AMBUSH))) // If you can't jump, might as well shoot regardless of distance! + P_SetMobjState(actor, actor->info->missilestate); + else if (!(actor->spawnpoint && (actor->spawnpoint->options & MTF_AMBUSH)))// But we WILL jump! + P_SetMobjState(actor, actor->info->painstate); - actor->momx = actor->momy = 0; actor->reactiontime = actor->info->reactiontime; - P_SetMobjState(actor, actor->info->seestate); } -// Function: A_ArrowBonks +// Function: A_ArrowCheck // -// Description: Arrow momentum setting on collision +// Description: Checks arrow direction and adjusts sprite accordingly // // var1 = unused // var2 = unused // -void A_ArrowBonks(mobj_t *actor) +void A_ArrowCheck(mobj_t *actor) { - if (LUA_CallAction(A_ARROWBONKS, actor)) + fixed_t x,y,z; + angle_t angle; + fixed_t dist; + + if (LUA_CallAction(A_ARROWCHECK, actor)) return; - if (((actor->eflags & MFE_VERTICALFLIP) && actor->z + actor->height >= actor->ceilingz) - || (!(actor->eflags & MFE_VERTICALFLIP) && actor->z <= actor->floorz)) - actor->angle += ANGLE_180; + // Movement vector + x = actor->momx; + y = actor->momy; + z = actor->momz; - P_SetObjectMomZ(actor, 8*actor->scale, false); - P_InstaThrust(actor, actor->angle, -6*actor->scale); + // Calculate the angle of movement. + /* + Z + / | + / | + / | + 0------dist(X,Y) + */ - actor->flags = (actor->flags|MF_NOCLIPHEIGHT) & ~MF_NOGRAVITY; - actor->z += P_MobjFlip(actor); + dist = P_AproxDistance(x, y); + + angle = R_PointToAngle2(0, 0, dist, z); + + if (angle > ANG20 && angle <= ANGLE_180) + P_SetMobjStateNF(actor, actor->info->raisestate); + else if (angle < ANG340 && angle > ANGLE_180) + P_SetMobjStateNF(actor, actor->info->xdeathstate); + else + P_SetMobjStateNF(actor, actor->info->spawnstate); } // Function: A_SnailerThink @@ -1839,229 +1586,6 @@ void A_VultureCheck(mobj_t *actor) } } -static void P_VultureHoverParticle(mobj_t *actor) -{ - fixed_t fdist = actor->z - P_FloorzAtPos(actor->x, actor->y, actor->z, actor->height); - - if (fdist < 128*FRACUNIT) - { - mobj_t *dust; - UINT8 i; - angle_t angle = (leveltime % 2)*ANGLE_45/2; - - for (i = 0; i <= 7; i++) - { - angle_t fa = (angle >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t px = actor->x + FixedMul(fdist + 64*FRACUNIT, FINECOSINE(fa)); - fixed_t py = actor->y + FixedMul(fdist + 64*FRACUNIT, FINESINE(fa)); - fixed_t pz = P_FloorzAtPos(px, py, actor->z, actor->height); - - dust = P_SpawnMobj(px, py, pz, MT_ARIDDUST); - P_SetMobjState(dust, (statenum_t)(dust->state - states + P_RandomRange(0, 2))); - P_Thrust(dust, angle, FixedDiv(12*FRACUNIT, max(FRACUNIT, fdist/2))); - dust->momx += actor->momx; - dust->momy += actor->momy; - angle += ANGLE_45; - } - } -} - -// Function: A_VultureHover -// -// Description: Vulture hovering and checking whether to attack. -// -// var1 = unused -// var2 = unused -// -void A_VultureHover(mobj_t *actor) -{ - fixed_t targetz; - fixed_t distdif; - fixed_t memz = actor->z; - SINT8 i; - - if (LUA_CallAction(A_VULTUREHOVER, actor)) - return; - - if (!actor->target || P_MobjWasRemoved(actor->target)) - { - P_SetMobjState(actor, actor->info->spawnstate); - return; - } - - actor->flags |= MF_NOGRAVITY; - - actor->momx -= actor->momx/24; - actor->momy -= actor->momy/24; - - P_VultureHoverParticle(actor); - - A_FaceTarget(actor); - targetz = actor->target->z + actor->target->height / 2; - for (i = -1; i <= 1; i++) - { - actor->z = targetz - i * 128 * FRACUNIT; - if (P_CheckSight(actor, actor->target)) - { - targetz -= i * 128 * FRACUNIT; - break; - } - } - actor->z = memz; - - distdif = (actor->z + actor->height/2) - targetz; - - if (abs(actor->momz*16) > abs(distdif)) - actor->momz -= actor->momz/16; - else if (distdif < 0) - actor->momz = min(actor->momz+FRACUNIT/8, actor->info->speed*FRACUNIT); - else - actor->momz = max(actor->momz-FRACUNIT/8, -actor->info->speed*FRACUNIT); - - if (abs(distdif) < 128*FRACUNIT && abs(actor->momz) < FRACUNIT && P_CheckSight(actor, actor->target)) - { - P_SetMobjState(actor, actor->info->missilestate); - actor->momx = 0; - actor->momy = 0; - actor->momz = 0; - actor->extravalue1 = 0; - } -} - -// Function: A_VultureBlast -// -// Description: Vulture spawning a dust cloud. -// -// var1 = unused -// var2 = unused -// -void A_VultureBlast(mobj_t *actor) -{ - mobj_t *dust; - UINT8 i; - angle_t faa; - fixed_t faacos, faasin; - - if (LUA_CallAction(A_VULTUREBLAST, actor)) - return; - - S_StartSound(actor, actor->info->attacksound); - - faa = (actor->angle >> ANGLETOFINESHIFT) & FINEMASK; - faacos = FINECOSINE(faa); - faasin = FINESINE(faa); - - for (i = 0; i <= 7; i++) - { - angle_t fa = ((i*(angle_t)ANGLE_45) >> ANGLETOFINESHIFT) & FINEMASK; - dust = P_SpawnMobj(actor->x + 48*FixedMul(FINECOSINE(fa), -faasin), actor->y + 48*FixedMul(FINECOSINE(fa), faacos), actor->z + actor->height/2 + 48*FINESINE(fa), MT_PARTICLE); - - P_SetScale(dust, 4*FRACUNIT); - dust->destscale = FRACUNIT; - dust->scalespeed = 4*FRACUNIT/TICRATE; - dust->fuse = TICRATE; - dust->momx = FixedMul(FINECOSINE(fa), -faasin)*3; - dust->momy = FixedMul(FINECOSINE(fa), faacos)*3; - dust->momz = FINESINE(fa)*6; - } -} - -// Function: A_VultureFly -// -// Description: Vulture charging towards target. -// -// var1 = unused -// var2 = unused -// -void A_VultureFly(mobj_t *actor) -{ - fixed_t speedmax = 18*FRACUNIT; - angle_t angledif; - fixed_t dx, dy, dz, dxy, dm; - mobj_t *dust; - fixed_t momm; - - if (LUA_CallAction(A_VULTUREFLY, actor)) - return; - - if (!actor->target || P_MobjWasRemoved(actor->target)) - { - P_SetMobjState(actor, actor->info->spawnstate); - return; - } - - angledif = R_PointToAngle2(actor->x, actor->y, actor->target->x, actor->target->y) - actor->angle; - dx = actor->target->x - actor->x; - dy = actor->target->y - actor->y; - dz = actor->target->z - actor->z; - dxy = FixedHypot(dx, dy); - - if (leveltime % 4 == 0) - S_StartSound(actor, actor->info->activesound); - - if (angledif > ANGLE_180) - angledif = InvAngle(angledif); - - // Tweak the target height according to the position. - if (angledif < ANGLE_45) // Centered? - { - actor->reactiontime = actor->info->reactiontime; - if (dxy > 768*FRACUNIT) - dz = max(P_FloorzAtPos(actor->target->x, actor->target->y, actor->target->z, 0) - actor->z + min(dxy/8, 128*FRACUNIT), dz); - } - else - { - actor->reactiontime--; - - if (angledif < ANGLE_90) - dz = max(P_FloorzAtPos(actor->target->x, actor->target->y, actor->target->z, 0) - actor->z + min(dxy/2, 192*FRACUNIT), dz); - else - dz = max(P_FloorzAtPos(actor->target->x, actor->target->y, actor->target->z, 0) - actor->z + 232*FRACUNIT, dz); - } - - dm = FixedHypot(dz, dxy); - - P_VultureHoverParticle(actor); - - dust = P_SpawnMobj(actor->x + P_RandomFixed() - FRACUNIT/2, actor->y + P_RandomFixed() - FRACUNIT/2, actor->z + actor->height/2 + P_RandomFixed() - FRACUNIT/2, MT_PARTICLE); - P_SetScale(dust, 2*FRACUNIT); - dust->destscale = FRACUNIT/3; - dust->scalespeed = FRACUNIT/40; - dust->fuse = TICRATE*2; - - actor->momx += FixedDiv(dx, dm)*2; - actor->momy += FixedDiv(dy, dm)*2; - actor->momz += FixedDiv(dz, dm)*2; - - momm = FixedHypot(actor->momz, FixedHypot(actor->momx, actor->momy)); - - if (momm > speedmax/2 && actor->reactiontime == 0) - { - P_SetMobjState(actor, actor->info->seestate); - return; - } - - //Hits a wall hard? - if (actor->extravalue1 - momm > 15*FRACUNIT) - { - actor->flags &= ~MF_NOGRAVITY; - P_SetMobjState(actor, actor->info->painstate); - S_StopSound(actor); - S_StartSound(actor, actor->info->painsound); - return; - } - actor->extravalue1 = momm; - - if (momm > speedmax) - { - actor->momx = FixedMul(FixedDiv(actor->momx, momm), speedmax); - actor->momy = FixedMul(FixedDiv(actor->momy, momm), speedmax); - actor->momz = FixedMul(FixedDiv(actor->momz, momm), speedmax); - } - - actor->angle = R_PointToAngle2(0, 0, actor->momx, actor->momy); -} - // Function: A_SkimChase // // Description: Thinker/Chase routine for Skims @@ -6355,86 +5879,47 @@ void A_GuardChase(mobj_t *actor) if (actor->reactiontime) actor->reactiontime--; - if (actor->threshold != 42) // In formation... + if ((!actor->tracer || !actor->tracer->health) && actor->threshold != 42) { - fixed_t speed; - - if (!actor->tracer || !actor->tracer->health) - { - P_SetTarget(&actor->tracer, NULL); - actor->threshold = 42; - P_SetMobjState(actor, actor->info->painstate); - actor->flags |= MF_SPECIAL|MF_SHOOTABLE; - return; - } - - speed = actor->extravalue1*actor->scale; - - if (actor->flags2 & MF2_AMBUSH) - speed <<= 1; - - if (speed - && !P_TryMove(actor, - actor->x + P_ReturnThrustX(actor, actor->angle, speed), - actor->y + P_ReturnThrustY(actor, actor->angle, speed), - false, NULL) - && speed > 0) // can't be the same check as previous so that P_TryMove gets to happen. - { - INT32 direction = actor->args[0]; - - switch (direction) - { - case TMGD_BACK: - default: - actor->angle += ANGLE_180; - break; - case TMGD_RIGHT: - actor->angle -= ANGLE_90; - break; - case TMGD_LEFT: - actor->angle += ANGLE_90; - break; - } - } - - if (actor->extravalue1 < actor->info->speed) - actor->extravalue1++; + P_SetTarget(&actor->tracer, NULL); + actor->threshold = 42; + P_SetMobjState(actor, actor->info->painstate); + actor->flags |= MF_SPECIAL|MF_SHOOTABLE; + return; } - else // Break ranks! + + // turn towards movement direction if not there yet + if (actor->movedir < NUMDIRS) { - // turn towards movement direction if not there yet - if (actor->movedir < NUMDIRS) - { - actor->angle &= (7<<29); - delta = actor->angle - (actor->movedir << 29); + actor->angle &= (7<<29); + delta = actor->angle - (actor->movedir << 29); - if (delta > 0) - actor->angle -= ANGLE_45; - else if (delta < 0) - actor->angle += ANGLE_45; - } + if (delta > 0) + actor->angle -= ANGLE_45; + else if (delta < 0) + actor->angle += ANGLE_45; + } - if (!actor->target || !(actor->target->flags & MF_SHOOTABLE)) - { - // look for a new target - if (P_LookForPlayers(actor, true, false, 0)) - return; // got a new target - - P_SetMobjStateNF(actor, actor->info->spawnstate); - return; - } - - // possibly choose another target - if (multiplayer && (actor->target->health <= 0 || !P_CheckSight(actor, actor->target)) - && P_LookForPlayers(actor, true, false, 0)) + if (!actor->target || !(actor->target->flags & MF_SHOOTABLE)) + { + // look for a new target + if (P_LookForPlayers(actor, true, false, 0)) return; // got a new target - // chase towards player - if (--actor->movecount < 0 || !P_Move(actor, (actor->flags2 & MF2_AMBUSH) ? actor->info->speed * 2 : actor->info->speed)) - { - P_NewChaseDir(actor); - actor->movecount += 5; // Increase tics before change in direction allowed. - } + P_SetMobjStateNF(actor, actor->info->spawnstate); + return; + } + + // possibly choose another target + if (multiplayer && (actor->target->health <= 0 || !P_CheckSight(actor, actor->target)) + && P_LookForPlayers(actor, true, false, 0)) + return; // got a new target + + // chase towards player + if (--actor->movecount < 0 || !P_Move(actor, (actor->flags2 & MF2_AMBUSH) ? actor->info->speed * 2 : actor->info->speed)) + { + P_NewChaseDir(actor); + actor->movecount += 5; // Increase tics before change in direction allowed. } // Now that we've moved, its time for our shield to move! @@ -11915,243 +11400,6 @@ void A_Boss5BombExplode(mobj_t *actor) quake.radius = 20*actor->radius; } -// stuff used by A_TNTExplode -static mobj_t *barrel; -static fixed_t exploderadius; -static fixed_t explodethrust; - -static BlockItReturn_t PIT_TNTExplode(mobj_t *nearby) -{ - fixed_t dx, dy, dz; - fixed_t dm; - - if (nearby == barrel) - return BMIT_CONTINUE; - - dx = nearby->x - barrel->x; - dy = nearby->y - barrel->y; - dz = nearby->z - barrel->z + (nearby->height - barrel->height/2)/2; - dm = P_AproxDistance(P_AproxDistance(dx, dy), dz); - - if (dm >= exploderadius || !P_CheckSight(barrel, nearby)) // out of range or not visible - return BMIT_CONTINUE; - - if (barrel->type == nearby->type) // nearby is also a barrel - { - if (nearby->state == &states[nearby->info->spawnstate]) - { - if (barrel->info->attacksound) - S_StartSound(nearby, barrel->info->attacksound); - nearby->momx = FixedMul(FixedDiv(dx, dm), explodethrust); - nearby->momy = FixedMul(FixedDiv(dy, dm), explodethrust); - nearby->momz = FixedMul(FixedDiv(dz, dm), explodethrust); - P_UnsetThingPosition(nearby); - if (sector_list) - { - P_DelSeclist(sector_list); - sector_list = NULL; - } - nearby->flags = MF_NOBLOCKMAP|MF_MISSILE; - P_SetThingPosition(nearby); - P_SetMobjState(nearby, nearby->info->missilestate); - } - } - else - { - if (barrel->target == nearby) - { - mobj_t *tar = barrel->target; // temporarily store barrel's target - P_SetTarget(&barrel->target, NULL); - P_DamageMobj(nearby, barrel, NULL, 1, DMG_NORMAL); - if (!P_MobjWasRemoved(barrel)) - P_SetTarget(&barrel->target, tar); - } - else - { - P_DamageMobj(nearby, - (barrel->target) ? barrel->target : barrel, - (barrel->target) ? barrel->target : barrel, - 1, DMG_NORMAL); - } - } - - return BMIT_CONTINUE; -} - -// Function: A_TNTExplode -// -// Description: Creates a TNT explosion. Used by TNT barrels and the like. -// -// var1 = Thing type to spawn as dust. -// var2 = unused -// -void A_TNTExplode(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 x, y; - INT32 xl, xh, yl, yh; - static mappoint_t epicenter = {0,0,0}; - - if (LUA_CallAction(A_TNTEXPLODE, actor)) - return; - - if (actor->tracer) - { - P_SetTarget(&actor->tracer->tracer, NULL); - P_SetTarget(&actor->tracer, NULL); - } - - P_UnsetThingPosition(actor); - if (sector_list) - { - P_DelSeclist(sector_list); - sector_list = NULL; - } - actor->flags = MF_NOCLIP|MF_NOGRAVITY|MF_NOBLOCKMAP; - P_SetThingPosition(actor); - actor->flags2 = MF2_EXPLOSION; - if (actor->info->deathsound) - S_StartSound(actor, actor->info->deathsound); - - explodethrust = 32*FRACUNIT; - exploderadius = 256*FRACUNIT; - - xl = (unsigned)(actor->x - exploderadius - bmaporgx)>>MAPBLOCKSHIFT; - xh = (unsigned)(actor->x + exploderadius - bmaporgx)>>MAPBLOCKSHIFT; - yl = (unsigned)(actor->y - exploderadius - bmaporgy)>>MAPBLOCKSHIFT; - yh = (unsigned)(actor->y + exploderadius - bmaporgy)>>MAPBLOCKSHIFT; - - BMBOUNDFIX(xl, xh, yl, yh); - - barrel = actor; - - for (x = xl; x <= xh; x++) - for (y = yl; y <= yh; y++) - P_BlockThingsIterator(x, y, PIT_TNTExplode); - - // cause a quake -- P_StartQuake does not exist yet - epicenter.x = actor->x; - epicenter.y = actor->y; - epicenter.z = actor->z; - quake.intensity = 9*FRACUNIT; - quake.time = TICRATE/6; - quake.epicenter = &epicenter; - quake.radius = 512*FRACUNIT; - - if (locvar1) - { - P_DustRing(locvar1, 4, actor->x, actor->y, actor->z+actor->height, 64, 0, FRACUNIT, actor->scale); - P_DustRing(locvar1, 6, actor->x, actor->y, actor->z+actor->height/2, 96, FRACUNIT, FRACUNIT, actor->scale); - } - - actor->destscale *= 4; -} - -// Function: A_DebrisRandom -// -// Description: Randomizes debris frame and movement. -// -// var1 = Frame range. -// var2 = unused -// -void A_DebrisRandom(mobj_t *actor) -{ - INT32 locvar1 = var1; - - if (LUA_CallAction(A_DEBRISRANDOM, actor)) - return; - - actor->frame |= P_RandomRange(0, locvar1); - var1 = 0; - var2 = 359; - A_ChangeAngleAbsolute(actor); - P_Thrust(actor, actor->angle, FRACUNIT * 2); -} - -static mobj_t *P_TrainSeg(mobj_t *src, fixed_t x, fixed_t y, fixed_t z, angle_t ang, spritenum_t spr, UINT32 frame) -{ - mobj_t *s = P_SpawnMobj(x, y, z, MT_TRAINSEG); - s->fuse = 16*TICRATE; - s->sprite = spr; - s->frame = frame|FF_PAPERSPRITE; - s->angle = ang; - P_Thrust(s, src->angle, 7*FRACUNIT); - return s; -} - -// Function: A_TrainCameo -// -// Description: Sets up train cameo locomotive. -// -// var1 = Train width. -// var2 = Train length. -// -void A_TrainCameo(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - fixed_t x = actor->x; - fixed_t y = actor->y; - fixed_t z = actor->z; - angle_t ang = actor->angle; - mobj_t *m; - spritenum_t spr = SPR_TRAE; - fixed_t span = locvar1*FRACUNIT; - fixed_t len = locvar2*FRACUNIT; - - if (LUA_CallAction(A_TRAINCAMEO, actor)) - return; - - //Spawn sides. - P_TrainSeg(actor, x, y + span, z, ang, spr, 0); - P_TrainSeg(actor, x, y - span, z, ang, spr, 0); - - //Center. - P_TrainSeg(actor, x, y, z, ang, spr, 1); - - //Front and back. - P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2); - P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2); - - //Smoke spawner. - m = P_TrainSeg(actor, x - (20 * FRACUNIT), y, z + (30 * FRACUNIT), ang + ANGLE_90, spr, 0); - P_SetMobjState(m, S_TRAINPUFFMAKER); -} - -// Function: A_TrainCameo2 -// -// Description: Sets up train cameo wagon. -// -// var1 = Train width. -// var2 = Train length. -// -void A_TrainCameo2(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - fixed_t x = actor->x; - fixed_t y = actor->y; - fixed_t z = actor->z; - angle_t ang = actor->angle; - spritenum_t spr = SPR_TRAI; - fixed_t span = locvar1*FRACUNIT; - fixed_t len = locvar2*FRACUNIT; - - if (LUA_CallAction(A_TRAINCAMEO2, actor)) - return; - - //Spawn sides. - P_TrainSeg(actor, x, y + span, z, ang, spr, 0); - P_TrainSeg(actor, x, y - span, z, ang, spr, 0); - - //Center. - P_TrainSeg(actor, x, y, z, ang, spr, 1); - - //Front and back. - P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2); - P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2); -} - // Function: A_CanarivoreGas // // Description: Releases gas clouds. Used by the Canarivore. @@ -12420,83 +11668,6 @@ void A_SnapperThinker(mobj_t *actor) P_SnapperLegPlace(actor); } -// Function: A_SaloonDoorSpawn -// -// Description: Spawns a saloon door. -// -// var1 = mobjtype for sides -// var2 = distance sides should be placed apart -// -void A_SaloonDoorSpawn(mobj_t *actor) -{ - INT32 locvar1 = var1; - INT32 locvar2 = var2; - angle_t ang = actor->angle; - angle_t fa = (ang >> ANGLETOFINESHIFT) & FINEMASK; - fixed_t c = FINECOSINE(fa)*locvar2; - fixed_t s = FINESINE(fa)*locvar2; - mobj_t *door; - mobjflag2_t ambush = (actor->flags2 & MF2_AMBUSH); - - if (LUA_CallAction(A_SALOONDOORSPAWN, actor)) - return; - - if (!locvar1) - return; - - // One door... - if (!(door = P_SpawnMobjFromMobj(actor, c, s, 0, locvar1))) return; - door->angle = ang + ANGLE_180; - door->extravalue1 = AngleFixed(door->angle); // Origin angle - door->extravalue2 = 0; // Angular speed - P_SetTarget(&door->tracer, actor); // Origin door - door->flags2 |= ambush; // Can be opened by normal players? - - // ...two door! - if (!(door = P_SpawnMobjFromMobj(actor, -c, -s, 0, locvar1))) return; - door->angle = ang; - door->extravalue1 = AngleFixed(door->angle); // Origin angle - door->extravalue2 = 0; // Angular speed - P_SetTarget(&door->tracer, actor); // Origin door - door->flags2 |= ambush; // Can be opened by normal players? -} - -// Function: A_MinecartSparkThink -// -// Description: Thinker for the minecart spark. -// -// var1 = unused -// var2 = unused -// -void A_MinecartSparkThink(mobj_t *actor) -{ - fixed_t dx = actor->momx; - fixed_t dy = actor->momy; - fixed_t dz, dm; - UINT8 i; - - if (LUA_CallAction(A_MINECARTSPARKTHINK, actor)) - return; - - if (actor->momz == 0 && P_IsObjectOnGround(actor)) - actor->momz = P_RandomRange(2, 4)*FRACUNIT; - - dz = actor->momz; - dm = FixedHypot(FixedHypot(dx, dy), dz); - dx = FixedDiv(dx, dm); - dy = FixedDiv(dy, dm); - dz = FixedDiv(dz, dm); - - for (i = 1; i <= 8; i++) - { - mobj_t *trail = P_SpawnMobj(actor->x - dx*i, actor->y - dy*i, actor->z - dz*i, MT_PARTICLE); - trail->tics = 2; - trail->sprite = actor->sprite; - P_SetScale(trail, trail->scale/4); - trail->destscale = trail->scale; - } -} - // Function: A_ModuloToState // // Description: Modulo operation to state diff --git a/src/p_inter.c b/src/p_inter.c index 1cfc1e8e1..b24946d7a 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -761,6 +761,40 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) S_StartSound(toucher, sfx_hoop3); return; + case MT_EGGSHIELD: + { + fixed_t touchx, touchy, touchspeed; + angle_t angle; + + if (P_AproxDistance(toucher->x-special->x, toucher->y-special->y) > + P_AproxDistance((toucher->x-toucher->momx)-special->x, (toucher->y-toucher->momy)-special->y)) + { + touchx = toucher->x + toucher->momx; + touchy = toucher->y + toucher->momy; + } + else + { + touchx = toucher->x; + touchy = toucher->y; + } + + angle = R_PointToAngle2(special->x, special->y, touchx, touchy) - special->angle; + touchspeed = P_AproxDistance(toucher->momx, toucher->momy); + + // Blocked by the shield? + if (!(angle > ANGLE_90 && angle < ANGLE_270)) + { + toucher->momx = P_ReturnThrustX(special, special->angle, touchspeed); + toucher->momy = P_ReturnThrustY(special, special->angle, touchspeed); + toucher->momz = -toucher->momz; + + // Play a bounce sound? + S_StartSound(toucher, special->info->painsound); + return; + } + } + return; + case MT_BIGTUMBLEWEED: case MT_LITTLETUMBLEWEED: if (toucher->momx || toucher->momy) @@ -1549,13 +1583,6 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget target->fuse = TICRATE; break; - case MT_MINECART: - A_Scream(target); - target->momx = target->momy = target->momz = 0; - if (target->target && target->target->health) - P_KillMobj(target->target, target, source, DMG_NORMAL); - break; - case MT_PLAYER: if (damagetype != DMG_SPECTATOR) { diff --git a/src/p_mobj.c b/src/p_mobj.c index e856e8e2c..5ae8430d6 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2328,9 +2328,9 @@ boolean P_ZMovement(mobj_t *mo) if (!mo->player && P_CheckDeathPitCollide(mo)) { - if (mo->flags & MF_ENEMY || mo->flags & MF_BOSS || mo->type == MT_MINECART) + if (mo->flags & MF_ENEMY || mo->flags & MF_BOSS) { - // Kill enemies, bosses and minecarts that fall into death pits. + // Kill enemies and bosses. if (mo->health) { P_KillMobj(mo, NULL, NULL, DMG_NORMAL); @@ -8487,7 +8487,7 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s static boolean P_FuseThink(mobj_t *mobj) { - if (mobj->type == MT_SNAPPER_HEAD || mobj->type == MT_SNAPPER_LEG || mobj->type == MT_MINECARTSEG) + if (mobj->type == MT_SNAPPER_HEAD || mobj->type == MT_SNAPPER_LEG) mobj->renderflags ^= RF_DONTDRAW; if (mobj->fuse <= TICRATE && (mobj->type == MT_RANDOMITEM || mobj->type == MT_EGGMANITEM || mobj->type == MT_FALLINGROCK)) @@ -9492,21 +9492,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_FBOMB: mobj->flags2 |= MF2_EXPLOSION; break; - case MT_OILLAMP: - { - mobj_t* overlay = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); - P_SetTarget(&overlay->target, mobj); - P_SetMobjState(overlay, S_OILLAMPFLARE); - break; - } - case MT_TNTBARREL: - mobj->momx = 1; //stack hack - mobj->flags2 |= MF2_INVERTAIMABLE; - break; - case MT_MINECARTEND: - P_SetTarget(&mobj->tracer, P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_MINECARTENDSOLID)); - mobj->tracer->angle = mobj->angle + ANGLE_90; - break; case MT_TORCHFLOWER: { mobj_t *fire = P_SpawnMobjFromMobj(mobj, 0, 0, 46*FRACUNIT, MT_FLAME); @@ -9617,7 +9602,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_RUSTYLAMP_ORANGE: P_SpawnMobj(mobj->x, mobj->y, mobj->z + (69*mobj->scale), MT_MARBLELIGHT); break; - case MT_DAYTONAPINETREE: + case MT_PINETREE: { angle_t diff = FixedAngle((360/mobj->info->mass)*FRACUNIT); UINT8 i; @@ -9626,7 +9611,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) { angle_t ang = i * diff; mobj_t *side = P_SpawnMobj(mobj->x + FINECOSINE((ang>>ANGLETOFINESHIFT) & FINEMASK), - mobj->y + FINESINE((ang>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_DAYTONAPINETREE_SIDE); + mobj->y + FINESINE((ang>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_PINETREE_SIDE); side->angle = ang; side->target = mobj; side->threshold = i; diff --git a/src/p_setup.c b/src/p_setup.c index 6ebeac25f..07725538a 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -5047,9 +5047,6 @@ static void P_ConvertBinaryLinedefTypes(void) lines[i].args[2] = !!(lines[i].flags & ML_SKEWTD); P_WriteDuplicateText(sides[lines[i].sidenum[0]].text, &lines[i].stringargs[0]); break; - case 16: //Minecart parameters - lines[i].args[0] = sides[lines[i].sidenum[0]].textureoffset >> FRACBITS; - break; case 20: //PolyObject first line { INT32 check = -1; @@ -7406,12 +7403,6 @@ static void P_ConvertBinaryThingTypes(void) P_WriteConstant(MT_ROCKCRUMBLE1 + id, &mapthings[i].stringargs[0], "Mapthing", i); break; } - case 1221: //Minecart saloon door - mapthings[i].args[0] = !!(mapthings[i].options & MTF_AMBUSH); - break; - case 1229: //Minecart switch point - mapthings[i].args[0] = !!(mapthings[i].options & MTF_AMBUSH); - break; case 1300: //Flame jet (horizontal) case 1301: //Flame jet (vertical) mapthings[i].args[0] = mapthings[i].angle >> 13;