1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-26 06:28:30 +02:00
VVVVVV/desktop_version/src
Misa 88d49547d4 Evaluate flipping eligibility per-entity
This fixes a regression where the behavior of duplicate player entities
is different, causing a gameplay section in Vespera Scientifica to be
impossible, as described in #903.

In the level, you are allowed to flip in mid-air. Vespera accomplishes
this by having two duplicate player entities stuck in a platform. One of
them is responsible for letting the player flip in one direction, and
one of them is responsible for letting them flip in the other.

In 2.3, this works because in order for a player entity to flip,
`game.jumppressed` is checked, and the entity will flip if
`game.jumppressed` is greater than 0, then `game.jumppressed` will be
set to 0. In this way, whenever a player entity flips, it will set
`game.jumppressed` to 0, so whenever the next player entity is
evaluated, `game.jumppressed` is 0 and thus _that_ entity will not flip.

This is because the for-loop surrounds both the `game.jumppressed` check
and flipping the entity. In 2.4 after #609 and subsequent patches,
however, this is not the case. Here, the for-loop only surrounds
flipping the entity. Therefore, the `game.jumppressed` check is
evaluated only once. So, it will end up flipping every player entity if
the entities are eligible. In this case, one of them is eligible twice,
resulting in the game flipping gravitycontrol four times, which is
essentially the same as not flipping at all (except for all the sound
effects).

Hence, the fix here is to make it so the for-loop surrounds the
`game.jumppressed` check.

Now, this doesn't mean that the intent of #609 - that duplicate player
entities have the same initial velocity applied to them when flipping -
has to be removed. We can just put the for-loops back in. But I
carefully implemented them in such a way that the overall function is
not quadratic, i.e. O(n²). Instead, there's a pass done over the
`obj.entities` vector beforehand to store all indexes of a player entity
in a temporary vector, and then that vector is used to update all the
player entities. In this manner, the function is still linear - O(n) -
over the number of entities in the room.

I tested this to make sure that no previous regressions popped up again,
including #839, #855, and #887. And #484 is still resolved.

