37  Interactions & Damage

This tour examines Doom’s pickup, damage, and death mechanics in p_inter.h and p_inter.c, including power-ups, ammo, weapons, health, armor, and combat processing.


37.0.1 Header Overview

  • p_inter.h contains declarations like P_GivePower, used to grant power-up effects to players.

37.0.2 Ammo Logic (P_GiveAmmo)

  • Rejects no-ammo types.
  • Converts clips to ammo count, handles half-clip and difficulty bonuses.
  • Clamps ammo to maxammo.
  • Selects weapon when empty and gaining ammo.
  • Uses clipammo for actual unit conversion.

37.0.3 Weapon Logic (P_GiveWeapon)

  • Differentiates dropped vs found weapons.
  • In netgames, grants ammo/bonuses on first pickup.
  • Triggers ownership and weapon switching via pendingweapon.

37.0.4 Health & Armor (P_GiveBody, P_GiveArmor)

  • Health pickups boost HP, some beyond 100%.
  • Armor logic compares pickup vs current armor.

37.0.5 Item Pickup (P_TouchSpecialThing)

  • Maps sprite types (e.g., SPR_BON1, SPR_PSTR, SPR_CLIP) to gameplay effects.
  • Plays sounds, updates inventory, adjusts ammo or health.
  • Handles dropped flags and netgame logic.

37.0.6 Damage Logic (P_DamageMobj)

  • Applies damage, knockback (excluding chainsaw), and armor absorption.
  • Processes power-ups like invulnerability.
  • Skips invalid targets.

37.0.7 Death Logic (P_KillMobj)

  • Sets object corpse state (MF_CORPSE, clears MF_SHOOTABLE).
  • Updates player kills, frags.
  • Chooses death or extreme-death animations.
  • Handles dropped items and player-specific death behavior.

And that’s how Doom handles pickups, damage, and death.