• Justdaveisfine@midwest.social
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    20 hours ago

    I don’t know the “right” answer, but I set it so if you hit something, it plays out some checks similar to as you described:

    • If we collide with something but its only waist high, then we will have the player stop the grapple and attempt to vault over whatever it is.

    • If we collide with something and its more than waist high, then we wait for a very small delay and see if we made any progress towards our destination. If not, end the grapple because something is in the way.

    • Ignore all collision damage otherwise when grappling. Either we get stopped on the way and give up, or make it and then end the grapple.

    … And last but most horrible of all:

    • Do a completely different set of checks if the player is underwater when the collision happens.

    All my games are janky though so I don’t think this is some ideal setup.

    Edit: Cleaned up the collision damage part as I thought I handled it differently.

    • sp3ctr4l@lemmy.dbzer0.com
      link
      fedilink
      English
      arrow-up
      3
      ·
      edit-2
      20 hours ago

      Yep, those first 3 are either exactly or almost exactly what I ended up with when I toyed around with making something similar, haha.

      Honestly, I think what you are describing as ‘janky workarounds’… are actually how you do this right, they are ‘efficiently implemented game mechanics’.

      Maybe the code could be cleaned up and de-spaghettified a bit, but I’ve seen many other systems like this in many games and mods.

      If it seems stupid, but it works… it isn’t stupid.

      The word for that is actually ‘clever’.

      … you’d be amazed how much enterprise level business software, for instance, relies on some weird ancient library or function that literally has a comment in the code that says “I do not know why this works, but it does, DO NOT CHANGE”.

      But also: oh god WATER.

      Fuck video game water rofl.

      I feel your pain.