Ja generalnie jestem za tworzeniem tzw. flag, czyli zmiennej, która stwierdza, czy coś jest czy nie. I tak bym zrobił kod. Tzn. całość w tym stylu, żeby było czytelniej:
// pseudokod
// 1. najpierw ustal stany postaci
if (costam lub costam lub costam) {
plywanie = true;
} else {
plywanie = false;
}
// 2. potem reaguj na nie
// logika od ruchu, animacji itd.
var predkosc_poruszania = plywanie ? 0.5 : 4; // 0.5 jak pływamy, 4 jak nie pływamy
var ruch_poziomo = -keyboard_check(vk_left) + keyboard_check(vk_right); // zwróci -1, 0 lub 1
x += predkosc_poruszania * ruch_poziomo;
if (plywanie = true) {
if (sprite_index != spr_plywa) {
sprite_index = spr_plywa;
image_index = 0;
image_speed = 0.2;
}
} else {
... // itd.
}
W ten sposób trudniej się pogubić, poza tym mając zmienną od stanów, łatwiej je wymuszać i zmieniać w innych przypadkach, a nie zmieniamy zachowania (można np. włączyć pływanie podchodząc do drabinki, czy drzwi, czy wymusić na początku etapu - spoza step tego obiektu).