tron@2186: /* $Id$ */ tron@2186: rubidium@9111: /** @file cheat.cpp Handling (loading/saving/initializing) of cheats. */ belugas@6201: truelight@0: #include "stdafx.h" truelight@0: #include "saveload.h" rubidium@8965: #include "cheat_type.h" truelight@0: rubidium@8965: Cheats _cheats; truelight@0: rubidium@8965: void InitializeCheats() truelight@0: { truelight@201: memset(&_cheats, 0, sizeof(Cheats)); truelight@0: } truelight@0: rubidium@6247: static void Save_CHTS() truelight@0: { rubidium@8965: /* Cannot use lengthof because _cheats is of type Cheats, not Cheat */ rubidium@8965: byte count = sizeof(_cheats) / sizeof(Cheat); rubidium@8965: Cheat *cht = (Cheat*) &_cheats; rubidium@8965: Cheat *cht_last = &cht[count]; truelight@0: tron@2951: SlSetLength(count * 2); tron@2951: for (; cht != cht_last; cht++) { truelight@0: SlWriteByte(cht->been_used); truelight@0: SlWriteByte(cht->value); truelight@0: } truelight@0: } truelight@0: rubidium@6247: static void Load_CHTS() truelight@0: { rubidium@8965: Cheat *cht = (Cheat*)&_cheats; rubidium@9390: size_t count = SlGetFieldLength() / 2; truelight@0: smatz@8819: for (uint i = 0; i < count; i++) { rubidium@5587: cht[i].been_used = (SlReadByte() != 0); rubidium@5587: cht[i].value = (SlReadByte() != 0); truelight@0: } truelight@0: } truelight@0: rubidium@8965: bool CheatHasBeenUsed() rubidium@8965: { rubidium@8965: /* Cannot use lengthof because _cheats is of type Cheats, not Cheat */ rubidium@8965: const Cheat* cht = (Cheat*)&_cheats; rubidium@8965: const Cheat* cht_last = &cht[sizeof(_cheats) / sizeof(Cheat)]; truelight@0: rubidium@8965: for (; cht != cht_last; cht++) { rubidium@8965: if (cht->been_used) return true; rubidium@8965: } truelight@0: rubidium@8965: return false; rubidium@8965: } rubidium@8965: rubidium@8965: rubidium@8965: extern const ChunkHandler _cheat_chunk_handlers[] = { rubidium@4344: { 'CHTS', Save_CHTS, Load_CHTS, CH_RIFF | CH_LAST} truelight@0: };