summaryrefslogtreecommitdiff
path: root/src/m_cheat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/m_cheat.c')
-rw-r--r--src/m_cheat.c104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/m_cheat.c b/src/m_cheat.c
new file mode 100644
index 00000000..ff41063d
--- /dev/null
+++ b/src/m_cheat.c
@@ -0,0 +1,104 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// $Id: m_cheat.c 4 2005-07-23 16:19:41Z fraggle $
+//
+// Copyright (C) 1993-1996 by id Software, Inc.
+//
+// This source is available for distribution and/or modification
+// only under the terms of the DOOM Source Code License as
+// published by id Software. All rights reserved.
+//
+// The source is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
+// for more details.
+//
+// $Log$
+// Revision 1.1 2005/07/23 16:20:31 fraggle
+// Initial revision
+//
+//
+// DESCRIPTION:
+// Cheat sequence checking.
+//
+//-----------------------------------------------------------------------------
+
+
+static const char
+rcsid[] = "$Id: m_cheat.c 4 2005-07-23 16:19:41Z fraggle $";
+
+#include "m_cheat.h"
+
+//
+// CHEAT SEQUENCE PACKAGE
+//
+
+static int firsttime = 1;
+static unsigned char cheat_xlate_table[256];
+
+
+//
+// Called in st_stuff module, which handles the input.
+// Returns a 1 if the cheat was successful, 0 if failed.
+//
+int
+cht_CheckCheat
+( cheatseq_t* cht,
+ char key )
+{
+ int i;
+ int rc = 0;
+
+ if (firsttime)
+ {
+ firsttime = 0;
+ for (i=0;i<256;i++) cheat_xlate_table[i] = SCRAMBLE(i);
+ }
+
+ if (!cht->p)
+ cht->p = cht->sequence; // initialize if first time
+
+ if (*cht->p == 0)
+ *(cht->p++) = key;
+ else if
+ (cheat_xlate_table[(unsigned char)key] == *cht->p) cht->p++;
+ else
+ cht->p = cht->sequence;
+
+ if (*cht->p == 1)
+ cht->p++;
+ else if (*cht->p == 0xff) // end of sequence character
+ {
+ cht->p = cht->sequence;
+ rc = 1;
+ }
+
+ return rc;
+}
+
+void
+cht_GetParam
+( cheatseq_t* cht,
+ char* buffer )
+{
+
+ unsigned char *p, c;
+
+ p = cht->sequence;
+ while (*(p++) != 1);
+
+ do
+ {
+ c = *p;
+ *(buffer++) = c;
+ *(p++) = 0;
+ }
+ while (c && *p!=0xff );
+
+ if (*p==0xff)
+ *buffer = 0;
+
+}
+
+