m_cheat.c
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:2k
源码类别:

射击游戏

开发平台:

Visual C++

  1. // Emacs style mode select   -*- C++ -*- 
  2. //-----------------------------------------------------------------------------
  3. //
  4. // $Id:$
  5. //
  6. // Copyright (C) 1993-1996 by id Software, Inc.
  7. //
  8. // This source is available for distribution and/or modification
  9. // only under the terms of the DOOM Source Code License as
  10. // published by id Software. All rights reserved.
  11. //
  12. // The source is distributed in the hope that it will be useful,
  13. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
  15. // for more details.
  16. //
  17. // $Log:$
  18. //
  19. // DESCRIPTION:
  20. // Cheat sequence checking.
  21. //
  22. //-----------------------------------------------------------------------------
  23. static const char
  24. rcsid[] = "$Id: m_cheat.c,v 1.1 1997/02/03 21:24:34 b1 Exp $";
  25. #include "m_cheat.h"
  26. #include "stdlib.h"
  27. //
  28. // CHEAT SEQUENCE PACKAGE
  29. //
  30. static int firsttime = 1;
  31. static unsigned char cheat_xlate_table[256];
  32. extern unsigned char scan2chars[256];
  33. extern unsigned char scan2char[256];
  34. //
  35. // Called in st_stuff module, which handles the input.
  36. // Returns a 1 if the cheat was successful, 0 if failed.
  37. //
  38. int
  39. cht_CheckCheat
  40. ( cheatseq_t* cht,
  41.   char key )
  42. {
  43.     int i;
  44.     int rc = 0;
  45.     if (firsttime)
  46.     {
  47. firsttime = 0;
  48. for (i=0;i<256;i++) cheat_xlate_table[i] = SCRAMBLE(i);
  49.     }
  50.     if (!cht->p)
  51. cht->p = cht->sequence; // initialize if first time
  52.     if (*cht->p == 0)
  53. *(cht->p++) = tolower(scan2char[key]);
  54.     else if
  55. (cheat_xlate_table[(unsigned char)tolower(scan2char[key])] == *cht->p) cht->p++;
  56.     else
  57. cht->p = cht->sequence;
  58.     if (*cht->p == 1)
  59. cht->p++;
  60.     else if (*cht->p == 0xff) // end of sequence character
  61.     {
  62. cht->p = cht->sequence;
  63. rc = 1;
  64.     }
  65.     return rc;
  66. }
  67. void
  68. cht_GetParam
  69. ( cheatseq_t* cht,
  70.   char* buffer )
  71. {
  72.     unsigned char *p, c;
  73.     p = cht->sequence;
  74.     while (*(p++) != 1);
  75.     
  76.     do
  77.     {
  78. c = *p;
  79. *(buffer++) = c;
  80. *(p++) = 0;
  81.     }
  82.     while (c && *p!=0xff );
  83.     if (*p==0xff)
  84. *buffer = 0;
  85. }