jump.tf Forums
Welcome B)

The Linux Bug (2022 wallbug tech discovery)

ondkaja

  • Newbie
  • *
    • Posts: 38
    • Frags: +0/-0
    • View Profile
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.

« Last Edit: April 20, 2024, 01:15:06 PM by ondkaja »


VAVLIE

  • Novice
  • **
    • Posts: 62
    • Frags: +0/-0
    • View Profile
Making a list of the pertinent places where Linux Wallbugs can be used. If you know of any not on the list just message me on steam/discord


jump_aando_b1_tmps, b2 - Front wall to go up the hole
Spoiler (click to show/hide)

jump_acepogo, l11 (last) - Right side wall throughout
Spoiler (click to show/hide)

jump_and, lvl 13 - Right side wall
Spoiler (click to show/hide)

jump_around_cr, b7 - Right side wall throughout
Spoiler (click to show/hide)

jump_artificial_a13, b4 - Outside of the pillars furthest from where you spawn
Spoiler (click to show/hide)

jump_gaylord, b1 - Wall with GOD on it
Spoiler (click to show/hide)

jump_happygonk_b7, l10 - Pillar midway through
Spoiler (click to show/hide)

jump_murus_b3, l3 - First wall you encounter
Spoiler (click to show/hide)

jump_resi_b2, l3 - Left wall
Spoiler (click to show/hide)
l4 - Right wall
Spoiler (click to show/hide)

jump_synapse_rc3_zip, l14 - Front wall you climb at the end
Spoiler (click to show/hide)

jump_the_b7, c3 l4 - 2nd hole you go down, outside of pillars
Spoiler (click to show/hide)

jump_when_b2_fix, c1 l9 - Sidewall for the one downpogo segment
Spoiler (click to show/hide)

jump_ziggurat_b3_zip - Wall climb after the flat stair room
Spoiler (click to show/hide)
« Last Edit: March 11, 2023, 10:56:46 PM by VAVLIE »


pants

  • Proficient
  • ****
    • Posts: 458
    • Frags: +0/-0
    • View Profile
Time is a flat circle.

https://jump.tf/forum/index.php?topic=2065.msg16724#msg16724

Glad someone did some more mathy stuff for this, confirmed my gut feeling that something like that was going on. 

Previously these ranges were just bruteforced for a few range brackets then I somewhat found that pattern. I found the 24 unit range more consistent (which may just be a function of your 48 range here, I dunno).  Errors seem worse closer to origin, e.g. 9-16 can get you some super wall bugs.



ILDPRUT

  • Newbie
  • *
    • Posts: 19
    • Frags: +1/-0
    • View Profile
Time is a flat circle.

https://jump.tf/forum/index.php?topic=2065.msg16724#msg16724

Glad someone did some more mathy stuff for this, confirmed my gut feeling that something like that was going on. 

Previously these ranges were just bruteforced for a few range brackets then I somewhat found that pattern. I found the 24 unit range more consistent (which may just be a function of your 48 range here, I dunno).  Errors seem worse closer to origin, e.g. 9-16 can get you some super wall bugs.

The post you linked is about normal coordinate wallbugs. The crouch wallbug only works when the wall's coordinate is lower than yours. The normal coordinate wallbugs occurs when the wall has a higher coordinate than yours and they happen when a wall is placed at ?(2^n, 2^n + 24]. Other difference is that crouch wallbugs only work for positive coordinates.


ondkaja

  • Newbie
  • *
    • Posts: 38
    • Frags: +0/-0
    • View Profile