EDIT: Since the 64-bit update was released on 2024-04-18, this wallbug no longer works.
Earlier this week I was investigating some strange phenomenon with how certain walls worked on some places. It was known that you could get stuck on walls on aando b2 and synapse level 14, shoot yourself with a few rockets, and launch in the air. I asked ILDPRUT (who really knows a lot of stuff about the source engine) about the bug and I'm writing the steps to provide the research to the public.
Steps
1. Player must be completely flush against the wall (not 0.03 units away from the wall on cl_showpos).
2. Player must duck to get stuck in the wall.
3. Player must be in the following coordinates when hugging the wall in the direction perpendicular to the wall: (2^n - 48, 2^n), n > 0
Which are the following ranges in any horizontal direction:
(-47, 64)
(80, 128)
(208, 256)
(464, 512)
(976, 1024)
(2000, 2048)
(4048, 4096)
(8144, 8192)
(16336, 16384)
This means that the wall should be located on [2^n - 72, 2^n - 24), n > 0
Note: Does not work on the negative side of the x or y axis.
Technical explanation
Thanks to ILDPRUT for providing the technical explanation to me. The bounding box of the player is represented by two vectors.
While standing, these vectors are:
stand_min = (-24, -24, 0)
stand_max = (24, 24, 82)
While ducking, these vectors are:
duck_min = (-24, -24, 0)
duck_max = (24, 24, 62)
When ducking, the following calculation is supposed to happen:
origin = origin + ((stand_max - stand_min) - (duck_max - duck_min))
But this calculation happens in reality (seemingly on Linux only):
origin = ((origin + stand_max) - stand_min) - (duck_max - duck_min)
Mathematically these calculations are equivalent, but the second calculation causes a floating point inaccuracies under certain circumstances, namely when a player is in the ranges in the previous section. When you hug the wall as tight as possible, you end up at a position that is really close to the wall (~0.001 HU). When you crouch while being within 48 HU away from a higher power of 2 in the direction perpendicular to the wall, the new coordinate ends up losing the information that it was really close to the wall and just sets the horizontal coordinate to be inside the wall, which causes the player to get stuck.