From 18e64b28e25f387d1e269899cce8ffa704b1c76b Mon Sep 17 00:00:00 2001 From: rubidium Date: Thu, 17 Apr 2008 21:21:01 +0000 Subject: (svn r12757) -Codechange: move all cheat related stuff from all over the place to a single location. --- src/cheat.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/cheat.cpp (limited to 'src/cheat.cpp') 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} +}; -- cgit v1.2.3-70-g09d2