Jump to content

Serenity937

Members
  • Posts

    123
  • Joined

  • Last visited

Everything posted by Serenity937

  1. Well i have no plans to release anything........(for now) Maybe next year if my hobby coding leads to something worth releasing. Releasing mods is never going to be the same again now because the JKA/OPENJK code is always available to all .Meaning no more secrets / surprises.Or individuality. However ,if you have downloaded the code for SJE/EoC http://www.moddb.com/mods/serenitysabersystems/addons/serenityjedienginesdk Then i would be happy to post the code here for people to see or use,to add to there own code. Somebody asked me today if the code is taken from JKG ? The answer is no.But i admit when playing JKG it was something i liked about the mod. Multiplayer already has a functioning CG_DrawCrosshairNames code . The only difference is, it is constructed to read the BOT names and the lettering design (FONT) is different. So i looked in multiplayer code to see how this was done. I didnt just copy code from A to B ,any coder will tell you ,it doesnt work like that. Using the built in NPC CLASS system i just coded the names of the classes. In my opinion the JKA CG_DrawCrosshairNames code is crap , useless and possibly neglected . "It Doesn't even Draw Player Names" so i just fixed it... It Kinda goes like this . /* ===================== CG_DrawCrosshairNames ===================== */ static void CG_DrawCrosshairNames( void ) { qboolean scanAll = qfalse; float w; if ( cg_drawCrosshair.integer < 0 ) { return; } if(in_camera) { return; } CG_ScanForCrosshairEntity( scanAll ); w = CG_DrawStrlen( va( "Civilian" ) ) * TINYCHAR_WIDTH; if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM ) { CG_DrawBigStringColor(320- w / 2,170,va( "Press to Use" ), colorTable[CT_LTGREY] ); return; } if (cg_entities[cg.crosshairClientNum].currentState.powerups & (1 << PW_CLOAKED)) { return; } if ( cg_crosshairIdentifyTarget.integer ) { if ( !cg_drawCrosshairNames.integer ) { return; } gentity_t *crossEnt = &g_entities[g_crosshairEntNum]; if ( crossEnt->client ) { if ( crossEnt->client->playerTeam == TEAM_PLAYER ) {//Allies switch ( crossEnt->client->NPC_class ) { case CLASS_REBEL: CG_DrawBigStringColor(320- w / 2,170,va( "Rebel" ), colorTable[CT_GREEN] ); break; case CLASS_JEDI: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Knight" ), colorTable[CT_CYAN] ); break; case CLASS_KYLE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Master" ), colorTable[CT_CYAN] ); break; case CLASS_LUKE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Mentor" ), colorTable[CT_CYAN] ); break; case CLASS_JAN: CG_DrawBigStringColor(320- w / 2,170,va( "Jan Ors" ), colorTable[CT_MAGENTA] ); break; case CLASS_MONMOTHA: CG_DrawBigStringColor(320- w / 2,170,va( "Monmothma" ), colorTable[CT_GREEN] ); break; case CLASS_MORGANKATARN: CG_DrawBigStringColor(320- w / 2,170,va( "Morgan Katarn" ), colorTable[CT_LTORANGE] ); break; case CLASS_STORMTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Stormtrooper" ), colorTable[CT_RED] ); break; case CLASS_SWAMPTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Swamptrooper" ), colorTable[CT_RED] ); break; case CLASS_IMPWORKER: CG_DrawBigStringColor(320- w / 2,170,va( "ImpWorker" ), colorTable[CT_RED] ); break; case CLASS_IMPERIAL: CG_DrawBigStringColor(320- w / 2,170,va( "Imperial" ), colorTable[CT_RED] ); break; case CLASS_SHADOWTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Shadowtrooper" ), colorTable[CT_DKRED1] ); break; case CLASS_COMMANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_RED] ); break; case CLASS_TAVION: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Boss" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_ALORA: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Warrior" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_DESANN: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Lord" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_REBORN: if ( Q_stricmp( "human_merc", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "scout" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist_saber", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw2", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Dark Jedi" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_VLTPURPLE1] ); } else { CG_DrawBigStringColor(320- w / 2,170,va( "Sith" ), colorTable[CT_VLTPURPLE1] ); } break; case CLASS_BOBAFETT: CG_DrawBigStringColor(320- w / 2,170,va( "Bobafett" ), colorTable[CT_LTORANGE] ); break; case CLASS_MANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Mandolorian" ), colorTable[CT_LTORANGE] ); break; case CLASS_ATST: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_CLAW: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FISH: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FLIER2: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_GLIDER: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_HOWLER: CG_DrawBigStringColor(320- w / 2,170,va( "Howler" ), colorTable[CT_MDGREY] ); break; case CLASS_MINEMONSTER: CG_DrawBigStringColor(320- w / 2,170,va( "MineMonster" ), colorTable[CT_MDGREY] ); break; case CLASS_LIZARD: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_SWAMP: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_RANCOR: CG_DrawBigStringColor(320- w / 2,170,va( "Rancor" ), colorTable[CT_MDGREY] ); break; case CLASS_WAMPA: CG_DrawBigStringColor(320- w / 2,170,va( "Wampa" ), colorTable[CT_MDGREY] ); break; case CLASS_VEHICLE: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_BESPIN_COP: CG_DrawBigStringColor(320- w / 2,170,va( "Bespin Cop" ), colorTable[CT_GREEN] ); break; case CLASS_LANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Lando" ), colorTable[CT_GREEN] ); break; case CLASS_PRISONER: CG_DrawBigStringColor(320- w / 2,170,va( "Prisoner" ), colorTable[CT_GREEN] ); break; case CLASS_GALAK: CG_DrawBigStringColor(320- w / 2,170,va( "Galak" ), colorTable[CT_RED] ); break; case CLASS_GRAN: CG_DrawBigStringColor(320- w / 2,170,va( "Gran" ), colorTable[CT_RED] ); break; case CLASS_REELO: CG_DrawBigStringColor(320- w / 2,170,va( "Reelo" ), colorTable[CT_RED] ); break; case CLASS_MURJJ: CG_DrawBigStringColor(320- w / 2,170,va( "Murjj" ), colorTable[CT_RED] ); break; case CLASS_RODIAN: CG_DrawBigStringColor(320- w / 2,170,va( "Rodian" ), colorTable[CT_RED] ); break; case CLASS_TRANDOSHAN: CG_DrawBigStringColor(320- w / 2,170,va( "Trandoshan" ), colorTable[CT_RED] ); break; case CLASS_UGNAUGHT: CG_DrawBigStringColor(320- w / 2,170,va( "Ugnaught" ), colorTable[CT_GREEN] ); break; case CLASS_WEEQUAY: CG_DrawBigStringColor(320- w / 2,170,va( "Weequay" ), colorTable[CT_RED] ); break; case CLASS_BARTENDER: CG_DrawBigStringColor(320- w / 2,170,va( "Bartender" ), colorTable[CT_BLUE] ); break; case CLASS_JAWA: CG_DrawBigStringColor(320- w / 2,170,va( "Jawa" ), colorTable[CT_MAGENTA] ); break; case CLASS_PROTOCOL: CG_DrawBigStringColor(320- w / 2,170,va( "Protocol Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R2D2: CG_DrawBigStringColor(320- w / 2,170,va( "R2D2" ), colorTable[CT_YELLOW] ); break; case CLASS_PROBE: CG_DrawBigStringColor(320- w / 2,170,va( "Probe Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R5D2: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_DROIDEKA: CG_DrawBigStringColor(320- w / 2,170,va( "Droideka" ), colorTable[CT_MAGENTA] ); break; case CLASS_BATTLEDROID: CG_DrawBigStringColor(320- w / 2,170,va( "Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_SBD: CG_DrawBigStringColor(320- w / 2,170,va( "Super Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_ASSASSIN_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_SABER_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "Saber Droid" ), colorTable[CT_MAGENTA] ); break; default: CG_DrawBigStringColor(320- w / 2,170,va( "Friend" ), colorTable[CT_WHITE] ); break; } } else if ( crossEnt->client->playerTeam == TEAM_ENEMY ) { switch ( crossEnt->client->NPC_class ) { case CLASS_REBEL: CG_DrawBigStringColor(320- w / 2,170,va( "Rebel" ), colorTable[CT_GREEN] ); break; case CLASS_JEDI: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Knight" ), colorTable[CT_CYAN] ); break; case CLASS_KYLE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Master" ), colorTable[CT_CYAN] ); break; case CLASS_LUKE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Mentor" ), colorTable[CT_CYAN] ); break; case CLASS_JAN: CG_DrawBigStringColor(320- w / 2,170,va( "Jan Ors" ), colorTable[CT_MAGENTA] ); break; case CLASS_MONMOTHA: CG_DrawBigStringColor(320- w / 2,170,va( "Monmothma" ), colorTable[CT_GREEN] ); break; case CLASS_MORGANKATARN: CG_DrawBigStringColor(320- w / 2,170,va( "Morgan Katarn" ), colorTable[CT_LTORANGE] ); break; case CLASS_STORMTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Stormtrooper" ), colorTable[CT_RED] ); break; case CLASS_SWAMPTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Swamptrooper" ), colorTable[CT_RED] ); break; case CLASS_IMPWORKER: CG_DrawBigStringColor(320- w / 2,170,va( "ImpWorker" ), colorTable[CT_RED] ); break; case CLASS_IMPERIAL: CG_DrawBigStringColor(320- w / 2,170,va( "Imperial" ), colorTable[CT_RED] ); break; case CLASS_SHADOWTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Shadowtrooper" ), colorTable[CT_DKRED1] ); break; case CLASS_COMMANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_RED] ); break; case CLASS_TAVION: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Boss" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_ALORA: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Warrior" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_DESANN: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Lord" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_REBORN: if ( Q_stricmp( "human_merc", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "scout" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist_saber", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw2", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Dark Jedi" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_VLTPURPLE1] ); } else { CG_DrawBigStringColor(320- w / 2,170,va( "Sith" ), colorTable[CT_VLTPURPLE1] ); } break; case CLASS_BOBAFETT: CG_DrawBigStringColor(320- w / 2,170,va( "Bobafett" ), colorTable[CT_LTORANGE] ); break; case CLASS_MANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Mandolorian" ), colorTable[CT_LTORANGE] ); break; case CLASS_ATST: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_CLAW: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FISH: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FLIER2: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_GLIDER: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_HOWLER: CG_DrawBigStringColor(320- w / 2,170,va( "Howler" ), colorTable[CT_MDGREY] ); break; case CLASS_MINEMONSTER: CG_DrawBigStringColor(320- w / 2,170,va( "MineMonster" ), colorTable[CT_MDGREY] ); break; case CLASS_LIZARD: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_SWAMP: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_RANCOR: CG_DrawBigStringColor(320- w / 2,170,va( "Rancor" ), colorTable[CT_MDGREY] ); break; case CLASS_WAMPA: CG_DrawBigStringColor(320- w / 2,170,va( "Wampa" ), colorTable[CT_MDGREY] ); break; case CLASS_VEHICLE: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_BESPIN_COP: CG_DrawBigStringColor(320- w / 2,170,va( "Bespin Cop" ), colorTable[CT_GREEN] ); break; case CLASS_LANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Lando" ), colorTable[CT_GREEN] ); break; case CLASS_PRISONER: CG_DrawBigStringColor(320- w / 2,170,va( "Prisoner" ), colorTable[CT_GREEN] ); break; case CLASS_GALAK: CG_DrawBigStringColor(320- w / 2,170,va( "Galak" ), colorTable[CT_RED] ); break; case CLASS_GRAN: CG_DrawBigStringColor(320- w / 2,170,va( "Gran" ), colorTable[CT_RED] ); break; case CLASS_REELO: CG_DrawBigStringColor(320- w / 2,170,va( "Reelo" ), colorTable[CT_RED] ); break; case CLASS_MURJJ: CG_DrawBigStringColor(320- w / 2,170,va( "Murjj" ), colorTable[CT_RED] ); break; case CLASS_RODIAN: CG_DrawBigStringColor(320- w / 2,170,va( "Rodian" ), colorTable[CT_RED] ); break; case CLASS_TRANDOSHAN: CG_DrawBigStringColor(320- w / 2,170,va( "Trandoshan" ), colorTable[CT_RED] ); break; case CLASS_UGNAUGHT: CG_DrawBigStringColor(320- w / 2,170,va( "Ugnaught" ), colorTable[CT_GREEN] ); break; case CLASS_WEEQUAY: CG_DrawBigStringColor(320- w / 2,170,va( "Weequay" ), colorTable[CT_RED] ); break; case CLASS_BARTENDER: CG_DrawBigStringColor(320- w / 2,170,va( "Bartender" ), colorTable[CT_BLUE] ); break; case CLASS_JAWA: CG_DrawBigStringColor(320- w / 2,170,va( "Jawa" ), colorTable[CT_MAGENTA] ); break; case CLASS_PROTOCOL: CG_DrawBigStringColor(320- w / 2,170,va( "Protocol Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R2D2: CG_DrawBigStringColor(320- w / 2,170,va( "R2D2" ), colorTable[CT_YELLOW] ); break; case CLASS_PROBE: CG_DrawBigStringColor(320- w / 2,170,va( "Probe Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R5D2: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_DROIDEKA: CG_DrawBigStringColor(320- w / 2,170,va( "Droideka" ), colorTable[CT_MAGENTA] ); break; case CLASS_BATTLEDROID: CG_DrawBigStringColor(320- w / 2,170,va( "Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_SBD: CG_DrawBigStringColor(320- w / 2,170,va( "Super Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_ASSASSIN_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_SABER_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "Saber Droid" ), colorTable[CT_MAGENTA] ); break; default: CG_DrawBigStringColor(320- w / 2,170,va( "Enemy" ), colorTable[CT_WHITE] ); break; } } else if ( crossEnt->client->playerTeam == TEAM_NEUTRAL || crossEnt->client->playerTeam == TEAM_FREE ) { switch ( crossEnt->client->NPC_class ) { case CLASS_REBEL: CG_DrawBigStringColor(320- w / 2,170,va( "Rebel" ), colorTable[CT_GREEN] ); break; case CLASS_JEDI: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Knight" ), colorTable[CT_CYAN] ); break; case CLASS_KYLE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Master" ), colorTable[CT_CYAN] ); break; case CLASS_LUKE: CG_DrawBigStringColor(320- w / 2,170,va( "Jedi Mentor" ), colorTable[CT_CYAN] ); break; case CLASS_JAN: CG_DrawBigStringColor(320- w / 2,170,va( "Jan Ors" ), colorTable[CT_MAGENTA] ); break; case CLASS_MONMOTHA: CG_DrawBigStringColor(320- w / 2,170,va( "Monmothma" ), colorTable[CT_GREEN] ); break; case CLASS_MORGANKATARN: CG_DrawBigStringColor(320- w / 2,170,va( "Morgan Katarn" ), colorTable[CT_LTORANGE] ); break; case CLASS_STORMTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Stormtrooper" ), colorTable[CT_RED] ); break; case CLASS_SWAMPTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Swamptrooper" ), colorTable[CT_RED] ); break; case CLASS_IMPWORKER: CG_DrawBigStringColor(320- w / 2,170,va( "ImpWorker" ), colorTable[CT_RED] ); break; case CLASS_IMPERIAL: CG_DrawBigStringColor(320- w / 2,170,va( "Imperial" ), colorTable[CT_RED] ); break; case CLASS_SHADOWTROOPER: CG_DrawBigStringColor(320- w / 2,170,va( "Shadowtrooper" ), colorTable[CT_DKRED1] ); break; case CLASS_COMMANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_RED] ); break; case CLASS_TAVION: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Boss" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_ALORA: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Warrior" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_DESANN: CG_DrawBigStringColor(320- w / 2,170,va( "Sith Lord" ), colorTable[CT_VLTPURPLE1] ); break; case CLASS_REBORN: if ( Q_stricmp( "human_merc", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "scout" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist_saber", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_med_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_strong_throw2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all2", crossEnt->NPC_type ) == 0 || Q_stricmp( "cultist_saber_all_throw2", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Dark Jedi" ), colorTable[CT_VLTPURPLE1] ); } else if ( Q_stricmp( "cultist", crossEnt->NPC_type ) == 0 ) { CG_DrawBigStringColor(320- w / 2,170,va( "Commando" ), colorTable[CT_VLTPURPLE1] ); } else { CG_DrawBigStringColor(320- w / 2,170,va( "Sith" ), colorTable[CT_VLTPURPLE1] ); } break; case CLASS_BOBAFETT: CG_DrawBigStringColor(320- w / 2,170,va( "Bobafett" ), colorTable[CT_LTORANGE] ); break; case CLASS_MANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Mandolorian" ), colorTable[CT_LTORANGE] ); break; case CLASS_ATST: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_CLAW: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FISH: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_FLIER2: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_GLIDER: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_HOWLER: CG_DrawBigStringColor(320- w / 2,170,va( "Howler" ), colorTable[CT_MDGREY] ); break; case CLASS_MINEMONSTER: CG_DrawBigStringColor(320- w / 2,170,va( "MineMonster" ), colorTable[CT_MDGREY] ); break; case CLASS_LIZARD: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_SWAMP: CG_DrawBigStringColor(320- w / 2,170,va( "Animal" ), colorTable[CT_MDGREY] ); break; case CLASS_RANCOR: CG_DrawBigStringColor(320- w / 2,170,va( "Rancor" ), colorTable[CT_MDGREY] ); break; case CLASS_WAMPA: CG_DrawBigStringColor(320- w / 2,170,va( "Wampa" ), colorTable[CT_MDGREY] ); break; case CLASS_VEHICLE: CG_DrawBigStringColor(320- w / 2,170,va( "Vehicle" ), colorTable[CT_BLUE] ); break; case CLASS_BESPIN_COP: CG_DrawBigStringColor(320- w / 2,170,va( "Bespin Cop" ), colorTable[CT_GREEN] ); break; case CLASS_LANDO: CG_DrawBigStringColor(320- w / 2,170,va( "Lando" ), colorTable[CT_GREEN] ); break; case CLASS_PRISONER: CG_DrawBigStringColor(320- w / 2,170,va( "Prisoner" ), colorTable[CT_GREEN] ); break; case CLASS_GALAK: CG_DrawBigStringColor(320- w / 2,170,va( "Galak" ), colorTable[CT_RED] ); break; case CLASS_GRAN: CG_DrawBigStringColor(320- w / 2,170,va( "Gran" ), colorTable[CT_RED] ); break; case CLASS_REELO: CG_DrawBigStringColor(320- w / 2,170,va( "Reelo" ), colorTable[CT_RED] ); break; case CLASS_MURJJ: CG_DrawBigStringColor(320- w / 2,170,va( "Murjj" ), colorTable[CT_RED] ); break; case CLASS_RODIAN: CG_DrawBigStringColor(320- w / 2,170,va( "Rodian" ), colorTable[CT_RED] ); break; case CLASS_TRANDOSHAN: CG_DrawBigStringColor(320- w / 2,170,va( "Trandoshan" ), colorTable[CT_RED] ); break; case CLASS_UGNAUGHT: CG_DrawBigStringColor(320- w / 2,170,va( "Ugnaught" ), colorTable[CT_GREEN] ); break; case CLASS_WEEQUAY: CG_DrawBigStringColor(320- w / 2,170,va( "Weequay" ), colorTable[CT_RED] ); break; case CLASS_BARTENDER: CG_DrawBigStringColor(320- w / 2,170,va( "Bartender" ), colorTable[CT_BLUE] ); break; case CLASS_JAWA: CG_DrawBigStringColor(320- w / 2,170,va( "Jawa" ), colorTable[CT_MAGENTA] ); break; case CLASS_PROTOCOL: CG_DrawBigStringColor(320- w / 2,170,va( "Protocol Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R2D2: CG_DrawBigStringColor(320- w / 2,170,va( "R2D2" ), colorTable[CT_YELLOW] ); break; case CLASS_PROBE: CG_DrawBigStringColor(320- w / 2,170,va( "Probe Droid" ), colorTable[CT_YELLOW] ); break; case CLASS_R5D2: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_DROIDEKA: CG_DrawBigStringColor(320- w / 2,170,va( "Droideka" ), colorTable[CT_MAGENTA] ); break; case CLASS_BATTLEDROID: CG_DrawBigStringColor(320- w / 2,170,va( "Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_SBD: CG_DrawBigStringColor(320- w / 2,170,va( "Super Battle Droid" ), colorTable[CT_MAGENTA] ); break; case CLASS_ASSASSIN_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "R5D2" ), colorTable[CT_YELLOW] ); break; case CLASS_SABER_DROID: CG_DrawBigStringColor(320- w / 2,170,va( "Saber Droid" ), colorTable[CT_MAGENTA] ); break; default: CG_DrawBigStringColor(320- w / 2,170,va( "Civilian" ), colorTable[CT_WHITE] ); break; } } else { CG_DrawBigStringColor(320- w / 2,170,va( "Civilian" ), colorTable[CT_WHITE] ); } } } cgi_R_SetColor( NULL ); } The is probably a much cleaner or better way to do this. But if it works ....Dont fix it
  2. Some hobby coding and messing with assets
  3. I Tried to code this in sp some time ago. I did this through code so the head "Irrelevant of model/size" would not clip with the camera. Check out the Code from here http://www.moddb.com/mods/serenitysabersystems/addons/serenityjedienginesdk
  4. As for the Bot jumping problem !!!! The best solution is to have a alternate path "BotFallbackNavigation" you can do it all in ai_main.c or get the EoC Source as stoiss correctly pointed out // Fallback Navigation. int BotFallbackNavigation(bot_state_t *bs) { vec3_t b_angle, fwd, trto, mins, maxs; trace_t tr; vec3_t a, ang; if (gWPArray && gWPArray[0]) return 2; if (bs->currentEnemy && bs->frame_Enemy_Vis) { return 2; //we're busy } if (bs->cur_ps.weapon != WP_SABER && bs->currentEnemy && bs->frame_Enemy_Vis) {// If we are looking at enemy and have line of sight, don't move. Stand and shoot. return 2; //we're busy } mins[0] = -15; mins[1] = -15; mins[2] = 0; maxs[0] = 15; maxs[1] = 15; maxs[2] = 32; bs->goalAngles[PITCH] = 0; bs->goalAngles[ROLL] = 0; VectorCopy(bs->goalAngles, b_angle); AngleVectors(b_angle, fwd, NULL, NULL); if (bs->currentEnemy && bs->currentEnemy->health > 0 && bs->currentEnemy->client->ps.fallingToDeath == 0 && bs->frame_Enemy_Vis && bs->currentEnemy->health > 0 && !(bs->currentEnemy->client && bs->currentEnemy->client->ps.weapon == WP_SABER && bs->currentEnemy->client->ps.saberHolstered >= 1)) {// head toward any enimies. VectorCopy(bs->currentEnemy->r.currentOrigin, trto); } else {// No current enemy. Randomize. Fallback code. if (next_point[bs->entitynum] < level.time || VectorDistance(bs->goalPosition, bs->origin) < 64 || !( bs->velocity[0] < 32 && bs->velocity[1] < 32 && bs->velocity[2] < 32 && bs->velocity[0] > -32 && bs->velocity[1] > -32 && bs->velocity[2] > -32 )) {// Ready for a new point. int choice = rand()%4; qboolean found = qfalse; while (found == qfalse) { if (choice == 2) { trto[0] = bs->origin[0] - ((rand()%1000)); trto[1] = bs->origin[1] + ((rand()%1000)); } else if (choice == 3) { trto[0] = bs->origin[0] + ((rand()%1000)); trto[1] = bs->origin[1] - ((rand()%1000)); } else if (choice == 4) { trto[0] = bs->origin[0] - ((rand()%1000)); trto[1] = bs->origin[1] - ((rand()%1000)); } else { trto[0] = bs->origin[0] + ((rand()%1000)); trto[1] = bs->origin[1] + ((rand()%1000)); } trto[2] = bs->origin[2]; if (OrgVisible(bs->origin, trto, -1)) found = qtrue; } next_point[bs->entitynum] = level.time + 2000 + (rand()%5)*1000; } else {// Still moving to the last point. return 1; // All is ok.. Keep moving forward. } } // Set the angles forward for checks. VectorSubtract(trto, bs->origin, a); vectoangles(a, ang); VectorCopy(ang, bs->goalAngles); trap_Trace(&tr, bs->origin, mins, maxs, trto, -1, MASK_SOLID); if (tr.fraction == 1) {// Visible point. if (CheckFall_By_Vectors(bs->origin, ang, &g_entities[bs->entitynum]) == qtrue) {// We would fall. VectorCopy(bs->origin, bs->goalPosition); // Stay still. } else {// Try to walk to "trto" if we won't fall. VectorCopy(trto, bs->goalPosition); // Original. VectorSubtract(bs->goalPosition, bs->origin, a); vectoangles(a, ang); VectorCopy(ang, bs->goalAngles); BotChangeViewAngles(bs, bs->goalAngles[YAW]); } } else { int tries = 0; while (CheckFall_By_Vectors(bs->origin, ang, &g_entities[bs->entitynum]) == qtrue && tries <= bot_thinklevel.integer) {// Keep trying until we get something valid? Too much CPU maybe? bs->goalAngles[YAW] = rand()%360; // Original. BotChangeViewAngles(bs, bs->goalAngles[YAW]); tries++; bs->goalAngles[PITCH] = 0; bs->goalAngles[ROLL] = 0; VectorCopy(bs->goalAngles, b_angle); AngleVectors(b_angle, fwd, NULL, NULL); VectorCopy(b_angle, ang); trto[0] = bs->origin[0] + ((rand()%4)*64); trto[1] = bs->origin[1] + ((rand()%4)*64); trto[2] = bs->origin[2]; VectorCopy(trto, bs->goalPosition); // Move to new goal. } if (tries > bot_thinklevel.integer) {// Ran out of random attempts. We would fall. Stay still instead for now. VectorCopy(bs->origin, bs->goalPosition); // Stay still. } } return 1; // Success! } // End of fallback nav. and connect it in void StandardBotAI(bot_state_t *bs, float thinktime) { here like this //RACC - Touched a waypoint. Do touch stuff and move onto next waypoint. if (bs->frame_Waypoint_Len < wpTouchDist || (g_RMG.integer && bs->frame_Waypoint_Len < wpTouchDist*2)) { WPTouchRoutine(bs); if (!bs->wpDirection) { desiredIndex = bs->wpCurrent->index+1; } else { desiredIndex = bs->wpCurrent->index-1; } if (gWPArray[desiredIndex] && gWPArray[desiredIndex]->inuse && desiredIndex < gWPNum && desiredIndex >= 0 && PassWayCheck(bs, desiredIndex)) { bs->wpCurrent = gWPArray[desiredIndex]; } else { if (bs->wpDestination) { bs->wpDestination = NULL; bs->destinationGrabTime = level.time + 10000; } if (bs->wpDirection) { bs->wpDirection = 0; } else { bs->wpDirection = 1; } } } } else //We can't find a waypoint, going to need a fallback routine. { doingFallback = BotFallbackNavigation(bs); } It wont make them perform miracles on maps without way points but it does make them more bearable.
  5. Making Bots walk. A bot will normally run everywhere .However ,normally a bot with a blaster will select saber if you get close to him , to engage in saber combat. Add this code and a bot with a saber will walk when he gets close enough to you,but bots with guns only will keep running so the are harder to shoot at. /* ============== BotInputToUserCommand ============== */ void BotInputToUserCommand(bot_input_t *bi, usercmd_t *ucmd, int delta_angles[3], int time, int useTime) { vec3_t angles, forward, right; short temp; int j; float f, r, u, m; //clear the whole structure memset(ucmd, 0, sizeof(usercmd_t)); //the duration for the user command in milli seconds ucmd->serverTime = time; // if (bi->actionflags & ACTION_DELAYEDJUMP) { bi->actionflags |= ACTION_JUMP; bi->actionflags &= ~ACTION_DELAYEDJUMP; } //set the buttons if (bi->actionflags & ACTION_RESPAWN) ucmd->buttons = BUTTON_ATTACK; if (bi->actionflags & ACTION_ATTACK) ucmd->buttons |= BUTTON_ATTACK; if (bi->actionflags & ACTION_ALT_ATTACK) ucmd->buttons |= BUTTON_ALT_ATTACK; if (bi->actionflags & ACTION_SABERTHROW) ucmd->buttons |= BUTTON_SABERTHROW; if (bi->actionflags & ACTION_GESTURE) ucmd->buttons |= BUTTON_GESTURE; if (bi->actionflags & ACTION_USE) ucmd->buttons |= BUTTON_USE_HOLDABLE; if (bi->actionflags & ACTION_WALK) ucmd->buttons |= BUTTON_WALKING; if(bi->weapon == WP_SABER) { if (bi->actionflags & ACTION_FORCEPOWER) ucmd->buttons |= BUTTON_ATTACK; } else { if (bi->actionflags & ACTION_FORCEPOWER) ucmd->buttons |= BUTTON_FORCEPOWER; } //RAFIXME: This is a hack to fix the hack that Raven did if (bi->actionflags & ACTION_USE) ucmd->buttons |= BUTTON_USE; if (useTime < level.time && Q_irand(1, 10) < 5) { //for now just hit use randomly in case there's something useable around ucmd->buttons |= BUTTON_USE; } if (bi->weapon == WP_NONE) { bi->weapon = WP_BRYAR_PISTOL; } // ucmd->weapon = bi->weapon; //set the view angles //NOTE: the ucmd->angles are the angles WITHOUT the delta angles ucmd->angles[PITCH] = ANGLE2SHORT(bi->viewangles[PITCH]); ucmd->angles[YAW] = ANGLE2SHORT(bi->viewangles[YAW]); ucmd->angles[ROLL] = ANGLE2SHORT(bi->viewangles[ROLL]); //subtract the delta angles for (j = 0; j < 3; j++) { temp = ucmd->angles[j] - delta_angles[j]; ucmd->angles[j] = temp; } //NOTE: movement is relative to the REAL view angles //get the horizontal forward and right vector //get the pitch in the range [-180, 180] if (bi->dir[2]) angles[PITCH] = bi->viewangles[PITCH]; else angles[PITCH] = 0; angles[YAW] = bi->viewangles[YAW]; angles[ROLL] = 0; AngleVectors(angles, forward, right, NULL); //bot input speed is in the range [0, 400] bi->speed = bi->speed * 127 / 400; //set the view independent movement f = DotProduct(forward, bi->dir); r = DotProduct(right, bi->dir); u = abs(forward[2]) * bi->dir[2]; m = fabs(f); if (fabs(r) > m) { m = fabs(r); } if (fabs(u) > m) { m = fabs(u); } if (m > 0) { f *= bi->speed / m; r *= bi->speed / m; u *= bi->speed / m; } ucmd->forwardmove = f; ucmd->rightmove = r; ucmd->upmove = u; //normal keyboard movement if (bi->actionflags & ACTION_MOVEFORWARD) ucmd->forwardmove = 127; if (bi->actionflags & ACTION_MOVEBACK) ucmd->forwardmove = -127; if (bi->actionflags & ACTION_MOVELEFT) ucmd->rightmove = -127; if (bi->actionflags & ACTION_MOVERIGHT) ucmd->rightmove = 127; //jump/moveup if (bi->actionflags & ACTION_JUMP) ucmd->upmove = 127; //crouch/movedown if (bi->actionflags & ACTION_CROUCH) ucmd->upmove = -127; //Make walking work for bots. if (bi->actionflags & ACTION_WALK) { if (ucmd->forwardmove > 46) { ucmd->forwardmove = 46; } else if (ucmd->forwardmove < -46) { ucmd->forwardmove = -46; } if (ucmd->rightmove > 46) { ucmd->rightmove = 46; } else if ( ucmd->rightmove < -46) { ucmd->rightmove = -46; } } //fixed problem with a bot's force power select not being treating properly by the pm code. ucmd->forcesel = bi->forcesel; } /* ============== BotUpdateInput ============== */ int walktime[MAX_CLIENTS]; //timer for walking extern qboolean visible (gentity_t *self, gentity_t *other); void BotUpdateInput(bot_state_t *bs, int time, int elapsed_time) { bot_input_t bi; int j; //add the delta angles to the bot's current view angles for (j = 0; j < 3; j++) { bs->viewangles[j] = AngleMod(bs->viewangles[j] + SHORT2ANGLE(bs->cur_ps.delta_angles[j])); } // bot view angles BotChangeViewAngles(bs, (float) elapsed_time / 1000); //retrieve the bot input trap_EA_GetInput(bs->client, (float) time / 1000, &bi); //respawn hack if (bi.actionflags & ACTION_RESPAWN) { if (bs->lastucmd.buttons & BUTTON_ATTACK) bi.actionflags &= ~(ACTION_RESPAWN|ACTION_ATTACK); } if(bs->cur_ps.weapon == WP_SABER) { if ( bs->currentEnemy && bs->currentEnemy->client && bs->currentEnemy->health > 0 && bs->jumpTime <= level.time // Don't walk during jumping... && (VectorDistance(g_entities[bs->cur_ps.clientNum].r.currentOrigin, bs->currentEnemy->r.currentOrigin) < 150 || walktime[bs->cur_ps.clientNum] > level.time) ) { if ( visible(&g_entities[bs->cur_ps.clientNum], bs->currentEnemy) || walktime[bs->cur_ps.clientNum] > level.time ) {// Make bots with an enemy walk... bi.actionflags |= ACTION_WALK; walktime[bs->cur_ps.clientNum] = level.time + 2000; } else {// Reset. walktime[bs->cur_ps.clientNum] = 0; } } else {// Reset. walktime[bs->cur_ps.clientNum] = 0; } } if (bs->doSaberThrow) { bi.actionflags |= ACTION_SABERTHROW; } if(1) { int curmove = g_entities[bs->client].client->ps.saberMove; if( PM_SaberInStart( curmove ) || PM_SaberInTransition( curmove ) ) { bi.actionflags |= ACTION_ATTACK; } } if(bs->doWalk && bs->cur_ps.weapon == WP_SABER) { bi.actionflags |= ACTION_WALK; } //set up forcesel. Doesn't use cur_ps, since cur_ps is just a copy of the real ps. bi.forcesel = level.clients[bs->client].ps.fd.forcePowerSelected; //convert the bot input to a usercmd BotInputToUserCommand(&bi, &bs->lastucmd, bs->cur_ps.delta_angles, time, bs->noUseTime); //subtract the delta angles for (j = 0; j < 3; j++) { bs->viewangles[j] = AngleMod(bs->viewangles[j] - SHORT2ANGLE(bs->cur_ps.delta_angles[j])); } } hope this helps....................
  6. everything looks like its only set do from 1 hand ,left only ! handLPoint if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_REBORN ) { if ( Q_irand( 0, 2 ) ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } note the use of handRPoint i think because your overlapping code commands your causing the error there?
  7. Did you add the new effects in to your asset mod .pk3? show me a screenshot of 1 new effect working
  8. Simple way of changing lightning effects for classes.I will assume you already have a new lightning effect to use and you know how to implement it! so here is an example you can alter as you wish. cg_media.h in the } cgEffects_t; section to define the new lightning effects //FORCE fxHandle_t forceConfusion; fxHandle_t forceLightning; fxHandle_t forceLightningWide; //new effects fxHandle_t redlightningwide; fxHandle_t greenlightningwide; fxHandle_t redlightning; fxHandle_t greenlightning; fxHandle_t forceHeal; cg_players.cpp if ( cent->gent->client->ps.forcePowersActive&(1<<FP_LIGHTNING) ) {//doing the electrocuting //FIXME: if the target is absorbing or blocking lightning w/saber, draw a beam from my hand to his (hand?chest?saber?) vec3_t tAng, fxDir; VectorCopy( cent->lerpAngles, tAng ); if ( cent->gent->client->ps.forcePowerLevel[FP_LIGHTNING] > FORCE_LEVEL_2 ) {//arc vec3_t fxAxis[3]; AnglesToAxis( tAng, fxAxis ); if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handLPoint, fxAxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handLPoint, fxAxis ); if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, cent->gent->client->renderInfo.handRPoint, fxAxis ); } } else {//line AngleVectors( tAng, fxDir, NULL, NULL ); if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handLPoint, fxDir ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handLPoint, fxDir ); if ( cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_START || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_HOLD || cent->gent->client->ps.torsoAnim == BOTH_FORCE_2HANDEDLIGHTNING_RELEASE ) {//jackin' 'em up, Palpatine-style if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, cent->gent->client->renderInfo.handRPoint, fxDir ); } } } cg_weapons.cpp for the person view if ( cent->gent && cent->gent->client && cent->gent->client->ps.forcePowersActive&(1<<FP_LIGHTNING) ) {//doing the electrocuting vec3_t temp; VectorCopy( cent->gent->client->renderInfo.handLPoint, temp ); VectorMA( temp, -5, cg.refdef.viewaxis[0], temp ); if ( cent->gent->client->ps.forcePowerLevel[FP_LIGHTNING] > FORCE_LEVEL_2 ) {//arc if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightningwide, temp, cg.refdef.viewaxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightningwide, temp, cg.refdef.viewaxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, temp, cg.refdef.viewaxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightningWide, temp, cg.refdef.viewaxis ); } else {//line if ( cent->gent->client->NPC_class == CLASS_DESANN || cent->gent->client->NPC_class == CLASS_TAVION || cent->gent->client->NPC_class == CLASS_ALORA ) { theFxScheduler.PlayEffect( cgs.effects.redlightning, temp, cg.refdef.viewaxis ); } else if ( cent->gent->client->NPC_class == CLASS_SHADOWTROOPER ) { theFxScheduler.PlayEffect( cgs.effects.greenlightning, temp, cg.refdef.viewaxis ); } else { theFxScheduler.PlayEffect( cgs.effects.forceLightning, temp, cg.refdef.viewaxis ); } //theFxScheduler.PlayEffect( cgs.effects.forceLightning, temp, cg.refdef.viewaxis[0] ); } } cg_weapons.cpp to register the effect cgs.effects.forceLightning = theFxScheduler.RegisterEffect( "force/lightning" ); cgs.effects.forceLightningWide = theFxScheduler.RegisterEffect( "force/lightningwide" ); cgs.effects.redlightningwide = theFxScheduler.RegisterEffect( "force/redlightningwide" ); cgs.effects.greenlightningwide = theFxScheduler.RegisterEffect( "force/greenlightningwide" ); cgs.effects.redlightning = theFxScheduler.RegisterEffect( "force/redlightning" ); cgs.effects.greenlightning = theFxScheduler.RegisterEffect( "force/greenlightning" ); obviously you need to change the names of the NEW effects to correspond with you MODS effect name or make the new effects ,but thats another subject that i think you can handle with your experience...... hope this helps serenity http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx#imagebox http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx2#imagebox http://www.moddb.com/mods/serenitysabersystems/images/lighning-efx1#imagebox
  9. Thats a strange one, Ive watched your video and i have to admit ive never seen that before and I dont have that error. So i will need to investigate this further ! Does anyone else have that error? "In the mod" when you move from a stance to a block position or another stance you may hear "A SABER MOVEMENT SOUND" this is set in the animationevents file. Have you by any chance changed any of the files in the _humanoid folder? Is it possible that a file from another mod/pk3 could be messing with the sound ? possible solutions ! 1. new clean install (most obvious) 2. remove any other mods from base folder 3. do you have the newest version http://www.mediafire.com/download/o94x2p8d63c7xqb/Serenity+Jedi+Engine+V0.9.rar with the latest update http://www.mediafire.com/download/gd0yxswka1sl06i/SerenitySaberSystems-EoC.dll ? 4. If all above point are ok then try removing the animationevents.cfg from the _humanoid to see if it still makes the sound ?
  10. The easy method,(but this may cause problems in the boba level on jka) in NPC_SPAWN.CPP search for this // Can't Kill Boba and you will find this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); NPC->flags |= FL_UNDYING; // Can't Kill Boba } and change it to this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); //NPC->flags |= FL_UNDYING; // Can't Kill Boba } basically remove the flag FL_UNDYING compile the code and boba is mortal mine looks like this else if ( ent->client->NPC_class == CLASS_BOBAFETT ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); NPC->flags |= FL_UNDYING; // Can't Kill Boba } else if ( ent->client->NPC_class == CLASS_MANDO ) {//set some stuff, precache ent->client->ps.forcePowersKnown |= ( 1 << FP_LEVITATION ); ent->client->ps.forcePowerLevel[FP_LEVITATION] = FORCE_LEVEL_3; ent->client->ps.forcePower = 100; ent->NPC->scriptFlags |= (SCF_NAV_CAN_FLY|SCF_FLY_WITH_JET|SCF_NAV_CAN_JUMP); } with the new mando class but still keeping bobafett as intended,this allows me to add mando class in the game and he can die.Obviously adding a new class is a bit more complicated ,but non too difficult if your doing it for a mod
  11. Yes sorry about that error . here is the fix http://www.mediafire.com/download/gd0yxswka1sl06i/SerenitySaberSystems-EoC.dll Just replace the existing dll with this one
  12. Thanks mate. Some animation errors may occur when playing mods with "personal animations". Thats basically any mod that has an individual humanoid folder. If you want to know the NEW SECRET CHEAT CODE you have to play the jedi outcast part from the start to complete end on jedi master difficulty level without cheating and if you are successful you will be given the cheatcode....This will allow you to play mods in godmode if you want. If you want to keep up to date with your build .here is the latest build , now with multiplayer support also. http://www.mediafire.com/download/o94x2p8d63c7xqb/Serenity+Jedi+Engine+V0.9.rar
  13. Sorry, but i dont think thats my choice to make as its part of mb2 mod. however ,you can find it in MBAssets2 / models / weapons2 / z6_rotary the shader for it is in MBAssets / shaders/ weapons / z6_rotary
  14. Pulled it out of mb2 Just for testing. Dont worry Im not going to release it with SJE . I just needed a model with a spinning barrel for testing, Thats why im asking if anyone can make one or maybe someone knows where i could download a replacement ? I cant make models or maps,this is why my mod doesn't have any models or maps,I can get my head round pretty much everything else.
  15. I think JKA/JKO will last and be popular until "THEY" make something better ! Battlefront 1+2 = good story ,good graphics ,good gun play, good space missions....Terrible saber combat Force unleashed 1+2 = Interesting but not too good story , good graphics, stupid control system, very weak saber combat. totally over the top force powers making the game more like a wizard show and completely out of tune to what the force is. Republic commando = good story and strategy gameplay ,good graphics,good gun gameplay ..missing "The jedi eliment" to give it a more starwars feel. A jedi Knight 4 Game would need to give everything that JKO and JKA gave in terms of playability, saber control, and gun combat. with a believable starwars realistic story that is compelling and challenging. Until then "for me" the best combination is to play jedi outcast using the better Jedi academy engine.giving me the better story ,maps and feel of outcast with the far superior engine from jedi academy to give me a better sabersystem and more fluid gameplay.
  16. Is there a model available to replace repeater with a spinning barrel like this one? Can anybody make a model to replace the heavy repeater?
  17. Steam Version ============== you'll need to navigate to C:/Program Files/Steam/steamapps/common/Jedi Academy/GameData (in your Steam folder). To run mod, right click on Jedi Academy in your game library, and select "Set Launch Options" in the General tab Add +set fs_game "MOD FOLDER NAME" to it, and it will run MOD FOLDER NAME whenever you start Jedi Academy.Note: If you play other mods or base, you will need to remove +set fs_game "MOD FOLDER NAME" whenever you want to play that mod, then add +set fs_game "MOD FOLDER NAME" whenever you want to play MOD FOLDER NAME.
  18. This is an occurring problem caused by the way JKA code reads JKO scripts. JKA code reads scripts just a little differently than JKO . I also found this problem some time ago and fixed it in SJE . I f you want to play JKO fully without interruptions in the JKA engine then you need to use SJE . http://www.mediafire.com/download/u375ia2zp05plqb/Serenity+Jedi+Engine+V0.8.rar I don't know if openjk has also fixed this problem but i know i definitely have in SJE....
  19. I know KOTOR does not fit in the bracket of the JK series but i think KOTOR with the JKA engine would be a cool game. So use the newest engine from the JK series with a massive amount of work to add the extra Force powers, and NPC interaction .Using the sabersystem and combat system from JK with the in depth story telling of KOTOR and the progressive advancement system of KOTOR. And then mix it with the "Starwars " feel that Jedi Outcast gave . An old gritty universe still light years ahead of ours but old and battle scarred I think it does not matter about JKA the story is boring and superficial no matter how you tell it.Stick to the theme and feel that JKO gave. The space missions from "Battlefront II" where instead of watching a ROQ movie of you flying to a spaceship, you have to battle in space and infiltrate the spaceship. Maybe add in the graphic quality that "The Force Unleashed" had with the euthoria stuff. What a Bastard Frankenstein of a game it would be ,but it would be cool to mix the best of all the games in to one epic game
  20. yes it does. look for CG_DoSFXSaber however ,SFX sabers goes a little differently in sp, so you wont be able to copy/paste from a mp code . Redsaurus made an excellent example and posted it here https://github.com/redsaurus/OpenJK/commit/b8395731cce1672c5f69d20e065a541eaad59d2d and here https://github.com/redsaurus/OpenJK/commit/a626320275b6782269ae1b013da894586b77de8f hope this helps
  21. You welcome . I've found the OJP full SDK pack with all the tools, it contains OJP 1.2 Enhanced and OJP 2005 Basic .but its 350 mb. so I've taken out OJP 2005 Basic. its "RAW" meaning it is as originally released .I have taken out all the documentation and unnecessary stuff like screenshots and hoth model stuff.etc etc. Here is the read me i have added for people to see before they download this pack. So if you going to have any issues or problems about me releasing someone else s work then "don't download this pack" OJP BASIC SDK This is my own personal copy of ojp basic .It is totally unaltered and in the condition as downloaded. To keep file size down i have removed any doc,s and non required files. It will need some fixing before it will compile I suggest following this tutorial for first time users. Setting up the SDK for first-time use http://www.jacoders.org/forum/viewtopic.php?f=4&t=5 I also have ojp Enhanced full release sdk 1.2 .Contact me if you want a copy. DISCLAIMER ! I dont want any shit for making this sdk public, i didnt make it or alter it. I make no claim to it. Im just passing it on to other users as a favour to eezstreet. It comes "AS IS " THIS MEANS IF YOU FUCK SOMETHING UP when using it then DONT FUCKING BLAME ME. If you make a mod using this code then you must include the OJP read me. Get this by downloading OJP from moddb. all the read me files and instructions and advice to using this code for your mod can also be found in the OJP folder. So now you understand I dont want any come back for releasing someone elses work. http://www.mediafire.com/download/stmn3chhdd56c4c/OJP+BASIC+SDK.rar Please dont complain at me for doing this . I DID NOT MAKE THIS CODE.. hopefully this is the end of any legal or flaming complaints. Otherwise I hope this help people who need it
  22. I have OJP basic in my files somewhere, I will dig them out tomorrow and upload to a file store !
  23. Pm me when you start your code work and ill help where i can.
×
×
  • Create New...