------------------------------------------------------------------------------- Known Strife Bugs ------------------------------------------------------------------------------- Bugs with an asterisk cannot be fully emulated in Chocolate Strife. Laser does not hit peasant -------------------------- During the graphical introduction sequence which replaces the R_Init loading dots from DOOM, the laser visibly stops very short of the peasant. Monsters lose speedup/slowdown skill-level-related properties when loading -------------------------------------------------------------------------- Various monsters become faster or slower depending on the skill you pick when starting a new game. However if you load a game from a save file, they return to normal. Bishop's missiles are faster in easy skills, slower in hard skills ------------------------------------------------------------------ The Bishop's lethal homing missiles get faster in the easiest skill setting, and slower in Bloodbath. This looks to have been the result of confusion in the programming. Text dimensioning routines are unsafe in various ways ----------------------------------------------------- The M_DialogDimMsg and HU_WriteText routines can be coaxed into corrupting memory or causing infinite loops if certain input strings are given. This would only be a problem with customized dialogue lumps. "Alarm Token" object crash -------------------------- The MT_TOKEN_ALARM inventory item assumes it can only be given to the player during a dialogue sequence. If modified with SeHackEd to have a DoomEd number and placed on a map directly, it will crash the game when collected. Last inventory slot is unusable ------------------------------- Due to sloppy bounds checking, the very last slot of the inventory is not usable (Slot 32 of 32 slots). Inventory overflow ------------------ If the player has more than 32 distinct inventory items, the player_t structure will be overwritten, which usually crashes the game. Door multiple thinkers glitch ----------------------------- When retriggering a door that is already in motion, in order to reverse the motion of the door without waiting for it to finish moving, some door linedef types are allowed to fall through into the default case of a switch statement and start a new thinker on the door. This new thinker will conflict with the one currently on the door. Depending on the timing and the number of thinkers started on the door sector, the door may become stuck open, stuck shut, or stuck in midair. This can become a game-wrecking glitch. ML_TWOSIDED crashes ------------------- Strife worsens the situation in DOOM by adding numerous additional checks for two-sided lines by using the ML_TWOSIDED flag instead of checking that the linedef actually has two sides before trying to use the back side. This means that any lines in the map which have ML_TWOSIDED but are not really two-sided may crash the game under certain circumstances. Torpedo is never auto-selected ------------------------------ There is code which would auto-select the torpedo (the Mauler's alt-fire mode) when the player has run out of ammo. However, the normal Mauler uses less ammo and is checked for first, so the Torpedo is never selected automatically. Sigil damage thrusts the player toward the east ----------------------------------------------- The player is sent in as the inflictor for the damage caused to himself by firing the Sigil, so P_DamageMobj will inflict thrust on the player. Because the source and inflictor are the same object, the angle returned is always 0, or toward the east. Thus you may be thrusted sideways or forward depending on the direction you are facing. Savegame load target restoration bug ------------------------------------ Strife attempts to circumvent DOOM's limitation with monsters falling asleep when savegames are loaded by setting the targets of any monsters who were angry at *anything* at the time of the save to the new player body. However, monsters who are loaded before the player's body has been loaded from the save file will try to target a dummy player spawned when the level was loaded from disk and then discarded, so those monsters will not properly target the player when the load is finished. The behavior appears random during play. Tracer targets not cleared or restored * -------------------------------------- A bug inherited directly from DOOM v1.666, Strife does not clear the value of mobj_t::tracer when loading objects from savegames. This means it uses a now invalid pointer value from a previous execution of the program. The resulting behavior appears random during play, with homing missiles possibly flying straight, veering off in a strange direction, or homing in on completely different objects. Chocolate Strife cannot emulate this bug safely because it invokes undefined behavior. Burning players can activate linedefs ------------------------------------- When the player dies by a fiery attack, he can run around for a short period of time screaming and waving his arms around. During this time, any type of linedefs can be activated except for WR Exit to Level types. Burning players can exit the level ---------------------------------- If the player knows the location of the hidden switches which raise only during deathmatch, the player can activate those switches by catching himself on fire and running across the normal exit lines while pushing the space bar. For some reason the SR Exit to Level linedef types do NOT check if the player is alive before allowing them to be activated. This glitch can be severely abused to sequence break. Line type 234 makes no "cannot activate" sound ---------------------------------------------- All locked door types in Strife make an "oof" sound if the player tries to activate them without the key, inventory item, weapon, or questflag they check, *except* for line type 234, "SR Raise Door if Quest 3 (Permission to visit Irale)". It was likely forgotten. Sigil -1 can be gained via the LEGO cheat ----------------------------------------- When the LEGO cheat is typed for the sixth time, the player will change to an invalid sigil type -1, which causes a light flash when raised, emits nothing when fired, and displays several frames from the grenade launcher during its firing sequence. Items are given to players not in the game * ------------------------------------------ When some objectives are completed, such as destroying the Converter in the factory, Strife gives the awards commensurate with the task to all 8 players in the players array, even if they aren't active players in the game. Since non-active players have a NULL mobj_t *, this results in portions of the DOS interrupt table being read and corrupted. Oddly this is rarely if ever fatal to the game under DOS, but the code ported directly to Chocolate Strife suffered crashes and had to be modified to avoid the particular accesses which caused crashes that didn't occur in DOS. spechit array accessed at index -1 * ---------------------------------- Strife regularly accesses the spechit array out-of-bounds at index -1, reading whatever happens to be there as a pointer to a linedef. This occurs in code added to the function P_XYMovement which is intended to enhance the ability for missiles to activate shoot-type (S1/SR) linedefs. The DOS executable rarely if ever displays any negative reaction to this undefined behavior, but the directly ported code would cause Chocolate Strife to crash and therefore had to be modified. Unstable screenwipe algorithm ----------------------------- Modification of Strife's palette or XLATAB lump and certain key combinations of source and destination screen contents can cause the Strife cross-fade screenwipe algorithm to enter an infinite loop. This occurs because there is no bound on the iteration count; the algorithm will continue running until it senses that no pixel on the entire framebuffer has changed in value due to the wipe process.