ASL simulates ammunition shortages.
Some ammo depletion is based on historical availability throughout the war. This is called special ammo. This is represented by a depletion number on the back of the counter, such as A7 for ammo type APCR, and can vary by year and even month. When a To Hit (TH) attempt is make, the type of ammo is announced, and two dice are rolled. If the original TH roll is less than the depletion number, the ammo was available for that shot and may be available for the next shot. If the TH roll is equal to the depletion number, then the ammo was available for that shot but not for any subsequent shots. If the TH rolled is higher than the the depletion number, then the ammo wasn't available for that shot or any subsequent shots by that gun in the game.
Guns also have a breakdown number (B#), which is usually 12 for MGs. If this number or higher is rolled during a TH attempt or while firing on the IFT, then gun is broken. A repair attempt can be made in subsequent rally phases, but the gun can also be permanently broken during a repair attempt. This simulates a mechanical problem or it can simulate running out of ammo.
Some guns are further penalized with low ammo. This reduces the B# by one or two, I think, and an original 12 permanently MALFs the gun.
Finally, ammunition shortage can be invoked by special scenario rule (SSR). Under this condition, if a MMC rolls boxcars, it is replaced by a unit of lower quantity.
PanzerFausts are handled a little differently. The are considered inherent weapons. Availability is checked by rolling one die. There are several modifiers, but the odds improve as the war progresses, as does the capability of the weapon itself. I think the basic number needed to roll for availability is less than 3 or 4, but I'd have to look that up to be sure. PanzerFausts are very lethal, so for late-war scenarios, you have to be very careful not to let your armor get too close to German squads.