Final Fantasy VII: Kalm Skip Explained

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 พ.ย. 2024

ความคิดเห็น • 105

  • @forcelightningcable9639
    @forcelightningcable9639 3 ปีที่แล้ว +53

    I just love that this game keeps getting more and more optimized…
    And honestly you could not have nailed the presentation or the explanation better. I loved the abrupt end too.

  • @konstantinkh
    @konstantinkh 2 ปีที่แล้ว +27

    I'm assuming chocobo has its own array of memorized triangles, which is why traveling on chocobo isn't overwriting Cloud's array. Is this something specific to chocobo because chocobo can run away in some instances, or is this general for all modes of travel?

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว +16

      All world map objects have their own independent list of triangle pointers.

    • @MakotoIchinose
      @MakotoIchinose 2 ปีที่แล้ว +1

      It's more likely an oversight where the function to clear Cloud's array works on any vehicle but chocobos

    • @AceZephyr1
      @AceZephyr1  18 วันที่ผ่านมา +1

      @@MakotoIchinose It's now a couple years later, and we now have a better understanding of this.
      When Cloud enters a vehicle, he's just deleted from the entity list, and so basically ceases to exist in the world. When you exit the vehicle, it spawns a new Cloud object that gets put in memory, usually at the same spot as before, but with zeroed-out values including stored triangles.
      When riding a Chocobo, Cloud still gets removed from the entity list, but he stays in memory as he's referred to by the chocobo as the entity riding it. When dismounting the chocobo, he's put back in the entity list without re-initializing him.
      Interestingly, there's actually a function ran every time a chunk unloads that clears that chunk's stored tris from every entity in the entity list. The only reason Cloud's triangles aren't affected and the glitch happens is because Cloud isn't in the entity list when on a chocobo.

  • @Zanderuu
    @Zanderuu 5 วันที่ผ่านมา

    I had some issues with the skip being inconsistent and this video helped me understand what I did wrong. So thank you Ace!

  • @mikehall4730
    @mikehall4730 2 ปีที่แล้ว +4

    I came here from Karl. Thank you for all your hard work.

    • @TheVeraLunastra
      @TheVeraLunastra 17 วันที่ผ่านมา +1

      I see we have the same origins. Kudos

  • @nana-uj2yz
    @nana-uj2yz 3 ปีที่แล้ว +13

    great explanation! having the visuals for what was loaded etc really added to it

  • @KongQuestCo
    @KongQuestCo 2 ปีที่แล้ว +3

    Just saw Karl’s video, this is pretty neat!

  • @TurboMakesGames
    @TurboMakesGames 2 ปีที่แล้ว +4

    Great technical breakdown - so impressive to see that this glitch was ever discovered to begin with and really interesting to learn about how it works. Nice work on the visuals and presenting it in an easy to understand logical manner. Well done 👍

  • @CodingDragon04
    @CodingDragon04 2 ปีที่แล้ว +2

    Came here from Karl Jobs' video, and this is indeed a great explenation!

  • @KingJocoLoco
    @KingJocoLoco 2 ปีที่แล้ว +1

    Saw you get mentioned in a Karl Jobst video. Great work my dude!

  • @Paultimate7
    @Paultimate7 ปีที่แล้ว +1

    This was a lot to unpack but you did a great job of explaining.

  • @rpgkum3r69
    @rpgkum3r69 3 ปีที่แล้ว +33

    Excellent explanation man. I find it really fun to learn about these things. Mind if I ask what programs you would use to look into the game like this? I would love to know!

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว +5

      Apologies for the late reply, but I used ShotCut to edit the video, Audacity to record audio, and GIMP to edit images. I have next-to-no experience with video editing or graphics, so the "animations" in this video are pretty much just cross-fades between separate images I made.

    • @FriendOfaCoolFriend
      @FriendOfaCoolFriend 2 ปีที่แล้ว +5

      I think he was asking about the programs used to extract game data to analyze and visualize the action to result. Both at the code level and graphical level.
      Or where the onscreen triangles and side map overlays manually built?

    • @rpgkum3r69
      @rpgkum3r69 2 ปีที่แล้ว +2

      @@FriendOfaCoolFriend yeah that’s what I was asking. Kind of interested in looking into the game in depth like this and stuff.

    • @jeremygalloway1348
      @jeremygalloway1348 2 ปีที่แล้ว

      @@rpgkum3r69 I guess it's a secret

    • @lilpokey3969
      @lilpokey3969 2 ปีที่แล้ว +1

      @@AceZephyr1 what software was use to visualize the game code or look into data values?

  • @JaychalkeGaming
    @JaychalkeGaming 3 ปีที่แล้ว +4

    Super video! Really appreciated the insight! Great work!

  • @Israfel36
    @Israfel36 2 ปีที่แล้ว

    That was a lot of info to absorb for: triangles be dumb and Cloud walk on water to far town.

  • @MakotoIchinose
    @MakotoIchinose 2 ปีที่แล้ว

    It's interesting to see how the game handles the world map is basically what open world games would stream in/out parts of the map in vicinity since then. In a way it is an open world, but not in a sense of sandbox like GTA.
    Also interesting to see is how the navigation is being handled in the series's first foray into 3D. It serves the purpose, but it's also broken in a way something like this is possible.

  • @MarMaxGaming
    @MarMaxGaming 2 ปีที่แล้ว

    What an amazing thing to find and it’s so incredible that it happened!!

  • @psychopompous3207
    @psychopompous3207 2 ปีที่แล้ว +1

    Wow. Well-effing-done. I thoroughly enjoyed this video and it must have taken a lot of planning. I have subscribed due to the fact that you deserve it.

  • @agadmator
    @agadmator 3 ปีที่แล้ว +2

    Good stuff!

  • @Kawa-oneechan
    @Kawa-oneechan 2 ปีที่แล้ว

    Somehow, this is easier to grasp than the last Mario 64 pointer manipulation trick I saw.

  • @factandsuspicionpodcast2727
    @factandsuspicionpodcast2727 2 ปีที่แล้ว

    I think I just had an aneurysm. Thanks!

  • @thepianomatro
    @thepianomatro 3 ปีที่แล้ว +4

    Wow this is mind blowing. You are literally applying advanced computer programming concepts. Surely the guy who came up with this skip is someone who knows a lot about programming! Probably a c/c++ programmer

    • @wurfyy
      @wurfyy 2 ปีที่แล้ว +2

      According to the Karl Jobst video about this skip it was, in fact, discovered purely by chance.

  • @Azakuza
    @Azakuza 2 ปีที่แล้ว

    "this should be easier to understand" - to quote barret, my brain hurts

  • @SpiderWaffle
    @SpiderWaffle 3 ปีที่แล้ว +3

    8:14 Could you in theory, with absolute precision, move from the bottom right of 21, 16 diagonally to the kitty corner region, WITHOUT the game thinking you're ever in either orthogonally adjacent regions? That is, move exactly diagonally from the corner of one region into another?

    • @AceZephyr1
      @AceZephyr1  3 ปีที่แล้ว

      I do not know.

    • @SpiderWaffle
      @SpiderWaffle 3 ปีที่แล้ว

      @@AceZephyr1 Similar glitches are possible in MK64 I know, they use floats and velocity vectors, if the game has your next frame being in that area you can skip over adjacent sides and go kitty corner using the "void" caused by the nature of frame increments.

    • @unspeakablevorn
      @unspeakablevorn 2 ปีที่แล้ว +1

      It looks like you should be able to; it iterates through the triangle list to find which one the character is in (see 1:43), so if you move precisely through corners, you can manage it.
      This isn't necessarily true in all games though: it's possible to use a triangle adjacency graph (assuming the mesh is manifold) to make finding the triangle go from linear to constant time, but FF7 doesn't do this as far as I can tell: making this adjacency graph is also Work (and quadratic time work at that!) that could have been done during build but wasn't, and would also mean needing to do something about region boundaries.
      On the other hand, watching the triangle selection at around 2:56 we also see that it's quite sloppy at selecting triangles, so, maybe not...

  • @Animebryan2
    @Animebryan2 2 ปีที่แล้ว +3

    I wonder if this concept can be applied to other areas of the overworld to skip other places.

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว

      We dont currently believe it can be. The main restriction is that you need to be able to get off and back on a chocobo, and you can only do that under special circumstances without the chocobo running away.

    • @musaran2
      @musaran2 2 ปีที่แล้ว

      @@AceZephyr1 Shouldn't the logic work with any vehicle?

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว

      @@musaran2 No, other vehicles will clear the player's stored triangle pointers when the player enters it. Chocobos are unique in that this does not happen.

    • @FriendOfaCoolFriend
      @FriendOfaCoolFriend 2 ปีที่แล้ว +1

      Does entering or exiting a location on the world map reset the triangles? I wonder if there is a town that maybe behaves like a chocobo when maybe it should not.

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว

      @@FriendOfaCoolFriend Define "location". If you mean going from the world map to a field map, then that unloads the world map module, so yes.

  • @mackeralface
    @mackeralface 2 ปีที่แล้ว +1

    Triangles

  • @ehhhhh491
    @ehhhhh491 2 ปีที่แล้ว +1

    In friggin sane 🤯🤯🤯

  • @DaJM4
    @DaJM4 2 ปีที่แล้ว +2

    END OF THE INFO, END OF THE VIDEO

  • @skipster3000
    @skipster3000 3 ปีที่แล้ว

    Amazing research and explanation - thank you!

  • @1TerryNova
    @1TerryNova 3 ปีที่แล้ว +7

    Ironically I was interested in how this worked (like a deep dive) and this explanation is God Tier. Are you a programmer?

    • @AceZephyr1
      @AceZephyr1  3 ปีที่แล้ว +8

      i'm currently a computer science student

    • @1TerryNova
      @1TerryNova 3 ปีที่แล้ว

      @@AceZephyr1 luck and blessings to you bro. I’m personally interested in programming myself. I recently decided I want to study programming (JS). You a badass using python.

  • @IvaneroWorld
    @IvaneroWorld ปีที่แล้ว

    I'd like to know how many times the word "triangle" was said.

    • @AceZephyr1
      @AceZephyr1  ปีที่แล้ว +1

      90 times

    • @IvaneroWorld
      @IvaneroWorld ปีที่แล้ว

      @@AceZephyr1 Thanks. I hope you used IA.

    • @AceZephyr1
      @AceZephyr1  ปีที่แล้ว

      @@IvaneroWorld I used "count the number of times the word appears in the subtitles i had made for the video"

  • @Jonbo117
    @Jonbo117 3 ปีที่แล้ว +4

    You're smart lol

  • @alcoholfountain1993
    @alcoholfountain1993 2 ปีที่แล้ว

    Where is the 'I hope you like this video. If you did, don't forget to like and subscribe.' at the end of the video? True sigma chad move.

  • @DrunkenGlums
    @DrunkenGlums 2 ปีที่แล้ว

    Why is is guaranteed that the data the pointer points at when we come back to it always starts 0, 0, 0? Shouldn't it be random?

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว

      Because we control what world map chunk's data overwrites the memory being pointed to, so we choose to write a chunk that has 0,0,0 there.

  • @solidsnake1809
    @solidsnake1809 2 ปีที่แล้ว

    a-ha, I understand everything now!

  • @queenannesrevenge3770
    @queenannesrevenge3770 2 ปีที่แล้ว

    I don't care about this game but this is a comment for the TH-cam algorithm.

  • @whtiequillBj
    @whtiequillBj 2 ปีที่แล้ว

    So this is a version of SRM. Just using the data for 3D geometry in the game engine in which FF7 runs in?

  • @SpiderWaffle
    @SpiderWaffle 3 ปีที่แล้ว

    8:25 It saves to Cloud's stored triangles that are bumped into, but why does the game think Cloud is in 22,16 instead of 21,16 since you aren't allowed to move into the triangle that is on 22,16? Or does it not, and just once you come back if you try to move into that triangle FROM 21,16 it checks and finds true, and then stops storing new triangles once you actually are in 22,16?

    • @SpiderWaffle
      @SpiderWaffle 3 ปีที่แล้ว

      It sounds like it must not and the reason the region is red is not because the game thinks you are there, but because it's the last stored triangle. That was confusing, it would help a lot to know that what exactly the red region is somewhere in the video.

  • @reaper84
    @reaper84 2 ปีที่แล้ว

    I like this nerdy reverse engineering stuff! =)

  • @SpiderWaffle
    @SpiderWaffle 3 ปีที่แล้ว +1

    7:29 Why aren't Cloud's 6 stored triangles updated when you bump into triangles he can't move into if those triangles are in the same region the point triangle got loaded? But are if they are in another region. Does it actually matter that he can't move into them, or just that they are in another region?

    • @AceZephyr1
      @AceZephyr1  3 ปีที่แล้ว +1

      Because if youre in the same region as the point triangle you're on, then the game never even considers the interaction between cloud and any other triangles in the same region, since it's already concluded that he's on the point triangle

    • @SpiderWaffle
      @SpiderWaffle 3 ปีที่แล้ว

      @@AceZephyr1 Right, but why do you say when he bumps into a triangle he can't move into, it gets stored? Is it just that when he bumps into a triangle on another region it gets stored?

    • @AceZephyr1
      @AceZephyr1  3 ปีที่แล้ว

      @@SpiderWaffle No, if there is a triangle in the same region that cloud cannot move onto that he bumps into, it also gets stored.

    • @AceZephyr1
      @AceZephyr1  3 ปีที่แล้ว

      The game will only make the decision to store a triangle if it attempts to determine if Cloud is or can move onto that triangle. The crucial part about this is that, within the region that Cloud currently has a stale triangle reference that results in a point triangle, such a check is never made because the game has found the triangle that Cloud is standing on before considering any triangles outside his stored triangles.

    • @SpiderWaffle
      @SpiderWaffle 3 ปีที่แล้ว

      @@AceZephyr1 Right, what I trying to say, IN THIS CASE, it doesn't matter if he bumps into a triangle he can't move onto normally or can, but just that if he bumps into a triangle in the same region as the point triangle is stored, or not that same region.

  • @nyanpasu64
    @nyanpasu64 2 ปีที่แล้ว

    If you bump into a nonwalkable wall triangle, and after stale triangle manipulation it turns into a point triangle you can walk on, does the stale triangle turn a wall triangle into a floor triangle?

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว

      There is actually no distinction between wall and floor triangles, only triangles with different floor types. Cloud can only walk on certain floor types, chocobos of different color can walk only on certain floor types, the buggy and tiny bronco also can only travel on a different set of floor types. A "wall" is just a type of floor the game prohibits you from walking on. A list of all floor types can be found here: wiki.ffrtt.ru/index.php?title=FF7/WorldMap_Module
      Collision detection is expensive, so to be clever, the game stores pointers, or references, to the last few (6) triangles Cloud was standing on, because on most frames, Cloud is on the same triangle that he was on the previous frame. The problem that results in Kalm Skip is when the data that is being pointed or referred to is overwritten without that pointer being erased or corrected. Now, the thing being referred to could be, well, anything, maybe even data the game reads as a triangle spanning the entire world map chunk. During Kalm Skip, you're walking on one or two of these triangles that don't actually exist, in that they aren't really in the game files or even in memory as a new triangle, but are formed from the game reading some other kind of data as a triangle.
      We bump into or otherwise interact with some floor triangle such that Cloud stores a pointer to it. Whatever data that the pointer happens to be pointing to will be treated as a triangle when the game tries to determine what triangle Cloud is standing on. This data should always be data that makes up a triangle, so there shouldn't be anything wrong here. However, we can move on a chocobo around the world map, and we can move far enough away so that the chunk in which we stored that triangle unloads, and the slot in memory is used for a new world map region. Now, that triangle pointer is pointing to the same memory location, but it no longer contains the data that was originally referenced by that pointer, so we consider the pointer stale. If you know what happened to OoT in the past few years with Stale Reference Manipulation, this is similar.
      I describe in the video how it is relatively easy to have this pointer point to data that creates a triangle that can be walked on infinitely by creating a "point triangle". The only reason why we can't use this to walk across oceans is because this infinite triangle's influence is limited to the region the original triangle pointer was created in, since the game only uses a stored pointer if the player is in the region coordinates the pointer was originally stored in.

    • @nyanpasu64
      @nyanpasu64 2 ปีที่แล้ว

      ​@@AceZephyr1 "I describe in the video how it is relatively easy to have this pointer point to data that creates a triangle that can be walked on infinitely"
      At 8:28, you bump into a nonwalkable floor type and store the nonwalkable triangle's address in memory. When you run away and back, then the game checks if you're standing on a triangle in your 6 triangle history, and finds a point triangle. You didn't explain in the video how storing a pointer to a nonwalkable floor, then replacing the data behind the pointer, allows you to walk on the point triangle now being pointed to. Is the nonwalkable property located next to the pointer to the nonwalkable triangle (so the nonwalkable triangle turns into a nonwalkable point triangle, which would prevent the exploit), or at the pointer's /destination/ (so the nonwalkable triangle turns into a triangle with invalid/zero position and floor type)? The link you posted claims the floor type (WalkabilityInfo) is stored at the destination (after the vertex indices), and type 0 acts as walkable grass. My guess is that WalkabilityInfo/MeshFuncId is zero like VertexNIndex, but your video didn't say whether that's the case.

    • @AceZephyr1
      @AceZephyr1  2 ปีที่แล้ว +2

      @@nyanpasu64 I didn't include that because it wasn't important for the main point of the video, but a triangle's walkability, along with some other information like scripts ran when interacted with, the area of the world map it's in (midgar, junon, etc. used for encounters), its texture, etc. are stored in the triangle's data alongside its vertices.
      The triangle data structure in memory is the same as the one described on the page linked by that earlier link.

  • @kentheengineer592
    @kentheengineer592 3 ปีที่แล้ว +1

    Basically Memory Manipulation due to Leakage for you Physics Nerds

  • @mattstorage7805
    @mattstorage7805 8 หลายเดือนก่อน

    Impossible. Chocobo always escapes. It's just easier and FAAAR faster, by hours, to do Kalm on x3 speed, than to try and reproduce this.

    • @AceZephyr1
      @AceZephyr1  8 หลายเดือนก่อน

      The methods described in this video require performing a glitch to maintain the pre-Kalm Mythril Mines chocobo preservation flag from outside the Mythril Mines area. However, the newest setup, which was discovered after (and sort of as a result of) this video, does not need that glitch. Here is a tutorial on how to perform the newest, easiest, and usually fastest method: th-cam.com/video/XKdSPzWCQKY/w-d-xo.html

  • @FaytShadowGamingDeveloper
    @FaytShadowGamingDeveloper 2 ปีที่แล้ว

    karl sent me :P

  • @SorakaOTP462
    @SorakaOTP462 2 ปีที่แล้ว

    This is such an easy exploit, can't believe game developers were too lazy to fix this glitch.

    • @Paultimate7
      @Paultimate7 ปีที่แล้ว

      Can't tell if youre being sarcastic lmao

  • @ZyrusSmith
    @ZyrusSmith 2 ปีที่แล้ว +2

    This video was too long. Halfway through it, I got hungry so I left it playing and went to the kitchen to fix myself a sandwich. But then I found out that I'm out of mayonnaise so I went to a store. There, I saw the most beautiful woman I have ever seen in my whole life. But I'm a really shy person so I took up a three-year personality development course so I could introduce myself. She was very friendly and all, but unfortunately, she had a boyfriend. So I said, all good, I'm a mature person. I wanted the best for her and I harbored no illusion that I am the best person for her and she seemed happy with her boyfriend, so I didn't bother her anymore. But we kept in touch and we became friends and I got over my crush on her. Then she broke up with her boyfriend, we drank some alcohol because of it. I told her she'll be fine and I wished her well. I still think she's the most beautiful woman in the world, but like I said, I am over my crush on her. It was like five years already since I first saw her. Besides, I am quite happy with the friendship I developed with her. It was more important than a crush. So we kept hanging out, drinking, having coffee, and all. I had a girlfriend, she started dating other guys. My girlfriend wanted to live some other life without me in it, so I said, "Okay, I want the best for you and I want you to pursue your happiness." My lady friend and I drank alcohol about it, and she gave me the same advice I gave her when she was in that position and I became okay with the breakup immediately. But we were really drunk, so she spent the night in my apartment. I only have one bed, so you know what that means: She took the bed and I slept on the couch. But on the couch, I really can't sleep. Something was bothering me. So I tossed and turned for about three hours, then I finally couldn''t take it anymore, I stood up and went straight to my room where she's sleeping. I approached the bed, gently sat on it and I reached for her shoulder to pull her closer to me. She stirred and woke up. She asked what's up. I told her, "you know, the first time I saw you, I was watching a video and left it playing to get myself a sandwich then went to the store to get some mayo then I got so distracted by life that I forgot to finish the video." She said, "You know what, I've been wondering about a weird noise in your night drawer." So we opened that drawer, and lo and behold, there's my phone and this video still has two minutes of play time on it.

  • @LordRaven256
    @LordRaven256 2 ปีที่แล้ว

    You replaced the beautiful C code with disgusting python!?! AHHHHHH!
    Just kidding, good job!

  • @iceman4208
    @iceman4208 ปีที่แล้ว

    No need to explain it explains itself its an easy glitch to do 100000 blind daniels could do it i could in my sleep cause well i have the first copy sold in 🇺🇸 i waited days for ig and i got ff7 my all time fav dont debate me