From 1b7d9ea6f72b2fdaae747f0d453b8bca214fa255 Mon Sep 17 00:00:00 2001 From: James Haley Date: Fri, 25 Feb 2011 15:12:13 +0000 Subject: Found the last difference causing the IWAD to desync - players experience a small amount of friction while falling (65520/65536). Also added all cheat codes. Subversion-branch: /branches/strife-branch Subversion-revision: 2278 --- src/strife/d_englsh.h | 6 +- src/strife/deh_cheat.c | 36 ++++++------ src/strife/p_map.c | 4 +- src/strife/p_mobj.c | 87 +++++++++++++++------------ src/strife/st_stuff.c | 157 +++++++++++++++++++++++-------------------------- src/strife/st_stuff.h | 26 ++++---- 6 files changed, 162 insertions(+), 154 deletions(-) (limited to 'src') diff --git a/src/strife/d_englsh.h b/src/strife/d_englsh.h index 63f38a3a..6d615194 100644 --- a/src/strife/d_englsh.h +++ b/src/strife/d_englsh.h @@ -242,16 +242,16 @@ #define STSTR_MUS "Music Change" #define STSTR_NOMUS "IMPOSSIBLE SELECTION" -#define STSTR_DQDON "You're invincible!" // [STRIFE] +#define STSTR_DQDON "You're Invincible!" // [STRIFE] #define STSTR_DQDOFF "You're a looney!" // [STRIFE] #define STSTR_KFAADDED "Very Happy Ammo Added" -#define STSTR_FAADDED "Ammo (no keys) Added" +#define STSTR_FAADDED "Ammo Added" // [STRIFE] #define STSTR_NCON "No Clipping Mode ON" #define STSTR_NCOFF "No Clipping Mode OFF" -#define STSTR_BEHOLD "inVuln, Str, Inviso, Rad, Allmap, or Lite-amp" +#define STSTR_BEHOLD "Bzrk, Inviso, Mask, Health, Pack, Stats" // [STRIFE] #define STSTR_BEHOLDX "Power-up Toggled" #define STSTR_CHOPPERS "... doesn't suck - GM" diff --git a/src/strife/deh_cheat.c b/src/strife/deh_cheat.c index c693a2df..9d3d453d 100644 --- a/src/strife/deh_cheat.c +++ b/src/strife/deh_cheat.c @@ -43,23 +43,25 @@ typedef struct static deh_cheat_t allcheats[] = { + // haleyjd 20110224: filled in all cheats {"Change music", &cheat_mus }, {"Level Warp", &cheat_clev }, - {"Stealth Boots", NULL }, // STRIFE-TODO - {"Sigil piece", NULL }, // STRIFE-TODO - {"FPS", NULL }, // STRIFE-TODO - {"TeleportMapSpot", NULL }, // STRIFE-TODO - {"Gold&StatTokens", NULL }, // STRIFE-TODO + {"Stealth Boots", &cheat_stealth }, + {"Sigil piece", &cheat_lego }, + {"FPS", &cheat_mypos }, + {"TeleportMapSpot", &cheat_scoot }, + {"Gold&StatTokens", &cheat_midas }, {"God mode", &cheat_god }, - {"Keys", NULL }, // STRIFE-TODO - {"Weapons & Ammo", NULL }, // STRIFE-TODO - {"Massacre", NULL }, // STRIFE-TODO + {"Keys", &cheat_keys }, + {"Weapons & Ammo", &cheat_ammo }, + {"Massacre", &cheat_nuke }, {"No Clipping", &cheat_noclip }, - {"Berserk", &cheat_powerup[1] }, - {"Invisibility", &cheat_powerup[2] }, - {"Enviro Suit", &cheat_powerup[3] }, - {"Health", NULL }, // STRIFE-TODO - {"Backpack", NULL }, // STRIFE-TODO + {"Berserk", &cheat_powerup[0] }, + {"Invisibility", &cheat_powerup[1] }, + {"Enviro Suit", &cheat_powerup[2] }, + {"Health", &cheat_powerup[3] }, + {"Backpack", &cheat_powerup[4] }, + // STRIFE-FIXME/TODO: Does SeHackEd not support PUMPUP{S,T,nil}, or "DOTS" ? }; static deh_cheat_t *FindCheatByName(char *name) @@ -122,10 +124,10 @@ static void DEH_CheatParseLine(deh_context_t *context, char *line, void *tag) break; } - if (deh_apply_cheats) - { - cheat->seq->sequence[i] = unsvalue[i]; - } + if (deh_apply_cheats) + { + cheat->seq->sequence[i] = unsvalue[i]; + } ++i; // Absolute limit - don't exceed diff --git a/src/strife/p_map.c b/src/strife/p_map.c index 206d8664..322e479b 100644 --- a/src/strife/p_map.c +++ b/src/strife/p_map.c @@ -263,12 +263,12 @@ boolean PIT_CheckLine (line_t* ld) // villsa [STRIFE] include jumpover flag if ( ld->flags & ML_BLOCKING && (!(ld->flags & ML_JUMPOVER) || tmfloorz + (32*FRACUNIT) > tmthing->z) ) - return false; // explicitly blocking everything + return false; // explicitly blocking everything // villsa [STRIFE] exclude floaters from blockmonster lines if ( !tmthing->player && (ld->flags & ML_BLOCKMONSTERS) && !(tmthing->flags & MF_FLOAT)) - return false; // block monsters only + return false; // block monsters only // villsa [STRIFE] if ( ld->flags & ML_BLOCKFLOATERS && tmthing->flags & MF_FLOAT ) diff --git a/src/strife/p_mobj.c b/src/strife/p_mobj.c index 85b20e37..f0743125 100644 --- a/src/strife/p_mobj.c +++ b/src/strife/p_mobj.c @@ -115,9 +115,11 @@ void P_ExplodeMissile (mobj_t* mo) // * No SKULLFLY logic (replaced by BOUNCE flag) // * Missiles can activate G1/GR line types // * Player walking logic +// * Air friction for players // #define STOPSPEED 0x1000 #define FRICTION 0xe800 +#define AIRFRICTION 0xfff0 // [STRIFE] void P_XYMovement (mobj_t* mo) { @@ -202,7 +204,7 @@ void P_XYMovement (mobj_t* mo) if(blockingline && blockingline->special) P_ShootSpecialLine(mo, blockingline); if(numspechit) - P_ShootSpecialLine(mo, spechit[numspechit]); + P_ShootSpecialLine(mo, spechit[numspechit-1]); // explode a missile if (ceilingline && @@ -234,8 +236,18 @@ void P_XYMovement (mobj_t* mo) if (mo->flags & (MF_MISSILE | MF_BOUNCE) ) return; // no friction for missiles ever + // haleyjd 20110224: [STRIFE] players experience friction even in the air, + // although less than when on the ground. With this fix, the 1.2-and-up + // IWAD demo is now in sync! if (mo->z > mo->floorz) + { + if(player) + { + mo->momx = FixedMul (mo->momx, AIRFRICTION); + mo->momy = FixedMul (mo->momy, AIRFRICTION); + } return; // no friction when airborne + } if (mo->flags & MF_CORPSE) { @@ -260,7 +272,7 @@ void P_XYMovement (mobj_t* mo) && player->cmd.sidemove == 0 ) ) ) { // if in a walking frame, stop moving - // villsa [STRIFE]: different player state (haleyjd - verified 02/02/11) + // villsa [STRIFE]: different player state (haleyjd - verified 20110202) if ( player&&(unsigned)((player->mo->state - states) - S_PLAY_01) < 4) P_SetMobjState (player->mo, S_PLAY_00); @@ -305,7 +317,6 @@ void P_ZMovement (mobj_t* mo) mo->ceilingz = mo->height + mo->z; else mo->floorz = mo->z; - } //mo->z += mo->momz; // villsa [STRIFE] unused @@ -327,7 +338,6 @@ void P_ZMovement (mobj_t* mo) else if (delta>0 && dist < (delta*3) ) mo->z += FLOATSPEED; } - } // clip movement @@ -386,13 +396,13 @@ void P_ZMovement (mobj_t* mo) mo->player->deltaviewheight = mo->momz>>3; // villsa [STRIFE] fall damage + // haleyjd 09/18/10: Repaired calculation if(mo->momz < -20*FRACUNIT) - { - // haleyjd 09/18/10: Repaired calculation P_DamageMobj(mo, NULL, mo, mo->momz / -25000); - mo->player->centerview = 1; - } + // haleyjd 20110224: *Any* fall centers your view, not just + // damaging falls (moved outside the above if). + mo->player->centerview = 1; S_StartSound (mo, sfx_oof); } mo->momz = 0; @@ -417,46 +427,45 @@ void P_ZMovement (mobj_t* mo) && !(mo->flags & (MF_NOCLIP|MF_BOUNCE)) ) { P_ExplodeMissile (mo); - return; } } - else if (! (mo->flags & MF_NOGRAVITY) ) + else // haleyjd 20110224: else here, not else if - Strife change or what? { - if (mo->momz == 0) - mo->momz = -GRAVITY*2; - else - mo->momz -= GRAVITY; - } - - if (mo->z + mo->height > mo->ceilingz) - { - // villsa [STRIFE] replace skullfly flag with MF_BOUNCE - if (mo->flags & MF_BOUNCE) + if (! (mo->flags & MF_NOGRAVITY) ) { - // villsa [STRIFE] affect reactiontime - // momz is also shifted by 1 - mo->momz = -mo->momz >> 1; - mo->reactiontime >>= 1; + if (mo->momz == 0) + mo->momz = -GRAVITY*2; + else + mo->momz -= GRAVITY; } - // hit the ceiling - if (mo->momz > 0) - mo->momz = 0; + if (mo->z + mo->height > mo->ceilingz) { - mo->z = mo->ceilingz - mo->height; - } + // villsa [STRIFE] replace skullfly flag with MF_BOUNCE + if (mo->flags & MF_BOUNCE) + { + // villsa [STRIFE] affect reactiontime + // momz is also shifted by 1 + mo->momz = -mo->momz >> 1; + mo->reactiontime >>= 1; + } - // villsa [STRIFE] also check for MF_BOUNCE - if ( (mo->flags & MF_MISSILE) - && !(mo->flags & (MF_NOCLIP|MF_BOUNCE)) ) - { - // villsa [STRIFE] check against skies - if(mo->subsector->sector->ceilingpic == skyflatnum) - P_RemoveMobj(mo); - else - P_ExplodeMissile (mo); + // hit the ceiling + if (mo->momz > 0) + mo->momz = 0; - return; + mo->z = mo->ceilingz - mo->height; + + // villsa [STRIFE] also check for MF_BOUNCE + if ( (mo->flags & MF_MISSILE) + && !(mo->flags & (MF_NOCLIP|MF_BOUNCE)) ) + { + // villsa [STRIFE] check against skies + if(mo->subsector->sector->ceilingpic == skyflatnum) + P_RemoveMobj(mo); + else + P_ExplodeMissile (mo); + } } } } diff --git a/src/strife/st_stuff.c b/src/strife/st_stuff.c index 934ce42c..7ba3bcec 100644 --- a/src/strife/st_stuff.c +++ b/src/strife/st_stuff.c @@ -248,8 +248,7 @@ static int st_fragscount; cheatseq_t cheat_mus = CHEAT("spin", 2); // [STRIFE]: idmus -> spin cheatseq_t cheat_god = CHEAT("omnipotent", 0); // [STRIFE]: iddqd -> omnipotent -cheatseq_t cheat_ammo = CHEAT("idkfa", 0); // STRIFE-TODO -cheatseq_t cheat_ammonokey = CHEAT("idfa", 0); // STRIFE-TODO +cheatseq_t cheat_ammo = CHEAT("boomstix", 0); // [STRIFE]: idfa -> boomstix cheatseq_t cheat_noclip = CHEAT("elvis", 0); // [STRIFE]: idclip -> elvis cheatseq_t cheat_clev = CHEAT("rift", 2); // [STRIFE]: idclev -> rift cheatseq_t cheat_mypos = CHEAT("gps", 0); // [STRIFE]: idmypos -> gps @@ -259,16 +258,32 @@ cheatseq_t cheat_keys = CHEAT("jimmy", 0); // [STRIFE]: new cheat j cheatseq_t cheat_stealth = CHEAT("gripper", 0); // [STRIFE]: new cheat gripper cheatseq_t cheat_midas = CHEAT("donnytrump", 0); // [STRIFE]: new cheat cheatseq_t cheat_lego = CHEAT("lego", 0); // [STRIFE]: new cheat +cheatseq_t cheat_dev = CHEAT("dots", 0); // [STRIFE]: new cheat -cheatseq_t cheat_powerup[7] = // STRIFE-TODO +// haleyjd 20110224: enumeration for access to powerup cheats +enum { - CHEAT("idbeholdv", 0), - CHEAT("idbeholds", 0), - CHEAT("idbeholdi", 0), - CHEAT("idbeholdr", 0), - CHEAT("idbeholda", 0), - CHEAT("idbeholdl", 0), - CHEAT("idbehold", 0), + ST_PUMPUP_B, + ST_PUMPUP_I, + ST_PUMPUP_M, + ST_PUMPUP_H, + ST_PUMPUP_P, + ST_PUMPUP_S, + ST_PUMPUP_T, + ST_PUMPUP, + NUM_ST_PUMPUP +}; + +cheatseq_t cheat_powerup[NUM_ST_PUMPUP] = // [STRIFE] +{ + CHEAT("pumpupb", 0), + CHEAT("pumpupi", 0), + CHEAT("pumpupm", 0), + CHEAT("pumpuph", 0), + CHEAT("pumpupp", 0), + CHEAT("pumpups", 0), + CHEAT("pumpupt", 0), + CHEAT("pumpup", 0), }; //cheatseq_t cheat_choppers = CHEAT("idchoppers", 0); [STRIFE] no such thing @@ -481,8 +496,7 @@ boolean ST_Responder(event_t* ev) else S_ChangeMusic(musnum, 1); } - /* - // STRIFE-TODO: "dev" cheat - is this the "DOTS" cheat? + // [STRIFE]: "dev" cheat - "DOTS" else if (cht_CheckCheat(&cheat_dev, ev->data2)) { devparm = !devparm; @@ -491,7 +505,6 @@ boolean ST_Responder(event_t* ev) else plyr->message = DEH_String("devparm OFF"); } - */ // [STRIFE] Cheats below are not allowed in netgames or demos if(netgame || !usergame) @@ -511,46 +524,32 @@ boolean ST_Responder(event_t* ev) plyr->message = DEH_String(STSTR_DQDON); } else + { + plyr->st_update = true; plyr->message = DEH_String(STSTR_DQDOFF); - } - // - // STRIFE-TODO: IDFA, IDKFA equivs are unfinished - // - else if (cht_CheckCheat(&cheat_ammonokey, ev->data2)) - { - // 'fa' cheat for killer fucking arsenal - plyr->armorpoints = deh_idfa_armor; - plyr->armortype = deh_idfa_armor_class; - - for (i=0;iweaponowned[i] = true; - - for (i=0;iammo[i] = plyr->maxammo[i]; - - plyr->message = DEH_String(STSTR_FAADDED); + } } else if (cht_CheckCheat(&cheat_ammo, ev->data2)) { - // 'kfa' cheat for key full ammo + // [STRIFE]: "BOOMSTIX" cheat for all normal weapons plyr->armorpoints = deh_idkfa_armor; plyr->armortype = deh_idkfa_armor_class; - for (i=0;iweaponowned[i] = true; + for (i = 0; i < NUMWEAPONS; i++) + if(!isdemoversion || weaponinfo[i].availabledemo) + plyr->weaponowned[i] = true; + + // Takes away the Sigil, even if you already had it... + plyr->weaponowned[wp_sigil] = false; for (i=0;iammo[i] = plyr->maxammo[i]; - for (i=0;icards[i] = true; - - plyr->message = DEH_String(STSTR_KFAADDED); + plyr->message = DEH_String(STSTR_FAADDED); } - - // villsa [STRIFE] else if(cht_CheckCheat(&cheat_keys, ev->data2)) { + // villsa [STRIFE]: "JIMMY" cheat for all keys #define FIRSTKEYSETAMOUNT 16 if(plyr->cards[FIRSTKEYSETAMOUNT - 1]) @@ -596,10 +595,9 @@ boolean ST_Responder(event_t* ev) plyr->mo->flags &= ~MF_NOCLIP; } } - - // villsa [STRIFE] else if(cht_CheckCheat(&cheat_stealth, ev->data2)) { + // villsa [STRIFE]: "GRIPPER" cheat; nothing to do with stealth... plyr->cheats ^= CF_NOMOMENTUM; if(plyr->cheats & CF_NOMOMENTUM) plyr->message = DEH_String("STEALTH BOOTS ON"); @@ -607,82 +605,71 @@ boolean ST_Responder(event_t* ev) plyr->message = DEH_String("STEALTH BOOTS OFF"); } - - // - // STRIFE-TODO: Fix idbehold equivalent - // - for (i=0;i<6;i++) + for(i = 0; i < ST_PUMPUP_B + 3; ++i) { - // 'behold?' power-up cheats - if (cht_CheckCheat(&cheat_powerup[i], ev->data2)) + // [STRIFE]: Handle berserk, invisibility, and envirosuit + if(cht_CheckCheat(&cheat_powerup[i], ev->data2)) { - if (!plyr->powers[i]) - P_GivePower( plyr, i); - else if (i!=pw_strength) - plyr->powers[i] = 1; + if(plyr->powers[i]) + plyr->powers[i] = (i != 1); else - plyr->powers[i] = 0; - + P_GivePower(plyr, i); plyr->message = DEH_String(STSTR_BEHOLDX); } } - // STRIFE-TODO: - if (cht_CheckCheat(&cheat_powerup[6], ev->data2)) - { - // 'behold' power-up menu - plyr->message = DEH_String(STSTR_BEHOLD); - } - - // - // STRIFE-TODO: - // * Give medical items cheat (what code???) - // * Ammo cheat - // * Stats cheat - // * Unknown power-giving cheat - /* - if(cht_CheckCheat(&cheat_meditems, ev->data2)) + if(cht_CheckCheat(&cheat_powerup[ST_PUMPUP_H], ev->data2)) { + // [STRIFE]: PUMPUPH gives medical inventory items P_GiveItemToPlayer(plyr, SPR_STMP, MT_INV_MED1); P_GiveItemToPlayer(plyr, SPR_MDKT, MT_INV_MED2); P_GiveItemToPlayer(plyr, SPR_FULL, MT_INV_MED3); plyr->message = DEH_String("you got the stuff!"); } - if (cht_CheckCheat(&off_885E4, ev->data2)) + if(cht_CheckCheat(&cheat_powerup[ST_PUMPUP_P], ev->data2)) { + // [STRIFE]: PUMPUPP gives backpack if(!plyr->backpack) { - for(i = 0; i < NUMAMMO; i++) + for(i = 0; i < NUMAMMO; ++i) plyr->maxammo[i] = 2 * plyr->maxammo[i]; - plyr->backpack = true; } - for(i = 0; i < NUMAMMO; i++) + plyr->backpack = true; + + for(i = 0; i < NUMAMMO; ++i) P_GiveAmmo(plyr, i, 1); plyr->message = DEH_String("you got the stuff!"); } - if(cht_CheckCheat(&cheat_stats, ev->data2)) + if(cht_CheckCheat(&cheat_powerup[ST_PUMPUP_S], ev->data2)) { + // [STRIFE]: PUMPUPS gives stamina and accuracy upgrades P_GiveItemToPlayer(plyr, SPR_TOKN, MT_TOKEN_STAMINA); P_GiveItemToPlayer(plyr, SPR_TOKN, MT_TOKEN_NEW_ACCURACY); plyr->message = DEH_String("you got the stuff!"); } - // - // UNKNOWN POWER GIVING CHEAT HERE... - // - */ - - // STRIFE-TODO: weird isdemoversion check + if(cht_CheckCheat(&cheat_powerup[ST_PUMPUP_T], ev->data2)) + { + // [STRIFE] PUMPUPT gives targeter + P_GivePower(plyr, pw_targeter); + plyr->message = DEH_String("you got the stuff!"); + } + // [STRIFE]: PUMPUP + if (cht_CheckCheat(&cheat_powerup[ST_PUMPUP], ev->data2)) + { + // 'behold' power-up menu + plyr->message = DEH_String(STSTR_BEHOLD); + return false; + } if (cht_CheckCheat(&cheat_mypos, ev->data2)) { // [STRIFE] 'GPS' for player position - static char buf[ST_MSGWIDTH]; + static char buf[ST_MSGWIDTH]; sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)", players[consoleplayer].mo->angle, players[consoleplayer].mo->x, players[consoleplayer].mo->y); plyr->message = buf; } - // 'rift' change-level cheat if (cht_CheckCheat(&cheat_clev, ev->data2)) @@ -697,6 +684,7 @@ boolean ST_Responder(event_t* ev) // haleyjd 09/01/10: Removed Chex Quest stuff. // haleyjd 09/15/10: Removed retail/registered/shareware stuff + // STRIFE-TODO: different bounds in v1.31 // Ohmygod - this is not going to work. if (map <= 0 || map > 40) return false; @@ -719,6 +707,7 @@ boolean ST_Responder(event_t* ev) { plyr->message = DEH_String("Spawning to spot"); G_RiftCheat(spot); + return false; } } @@ -727,6 +716,7 @@ boolean ST_Responder(event_t* ev) { stonecold ^= 1; plyr->message = DEH_String("Kill 'em. Kill 'em All"); + return false; } // villsa [STRIFE] @@ -737,7 +727,8 @@ boolean ST_Responder(event_t* ev) } // villsa [STRIFE] - if(cht_CheckCheat(&cheat_lego, ev->data2)) + // haleyjd 20110224: No sigil in demo version + if(!isdemoversion && cht_CheckCheat(&cheat_lego, ev->data2)) { plyr->st_update = true; if(plyr->weaponowned[wp_sigil]) diff --git a/src/strife/st_stuff.h b/src/strife/st_stuff.h index 0223108c..34b1146d 100644 --- a/src/strife/st_stuff.h +++ b/src/strife/st_stuff.h @@ -88,16 +88,22 @@ typedef enum boolean ST_Responder(event_t* ev); extern byte *st_backing_screen; -extern cheatseq_t cheat_mus; -extern cheatseq_t cheat_god; -extern cheatseq_t cheat_ammo; -extern cheatseq_t cheat_ammonokey; -extern cheatseq_t cheat_noclip; -extern cheatseq_t cheat_commercial_noclip; -extern cheatseq_t cheat_powerup[7]; -extern cheatseq_t cheat_choppers; -extern cheatseq_t cheat_clev; -extern cheatseq_t cheat_mypos; + +extern cheatseq_t cheat_mus; // [STRIFE]: idmus -> spin +extern cheatseq_t cheat_god; // [STRIFE]: iddqd -> omnipotent +extern cheatseq_t cheat_ammo; // [STRIFE]: idfa -> boomstix +extern cheatseq_t cheat_noclip; // [STRIFE]: idclip -> elvis +extern cheatseq_t cheat_clev; // [STRIFE]: idclev -> rift +extern cheatseq_t cheat_mypos; // [STRIFE]: idmypos -> gps +extern cheatseq_t cheat_scoot; // [STRIFE]: new cheat scoot +extern cheatseq_t cheat_nuke; // [STRIFE]: new cheat stonecold +extern cheatseq_t cheat_keys; // [STRIFE]: new cheat jimmy (all keys) +extern cheatseq_t cheat_stealth; // [STRIFE]: new cheat gripper +extern cheatseq_t cheat_midas; // [STRIFE]: new cheat +extern cheatseq_t cheat_lego; // [STRIFE]: new cheat +extern cheatseq_t cheat_dev; // [STRIFE]: new cheat + +extern cheatseq_t cheat_powerup[]; #endif -- cgit v1.2.3