mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-11-05 02:39:41 +01:00
No description
942217f871
There is this issue with conveyors where if you collide with them, your intended next y-position doesn't get updated to the position of the conveyor, and then your y-position gets set to your intended next y-position. This also applies to horizontally moving platforms. This bug used to not produce any problems, if at all, until #502 got merged. Since then, respawning from checkpoints that are on conveyors would sometimes not update your y-position at all, making it possible to get stuck inside a death loop that would require you to exit the game and re-enter it. But you can always reliably create this bug simply by going into the editor and placing down a conveyor and checkpoint on top of each other. Then enter and exit playtesting a bunch of times, and you'll notice the glitchy y-position Viridian keeps taking on. The root cause of this is how the game moves the player whenever they stand on the top or bottom of a conveyor (or a horizontally moving platform). The game sets their intended next x-position (newxp), then calls obj.entitymapcollision() on them. This would be okay, except their intended next y-position (newyp) doesn't get set along with their newxp, so entitymapcollision() will use the wrong newyp, then find that there is nothing that will collide with the player at that given newyp, then update the yp of the player to the wrong newyp. So, the platform logic simply doesn't set the player's newyp. Why does the player have the wrong newyp? It's because moving platforms (and conveyors) are updated first before all other entities are, and this includes the code that checks the player for collisions with moving platforms. That's right: the moving platform collision code gets ran before the player properly gets updated. This means that the game will use the newyp of the previous frame, which could be anything, really, but it most likely just means the intended next y-position of the player gets canceled, leaving the player with the same y-position they had before. Okay, but this bug only seems to happen when you put a checkpoint inside a conveyor (or a moving platform that hasn't started moving yet) and start playtesting from it, so why doesn't this bug happen more often, then? Well, it's probably because of luck and coincidence. Most of the time, if you're colliding with a conveyor or horizontally moving platform, you probably have a correct newyp from the previous frame of the game, so there'd be no problems. And before #502 got merged, this previous frame would be provided by the player having to fall to the surface due to the y-offset of their savepoint. However, if you make it so that you immediately teleport on to a conveyor (because you died), then this bug will rear its ugly head. |
||
---|---|---|
.github | ||
desktop_version | ||
mobile_version | ||
third_party | ||
tools | ||
.gitattributes | ||
License exceptions.md | ||
LICENSE.md | ||
README.md |
This is the source code to VVVVVV, version 2.0+. For more context about this release, see the announcement on Terry's blog!
License
VVVVVV's source code is made available under a custom license. See LICENSE.md for more details.
In general, if you're interested in creating something that falls outside the license terms, get in touch with Terry and we'll talk about it!
Authors
- Created by Terry Cavanagh
- Room Names by Bennett Foddy
- Music by Magnus Pålsson
- Metal Soundtrack by FamilyJules
- 2.0 Update (C++ Port) by Simon Roth
- 2.2 Update (SDL2/PhysicsFS/Steamworks port) by Ethan Lee
- Beta Testing by Sam Kaplan and Pauli Kohberger
- Ending Picture by Pauli Kohberger
Versions
There are two versions of the VVVVVV source code available - the desktop version (based on the C++ port, and currently live on Steam), and the mobile version (based on a fork of the original flash source code, and currently live on iOS and Android).