diff options
Diffstat (limited to 'src/cheat.cpp')
-rw-r--r-- | src/cheat.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/cheat.cpp b/src/cheat.cpp new file mode 100644 index 000000000..693f8a5fc --- /dev/null +++ b/src/cheat.cpp @@ -0,0 +1,57 @@ +/* $Id$ */ + +/** @file misc.cpp */ + +#include "stdafx.h" +#include "saveload.h" +#include "cheat_type.h" + +Cheats _cheats; + +void InitializeCheats() +{ + memset(&_cheats, 0, sizeof(Cheats)); +} + +static void Save_CHTS() +{ + /* Cannot use lengthof because _cheats is of type Cheats, not Cheat */ + byte count = sizeof(_cheats) / sizeof(Cheat); + Cheat *cht = (Cheat*) &_cheats; + Cheat *cht_last = &cht[count]; + + SlSetLength(count * 2); + for (; cht != cht_last; cht++) { + SlWriteByte(cht->been_used); + SlWriteByte(cht->value); + } +} + +static void Load_CHTS() +{ + Cheat *cht = (Cheat*)&_cheats; + uint count = SlGetFieldLength() / 2; + + for (uint i = 0; i < count; i++) { + cht[i].been_used = (SlReadByte() != 0); + cht[i].value = (SlReadByte() != 0); + } +} + +bool CheatHasBeenUsed() +{ + /* Cannot use lengthof because _cheats is of type Cheats, not Cheat */ + const Cheat* cht = (Cheat*)&_cheats; + const Cheat* cht_last = &cht[sizeof(_cheats) / sizeof(Cheat)]; + + for (; cht != cht_last; cht++) { + if (cht->been_used) return true; + } + + return false; +} + + +extern const ChunkHandler _cheat_chunk_handlers[] = { + { 'CHTS', Save_CHTS, Load_CHTS, CH_RIFF | CH_LAST} +}; |