diff --git a/src/menu/cheat_codes.c b/src/menu/cheat_codes.c index b279370..80675d0 100644 --- a/src/menu/cheat_codes.c +++ b/src/menu/cheat_codes.c @@ -14,6 +14,10 @@ struct CheatCodePattern gCheatCodes[CheatCodeCount] = { {'u', 'd', 'u', 'd', 'u', 'd', 'r', 'r'}, SOUNDS_BUTTONCLICKRELEASE, }, + [CheatCodeInvincibility] = { + {'u', 'd', 'u', 'd', 'u', 'd', 'l', 'l'}, + SOUNDS_BUTTONCLICKRELEASE, + }, }; unsigned char gCheatProgress[CheatCodeCount]; @@ -32,6 +36,9 @@ void cheatCodeApply(enum CheatCode cheat) { case CheatCodeHighJump: playerToggleJumpImpulse(&gScene.player, 6.5f); break; + case CheatCodeInvincibility: + playerToggleInvincibility(&gScene.player); + break; case CheatCodeCount: break; } diff --git a/src/menu/cheat_codes.h b/src/menu/cheat_codes.h index a3dda11..9e5766b 100644 --- a/src/menu/cheat_codes.h +++ b/src/menu/cheat_codes.h @@ -6,6 +6,7 @@ enum CheatCode { CheatCodeUnlockGun, CheatCodeHighJump, + CheatCodeInvincibility, CheatCodeCount, }; diff --git a/src/player/player.c b/src/player/player.c index 139b90c..75eee0b 100644 --- a/src/player/player.c +++ b/src/player/player.c @@ -459,6 +459,10 @@ void playerUpdateSpeedSound(struct Player* player) { } void playerKill(struct Player* player, int isUnderwater) { + if (player->flags & PlayerIsInvincible){ + return; + } + if (isUnderwater) { player->flags |= PlayerIsUnderwater; player->drownTimer = DROWN_TIME; @@ -968,3 +972,11 @@ void playerToggleJumpImpulse(struct Player* player, float newJumpImpulse){ player->jumpImpulse = JUMP_IMPULSE; } } + +void playerToggleInvincibility(struct Player* player){ + if (player->flags & PlayerIsInvincible){ + player->flags &= ~PlayerIsInvincible; + }else{ + player->flags |= PlayerIsInvincible; + } +} diff --git a/src/player/player.h b/src/player/player.h index c9ae11d..3051bcd 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -29,6 +29,7 @@ enum PlayerFlags { PlayerJustDeniedSelect = (1 << 10), PlayerJustShotPortalGun = (1 << 11), PlayerInCutscene = (1 << 12), + PlayerIsInvincible = (1 << 13), }; struct Player { @@ -76,5 +77,6 @@ int playerIsGrabbing(struct Player* player); void playerSerialize(struct Serializer* serializer, SerializeAction action, struct Player* player); void playerDeserialize(struct Serializer* serializer, struct Player* player); void playerToggleJumpImpulse(struct Player* player, float newJumpImpulse); +void playerToggleInvincibility(struct Player* player); #endif \ No newline at end of file