diff options
Diffstat (limited to 'src/strife')
-rw-r--r-- | src/strife/d_player.h | 56 | ||||
-rw-r--r-- | src/strife/doomdef.h | 1 | ||||
-rw-r--r-- | src/strife/g_game.c | 6 | ||||
-rw-r--r-- | src/strife/p_inter.c | 7 | ||||
-rw-r--r-- | src/strife/p_local.h | 4 | ||||
-rw-r--r-- | src/strife/p_saveg.c | 18 | ||||
-rw-r--r-- | src/strife/p_setup.c | 4 | ||||
-rw-r--r-- | src/strife/p_spec.c | 118 | ||||
-rw-r--r-- | src/strife/p_user.c | 12 |
9 files changed, 148 insertions, 78 deletions
diff --git a/src/strife/d_player.h b/src/strife/d_player.h index 8bdccf46..c4b9d7e1 100644 --- a/src/strife/d_player.h +++ b/src/strife/d_player.h @@ -79,10 +79,21 @@ typedef enum } cheat_t; +// haleyjd 08/30/10: [STRIFE] +// Player Inventory Item Structure +typedef struct inventory_s +{ + int sprite; // a sprite number + int type; // a thing type + int amount; // amount being carried +} inventory_t; // // Extended player object info: player_t // +// haleyjd 08/30/10: [STRIFE] +// * Transformed to match binary structure layout. +// typedef struct player_s { mobj_t* mo; @@ -103,14 +114,33 @@ typedef struct player_s // This is only used between levels, // mo->health is used during levels. int health; - int armorpoints; + short armorpoints; // [STRIFE] Changed to short // Armor type is 0-2. - int armortype; + short armortype; // [STRIFE] Changed to short // Power ups. invinc and invis are tic counters. int powers[NUMPOWERS]; + + // [STRIFE] Additions: + int sigiltype; // Type of Sigil carried + int nukagecount; // Nukage exposure counter + int questflags; // Quest bit flags + int pitch; // Up/down look angle + boolean centerview; // True if view should be centered + inventory_t inventory[32]; // Player inventory items + boolean st_update; // If true, update status bar + short numinventory; // Num. active inventory items + short inventorycursor; // Selected inventory item + short accuracy; // Accuracy stat + short stamina; // Stamina stat + boolean cards[NUMCARDS]; boolean backpack; + + // True if button down last tic. + int attackdown; + int usedown; + int inventorydown; // [STRIFE] Use inventory item // Frags, kills of other players. int frags[MAXPLAYERS]; @@ -123,21 +153,17 @@ typedef struct player_s int ammo[NUMAMMO]; int maxammo[NUMAMMO]; - // True if button down last tic. - int attackdown; - int usedown; - // Bit flags, for cheats and debug. // See cheat_t, above. - int cheats; + int cheats; // Refired shots are less accurate. - int refire; + int refire; // For intermission stats. - int killcount; - int itemcount; - int secretcount; + short killcount; // [STRIFE] Changed to short + //int itemcount; // [STRIFE] Eliminated these. + //int secretcount; // Hint messages. char* message; @@ -160,11 +186,17 @@ typedef struct player_s // 0-3 for which color to draw player. int colormap; + // [STRIFE] For use of teleport beacons + short allegiance; + // Overlay view sprites (gun, etc). pspdef_t psprites[NUMPSPRITES]; + // [STRIFE] Inefficient means of tracking automap state on all maps + boolean mapstate[40]; + // True if secret level has been done. - boolean didsecret; + //boolean didsecret; [STRIFE] Removed this. } player_t; diff --git a/src/strife/doomdef.h b/src/strife/doomdef.h index e911f886..0d9daa6d 100644 --- a/src/strife/doomdef.h +++ b/src/strife/doomdef.h @@ -90,6 +90,7 @@ typedef enum // // Key cards. // +// STRIFE-TODO: A hell of a bunch of keys. typedef enum { it_bluecard, diff --git a/src/strife/g_game.c b/src/strife/g_game.c index fb9c00f6..5c080d6f 100644 --- a/src/strife/g_game.c +++ b/src/strife/g_game.c @@ -1018,21 +1018,15 @@ void G_PlayerReborn (int player) int i; int frags[MAXPLAYERS]; int killcount; - int itemcount; - int secretcount; memcpy (frags,players[player].frags,sizeof(frags)); killcount = players[player].killcount; - itemcount = players[player].itemcount; - secretcount = players[player].secretcount; p = &players[player]; memset (p, 0, sizeof(*p)); memcpy (players[player].frags, frags, sizeof(players[player].frags)); players[player].killcount = killcount; - players[player].itemcount = itemcount; - players[player].secretcount = secretcount; p->usedown = p->attackdown = true; // don't do anything immediately p->playerstate = PST_LIVE; diff --git a/src/strife/p_inter.c b/src/strife/p_inter.c index ebda8925..f549c348 100644 --- a/src/strife/p_inter.c +++ b/src/strife/p_inter.c @@ -655,9 +655,10 @@ P_TouchSpecialThing default: I_Error ("P_SpecialThing: Unknown gettable thing"); } - - if (special->flags & MF_COUNTITEM) - player->itemcount++; + + // haleyjd 08/30/10: [STRIFE] No itemcount + //if (special->flags & MF_COUNTITEM) + // player->itemcount++; P_RemoveMobj (special); player->bonuscount += BONUSADD; if (player == &players[consoleplayer]) diff --git a/src/strife/p_local.h b/src/strife/p_local.h index 652ff8e1..9d4fa48f 100644 --- a/src/strife/p_local.h +++ b/src/strife/p_local.h @@ -91,7 +91,9 @@ void P_DropWeapon (player_t* player); // // P_USER // -void P_PlayerThink (player_t* player); +void P_PlayerThink (player_t* player); +// haleyjd 08/30/10: [STRIFE] Needed externally +void P_Thrust (player_t* player, angle_t angle, fixed_t move); // diff --git a/src/strife/p_saveg.c b/src/strife/p_saveg.c index e557e494..6da095e5 100644 --- a/src/strife/p_saveg.c +++ b/src/strife/p_saveg.c @@ -721,11 +721,13 @@ static void saveg_read_player_t(player_t *str) // int killcount; str->killcount = saveg_read32(); + // haleyjd 08/30/10 [STRIFE] No itemcount. // int itemcount; - str->itemcount = saveg_read32(); + //str->itemcount = saveg_read32(); + // haleyjd 08/30/10 [STRIFE] No secretcount. // int secretcount; - str->secretcount = saveg_read32(); + //str->secretcount = saveg_read32(); // char* message; str->message = saveg_readp(); @@ -754,8 +756,9 @@ static void saveg_read_player_t(player_t *str) saveg_read_pspdef_t(&str->psprites[i]); } + // haleyjd 08/30/10: [STRIFE] No intermission, no didsecret. // boolean didsecret; - str->didsecret = saveg_read32(); + //str->didsecret = saveg_read32(); } static void saveg_write_player_t(player_t *str) @@ -852,11 +855,13 @@ static void saveg_write_player_t(player_t *str) // int killcount; saveg_write32(str->killcount); + // haleyjd 08/30/10 [STRIFE] No itemcount // int itemcount; - saveg_write32(str->itemcount); + //saveg_write32(str->itemcount); + // haleyjd 08/30/10 [STRIFE] No secretcount // int secretcount; - saveg_write32(str->secretcount); + //saveg_write32(str->secretcount); // char* message; saveg_writep(str->message); @@ -885,8 +890,9 @@ static void saveg_write_player_t(player_t *str) saveg_write_pspdef_t(&str->psprites[i]); } + // haleyjd 08/30/10: [STRIFE] No intermission, no secret. // boolean didsecret; - saveg_write32(str->didsecret); + //saveg_write32(str->didsecret); } diff --git a/src/strife/p_setup.c b/src/strife/p_setup.c index 8a8bfd9c..50205d4f 100644 --- a/src/strife/p_setup.c +++ b/src/strife/p_setup.c @@ -680,8 +680,8 @@ P_SetupLevel wminfo.partime = 180; for (i=0 ; i<MAXPLAYERS ; i++) { - players[i].killcount = players[i].secretcount - = players[i].itemcount = 0; + // haleyjd 08/30/10: [STRIFE] Removed secretcount, itemcount + players[i].killcount = 0; } // Initial height of PointOfView diff --git a/src/strife/p_spec.c b/src/strife/p_spec.c index 3b4993ac..c01534a5 100644 --- a/src/strife/p_spec.c +++ b/src/strife/p_spec.c @@ -1035,64 +1035,86 @@ P_ShootSpecialLine void P_PlayerInSpecialSector (player_t* player) { sector_t* sector; - + sector = player->mo->subsector->sector; // Falling, not all the way down yet? if (player->mo->z != sector->floorheight) - return; + return; // Has hitten ground. switch (sector->special) { - case 5: - // HELLSLIME DAMAGE - if (!player->powers[pw_ironfeet]) - if (!(leveltime&0x1f)) - P_DamageMobj (player->mo, NULL, NULL, 10); - break; - - case 7: - // NUKAGE DAMAGE - if (!player->powers[pw_ironfeet]) - if (!(leveltime&0x1f)) - P_DamageMobj (player->mo, NULL, NULL, 5); - break; - - case 16: - // SUPER HELLSLIME DAMAGE - case 4: - // STROBE HURT - if (!player->powers[pw_ironfeet] - || (P_Random()<5) ) - { - if (!(leveltime&0x1f)) - P_DamageMobj (player->mo, NULL, NULL, 20); - } - break; - - case 9: - // SECRET SECTOR - player->secretcount++; - sector->special = 0; - break; - - case 11: - // EXIT SUPER DAMAGE! (for E1M8 finale) - player->cheats &= ~CF_GODMODE; + case 5: + // HELLSLIME DAMAGE + // [STRIFE] +2 to nukagecount + if(!player->powers[pw_ironfeet]) + player->nukagecount += 2; + break; + + case 16: + // [STRIFE] +4 to nukagecount + if(!player->powers[pw_ironfeet]) + player->nukagecount += 4; + break; + + case 4: + case 7: + // [STRIFE] Immediate 5 damage every 31 tics + if(!player->powers[pw_ironfeet]) + if(!(leveltime & 0x1f)) + P_DamageMobj(player->mo, NULL, NULL, 5); + break; + + case 9: + // SECRET SECTOR + //player->secretcount++; [STRIFE] Don't have a secret count. + sector->special = 0; + // STRIFE-TODO: sfx_yeah when secret is found + //if(player - players == consoleplayer) + // S_StartSound(NULL, sfx_yeah); + break; + + case 11: + // EXIT SUPER DAMAGE! (for E1M8 finale) + player->cheats &= ~CF_GODMODE; + + if (!(leveltime&0x1f)) + P_DamageMobj (player->mo, NULL, NULL, 20); + + if (player->health <= 10) + G_ExitLevel(0); + break; + + case 15: + // haleyjd 08/30/10: [STRIFE] "Instant" Death sector + P_DamageMobj(player->mo, NULL, NULL, 999); + break; + + + 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; + angle_t angle; - if (!(leveltime&0x1f)) - P_DamageMobj (player->mo, NULL, NULL, 20); + if(player->cheats & CF_NOCLIP) + return; - if (player->health <= 10) - G_ExitLevel(0); - break; - - default: - I_Error ("P_PlayerInSpecialSector: " - "unknown special %i", - sector->special); - break; + force = (tagval % 10) << 12; + angle = (tagval / 10) << 29; + + P_Thrust(player, angle, force); + } + break; + + default: + I_Error ("P_PlayerInSpecialSector: " + "unknown special %i", + sector->special); + break; }; } diff --git a/src/strife/p_user.c b/src/strife/p_user.c index 2ff7f818..609704a0 100644 --- a/src/strife/p_user.c +++ b/src/strife/p_user.c @@ -336,6 +336,18 @@ void P_PlayerThink (player_t* player) // Counters, time dependend power ups. + // haleyjd 08/30/10: [STRIFE] + // Nukage count keeps track of exposure to hazardous conditions over time. + // After accumulating 16 total seconds or more of exposure, you will take + // 5 damage roughly once per second until the count drops back under 560 + // tics. + if (player->nukagecount) + { + player->nukagecount--; + if (!(leveltime & 0x1f) && player->nukagecount > 16*TICRATE) + P_DamageMobj(player->mo, NULL, NULL, 5); + } + // Strength counts up to diminish fade. if (player->powers[pw_strength]) player->powers[pw_strength]++; |