GNU social JP
  • FAQ
  • Login
GNU social JPは日本のGNU socialサーバーです。
Usage/ToS/admin/test/Pleroma FE
  • Public

    • Public
    • Network
    • Groups
    • Featured
    • Popular
    • People

Notices by Tom Forsyth (tomf@mastodon.gamedev.place)

  1. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Sunday, 28-Jun-2026 19:56:49 JST Tom Forsyth Tom Forsyth
    in reply to
    • mcc

    @mcc Linux is always difficult because you can certainly do it, but only if you discover the incantation. Mac is the easy one, because the answer is "no".

    In conversation about 18 hours ago from mastodon.gamedev.place permalink
  2. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Tuesday, 16-Jun-2026 10:56:01 JST Tom Forsyth Tom Forsyth
    • mcc
    • 0xC0DEC0DE07E8

    @c0dec0dec0de @mcc There are only two types of build systems - ones you hate, and ones you don't know enough about yet.

    In conversation about 13 days ago from mastodon.gamedev.place permalink
  3. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Tuesday, 09-Jun-2026 02:50:58 JST Tom Forsyth Tom Forsyth
    in reply to
    • Riker Googling

    @RikerGoogling
    https://memory-alpha.fandom.com/wiki/Riker_Maneuver

    In conversation about 20 days ago from mastodon.gamedev.place permalink

    Attachments


  4. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Monday, 16-Mar-2026 02:33:06 JST Tom Forsyth Tom Forsyth
    in reply to
    • Eniko Fox

    @eniko Just means you need more dither :-)

    In conversation about 4 months ago from mastodon.gamedev.place permalink
  5. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Monday, 16-Mar-2026 02:33:04 JST Tom Forsyth Tom Forsyth
    in reply to
    • Eniko Fox

    @eniko When I was writing drivers for 3D cards back in 1997, one thing our card didn't have was MSAA. But we could of course do dumb SSAA - just render 4x bigger, then shrink down.

    I figured out we could do the 4x render in 332 with dithering, then when we did the shrink we'd read that but render to 565, because the extra colour bits came from blending the dithered pixels together.

    I sent A/B pictures around the office, and nobody could tell the difference, but it was 15% faster. SHIP IT!

    In conversation about 4 months ago from mastodon.gamedev.place permalink
  6. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Tuesday, 20-Jan-2026 04:00:37 JST Tom Forsyth Tom Forsyth
    in reply to

    @mattly @mcc Also reminds me of a Discworld character who had precognition, and could answer your questions before you asked them, but then you had to actually ask the question she'd just answered or she'd get a headache. So it didn't actually save you much time.

    In conversation about 5 months ago from mastodon.gamedev.place permalink
  7. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Wednesday, 17-Dec-2025 16:11:49 JST Tom Forsyth Tom Forsyth
    • Ben Throop

    Not sure how to classify this game. What genre is it even - a herd-em-up? It's gorgeous is what it is. Very intrigued. Well done @benthroop !
    https://www.youtube.com/watch?v=Qtf2tJEKRc4

    In conversation about 6 months ago from mastodon.gamedev.place permalink

    Attachments

    1. The Free Shepherd - Announcement Trailer
      from Frame Interactive
      Follow your nose to rescue lost sheep in the atmospheric world of The Free Shepherd.Coming to PlayStation 5 and Steam in 2027.Learn more: http://thefreesheph...
  8. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:53 JST Tom Forsyth Tom Forsyth
    in reply to

    But on the SSE version, a whole bunch of tiny precisions are very slightly different, and a combination of the friction on the floor and the mass of the objects means the guard still rotates from the collision, but now he rotates very slightly less far.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  9. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:52 JST Tom Forsyth Tom Forsyth
    in reply to

    So on the next frame of simulation, his toe is still in the way of the door. The door isn't allowed to just pass through his toe, so it does the only other option - it bounces back. I think by default it's set to do so completely elastically, so the door bounces back with exactly the speed it came in at, slams shut, and locks again. And you're stuck.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  10. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:51 JST Tom Forsyth Tom Forsyth
    in reply to

    And that's why the bug went "back in time" - because yes it's the old code, but we were using a newer compiler with new default settings. In the original build, the compiler defaulted to x87, but in the newer compilers the default is SSE. It's not that one is "better" - the fundamental bug is that the guard was too close to the door, and that had always been there. But in the original the problem "self corrected" and so was never spotted, whereas in the newer compile it became a showstopper.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  11. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:50 JST Tom Forsyth Tom Forsyth
    in reply to

    And there you have it. The two biggest bug-farms in gamedev - doors and floating point - contrived to make a simple NPC placement bug into quite the time-travelling palaver. /end

    In conversation about 7 months ago from mastodon.gamedev.place permalink

    Attachments


    1. https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/589/924/206/267/299/original/fb3b7275787a8988.png
  12. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:29 JST Tom Forsyth Tom Forsyth
    in reply to

    OK cool now we can ship the game phew. But why did this EVER work? The guard's toe was in the way in the original version as well. As I say, we went back in time and compiled the original as-shipped source code - and the bug happened there as well. It's always been there. Why didn't the door slam closed again? How did this ever ship in the first place?

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  13. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:28 JST Tom Forsyth Tom Forsyth
    in reply to

    So this kicked off an even longer bug-hunt. The answer was (as with so many of my stories) good old floating point. Half Life 2 was originally shipped in 2004, and although the SSE instruction set existed, it wasn't yet ubiquitous, so most of HL2 was compiled to use the older 8087 or x87 maths instruction set. That has a wacky grab-bag of precisions - some things are 32-bit, some are 64-bit, some are 80-bit, and exactly which precision you get in which bits of code is somewhat arcane.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  14. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:27 JST Tom Forsyth Tom Forsyth
    in reply to

    But ten years later in 2013, SSE had been standard in all x86 CPUs for a while - the OS depended on it being there, so you could rely on it. So of course by default the compilers use it - in fact you have to go out of your way to make them emit the old (slightly slower) x87 code. SSE uses a much more well-defined precision of either 32 or 64 bit according to what the code asks for - it's much more predictable.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  15. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:25 JST Tom Forsyth Tom Forsyth
    in reply to

    So problem solved, right? 80 bits of precision means the collision didn't happen, but in 32 bits of precision it does, and that's your problem, more bits better, QED, right? Well not quite.

    The guard's toe overlaps in both cases - a few millimeters is still significantly larger than ANY of the possible precisions. In both the SSE and x87 versions, the door hits the guard's toe. So far, both agree.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  16. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:24 JST Tom Forsyth Tom Forsyth
    in reply to

    This collision is actually properly modelled - a big innovation of HL2 was the extensive use of a real physics engine. The door and the guard are both physical objects, both have momentum, they impart an impulse on each other, and although the door hinge is frictionless, the guard's boots have some amount of friction with the floor.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  17. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:58:23 JST Tom Forsyth Tom Forsyth
    in reply to

    On both versions, the door has just enough momentum to rotate the guard very slightly. The guard's friction on the floor is not quite enough to oppose this, and he rotates a tiny fraction of a degree. On the x87 version, this tiny rotation is enough to move his toe out of the way, the collision is resolved, and the door continues to swing open. All is well.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  18. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 09:56:02 JST Tom Forsyth Tom Forsyth
    in reply to

    Once we'd figured this out, the fix was simple - move the guard back about a millimeter. Easy. But it took a lot of work to find because people had to dust off old memories of how the debugging tools worked, etc.

    In conversation about 7 months ago from mastodon.gamedev.place permalink

    Attachments


    1. https://cdn.masto.host/mastodongamedevplace/media_attachments/files/115/589/902/660/984/567/original/d4ca2934ca559c5d.png
  19. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 08:23:49 JST Tom Forsyth Tom Forsyth
    in reply to

    Once upon a time, I worked at Valve on virtual reality. This was in 2013 around the time the Oculus DK1 emerged, and Joe Ludwig and I decided that the best way to figure out how VR would work in a real game context was to port a real game to it and see what happened.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  20. Embed this notice
    Tom Forsyth (tomf@mastodon.gamedev.place)'s status on Saturday, 22-Nov-2025 08:23:48 JST Tom Forsyth Tom Forsyth
    in reply to

    We picked Team Fortress 2 as the game - the reason why is a whole different story I won't go into here. TF2 used the Source 1 engine, and as it happened two Valve games also using that same version of the engine were Half Life 2 and Portal 1. So as a side-effect they also got to work in VR.

    Well, Portal 1 "worked" - but all the tricks with perspective when you went through a portal were of course a nauseating disaster - it was pretty unplayable.

    In conversation about 7 months ago from mastodon.gamedev.place permalink
  • Before

User actions

    Tom Forsyth

    Tom Forsyth

    Graphics coder and HW architect, previously at Muckyfoot, RAD Game Tools, Valve, Oculus, Intel, Rec Room and Riot.

    Tags
    • (None)

    Following 0

      Followers 0

        Groups 0

          Statistics

          User ID
          94537
          Member since
          3 Feb 2023
          Notices
          99
          Daily average
          0

          Feeds

          • Atom
          • Help
          • About
          • FAQ
          • TOS
          • Privacy
          • Source
          • Version
          • Contact

          GNU social JP is a social network, courtesy of GNU social JP管理人. It runs on GNU social, version 2.0.2-dev, available under the GNU Affero General Public License.

          Creative Commons Attribution 3.0 All GNU social JP content and data are available under the Creative Commons Attribution 3.0 license.