diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/strife/d_items.c | 16 | ||||
-rw-r--r-- | src/strife/doomdef.h | 33 | ||||
-rw-r--r-- | src/strife/g_game.c | 4 | ||||
-rw-r--r-- | src/strife/p_enemy.c | 16 | ||||
-rw-r--r-- | src/strife/p_local.h | 3 | ||||
-rw-r--r-- | src/strife/p_map.c | 14 | ||||
-rw-r--r-- | src/strife/p_mobj.c | 66 | ||||
-rw-r--r-- | src/strife/p_pspr.c | 60 | ||||
-rw-r--r-- | src/strife/p_user.c | 25 |
9 files changed, 198 insertions, 39 deletions
diff --git a/src/strife/d_items.c b/src/strife/d_items.c index d9da946e..8a8547bf 100644 --- a/src/strife/d_items.c +++ b/src/strife/d_items.c @@ -58,7 +58,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // electric bow - am_clip, + am_elecbolts, S_XBOW_02, S_XBOW_01, S_XBOW_00, @@ -68,7 +68,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // rifle - am_shell, + am_bullets, S_RIFG_02, S_RIFG_01, S_RIFG_00, @@ -78,7 +78,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // missile launcher - am_clip, + am_missiles, S_MMIS_02, S_MMIS_01, S_MMIS_00, @@ -88,12 +88,12 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // grenade launcher - am_misl, + am_hegrenades, S_GREN_02, S_GREN_01, S_GREN_00, S_GREN_03, - 103, + S_GREF_00, 0 }, { @@ -128,7 +128,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // poison bow - am_shell, + am_poisonbolts, S_XBOW_15, S_XBOW_14, S_XBOW_13, @@ -138,7 +138,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // wp grenade launcher - am_shell, + am_wpgrenades, S_GREN_10, S_GREN_09, S_GREN_08, @@ -148,7 +148,7 @@ weaponinfo_t weaponinfo[NUMWEAPONS] = }, { // torpedo - am_shell, + am_cell, S_BLST_18, S_BLST_17, S_BLST_13, diff --git a/src/strife/doomdef.h b/src/strife/doomdef.h index ffdcc02e..50db2fc8 100644 --- a/src/strife/doomdef.h +++ b/src/strife/doomdef.h @@ -82,9 +82,23 @@ typedef enum #define MTF_EASY 1 #define MTF_NORMAL 2 #define MTF_HARD 4 - +// villsa [STRIFE] standing monsters +#define MTF_STAND 8 +// villsa [STRIFE] don't spawn in single player +#define MTF_NOTSINGLE 16 // Deaf monsters/do not react to sound. -#define MTF_AMBUSH 8 +#define MTF_AMBUSH 32 +// villsa [STRIFE] friendly to players +#define MTF_FRIEND 64 +// villsa [STRIFE] TODO - identify +#define MTF_UNKNOWN 128 +// villsa [STRIFE] thing is translucent +#define MTF_TRANSLUCENT 256 +// villsa [STRIFE] TODO - identify +#define MTF_MVIS 512 +// villsa [STRIFE] TODO - identify +#define MTF_RESERVED 1024 + // @@ -135,12 +149,17 @@ typedef enum // Ammunition types defined. typedef enum { - am_clip, // Pistol / chaingun ammo. - am_shell, // Shotgun / double barreled shotgun. - am_cell, // Plasma rifle, BFG. - am_misl, // Missile launcher. + am_bullets, + am_elecbolts, + am_poisonbolts, + am_cell, + am_missiles, + am_hegrenades, + am_wpgrenades, + NUMAMMO, - am_noammo // Unlimited for chainsaw / fist. + + am_noammo // unlimited ammo } ammotype_t; diff --git a/src/strife/g_game.c b/src/strife/g_game.c index 352e65de..2b7c2cb0 100644 --- a/src/strife/g_game.c +++ b/src/strife/g_game.c @@ -1068,8 +1068,8 @@ void G_PlayerReborn (int player) p->health = deh_initial_health; // Use dehacked value p->readyweapon = p->pendingweapon = wp_fist; // villsa [STRIFE] default to fists p->weaponowned[wp_fist] = true; - //p->weaponowned[wp_pistol] = true; // villsa [STRIFE] - p->ammo[am_clip] = deh_initial_bullets; + //p->weaponowned[wp_pistol] = true; // villsa [STRIFE] unused + //p->ammo[am_clip] = deh_initial_bullets; // villsa [STRIFE] unused for (i=0 ; i<NUMAMMO ; i++) p->maxammo[i] = maxammo[i]; diff --git a/src/strife/p_enemy.c b/src/strife/p_enemy.c index 09567e99..cf610285 100644 --- a/src/strife/p_enemy.c +++ b/src/strife/p_enemy.c @@ -2374,9 +2374,20 @@ void A_RaiseAlarm(mobj_t* actor) } +// +// A_MissileTick +// villsa [STRIFE] - new codepointer +// + void A_MissileTick(mobj_t* actor) { + int r = actor->reactiontime--; + if(r - 1 <= 0) + { + P_ExplodeMissile(actor); + actor->flags &= ~MF_MISSILE; + } } void A_SpawnGrenadeFire(mobj_t* actor) @@ -2464,11 +2475,6 @@ void A_FireMauler2(mobj_t* actor) } -void A_FireGrenade(mobj_t* actor) -{ - -} - void A_FireElectricBolt(mobj_t* actor) { diff --git a/src/strife/p_local.h b/src/strife/p_local.h index 0c59ec0d..87370e09 100644 --- a/src/strife/p_local.h +++ b/src/strife/p_local.h @@ -129,7 +129,10 @@ void P_SpawnPuff (fixed_t x, fixed_t y, fixed_t z); mobj_t* P_SpawnSparkPuff(fixed_t x, fixed_t y, fixed_t z); // villsa [STRIFE] void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, int damage); mobj_t* P_SpawnMissile (mobj_t* source, mobj_t* dest, mobjtype_t type); +mobj_t* P_SpawnFacingMissile(mobj_t* source, mobj_t* target, mobjtype_t type); // villsa [STRIFE] void P_SpawnPlayerMissile (mobj_t* source, mobjtype_t type); +mobj_t* P_SpawnMortar(mobj_t *source, mobjtype_t type); // villsa [STRIFE] +void P_ExplodeMissile (mobj_t* mo); // villsa [STRIFE] // diff --git a/src/strife/p_map.c b/src/strife/p_map.c index cd289c88..4897d164 100644 --- a/src/strife/p_map.c +++ b/src/strife/p_map.c @@ -530,9 +530,14 @@ P_TryMove &&*/tmceilingz - thing->z < thing->height) return false; // mobj must lower itself to fit - if ( /*!(thing->flags&MF_TELEPORT) // villsa [STRIFE] unused - &&*/ tmfloorz - thing->z > 24*FRACUNIT ) - return false; // too big a step up + // villsa [STRIFE] non-robots are limited to 16 unit step height + if(!(thing->flags & MF_NOBLOOD) && tmfloorz - thing->z > (16*FRACUNIT) || + tmfloorz - thing->z > 24*FRACUNIT) + return false; // too big a step up + + // villsa [STRIFE] special case for missiles + if(thing->flags & MF_MISSILE && tmfloorz - thing->z > (4*FRACUNIT)) + return false; if ( !(thing->flags&(MF_DROPOFF|MF_FLOAT)) && tmfloorz - tmdropoffz > 24*FRACUNIT ) @@ -792,7 +797,8 @@ boolean PTR_SlideTraverse (intercept_t* in) if (opentop - slidemo->z < slidemo->height) goto isblocking; // mobj is too high - if (openbottom - slidemo->z > 24*FRACUNIT ) + // villsa [STRIFE] change from 24 to 16 + if (openbottom - slidemo->z > 16*FRACUNIT ) goto isblocking; // too big a step up // this line doesn't block movement diff --git a/src/strife/p_mobj.c b/src/strife/p_mobj.c index baa8fa05..a64397d8 100644 --- a/src/strife/p_mobj.c +++ b/src/strife/p_mobj.c @@ -174,6 +174,21 @@ void P_XYMovement (mobj_t* mo) { // try to slide along it P_SlideMove (mo); } + // villsa [STRIFE] check for bouncy missiles + else if(mo->flags & MF_BOUNCE) + { + mo->momx >>= 3; + mo->momy >>= 3; + + if (P_TryMove(mo, mo->x - xmove, ymove + mo->y)) + mo->momy = -mo->momy; + else + mo->momx = -mo->momx; + + + xmove = 0; + ymove = 0; + } else if (mo->flags & MF_MISSILE) { // explode a missile @@ -986,7 +1001,7 @@ P_SpawnBlood z += ((P_Random()-P_Random())<<10); th = P_SpawnMobj (x,y,z, MT_BLOOD_DEATH); th->momz = FRACUNIT*2; - th->tics -= P_Random()&3; + //th->tics -= P_Random()&3; // villsa [STRIFE] unused // villsa [STRIFE] unused /*if (th->tics < 1) @@ -995,6 +1010,8 @@ P_SpawnBlood // villsa [STRIFE] different checks for damage range if (damage >= 10 && damage <= 13) P_SetMobjState (th,S_BLOD_00); + else if (damage < 10 && damage >= 7) + P_SetMobjState (th,S_BLOD_01); else if (damage < 7) P_SetMobjState (th,S_BLOD_02); } @@ -1094,11 +1111,12 @@ P_SpawnMissile } // -// P_SpawnSubMissile -// villsa [STRIFE] new function (TODO - add description) +// P_SpawnFacingMissile +// villsa [STRIFE] new function +// Spawn a missile based on source's angle // -mobj_t* P_SpawnSubMissile(mobj_t* source, mobj_t* target, mobjtype_t type, fixed_t radius) +mobj_t* P_SpawnFacingMissile(mobj_t* source, mobj_t* target, mobjtype_t type) { mobj_t* th; angle_t an; @@ -1173,10 +1191,19 @@ P_SpawnPlayerMissile slope = 0; } } + + // villsa [STRIFE] + if(linetarget) + source->target = linetarget; x = source->x; y = source->y; - z = source->z + 4*8*FRACUNIT; + + // villsa [STRIFE] + if(!(source->flags & MF_FEETCLIPPED)) + z = source->z + 32*FRACUNIT; + else + z = source->z + 22*FRACUNIT; th = P_SpawnMobj (x,y,z, type); @@ -1194,3 +1221,32 @@ P_SpawnPlayerMissile P_CheckMissileSpawn (th); } +// +// P_SpawnMortar +// villsa [STRIFE] new function +// Spawn a high-arcing ballistic projectile +// + +mobj_t* P_SpawnMortar(mobj_t *source, mobjtype_t type) +{ + mobj_t* th; + angle_t an; + fixed_t slope; + + an = source->angle; + + th = P_SpawnMobj(source->x, source->y, source->z, type); + th->target = source; + th->angle = an; + an >>= ANGLETOFINESHIFT; + + slope = P_AimLineAttack(source, source->angle, 1024*FRACUNIT); + + th->momx = FixedMul (th->info->speed, finecosine[an]); + th->momy = FixedMul (th->info->speed, finesine[an]); + th->momz = FixedMul(th->info->speed, slope); + + P_CheckMissileSpawn(th); + + return th; +} diff --git a/src/strife/p_pspr.c b/src/strife/p_pspr.c index 1444cf4f..2d30c2d2 100644 --- a/src/strife/p_pspr.c +++ b/src/strife/p_pspr.c @@ -164,6 +164,9 @@ boolean P_CheckAmmo (player_t* player) ammotype_t ammo; int count; + // villsa [STRIFE] TODO - temp until this function is cleaned up + return true; + ammo = weaponinfo[player->readyweapon].ammo; // Minimal amount for one shot varies. @@ -852,6 +855,63 @@ A_BFGsound S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds } +// +// A_FireGrenade +// villsa [STRIFE] - new codepointer +// + +void A_FireGrenade(player_t* player, pspdef_t* pspr) +{ + mobjtype_t type; + mobj_t* mo; + state_t* st1; + state_t* st2; + angle_t an; + fixed_t radius; + + // decide on what type of grenade to spawn + if(player->readyweapon == wp_hegrenade) + type = MT_HEGRENADE; + else + { + if(player->readyweapon == wp_wpgrenade) + type = MT_PGRENADE; + } + + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + // set flash frame + st1 = &states[(pspr->state - states) + weaponinfo[player->readyweapon].flashstate]; + st2 = &states[weaponinfo[player->readyweapon].atkstate]; + P_SetPsprite(player, ps_flash, st1 - st2); + + player->mo->z += (32*FRACUNIT); // ugh + mo = P_SpawnMortar(player->mo, type); + player->mo->z -= (32*FRACUNIT); // ugh + + // change momz based on player's pitch + mo->momz = FixedMul((player->pitch<<FRACBITS) / 160, mo->info->speed) + (8*FRACUNIT); + S_StartSound(mo, mo->info->seesound); + + radius = mobjinfo[type].radius + player->mo->info->radius; + an = (player->mo->angle >> ANGLETOFINESHIFT); + + mo->x += FixedMul(finecosine[an], radius + (4*FRACUNIT)); + mo->y += FixedMul(finesine[an], radius + (4*FRACUNIT)); + + // shoot grenade from left or right side? + if(&states[weaponinfo[player->readyweapon].atkstate] == pspr->state) + an = (player->mo->angle - ANG90) >> ANGLETOFINESHIFT; + else + an = (player->mo->angle + ANG90) >> ANGLETOFINESHIFT; + + mo->x += FixedMul((15*FRACUNIT), finecosine[an]); + mo->y += FixedMul((15*FRACUNIT), finesine[an]); + + // set bounce flag + mo->flags |= MF_BOUNCE; +} + // diff --git a/src/strife/p_user.c b/src/strife/p_user.c index 9e038a06..5a140190 100644 --- a/src/strife/p_user.c +++ b/src/strife/p_user.c @@ -166,18 +166,27 @@ void P_MovePlayer (player_t* player) // if not onground. onground = (player->mo->z <= player->mo->floorz); - // villsa [STRIFE] jump button - if (onground && cmd->buttons2 & BT2_JUMP) + // villsa [STRIFE] allows player to climb over things by jumping + if(!onground) { - if(!player->deltaviewheight) - player->mo->momz += (8*FRACUNIT); + if(cmd->forwardmove) + P_Thrust (player, player->mo->angle, cmd->forwardmove); } + else + { + // villsa [STRIFE] jump button + if (cmd->buttons2 & BT2_JUMP) + { + if(!player->deltaviewheight) + player->mo->momz += (8*FRACUNIT); + } - if (cmd->forwardmove && onground) - P_Thrust (player, player->mo->angle, cmd->forwardmove*2048); + if (cmd->forwardmove && onground) + P_Thrust (player, player->mo->angle, cmd->forwardmove*2048); - if (cmd->sidemove && onground) - P_Thrust (player, player->mo->angle-ANG90, cmd->sidemove*2048); + if (cmd->sidemove && onground) + P_Thrust (player, player->mo->angle-ANG90, cmd->sidemove*2048); + } // villsa [STRIFE] TODO - verify if ( (cmd->forwardmove || cmd->sidemove) |