<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AceZephyr &#8211; Set Side B</title>
	<atom:link href="https://setsideb.com/tag/acezephyr/feed/" rel="self" type="application/rss+xml" />
	<link>https://setsideb.com</link>
	<description>The Flipside of Gaming</description>
	<lastBuildDate>Sat, 15 Mar 2025 04:56:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://setsideb.com/wp-content/uploads/2022/04/cropped-mascot512-32x32.png</url>
	<title>AceZephyr &#8211; Set Side B</title>
	<link>https://setsideb.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>&#8220;Cloudsurfing&#8221; in Final Fantasy VII</title>
		<link>https://setsideb.com/cloudsurfing-in-final-fantasy-vii/</link>
		
		<dc:creator><![CDATA[rodneylives]]></dc:creator>
		<pubDate>Sat, 15 Mar 2025 14:00:00 +0000</pubDate>
				<category><![CDATA[niche]]></category>
		<category><![CDATA[retro]]></category>
		<category><![CDATA[AceZephyr]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[cloudsurfing]]></category>
		<category><![CDATA[FF7]]></category>
		<category><![CDATA[finalfantasy]]></category>
		<category><![CDATA[glitch]]></category>
		<category><![CDATA[playstation]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>
		<guid isPermaLink="false">https://setsideb.com/?p=9514</guid>

					<description><![CDATA[Final Fantasy games tend to have weird and crazy bugs, and VII was certainly no different. A bug beloved of speedrunners is called &#8220;Cloudsurfing,&#8221; where taking advantage of the way the game detects walkable overworld triangles and the way they&#8217;re cached to use Chocobos to walk over oceans and through mountains. Properly utilized, it can &#8230; <a href="https://setsideb.com/cloudsurfing-in-final-fantasy-vii/" class="more-link">Continue reading<span class="screen-reader-text"> "&#8220;Cloudsurfing&#8221; in Final Fantasy VII"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Final Fantasy games tend to have weird and crazy bugs, and VII was certainly no different. A bug beloved of speedrunners is called &#8220;Cloudsurfing,&#8221; where taking advantage of the way the game detects walkable overworld triangles and the way they&#8217;re cached to use Chocobos to walk over oceans and through mountains. Properly utilized, it can be used to skip a large portion of Disc 1.</p>



<p>AceZephyr <a href="https://www.youtube.com/watch?v=JHn6jpKsYCk">explains it all</a> in a 38-minute video:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="The Biggest Glitch in Final Fantasy VII Explained" width="840" height="473" src="https://www.youtube.com/embed/JHn6jpKsYCk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Can I summarize it? I&#8217;ll try—</p>



<p>Prior Final Fantasy games used a simple tilemap to represent terrain. Final Fantasy VII&#8217;s overworld switched over to a world made up of triangles, each of which with a terrain code that indicated which entities can traverse it.</p>



<p>The triangles, additionally, are divided into square <em>chunks</em>. No triangle extends outside its chunk. Additionally, in each chunk, the triangle vertices aren&#8217;t represented literally for each triangle. Instead, the triangle coordinates are indexes into a list of coordinates, all to save a bit more memory.</p>



<p>Now, while each chunk is much smaller than the entire overworld, each can have over 100 triangles, so the code does some additional optimization. It keeps track of the last six triangles Cloud has touched, and checks them first when moving. If a triangle in this list is touched, then the search is stopped without checking the 100+ other triangles in the chunk.</p>



<p>Now, chunks are loaded into memory dynamically as Cloud explores, both for interaction and for rendering. The game loads the 25 chunks immediately around him off the disk, and some more in the direction the camera is facing. These chunks are constantly going stale (going out of range) and being refreshed as Cloud moves and the camera changes direction. Chunks are stored in a linked list, so are usually located by pointers, which means the chunks don&#8217;t need to be actually moved in memory, but instead references to them are copied and moved around. Some older chunks stick around in memory, then, while new ones are loaded, and the new chunks get moved to the top of the list.</p>



<p>Now this is the hardest part for me to explain, as I don&#8217;t have the firmest grasp on it&#8230;.</p>



<p>When Cloud boards most vehicles, his entity is despawned and the vehicle is created with an empty list of cached triangles. But when he gets on a Chocobo, his entity is <em>not</em> despawned. While the Chocobo has its own cached list of triangles, since Cloud is still being rendered on screen, his entity is preserved, and with it pointers to the last triangles he interacted with. These are kept, unused, while the Chocobo handles all of the collision and terrain checking.</p>



<p>When Cloud gets off Choccy, he still has a list of the last triangles he interacted with&#8230; but they refer to the data from the chunk he was last in. Now the game is smart enough that, if this is different from his original chunk, to refresh things, but if it&#8217;s the <em>same</em> chunk I think this doesn&#8217;t happen. But this <em>doesn&#8217;t</em> mean everything will work without problems. The chunks will probably be loaded in a different order, and that means the cached triangles will refer to different data.</p>



<p>And since the vertices themselves aren&#8217;t stored in the triangle list, but indexes* to another list of data, it&#8217;s possible for some of this data to come from outside of the expected area, and for there to be duplicated coordinates among them.</p>



<p>Due to the way FFVII figures out which triangle Cloud is in, if two of the points in a triangle are on the same location, the game becomes much less discerning about whether Cloud is inside it or not. And if all three of the triangle&#8217;s vertices are in the same spot, forming what&#8217;s called a <em>point triangle</em>, just a single dot, then the game can&#8217;t declare Cloud is outside of it at all! So long as that triangle gets checked first, then the game will think Cloud is inside that triangle, so long as he&#8217;s in the same chunk. This could potentially turn the whole thing walkable.</p>



<p>Did I get it sufficiently right? Watch the video, and decide for yourself!</p>



<p>* The English graduate in me demands I point out that I know I&#8217;m being inconsistent with the plurals of <em>vertex</em> and <em>index</em>. Properly, like how I&#8217;m not writing <em>vertexes</em>, I should be writing <em>indices</em>, not <em>indexes</em>. I think that index is used more in contemporary English, so I made an editorial decision to pluralize it in a more familiar way. There, explanation: given.</p>
<div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img alt='rodneylives' src='https://secure.gravatar.com/avatar/cb688ada8b517e838b06bdbcddb8d1ea3dd56de2e66848938e8c6568002a4fa9?s=100&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/cb688ada8b517e838b06bdbcddb8d1ea3dd56de2e66848938e8c6568002a4fa9?s=200&#038;d=mm&#038;r=g 2x' class='avatar avatar-100 photo' height='100' width='100' itemprop="image"/></div><div class="saboxplugin-authorname"><a href="https://setsideb.com/author/rodneylives/" class="vcard author" rel="author"><span class="fn">rodneylives</span></a></div><div class="saboxplugin-desc"><div itemprop="description"></div></div><div class="clearfix"></div><div class="saboxplugin-socials "><a title="Twitter" target="_self" href="https://twitter.com/rodneylives" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"><path d="M26.37,26l-8.795-12.822l0.015,0.012L25.52,4h-2.65l-6.46,7.48L11.28,4H4.33l8.211,11.971L12.54,15.97L3.88,26h2.65 l7.182-8.322L19.42,26H26.37z M10.23,6l12.34,18h-2.1L8.12,6H10.23z" /></svg></span></a><a title="Instagram" target="_self" href="https://www.instagram.com/rodneysnotdead/" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-instagram" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"></path></svg></span></a><a title="Html5" target="_self" href="https://www.metafilter.com/user/23306" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-html5" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M0 32l34.9 395.8L191.5 480l157.6-52.2L384 32H0zm308.2 127.9H124.4l4.1 49.4h175.6l-13.6 148.4-97.9 27v.3h-1.1l-98.7-27.3-6-75.8h47.7L138 320l53.5 14.5 53.7-14.5 6-62.2H84.3L71.5 112.2h241.1l-4.4 47.7z"></path></svg></span></a><a title="Mastodont" target="_self" href="https://cybre.space/@rodneylives" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-mastodont" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 417 512"><path fill="currentColor" d="M417.8 179.1c0-97.2-63.7-125.7-63.7-125.7-62.5-28.7-228.5-28.4-290.4 0 0 0-63.7 28.5-63.7 125.7 0 115.7-6.6 259.4 105.6 289.1 40.5 10.7 75.3 13 103.3 11.4 50.8-2.8 79.3-18.1 79.3-18.1l-1.7-36.9s-36.3 11.4-77.1 10.1c-40.4-1.4-83-4.4-89.6-54-.6-4.4-.9-9-.9-13.9 85.6 20.9 158.6 9.1 178.7 6.7 56.1-6.7 105-41.3 111.2-72.9 9.8-49.8 9-121.5 9-121.5zm-75.1 125.2h-46.6V190.1c0-49.7-64-51.6-64 6.9v62.5h-46.3V197c0-58.5-64-56.6-64-6.9v114.2H75.1c0-122.1-5.2-147.9 18.4-175 25.9-28.9 79.8-30.8 103.8 6.1l11.6 19.5 11.6-19.5c24.1-37.1 78.1-34.8 103.8-6.1 23.7 27.3 18.4 53 18.4 175z"></path></svg></span></a></div></div></div>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
