## ETPub PCR alpha hacks (etpub_pcr_ah) ## (C) 2006-2007 PatheticCockroach.com ## This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License ## Derivative works may only be done if they are distributed with their source code. ## ## The original etpub_pcr_ah source and binaries can be found around http://www.patheticcockroach.com/etserver/etpub_pcr.php ## ## Note : ETPub PCR alpha hacks are just small modifications for ETPub (http://www.etpub.org) We placed frequent informations (landmine armed, killed x, etc) in a new side area. This allowed us : 1. to avoid flooding the centerprint area, so important messages get a better exposure 2. to save some bandwidth, because we also optimized the way these data are transferred To use this function, you must set g_noobTips flag 2. New default value for g_noobTips : 3 ------------------------- MODIFICATION STARTS HERE src\cgame\bg_public.h (line 134) **** AFTER // tjw: number of players allowed on one fireteam #define MAX_FIRETEAM_MEMBERS 8 #define MIN_FIRETEAM_MEMBERS 2 **** ADD // PatheticCockroach - personal logbox #define PCRBOX_MINE_ARMING 1 #define PCRBOX_MINE_ARMED 2 #define PCRBOX_MINE_DEFUSING 3 #define PCRBOX_MINE_DEFUSED 4 #define PCRBOX_TRIPMINE_DEFUSING 5 #define PCRBOX_DYNO_NOARM 10 #define PCRBOX_DYNO_ARMING 11 #define PCRBOX_DYNO_ARMED 12 #define PCRBOX_DYNO_DEFUSING 13 #define PCRBOX_CONSTRUCTING 20 #define PCRBOX_SATCHEL_DISARMING 25 #define PCRBOX_SATCHEL_DISARMED 26 #define PCRBOX_SS_LOST 30 (line 918) **** AFTER // No self-adren #define MEDIC_NOSELFADREN 256 **** ADD // g_noobTips // remove some messages #define NOOBTIPS_ON 1 // use personal logbox #define NOOBTIPS_SIDED 2 src\cgame\cg_local.h (line 990) **** AFTER // bannerprinting int bannerPrintTime; char bannerPrint[1024]; **** ADD // PatheticCockroach - personal logbox char PCRlogbox[5][150]; (line 2707) **** AFTER void CG_RunMenuScript(char **args); **** ADD void CG_FillPCRLogBox(const char *str); src\cgame\cg_servercmds.c (line 2428) **** AFTER // Banner Printing if ( !Q_stricmp( cmd, "bp" ) ) { CG_BannerPrint( CG_LocalizeServerCommand(CG_Argv(1)) ); return; } **** ADD // PatheticCockroach - personal logbox if ( !Q_stricmp( cmd, "pcrc" ) ) { int args = trap_Argc(); int cmd; char *name; cmd=atoi(CG_TranslateString(CG_Argv(1))); if(args>=3) name=CG_TranslateString(CG_Argv(2)); switch(cmd) { case PCRBOX_MINE_ARMING: CG_FillPCRLogBox("Arming landmine..."); break; case PCRBOX_MINE_ARMED: CG_FillPCRLogBox("Landmine armed"); break; case PCRBOX_MINE_DEFUSING: CG_FillPCRLogBox("Defusing landmine"); break; case PCRBOX_MINE_DEFUSED: CG_FillPCRLogBox("Landmine defused"); break; case PCRBOX_TRIPMINE_DEFUSING: CG_FillPCRLogBox("Disarming tripmine..."); break; case PCRBOX_DYNO_NOARM: CG_FillPCRLogBox("Cannot arm dynamite during sudden death"); break; case PCRBOX_DYNO_ARMED: CG_FillPCRLogBox("Dynamite armed (30 seconds timer)"); break; case PCRBOX_DYNO_ARMING: CG_FillPCRLogBox("Arming dynamite..."); break; case PCRBOX_DYNO_DEFUSING: CG_FillPCRLogBox("Defusing dynamite..."); break; case PCRBOX_CONSTRUCTING: CG_FillPCRLogBox("Constructing..."); break; case PCRBOX_SATCHEL_DISARMING: CG_FillPCRLogBox("Disarming satchel charge..."); break; case PCRBOX_SATCHEL_DISARMED: CG_FillPCRLogBox("Satchel charge disarmed"); break; case PCRBOX_SS_LOST: CG_FillPCRLogBox("You lost your spawn protection"); break; default: CG_FillPCRLogBox("^1ERROR : ^3unknown PCRBOX identifier"); return; } return; } src\cgame\cg_newDraw.c (line 928) **** AFTER void CG_RunMenuScript( char **args ) { } **** ADD // PatheticCockroach - personal logbox void CG_FillPCRLogBox(const char *str) { int i=0; for(i=4;i>0;i--) { Q_strncpyz( cg.PCRlogbox[i], cg.PCRlogbox[i-1], sizeof(cg.PCRlogbox[i]) ); //CG_Printf("cg.PCRlogbox[%d] : %s\n", i, cg.PCRlogbox[i]); } Q_strncpyz( cg.PCRlogbox[0], str, sizeof(cg.PCRlogbox[0]) ); CG_Printf("^hlogbox: ^9%s\n", cg.PCRlogbox[0]); } src\cgame\cg_draw.c (line 5256) **** BEFORE /* ================= CG_Draw2D ================= */ static void CG_Draw2D( void ) { **** ADD // PatheticCockroach - personal logbox void CG_DrawPCRLogBox( void ) { int w=0,i=1,y=0; /*CG_Text_Paint_Ext( 625, 345, 0.18f, 0.18f, colorBlue, ".", 0, 0, 0, &cgs.media.font3 ); CG_Text_Paint_Ext( 630, 345, 0.18f, 0.18f, colorWhite, ".", 0, 0, 0, &cgs.media.font3 ); CG_Text_Paint_Ext( 635, 345, 0.18f, 0.18f, colorRed, ".", 0, 0, 0, &cgs.media.font3 );*/ //most recent info is bigger w = CG_DrawStrlen( cg.PCRlogbox[0] ) * 5.1; CG_Text_Paint_Ext( 630-w, 385-y, 0.18f, 0.18f, colorWhite, va("%s", cg.PCRlogbox[0]), 0, 0, 0, &cgs.media.font3 ); y=11; //older are all the same for(i=1;i<=4;i++) { w = CG_DrawStrlen( cg.PCRlogbox[i] ) * 4.5; CG_Text_Paint_Ext( 630-w, 385-y, 0.16f, 0.16f, colorMdGrey, va("%s", cg.PCRlogbox[i]), 0, 0, 0, &cgs.media.font3 ); y+=9; } } (line 5419) **** AFTER // Ridah, draw flash blends now CG_DrawFlashBlend(); CG_DrawDemoRecording(); **** ADD CG_DrawPCRLogBox(); src\game\g_local.h (line 2864) **** REPLACE void G_PrintClientSpammyCenterPrint(int entityNum, char* text); **** WITH void G_PCRLogoBoxPrint(int entityNum, int cmd) void G_PrintClientSpammyCenterPrint(int entityNum, int cmd); src\game\g_utils.c (line 1385) **** REPLACE void G_PrintClientSpammyCenterPrint(int entityNum, char* text) { if(!g_entities[entityNum].client) { return; } if(level.time - g_entities[entityNum].client->lastSpammyCentrePrintTime < 1500) { return; } trap_SendServerCommand(entityNum, va("cp \"%s\" 1", text)); g_entities[entityNum].client->lastSpammyCentrePrintTime = level.time; } **** WITH // PatheticCockroach - personal logbox void G_PCRLogoBoxPrint(int entityNum, int cmd) { char *text; if(!g_entities[entityNum].client) { return; } if(g_noobTips.integer & NOOBTIPS_SIDED) trap_SendServerCommand(entityNum, va("pcrc %i", cmd)); else { switch(cmd) { case PCRBOX_MINE_ARMED: text="Landmine armed..."; break; case PCRBOX_MINE_DEFUSED: text="Landmine defused..."; break; case PCRBOX_DYNO_ARMED: text="Dynamite is now armed with a 30 second timer!"; break; case PCRBOX_SS_LOST: text="You lost your spawn protection"; break; default: return; } trap_SendServerCommand(entityNum, va("cp \"%s\" 1", text)); } } void G_PrintClientSpammyCenterPrint(int entityNum, int cmd) { char *text; if(!g_entities[entityNum].client) { return; } if(level.time - g_entities[entityNum].client->lastSpammyCentrePrintTime < 1000) { return; } if(g_noobTips.integer & NOOBTIPS_SIDED) trap_SendServerCommand(entityNum, va("pcrc %i", cmd)); else { switch(cmd) { case PCRBOX_MINE_ARMING: text="Arming landmine..."; break; case PCRBOX_MINE_DEFUSING: text="Defusing landmine"; break; case PCRBOX_TRIPMINE_DEFUSING: text="Disarming tripmine..."; break; case PCRBOX_DYNO_NOARM: text="Cannot arm dynamite during sudden death."; break; case PCRBOX_DYNO_ARMING: text="Arming dynamite..."; break; case PCRBOX_DYNO_DEFUSING: text="Defusing dynamite..."; break; case PCRBOX_CONSTRUCTING: text="Constructing..."; break; case PCRBOX_SATCHEL_DISARMING: text="Disarming satchel charge..."; break; case PCRBOX_SATCHEL_DISARMED: text="Satchel charge disarmed..."; break; default: return; } trap_SendServerCommand(entityNum, va("cp \"%s\" 1", text)); } g_entities[entityNum].client->lastSpammyCentrePrintTime = level.time; } src\game\g_weapon.c (line 1801) **** REPLACE if(g_noobTips.integer==1) trap_SendServerCommand(ent-g_entities, "cp \"Landmine armed...\" 1"); **** WITH G_PCRLogoBoxPrint(ent-g_entities,PCRBOX_MINE_ARMED); (also...) **** REPLACE if(g_noobTips.integer==1) trap_SendServerCommand(ent-g_entities, "cp \"Landmine defused...\" 1"); **** WITH G_PCRLogoBoxPrint(ent-g_entities,PCRBOX_MINE_DEFUSED); **** REPLACE if(g_noobTips.integer==1) trap_SendServerCommand( ent-g_entities, "cp \"Dynamite is now armed with a 30 second timer!\" 1"); **** WITH G_PCRLogoBoxPrint(ent-g_entities,PCRBOX_DYNO_ARMED); **** REPLACE if(g_noobTips.integer==1) CP("cp \"You lost your spawn protection\""); **** WITH G_PCRLogoBoxPrint(ent-g_entities,PCRBOX_SS_LOST); **** REPLACE ALL REMAINING (3) if(g_noobTips.integer==1) **** WITH if(g_noobTips.integer & NOOBTIPS_ON) **** REPLACE G_PrintClientSpammyCenterPrint(ent-g_entities, "Cannot arm dynamite during sudden death."); **** WITH G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_DYNO_NOARM); **** REPLACE ... WITH G_PrintClientSpammyCenterPrint(ent-g_entities, "Arming landmine..."); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_MINE_ARMING); G_PrintClientSpammyCenterPrint( ent-g_entities, "Constructing..." ); G_PrintClientSpammyCenterPrint( ent-g_entities, PCRBOX_CONSTRUCTING ); G_PrintClientSpammyCenterPrint(ent-g_entities, "Defusing landmine"); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_MINE_DEFUSING); G_PrintClientSpammyCenterPrint(ent-g_entities, "Disarming satchel charge..."); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_SATCHEL_DISARMING); G_PrintClientSpammyCenterPrint(ent-g_entities, "Satchel charge disarmed..."); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_SATCHEL_DISARMED); G_PrintClientSpammyCenterPrint(ent-g_entities, "Arming dynamite..."); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_DYNO_ARMING); G_PrintClientSpammyCenterPrint(ent-g_entities, "Defusing dynamite..."); G_PrintClientSpammyCenterPrint(ent-g_entities, PCRBOX_DYNO_DEFUSING); ------------------------- PERSONAL NOTES CG_DrawBannerPrint(); CG_DrawCenterString(); CG_DrawPMItems(); CG_DrawPMItemsBig(); CG_DrawFollow(); CG_DrawWarmup(); // kw: does nothing //CG_DrawNotify(); CG_DrawObjectiveInfo(); CG_DrawSpectatorMessage(); CG_DrawLimboMessage(); } else { if(cgs.eventHandling != CGAME_EVENT_NONE) { // qboolean old = cg.showGameView; // cg.showGameView = qfalse; // draw cursor trap_R_SetColor( NULL ); CG_DrawPic( cgDC.cursorx-14, cgDC.cursory-14, 32, 32, cgs.media.cursorIcon); // cg.showGameView = old; } } if( cg.showFireteamMenu ) { CG_Fireteams_Draw(); } // Info overlays CG_DrawOverlays(); // OSP - window updates CG_windowDraw(); // Ridah, draw flash blends now CG_DrawFlashBlend(); CG_DrawDemoRecording(); } pour le hud editor : // forty - visual hud editor - help message static void CG_HudEditor_HelpDraw() { if(cg.hudEditor.showHudEditorHelp == SHOW_OFF) { // forty - don't draw return; } else { const char *help[] = { "^nMOUSE1 ^mDRAG AN ELEMENT", "^nMOUSE2 ^mSCALE AN ELEMENT", "^nMWHLUP ^mUNIFORM SCALE UP", "^nMWHLDN ^mUNIFORM SCALE DOWN", NULL, "^nTAB ^mTOGGLE HEALTHBAR",