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