Intruder - Flashlight Teaser Trailer (re-upload)

Поділитися
Вставка
  • Опубліковано 18 лип 2023
  • For those who don't know or don't remember, Intruder is a Jurassic Park FPS fan game I'm working on.
    I've added a flashlight effect to explore dark areas, and I'm hoping youtube compression doesn't destroy the effect... what do you think?
    I also had to re-record everything and upload it several times because of an audio problem. It sounds better now, but it still doesn't sound quite right, especially on phones.
  • Розваги

КОМЕНТАРІ • 23

  • @undefBehav
    @undefBehav 11 місяців тому +1

    Whoa! Well done, Adrian, truly well done. Turning out to be a full-blown video game, can't wait to see the finished product!

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому

      Thanks, man! I hope I'm can finish it some day. There's a lot of work left...

  • @fuzzycat3651
    @fuzzycat3651 11 місяців тому +1

    You really set the atmosphere well! I'm excited to see where this project goes!

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому +1

      Thanks man! I hope I don't disappoint anyone.

  • @lilboiUK
    @lilboiUK 11 місяців тому +1

    that scared the shit outta me at the end

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому

      🤣😂😂🤣 Sorry about that, but I'd be lying if I said that wasn't the idea!

  • @LeoOno
    @LeoOno 11 місяців тому +1

    Adrian, this game with outdoor environments and now with indoors is getting amazing! I almost fell out of my chair at the end of the video lol xD ...

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому +1

      😂
      Thanks man! It is an ambitious project. I hope I can finish it some day.

    • @LeoOno
      @LeoOno 10 місяців тому +1

      hi Adrian, i was reading some ps1 docs about clipping issues and it recommends to subdivide the large and near faces but couldnt find any examples. Can you please explain how you are doing it? is it just checking the distance or does it also need to take the area in 2d space in account? thank you 😀

    • @adrikriptok7225
      @adrikriptok7225  10 місяців тому +1

      @@LeoOno I've tried many approaches through the years, but the one that worked better for me, is to use the distances between the vertices.
      I use recursion, but if you have limited memory, so you should replace it with iteration.
      So, let's say I've what I call a "panel". A "panel" is a plane quad, at best drawn with only two triangles. No UV mapping per pixel, but defined by four variables: u0, v0, u1, v1
      (u0, v0)
      t0 --------- t1 (u1, v0)
      | / |
      | / |
      | / |
      t2 --------- t3 (u1, v1)
      (u0, v1)
      So, after calculating all the usual stuff like back-face culling, light, etc (NO clipping against the camera needed). I call the "draw" or "render" method for that "panel". Then, it starts:
      // This is a constant you should twick to your needs.
      private const float minSizePolygon = 48f;
      void render()
      {
      // start recursion sending 3D vertices and UV info.
      fillQuad(t0, t1, t2, t3, u0, v0, u1, v1);
      }
      void fillQuad(
      Vector3D t0, Vector3D t1, Vector3D t2, Vector3D t3,
      float u0, float v0, float u1, float v1)
      {
      // this is why it wasn't necessary to clip before.
      if (all_behind_the_camera(t0, t1, t2, t3))
      {
      return;
      }
      else if (any_behind_the_camera(t0, t1, t2, t3))
      {
      // if anything is not visible, I split the shape.
      splitQuad(t0, t1, t2, t3, u0, v0, u1, v1);
      }
      else
      {
      // I project to the screen:
      var p0 = ProjectToScreen(t0);
      var p1 = ProjectToScreen(t1);
      var p2 = ProjectToScreen(t2);
      var p3 = ProjectToScreen(t3);
      if (none_on_screen(p0, p1, p2, p3))
      {
      // if nothing is visible on screen, done.
      return;
      }
      else
      {
      // find the bigger distance (2D distances).
      var dH = Max(GetDistance2D(p0, p1), GetDistance2D(p2, p3));
      var dV = Max(GetDistance2D(p0, p2), GetDistance2D(p1, p3));
      if (dH < minSizePolygon &&
      dV < minSizePolygon)
      {
      // if small enought => render to screen.
      blitQuad(t0, t1, t2, t3, u0, v0, u1, v1);
      }
      else
      {
      // if too big, split the shape.
      splitQuad(t0, t1, t2, t3, u0, v0, u1, v1);
      }
      }
      }
      }
      // Draw shape splitted.
      void splitQuad(Vector3D t0, Vector3D t1, Vector3D t2, Vector3D t3, float u0, float v0, float u1, float v1)
      {
      // here I'm calculating 3D distances.
      var dH = Max(GetDistance3D(t0, t1), GetDistance3D(t2, t3));
      var dV = Max(GetDistance3D(t0, t2), GetDistance3D(t1, t3));
      // here I use the relation between the distances.
      var dH1 = dH < 1f;
      var dV1 = dV < 1f;
      var dHV2 = dH / dV;
      if (dH1 && dV1)
      {
      // if it is small enough, and partially visible, I call simple draw.
      if (all_in_front_of_camera(t0, t1, t2, t3))
      {
      blitQuad(t0, t1, t2, t3, u0, v0, u1, v1);
      }
      }
      else if (dHV2 >= 2f)
      {
      // split horizontally.
      var p01 = Average(t0, t1);
      var p23 = Average(t2, t3);
      var u01 = Avg(u0, u1);
      fillQuad(t0, p01, t2, p23, u0, v0, u01, v1);
      fillQuad(p01, t1, p23, t3, u01, v0, u1, v1);
      }
      else if (dHV2

    • @LeoOno
      @LeoOno 10 місяців тому +1

      Adrian, thank you so much! That's exactly what i wanted to know, it's amazing how clear your code is, it's very easy to understand. So that's the way you were handling perspective correction and all this time you were not using near clipping, very happy to know :) !
      Is it a better ideia to use quad for levels then?

    • @adrikriptok7225
      @adrikriptok7225  10 місяців тому +1

      @@LeoOno Yeah, that's the technique I'm using in this map, for example:
      ua-cam.com/video/xqNtphSlWpg/v-deo.html
      But I don't always apply this kind of dynamic tesselation, just for "level" stuff, or large stuff. Small things like boxes, for instance, if necessary, are subdivided from the beggining.
      And since my 3D maps are all "boxy" for now (and for the past years) I haven't need to add tesselable triangles to the engine.
      I've the code for a tesselable triangle, thought. I don't really use it that much. You can see it here in the Quake map:
      ua-cam.com/video/HGk8WOZUPbQ/v-deo.html
      It is more or less the same (while writing this, I notice a mistake in the other comment so check it out).
      void render()
      {
      // start recursion sending 3D vertices and UV info.
      fillTri(t0, t1, t2, uv0, uv1, uv2);
      }
      private void fillTri(Vector3D t0, Vector3D t1, Vector3D t2, UVMapping uv0, UVMapping uv1, UVMapping uv2)
      {
      if (all_behind_the_camera(t0, t1, t2))
      {
      return;
      }
      if (any_behind_the_camera(t0, t1, t2))
      {
      // Split in 4.
      fillTri4(t0, t1, t2, uv0, uv1, uv2);
      }
      else
      {
      var p0 = ProjectToScreen(t0);
      var p1 = ProjectToScreen(t1);
      var p2 = ProjectToScreen(t2);
      if (none_on_screen(p0, p1, p2))
      {
      return;
      }
      if (Max(
      GetDistance2D(p0, p1),
      GetDistance2D(p0, p2),
      GetDistance2D(p1, p2)) < minSizePolygon)
      {
      // Draw without subdividing
      blitTri(t0, t1, t2, uv0, uv1, uv2);
      }
      else
      {
      // Split.
      fillTri4(t0, t1, t2, uv0, uv1, uv2);
      }
      }
      }
      private void fillTri4(Vector3D t0, Vector3D t1, Vector3D t2, UVMapping uv0, UVMapping uv1, UVMapping uv2)
      {
      var dH = GetDistance3D(t0, t1);
      var dV = GetDistance3D(t0, t2);
      var dD = GetDistance3D(t1, t2);
      var dH1 = dH < 1f;
      var dV1 = dV < 1f;
      var dD1 = dD < 1f;
      var dHV2 = dH / dV;
      if (dH1 && dV1 && dD1)
      {
      if (all_in_front_of_camera(t0, t1, t2))
      {
      // draw without subdividing.
      blitTri(t0, t1, t2, uv0, uv1, uv2);
      }
      }
      else if (dD > dV && dD > dH)
      {
      // Split in 2.
      var t12 = Average(t1, t2);
      var uv12 = UVMapping.Average(uv1, uv2);
      fillTri(t0, t12, t2, uv0, uv12, uv2);
      fillTri(t0, t1, t12, uv0, uv1, uv12);
      }
      else if (dHV2 >= 2f)
      {
      // Split in 2.
      var t01 = Average(t0, t1);
      var uv01 = UVMapping.Average(uv0, uv1);
      fillTri(t0, t01, t2, uv0, uv01, uv2);
      fillTri(t01, t1, t2, uv01, uv1, uv2);
      }
      else if (dHV2

  • @LordFers
    @LordFers 11 місяців тому +1

    Se ve tremendo. ¿Tenés un editor de niveles hecho? ¿Funciona con alguna estructura de datos especial, o alguna combinación tipo BSP, Tiles, y meshes? Se ve muy bueno.

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому

      Gracias!!
      Sí, sí, tengo un editor que hice (bastante rudimentario) para este tipo de mapas. Fijate en este video, que lo muestro: ua-cam.com/video/wQ-ug6OPn-k/v-deo.html
      Y la estructura la vas a ver ahí en ese video: es un grafo de triángulos llamadas particiones agrupados en "Sectores" que se conectan mediante portales. O sea, no BSP, sino más parecido a la Build Engine (igualmente todos los enfoques siguen los mismos principios de subdividir el espacio en figuras convexas conectadas), y eventualmente guardo el mapa en un XML.
      Este es un ejemplo de un mapa chiquito que tenía para hacer pruebas: github.com/adri-kriptok/games/blob/master/Kriptok.Intruder/Scenes/Maps/Map00_Test/Map.wldx

  • @lilboiUK
    @lilboiUK 11 місяців тому +1

    nice work though looks sick

    • @adrikriptok7225
      @adrikriptok7225  11 місяців тому

      Thanks man! Although there is still a long way to go. I just hope I can materialize all the ideas I have for this project.

  • @luciagameXD
    @luciagameXD 9 місяців тому +1

    How to play the game

    • @adrikriptok7225
      @adrikriptok7225  9 місяців тому

      Hola, Lucía. Ante todo, podés comentar en español si querés, yo hablo español.
      Esto es sólo un teaser, de un juego que estoy haciendo, pero le falta mucho todavía. Hay una versión subida en mi repositorio que se puede descargar y jugar, pero la verdad ya cambió tanto que no tiene mucho sentido. Además tenía algunos errores muy groseros. Espero para fin de año poder subir una versión jugable actualizada.

    • @luciagameXD
      @luciagameXD 9 місяців тому +1

      @@adrikriptok7225 ah vale! :D

    • @luciagameXD
      @luciagameXD 9 місяців тому

      @@adrikriptok7225 pero dónde lo puedo descargar?