A Valve játéka mögött van egy kifejezetten érdekes anekdota, és erről az egyik ex-fejlesztőjük számolt be!
A Half-Life 2 egyik legmenőbb tulajdonsága a fizikai motorja, de még a legjobb technológia is hajlamos itt-ott furcsa viselkedésre. A Valve legendás narratív lövöldözős játéka sem volt kivétel, ahogyan azt a Valve korábbi fejlesztője, Tom Forsyth a Mastodonon megosztotta. Beszámolt egy bugról, amellyel a Half-Life 2 VR-verziójának fejlesztése során találkozott 2013-ban, amikor a Valve még fontolgatta, hogy milyen irányba szeretne haladni a technológiával. Ez volt az egyik legkönnyebben VR-re átültethető játék a Valve korábbi katalógusában – viszonylag nemrég jelent meg, és a Portal perspektívájával kapcsolatos trükkök természetesen émelyítő katasztrófát okoztak. Ez az új VR-verzió már a játék első perceiben softlockot okozott a játékosoknak.
A nyitó jelenetben, amikor egy metrórendőrnek át kellene kísérnie a játékost egy ajtón, az ajtó a VR-verzióban nem nyílt meg nem tisztázott okokból, így a játékos ott ragadt, és várt egy szükséges történeti eseményre, ami soha nem következett be. Forsyth azt mondta, hogy ezt nem tudják kiadni. Megkérdezett másokat is, köztük néhányat, akik eredetileg a Half-Life 2-n dolgoztak, és még akkor sem működött, ha nem VR-ban voltunk, de senki sem tudta, hogy miért. A csapat hamarosan felfedezte, hogy az ajtó mögött álló őr kissé túl közel állt – a határolókeretének sarka metszi az ajtó nyitási irányát. Így az ajtó kinyílásakor kissé meglökte az őr lábujját, visszapattant, bezárult, majd automatikusan bezáródott.
Áthelyezték az NPC-t és kijavították a hibát, de sokkal hosszabb vizsgálat kellett ahhoz, hogy kiderítsék, miért történt ez egyáltalán; a VR-verzió nem mozgatta az NPC-t, és a csapat még az eredeti verziót is újra lefordította, hogy kiderítse, hogy a hiba átjutott-e az időn, és abban is megvolt-e. A tesztekhez használt fordító alapértelmezésként az újabb SSE utasításkészletet használta ahelyett, hogy az eredeti, az akkori CPU-khoz alapértelmezett x87-et használta volna, amelynek precíziós értékei nagyon változatosak. Annak ellenére, hogy régi kódról volt szó, az új fordító miatt a játék másképp számította ki a fizikát, bár ez rendkívül finom mértékű volt.
Mindkét verzióban az ajtó éppen elég lendületet kap ahhoz, hogy az őrt nagyon kissé elforgassa. Az őr padlóval való súrlódása nem elég ahhoz, hogy ezt megakadályozza, és ő egy apró fokozatot elfordul. Az x87 verzióban ez az apró elfordulás elég ahhoz, hogy a lábujja elmozduljon az útból, az ütközés megoldódik, és az ajtó tovább nyílik. Minden rendben van. Az SSE verzión azonban egy csomó apró pontosság nagyon kissé eltérő, és a padlóval való súrlódás és a tárgyak tömege együttesen azt eredményezi, hogy az őr továbbra is elfordul az ütközés hatására, de most kissé kevesebbet. Így a szimuláció következő képkockáján a lábujja még mindig az ajtó útjában van. Az ajtó nem haladhat át a lábujján, ezért visszapattan, mi pedig ott ragadunk.
Ez egy furcsa, agyafúrt bug, és remekül emlékeztet arra, hogy ezek a dolgok ritkán olyan könnyen megoldhatók mint amire számítani lehet…



