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.