Normal
So figured out hud elements for ghosts PC steam version. Since game is dead and no one got money for a gsc injector, use this thread to make host mod menu. The way the game sets text is different from other COD's and to bypass a G_LocalizedStringIndex Patch everytime you print text, I decided to use G_FindConfigstringIndex instead. First to get hudelems to work on PC it seems not sure thoughMenu Base Made With This : Release - [PC/Steam] Ghosts Menu Base[SPOILER="Hud Elements For Ghosts Steam"][CODE=cpp]/*EXAMPLEgame_hudelem_s * Shader = AddShader(client,"white", 100, 100, 1000, 1000, 0, 0, 0, 180);game_hudelem_s * Text = setText(client, "HHHHHHHHHHHHHHHHHHHHHHH",1,4,100,100,255,255,255,255);*/typedef unsigned char byte;typedef unsigned int uint;union color_s{ struct{ byte r, g, b, a;};uint rgba;};struct hudelem_s{ int type; float x; float y; float z; int targetEntNum; float fontScale; float fromFontScale; float fontScaleStartTime; float fontScaleTime; int font; int alignOrg; int alignScreen; color_s color; color_s fromColor; int fadeStartTime; int fadeTime; int label; int width; int height; int materialIndex; int fromWidth; int fromHeight; int scaleStartTime; int scaleTime; float fromX; float fromY; int fromAlignOrg; int fromAlignScreen; int moveStartTime; int moveTime; int time; int duration; float value; int text; float sort; color_s glowColor; int fxBirthTime; int fxLetterTime; int fxDecayStartTime; int fxDecayDuration; int soundID; int flags;};struct game_hudelem_s{ hudelem_s elem; int clientNum; int team; int archived; int currentShowInKillcam;};int(*G_MaterialIndex)(const char* shader) = (int(*)(const char*))0x140162320;int(*G_FindConfigstringIndex)(const char* name, int start, int max, int create, const char* error) = (int(*)(const char*, int, int, int, const char*))0x140161F90;game_hudelem_s*(*HudElem_Alloc)(int client, int team) = (game_hudelem_s*(*)(int, int))0x1403997E0;game_hudelem_s* setText(int client, char* Text, int font, float fontScale, float x, float y, byte r, byte g, byte b, byte a){ game_hudelem_s* Element = HudElem_Alloc(client,0); Element->elem.type = 0x1; Element->elem.alignOrg = 0; Element->elem.alignScreen = 0; Element->elem.font = font; Element->elem.fontScale = fontScale; Element->elem.x = x; Element->elem.y = y; Element->elem.color.r = r; Element->elem.color.g = g; Element->elem.color.b = b; Element->elem.color.a = a; Element->elem.sort = 1; Element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error"); return Element;}game_hudelem_s* AddShader(int client,char* Shader, float x, float y, int width, int height, byte r, byte g, byte b, byte a){ game_hudelem_s* element = HudElem_Alloc(client, 0); element->elem.type = 0x04; element->elem.materialIndex = G_MaterialIndex(Shader); element->elem.x = x; element->elem.y = y; element->elem.width = width; element->elem.height = height; element->elem.alignOrg = 0; element->elem.alignScreen = 0; element->elem.sort = 0; element->elem.color.r = r; element->elem.color.g = g; element->elem.color.b = b; element->elem.color.a = a; return element;}void ChangeGlow(game_hudelem_s* element, byte r, byte g, byte b, byte a){ element->elem.glowColor.r = r; element->elem.glowColor.g = g; element->elem.glowColor.b = b; element->elem.glowColor.a = a;}void ChangeColor(game_hudelem_s* element, byte r, byte g, byte b, byte a){ element->elem.color.r = r; element->elem.color.g = g; element->elem.color.b = b; element->elem.color.a = a;}void FreeHudElement(game_hudelem_s* element){ ZeroMemory(element, 0xB8);}void ChangeFontScale(game_hudelem_s* element, float Scale){ element->elem.fontScale = Scale;}void ChangeText(game_hudelem_s* element, const char* Text){ element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error");}void ChangeMaterial(game_hudelem_s* element, const char* material){ element->elem.materialIndex = G_MaterialIndex(material);}void MoveXY(game_hudelem_s* element, float x, float y){ element->elem.x = x; element->elem.y = y;}[/CODE][/SPOILER][SPOILER="Some Functions"][SPOILER="RPC"][CODE=cpp]typedef unsigned __int64 QWORD;template<typename function_type, typename... Parameters>function_type RPC(QWORD function_address, Parameters... args){ function_type(*placeholder)(Parameters...) = (function_type(*)(Parameters...))function_address; return placeholder(args...);}[/CODE][/SPOILER][CODE=cpp]void VM_Notify(unsigned int notifyListOwnerId, unsigned int stringValue, void *top) 0x14043D9B0const char * SL_ConvertToString(unsigned int stringValue){ return RPC<const char *>(0x1404317F0, stringValue);}unsigned int Scr_GetSelf(unsigned int threadID){ return RPC<unsigned int>(0x140436F10, threadID);}void Scr_ConstructMessageString(int firstParmIndex, int lastParmIndex, const char *errorContext, char *string, unsigned int stringLimit){ RPC<void>(0x1403CD810, firstParmIndex, lastParmIndex, errorContext, string, stringLimit);}void SV_SetConfigString(int ConfigString, const char * b){ RPC<void>(0x140477200, ConfigString, b);}void Scr_SetNumParam(int A){ write_process<int>(0x144D4B0B8 + 4, A);}void Scr_ClearOutParams(){ RPC<void>(0x140438600);}void Scr_AddString(const char * value){ RPC<void>(0x1404381D0, value);}void PlayerCMD_giveWeapon(unsigned int Player, const char * Weapon){ Scr_AddString(Weapon); Scr_SetNumParam(1); RPC<void>(0x1403891F0, Player); Scr_ClearOutParams();}[/CODE][/SPOILER][ATTACH=full]4570[/ATTACH]
So figured out hud elements for ghosts PC steam version. Since game is dead and no one got money for a gsc injector, use this thread to make host mod menu. The way the game sets text is different from other COD's and to bypass a G_LocalizedStringIndex Patch everytime you print text, I decided to use G_FindConfigstringIndex instead. First to get hudelems to work on PC it seems not sure though
Menu Base Made With This : Release - [PC/Steam] Ghosts Menu Base
[SPOILER="Hud Elements For Ghosts Steam"]
[CODE=cpp]
/*
EXAMPLE
game_hudelem_s * Shader = AddShader(client,"white", 100, 100, 1000, 1000, 0, 0, 0, 180);
game_hudelem_s * Text = setText(client, "HHHHHHHHHHHHHHHHHHHHHHH",1,4,100,100,255,255,255,255);
*/
typedef unsigned char byte;
typedef unsigned int uint;
union color_s
{
struct
byte r, g, b, a;
};
uint rgba;
struct hudelem_s
int type;
float x;
float y;
float z;
int targetEntNum;
float fontScale;
float fromFontScale;
float fontScaleStartTime;
float fontScaleTime;
int font;
int alignOrg;
int alignScreen;
color_s color;
color_s fromColor;
int fadeStartTime;
int fadeTime;
int label;
int width;
int height;
int materialIndex;
int fromWidth;
int fromHeight;
int scaleStartTime;
int scaleTime;
float fromX;
float fromY;
int fromAlignOrg;
int fromAlignScreen;
int moveStartTime;
int moveTime;
int time;
int duration;
float value;
int text;
float sort;
color_s glowColor;
int fxBirthTime;
int fxLetterTime;
int fxDecayStartTime;
int fxDecayDuration;
int soundID;
int flags;
struct game_hudelem_s
hudelem_s elem;
int clientNum;
int team;
int archived;
int currentShowInKillcam;
int(*G_MaterialIndex)(const char* shader) = (int(*)(const char*))0x140162320;
int(*G_FindConfigstringIndex)(const char* name, int start, int max, int create, const char* error) = (int(*)(const char*, int, int, int, const char*))0x140161F90;
game_hudelem_s*(*HudElem_Alloc)(int client, int team) = (game_hudelem_s*(*)(int, int))0x1403997E0;
game_hudelem_s* setText(int client, char* Text, int font, float fontScale, float x, float y, byte r, byte g, byte b, byte a)
game_hudelem_s* Element = HudElem_Alloc(client,0);
Element->elem.type = 0x1;
Element->elem.alignOrg = 0;
Element->elem.alignScreen = 0;
Element->elem.font = font;
Element->elem.fontScale = fontScale;
Element->elem.x = x;
Element->elem.y = y;
Element->elem.color.r = r;
Element->elem.color.g = g;
Element->elem.color.b = b;
Element->elem.color.a = a;
Element->elem.sort = 1;
Element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error");
return Element;
}
game_hudelem_s* AddShader(int client,char* Shader, float x, float y, int width, int height, byte r, byte g, byte b, byte a)
game_hudelem_s* element = HudElem_Alloc(client, 0);
element->elem.type = 0x04;
element->elem.materialIndex = G_MaterialIndex(Shader);
element->elem.x = x;
element->elem.y = y;
element->elem.width = width;
element->elem.height = height;
element->elem.alignOrg = 0;
element->elem.alignScreen = 0;
element->elem.sort = 0;
element->elem.color.r = r;
element->elem.color.g = g;
element->elem.color.b = b;
element->elem.color.a = a;
return element;
void ChangeGlow(game_hudelem_s* element, byte r, byte g, byte b, byte a)
element->elem.glowColor.r = r;
element->elem.glowColor.g = g;
element->elem.glowColor.b = b;
element->elem.glowColor.a = a;
void ChangeColor(game_hudelem_s* element, byte r, byte g, byte b, byte a)
void FreeHudElement(game_hudelem_s* element)
ZeroMemory(element, 0xB8);
void ChangeFontScale(game_hudelem_s* element, float Scale)
element->elem.fontScale = Scale;
void ChangeText(game_hudelem_s* element, const char* Text)
element->elem.text = G_FindConfigstringIndex(Text, 0x21D, 0x1FF, 1, "error");
void ChangeMaterial(game_hudelem_s* element, const char* material)
element->elem.materialIndex = G_MaterialIndex(material);
void MoveXY(game_hudelem_s* element, float x, float y)
}[/CODE]
[/SPOILER]
[SPOILER="Some Functions"]
[SPOILER="RPC"]
[CODE=cpp]typedef unsigned __int64 QWORD;
template<typename function_type, typename... Parameters>
function_type RPC(QWORD function_address, Parameters... args)
function_type(*placeholder)(Parameters...) = (function_type(*)(Parameters...))function_address;
return placeholder(args...);
[CODE=cpp]void VM_Notify(unsigned int notifyListOwnerId, unsigned int stringValue, void *top) 0x14043D9B0
const char * SL_ConvertToString(unsigned int stringValue)
return RPC<const char *>(0x1404317F0, stringValue);
unsigned int Scr_GetSelf(unsigned int threadID)
return RPC<unsigned int>(0x140436F10, threadID);
void Scr_ConstructMessageString(int firstParmIndex, int lastParmIndex, const char *errorContext, char *string, unsigned int stringLimit)
RPC<void>(0x1403CD810, firstParmIndex, lastParmIndex, errorContext, string, stringLimit);
void SV_SetConfigString(int ConfigString, const char * b)
RPC<void>(0x140477200, ConfigString, b);
void Scr_SetNumParam(int A){
write_process<int>(0x144D4B0B8 + 4, A);
void Scr_ClearOutParams(){
RPC<void>(0x140438600);
void Scr_AddString(const char * value){
RPC<void>(0x1404381D0, value);
void PlayerCMD_giveWeapon(unsigned int Player, const char * Weapon)
Scr_AddString(Weapon);
Scr_SetNumParam(1);
RPC<void>(0x1403891F0, Player);
Scr_ClearOutParams();
[/CODE]
[ATTACH=full]4570[/ATTACH]