Fixes #903.
2023-03-18 21:30:23 -07:00
..
Alloc.h Replace all free calls with VVV_free[func] 2022-11-30 22:50:08 -08:00
BinaryBlob.cpp Replace all free calls with VVV_free[func] 2022-11-30 22:50:08 -08:00
BinaryBlob.h Use fixed-size int types for resourceheader 2021-09-23 22:21:49 -07:00
BlockV.cpp Remove x-position from setactivityposition 2023-02-17 20:47:32 -08:00
BlockV.h Remove x-position from setactivityposition 2023-02-17 20:47:32 -08:00
Constants.h Fix SCREEN_HEIGHT_PIXELS being wrong constant 2021-10-01 09:35:28 -07:00
Credits.h Add Jules de Sartiges to Credits.h 2023-02-21 12:28:57 -08:00
CustomLevels.cpp Always add null terminator when loading files 2023-03-18 15:12:24 -07:00
CustomLevels.h Remove reference from customlevelclass::load arg 2023-03-16 21:09:41 -07:00
CWrappers.cpp Use loc::toupper_ch instead of SDL_toupper in VFormat 2022-12-31 20:04:56 -08:00
CWrappers.h Use loc::toupper_ch instead of SDL_toupper in VFormat 2022-12-31 20:04:56 -08:00
DeferCallbacks.c Add deferred callbacks to game loop 2021-03-21 02:55:42 -04:00
DeferCallbacks.h Add deferred callbacks to game loop 2021-03-21 02:55:42 -04:00
Editor.cpp Change font::len text argument from std::string to const char* 2023-03-04 16:10:17 -08:00
Editor.h Start using level-specific font where needed, make CJK tweaks 2023-02-13 23:27:00 -08:00
Ent.cpp Axe Graphics::ct and Graphics::setcolreal 2023-01-01 20:16:08 -08:00
Ent.h Use SDL_Color for colors instead of colourTransform 2023-01-01 16:36:43 -08:00
Entity.cpp Remove x-position from setactivityposition 2023-02-17 20:47:32 -08:00
Entity.h Remove x-position from setactivityposition 2023-02-17 20:47:32 -08:00
Enums.h Remove unused game-gamestates 2021-12-18 00:01:32 -08:00
Exit.h Use SDL_NORETURN 2021-09-27 10:32:23 -07:00
FileSystemUtils.cpp Always add null terminator when loading files 2023-03-18 15:12:24 -07:00
FileSystemUtils.h Always add null terminator when loading files 2023-03-18 15:12:24 -07:00
Finalclass.cpp Strip out old special roomname system 2023-03-02 22:58:12 -08:00
Finalclass.h Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
Font.cpp Always add null terminator when loading files 2023-03-18 15:12:24 -07:00
Font.h Change font::len text argument from std::string to const char* 2023-03-04 16:10:17 -08:00
Game.cpp Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Game.h Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
GlitchrunnerMode.c Split glitchrunner mode into multiple versions 2021-08-05 13:35:21 -04:00
GlitchrunnerMode.h Split glitchrunner mode into multiple versions 2021-08-05 13:35:21 -04:00
GOGNetwork.c Axe NETWORK_[set/get]AchievementProgress() 2021-09-19 21:49:54 -07:00
Graphics.cpp Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Graphics.h Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
GraphicsResources.cpp Always add null terminator when loading files 2023-03-18 15:12:24 -07:00
GraphicsResources.h Start rewrite of font system 2023-02-13 23:27:00 -08:00
GraphicsUtil.cpp Fix analogue filter allocating/freeing surfaces every frame 2023-03-04 14:02:47 -08:00
GraphicsUtil.h Fix analogue filter allocating/freeing surfaces every frame 2023-03-04 14:02:47 -08:00
Input.cpp Evaluate flipping eligibility per-entity 2023-03-18 21:30:23 -07:00
Input.h Explicitly declare void for all void parameter functions (#628) 2021-02-25 17:23:59 -05:00
InterimVersion.h Use PR_RIGHT for interim version info in main menu 2023-02-13 23:27:00 -08:00
InterimVersion.in.c Use PR_RIGHT for interim version info in main menu 2023-02-13 23:27:00 -08:00
KeyPoll.cpp Replace utfcpp by UTF8.h in KeyPoll.cpp 2023-02-27 23:00:41 -08:00
KeyPoll.h Add localization "foundation" (many code changes) 2022-12-31 20:04:56 -08:00
Labclass.cpp Add level exploring menu for translators 2022-12-31 20:04:56 -08:00
Labclass.h Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
Localization.cpp Remove key casts from hashmap function calls 2023-03-05 13:21:43 -08:00
Localization.h Add menu for selecting the level font 2023-02-13 23:27:00 -08:00
LocalizationMaint.cpp Remove key casts from hashmap function calls 2023-03-05 13:21:43 -08:00
LocalizationMaint.h Add cutscene test menu 2022-12-31 20:04:56 -08:00
LocalizationStorage.cpp Remove key casts from hashmap function calls 2023-03-05 13:21:43 -08:00
LocalizationStorage.h Write max_local to language files during sync 2023-02-13 23:27:00 -08:00
lodepng_wrapper.c Migrate LodePNG to submodule 2022-03-13 23:50:37 -07:00
Logic.cpp Remove x-position from setactivityposition 2023-02-17 20:47:32 -08:00
Logic.h Explicitly declare void for all void parameter functions (#628) 2021-02-25 17:23:59 -05:00
main.cpp Destroy gameScreen after all other graphics are destroyed 2023-03-03 16:46:15 -08:00
MakeAndPlay.h Use multiline comments in C files 2021-04-17 00:50:04 -04:00
Map.cpp Strip out old special roomname system 2023-03-02 22:58:12 -08:00
Map.h Strip out old special roomname system 2023-03-02 22:58:12 -08:00
Maths.h Use SDL_Point instead of rolling our own point struct 2023-01-28 23:32:14 -08:00
Music.cpp Add support for sound OGG files 2023-03-18 18:24:30 -07:00
Music.h Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Network.c Axe NETWORK_[set/get]AchievementProgress() 2021-09-19 21:49:54 -07:00
Network.h Explicitly declare void for all void parameter functions (#628) 2021-02-25 17:23:59 -05:00
Otherlevel.cpp Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
Otherlevel.h Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
preloader.cpp Migrate more prints and graphics.len calls to font:: 2023-02-13 23:27:00 -08:00
preloader.h Explicitly declare void for all void parameter functions (#628) 2021-02-25 17:23:59 -05:00
ReleaseVersion.h De-duplicate release version 2022-08-23 00:00:39 -07:00
Render.cpp Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Render.h Explicitly declare void for all void parameter functions (#628) 2021-02-25 17:23:59 -05:00
RenderFixed.cpp Strip out old special roomname system 2023-03-02 22:58:12 -08:00
RenderFixed.h Remove now-unneeded deltaframe fix when going to in-game settings 2021-03-21 02:55:42 -04:00
RoomnameTranslator.cpp Change font::len text argument from std::string to const char* 2023-03-04 16:10:17 -08:00
RoomnameTranslator.h Migrate more prints to font::, determine font for most textboxes 2023-02-13 23:27:00 -08:00
Screen.cpp Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Screen.h Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
ScreenSettings.h Add and use scaling mode enum 2021-12-25 23:14:12 -08:00
Script.cpp Strip out old special roomname system 2023-03-02 22:58:12 -08:00
Script.h Allow a maximum of 26 lines, with L suffix 2023-02-14 14:56:27 -08:00
Scripts.cpp Fix minor visual issue in int1yellow_5 2023-02-24 17:54:29 -08:00
Spacestation2.cpp Add level exploring menu for translators 2022-12-31 20:04:56 -08:00
Spacestation2.h Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
SteamNetwork.c Silence GCC warnings about void*-to-function-pointer casts 2021-10-21 01:00:06 -07:00
TerminalScripts.cpp Add textcase(n) commands to scripts 2022-12-31 20:04:56 -08:00
Textbook.c Replace all localization SDL_free with VVV_free 2022-12-31 20:04:56 -08:00
Textbook.h Add Textbook 2022-12-31 20:04:56 -08:00
Textbox.cpp Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
Textbox.h Style: Fixup instances of void arguments 2023-03-18 15:28:33 -07:00
ThirdPartyDeps.c Replace all free calls with VVV_free[func] 2022-11-30 22:50:08 -08:00
Tower.cpp Add POS_MOD macro and use for all positive modulos 2021-09-24 17:48:15 -07:00
Tower.h Remove vmult lookup tables 2021-09-24 16:37:27 -07:00
TowerBG.h Move from surfaces to the SDL render system 2023-01-28 14:36:28 -08:00
Unreachable.h Use _SDL_HAS_BUILTIN 2022-12-29 16:13:54 -08:00
Unused.h Factor out UNUSED macro to header file 2021-05-25 15:23:34 -04:00
UTF8.c Add UTF8.c 2023-02-27 23:00:41 -08:00
UTF8.h Add UTF8.c 2023-02-27 23:00:41 -08:00
UtilityClass.cpp UtilityClass.cpp: make time formats and numbers translatable 2022-12-31 20:04:56 -08:00
UtilityClass.h Move from surfaces to the SDL render system 2023-01-28 14:36:28 -08:00
VFormat.c Replace use of PHYSFS UTF-8 functions by UTF8.h 2023-02-27 23:00:41 -08:00
VFormat.h Support underscore (_) in VFormat arg name 2022-12-31 20:04:56 -08:00
Vlogging.c Add color support to Windows console output, properly 2022-11-14 21:57:01 -08:00
Vlogging.h Add -console option on Windows 2022-11-14 19:40:23 -08:00
WarpClass.cpp Add level exploring menu for translators 2022-12-31 20:04:56 -08:00
WarpClass.h Indicate what special roomnames are in the levels 2022-12-31 20:04:56 -08:00
XMLUtils.cpp Move all settings to settings.vvv 2020-11-04 12:06:57 -05:00
XMLUtils.h Add localization "foundation" (many code changes) 2022-12-31 20:04:56 -08:00
Xoshiro.c Move xoshiro_seed debug print to top 2022-11-14 13:14:25 -08:00
Xoshiro.h Replace Gravitron RNG with seeded Xoshiro 2021-08-27 12:28:35 -07:00