Using the console for Cheat Codes in GTest By: Bob
After a couple of e-mails asking about this I wanted to post this.
It is only a small modification to the existing Gtest code.
This is just a basic way to read the user's input to the console,
and use that information to make decisions in the code.
There are better ways to do this but it works :) and will point
you in the right direction.
****At the beginning of Console.c after the other Includes add this****
#include "string.h"
char Cheats[21]; // Added for Cheat Codes
In Console.c (Console_ParseTokens)
****Replace with this Console_ParseTokens with this (of course make it what you want / add what you want)*****
//================================================================================
//Console_ParseTokens
//================================================================================
geBoolean Console_ParseTokens(Console_Console *Console)
{
char GODON[ ] = "MYGOD";
char GODOFF[ ] = "MYGODOFF";
int result, result2;
if (Console->CursorX <= 0)// Nothing to parse
{
return GE_TRUE;
}
//assuming you want more than one code to turn it on or off
result = _stricmp( Cheats, GODON );
result2 = _stricmp( Cheats ,GODOFF);
if(result == 0)
{
if (GodMode == GE_FALSE)
{
Console_Printf(Console, "GOD Mode Is On Cheater. \n");
GodMode = !GodMode;
}
else
{
Console_Printf(Console, "GOD Mode Is Still On Cheater. \n");
}
}
if(result2 == 0)
{
if (GodMode == GE_TRUE)
{
Console_Printf(Console, "GOD Mode Is Now Off. \n");
GodMode = !GodMode;
}
else
{
Console_Printf(Console, "GOD Mode Is Still Off. \n");
}
}
Console_Printf(Console, "\n");
return GE_TRUE;
}
****Replace this in (Console_KeyDown)****
//================================================================================
//Console_KeyDown
//================================================================================
geBoolean Console_KeyDown(Console_Console *Console, int32 Key, geBoolean Cmd)
{
assert(Console);
Cheats[Console->CursorX] = '\0';//Added for Cheat Codes
if (Key == VK_LEFT || Key == VK_RIGHT || Key == VK_UP || Key == VK_DOWN || Key == VK_ESCAPE)
return GE_TRUE;
if (Key == 33)// Page up
{
Console_Scroll(Console, -1, GE_FALSE);
return GE_TRUE;
}
else if (Key == 34)// Page down
{
Console_Scroll(Console, 1, GE_FALSE);
return GE_TRUE;
}
else if (Key == VK_RETURN || Key == '\n')
{
if (Console->CursorX <= 0)
return GE_TRUE;
if (Console->CursorY < Console->StopY-1)
Console->CursorY++;
else// When it gets to the bottom of the screen, start scrolling...
Console_Scroll(Console, 1, GE_TRUE);
Console->TextBuffer[Console->CursorPos] = '\n';
MoveCursorPos(Console, 1);
if (Cmd)
Console_ParseTokens(Console);
// Must set to 0 after parse tokens, so it can use it to see where we are in the
// buffer
Console->CursorX = 0;
return GE_TRUE;
}
else if (Key == VK_BACK)
{
if (Console->CursorX <= 0)
return GE_TRUE;
Console->CursorX--;
MoveCursorPos(Console, -1);
return GE_TRUE;
}
else if (Console->CursorX >= Console->StopX)// Too much on one line
return GE_TRUE;
//Console->TokenBuffer[Console->CursorX] = Key;
Console->TextBuffer[Console->CursorPos] = (char)Key;
Cheats[Console->CursorX] = (char)Key; //Added for Cheat Codes
Console->CursorX++;
MoveCursorPos(Console, 1);
return GE_TRUE;
}
****Change This In (Console_ToggleActive)****
//================================================================================
//Console_ToggleActive
//================================================================================
geBoolean Console_ToggleActive(Console_Console *Console)
{
assert(Console);
Console->Active = !Console->Active;
Console_Printf(Console, "\n"); //added for Cheat Codes (just clears a line when the console is pulled)
return GE_TRUE;
}
****Note:
If you want this for GodMode the you should also comment out this in Bot.c like this****
//if (GetAsyncKeyState('I') & 0x8000)
//{
//GodMode = !GodMode;
//GenVSI_ConsoleHeaderPrintf(VSI, DBot->ClientPlayer->ClientHandle, GE_TRUE, "God Mode %d", GodMode);
//}
****Also you may want to clean up all the messages that refer to Console_Printf in the other files that you find useless****
****End Changes****
This is just a basic GodMode cheat but it will allow you to modify the ParseTokens area in
a better code style and add more Cheats.