src/cheat.cpp
author truebrain
Mon, 30 Jun 2008 13:36:06 +0000
branchnoai
changeset 11100 b960288098b9
parent 10776 07203fc29812
permissions -rw-r--r--
(svn r13658) [NoAI] -Fix r13656: to maintain savegame compatibility with trunk, don't allow setting max_opcodes, but force it to value 4000.
10249
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     1
/* $Id$ */
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     2
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10249
diff changeset
     3
/** @file cheat.cpp Handling (loading/saving/initializing) of cheats. */
10249
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     4
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     5
#include "stdafx.h"
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     6
#include "saveload.h"
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     7
#include "cheat_type.h"
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     8
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
     9
Cheats _cheats;
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    10
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    11
void InitializeCheats()
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    12
{
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    13
	memset(&_cheats, 0, sizeof(Cheats));
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    14
}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    15
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    16
static void Save_CHTS()
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    17
{
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    18
	/* Cannot use lengthof because _cheats is of type Cheats, not Cheat */
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    19
	byte count = sizeof(_cheats) / sizeof(Cheat);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    20
	Cheat *cht = (Cheat*) &_cheats;
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    21
	Cheat *cht_last = &cht[count];
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    22
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    23
	SlSetLength(count * 2);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    24
	for (; cht != cht_last; cht++) {
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    25
		SlWriteByte(cht->been_used);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    26
		SlWriteByte(cht->value);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    27
	}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    28
}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    29
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    30
static void Load_CHTS()
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    31
{
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    32
	Cheat *cht = (Cheat*)&_cheats;
10776
07203fc29812 (svn r13326) [NoAI] -Sync with trunk r13264:13325
glx
parents: 10455
diff changeset
    33
	size_t count = SlGetFieldLength() / 2;
10249
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    34
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    35
	for (uint i = 0; i < count; i++) {
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    36
		cht[i].been_used = (SlReadByte() != 0);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    37
		cht[i].value     = (SlReadByte() != 0);
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    38
	}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    39
}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    40
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    41
bool CheatHasBeenUsed()
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    42
{
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    43
	/* Cannot use lengthof because _cheats is of type Cheats, not Cheat */
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    44
	const Cheat* cht = (Cheat*)&_cheats;
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    45
	const Cheat* cht_last = &cht[sizeof(_cheats) / sizeof(Cheat)];
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    46
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    47
	for (; cht != cht_last; cht++) {
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    48
		if (cht->been_used) return true;
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    49
	}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    50
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    51
	return false;
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    52
}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    53
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    54
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    55
extern const ChunkHandler _cheat_chunk_handlers[] = {
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    56
	{ 'CHTS', Save_CHTS,     Load_CHTS,     CH_RIFF | CH_LAST}
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents:
diff changeset
    57
};