mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-12-23 10:09:43 +01:00
Fix prompt fade out when activating overlapping zones
If you stood in two activity zones at once, you'll automatically select the one that got created first. And when you activated it, the activity zone prompt would switch to fading out the prompt of the OTHER activity zone, the one you didn't activate. This wasn't a problem in 2.2 and previous, because the fading animation was simply bugged and defaulted to being solid black. However, in 2.3, the fading animation is fixed, so this is possible. Also, this really only happens in the main game. Since there's only one type of useful activity zone in custom levels - namely the terminal activity zone - if two activity zones did happen to overlap, activating one of them wouldn't result in visibly fading out a different activity zone (because they both look the same); furthermore custom level makers are careful to not overlap terminal activity zones, lest this result in player confusion; furthermore the placed activity zones only cover a small area, whereas in the main game, crewmates' activity zones are pretty big. (Technically, you CAN create main game activity zones in custom levels, but those are hardcoded to call main game scripts, and basically nobody uses them.) So what's the solution? Simply adding game.hascontrol and script.running checks to the updating of game.activity_last[prompt|r|g|b]. Why not add those checks to the assignment of game.activeactivity, just above? Because that would introduce a frame ordering issue (that would NOT be (automatically) fixed by #535) where the eligibility of pressing Enter on an activity zone now checks if you were standing in an activity zone LAST frame, and not THIS frame. (I tested this with libTAS.) Better to fiddle with the rendering code than fiddle with the actual physics code. The specific spot I used to test this was standing in Violet's activity zone and the activity zone of the ship radio terminals (the three terminals on the ground in her room); the ship radio terminals are first-placed, so if you're testing this (and you should!), make that the prompt is of the ship radio activity zone before activation.
This commit is contained in:
parent
9f69506acf
commit
7ce87d7b13
1 changed files with 2 additions and 1 deletions
|
@ -1527,7 +1527,8 @@ void gamelogic(void)
|
|||
|
||||
game.activeactivity = obj.checkactivity();
|
||||
|
||||
if (INBOUNDS_VEC(game.activeactivity, obj.entities))
|
||||
if (game.hascontrol && !script.running
|
||||
&& INBOUNDS_VEC(game.activeactivity, obj.entities))
|
||||
{
|
||||
game.activity_lastprompt = obj.blocks[game.activeactivity].prompt;
|
||||
game.activity_r = obj.blocks[game.activeactivity].r;
|
||||
|
|
Loading…
Reference in a new issue