Jump to content

Serenity Jedi Engine


Recommended Posts

Posted

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

 

:winkthumb:

Awesome! Thanks.

Posted

Jedi Master difficulty, eh? Well, good thing we can all use quick saves. Nice to see you took my advice on the whole cheat situation, Serenity. Like I said before, to EVERYONE, if you wanna cheat and play like you usually do in base JKA, you MUST prove yourself worthy by beating the game normally. It won't be easy, yes, but it CAN be done! :D

Posted

I notice an issue with Npcs fighting each other and the strong saber stance, the npcs don't really swing at each other, they are just blocking the whole time and at 0:03 the strong stance makes a swing sound while in idle stance.

 

https://www.youtube.com/watch?v=-sRYq-3ei68

 

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 

  • 2 weeks later...
Posted

Serenity937, there is still a glitch with the Strong Stance, take a look: http://youtu.be/MRS-w0ow4hY.

 

 

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 ?

Posted

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 ?

There seems to be a problem with EAX, when i turn it off there is no problem but when it's on, i have the same problem.

http://youtu.be/BRiHcopsf5U

Posted

Serenity, you uploaded this video of your base folder awhile ago, but I was wondering how you got the kotf character selection screen, and maps, and all the MB2 maps to show up in your menu without affecting the rest of your game. I have tried to unpack and repack various files and I can't seem to figure it out.

Posted
I am rather sceptical. I played this mod, and there are few things I'd like to point out:

Saber Combat - good idea, worse realization. There are some undesirable things occuring during the combat, especially while fighting the Desann NPC. Even in the slowest possible mode, set in options, his counterattacks and swings are too quickly to block. And some hits pass through my block. No idea why. Also, often when I fight at close range the enemy's saber transitions kill me. The other thing about the duels I noticed is that you can win every fight by spamming blue impale. Concerning the saber animations - they are fine as long as they... are the default ones. No offence, but the running animation when you have low hp is just bad. Jump is ok. During the yellow dfa execution I can't see anything, because camera spins wildly. Other suggestions - it shouldnt be possible to block if you're out of fp.

Melee - including slaps in saber combat - does massive damage, Not sure if it's because I use Real Dismemberment, but one punch from, for example, a cultist = death o.O. Crouching animation shouldn't have the transition from stand stance to crouch stance included.

Gunners' AI - in my opinion you shouldn't be knocked to the ground by their kicks while crouching.

JK2 Support - many glitches - the most notable one is the camera's strange position in cutscenes, haven't played through the whole campaign, but, for example, in the last level, the mirror's texture is missing.

Unfortunately, I have a feeling that not all the content is yours. The most of saber system comes from OJP, but you've mentioned it somewhere here.

Meanwhile, animations (but i have to admit that I am not sure):

- the roundhouse kick comes from ja+,

- slap, flying kick and few others come from mb2,

And a small advice - you should include a version where there are no new animations, to make it more compatible with more mods.

NPCs are able to use lightning for an undefined amount of time and sabers with noblade 1 have visible blade.

I am kinda discouraged, but this mod would be amazing if u fixed that what I mentioned.

 

Regards.

Posted

Yes, this engine needs quite a lot of work yet, but I have to say I not only like your idea, I love what you've accomplished already! I tried it and I suddenly want to play SP just with your engine!

Allthough, here's an issue I ran into... when I started the first mission (mos eisley), if I use my saber, I can't move around other than by jumping. My character is just set to the first frame of _humanoid.gla, the one where he's in a "crucify" position :D
The meele is a bit too strong... a fourth of the damage it does now would be sufficient and real, IF YOU ASK ME. 

Other than that, as I said, I'm astonished!

Posted

I have a question regarding the Npc files, is there anything special about your Npc files, because

i replaced the Serenity Npc files with the default JKA ones and suddenly Jedi Academy can't find some of them.

Is there a limit to the file size or to how many npcs can be loaded?

Posted

 

 

the first frame of _humanoid.gla, the one where he's in a "crucify" position  :D

Looks as you have some animations mods, remove them and it should help.

  • 4 months later...
Posted

Some hobby coding and messing with assets

 

I like it,

the new effects are very nice

and the ability to see the NPC's name is rather good too.

You'd better release it as an addon to your mod man...

Posted

I like it,

the new effects are very nice

and the ability to see the NPC's name is rather good too.

You'd better release it as an addon to your mod man...

 

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

Smoo likes this
Posted

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.

What's the problem with the source being released?  Your SP `mod` would never have existed if it wasn't.  Just because the source is released doesn't mean people can't do their own things with it.  Regardless of having the source made available or not.  FWIW you only have to release the source if you actually make a release or give it out to anyone.

Posted

I noted a small issue in your code. In the beginning, you set variable w to be CG_DrawStrlen( va( "Civilian" ) ) * TINYCHAR_WIDTHwhich is incorrect. You'll want to calculate w for every string that you use ("Rancor", "Protocol Droid", etc) so that it'll center correctly (currently it only centers correctly when the string is as long as "Civilian", which might lead to wonky positioning onscreen)

 

Also..um..

 

if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM )
{
        CG_DrawBigStringColor(320- w / 2,170,va( "Press to Use" ), colorTable[CT_LTGREY] );
return;
}

... vs JKG's code ...

 

if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM )
{
    UI_DrawProportionalString (320, 170, "Press E to pick up weapon", UI_CENTER, colorTable[CT_WHITE], FONT_MEDIUM);
    return;
}

 

I'd like to point out here that both examples are technically incorrect. The string is wrong ("Press E to pick up weapon" doesn't account for binds, and "Press to Use" is kinda weird language), the centering is incorrect on yours, and there isn't a distance calculation for either one, so you'll be able to highlight items from far away.

 

I like GSA's version of this, which accounted for binds, displayed a picture of the weapon and its name, and had colors to boot. It was quite beautiful, but a little bit buggy sometimes. Unfortunately I'm at work right now, or else I'd be able to pull it up as an example of the best way to do this. (I didn't code this chunk in JKG, I believe Pande or UniqueOne or someone else did this)

Posted

Now not to take part on anyone's side here, but as I read your way of writing to serenity is quite a critical way of saying things to him, no wonder the man never bother to write anything in here because of the ways your always are after him and the way her makes his t things. I think it's well made Serenity, but as Eezstreet says there may be a way to fix the things in which he mentioned in here :)

Serenity937 likes this
Posted

What's the problem with the source being released?  Your SP `mod` would never have existed if it wasn't.  Just because the source is released doesn't mean people can't do their own things with it.  Regardless of having the source made available or not.  FWIW you only have to release the source if you actually make a release or give it out to anyone.

 

No problem at all.It was a monumental day for me when i got the sp sdk.Its like the biggest puzzle in the world ever,and i enjoy solving the puzzle to get the effect i want.

 

I noted a small issue in your code. In the beginning, you set variable w to be CG_DrawStrlen( va( "Civilian" ) ) * TINYCHAR_WIDTHwhich is incorrect. You'll want to calculate w for every string that you use ("Rancor", "Protocol Droid", etc) so that it'll center correctly (currently it only centers correctly when the string is as long as "Civilian", which might lead to wonky positioning onscreen)

 

Also..um..

if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM )
{
        CG_DrawBigStringColor(320- w / 2,170,va( "Press to Use" ), colorTable[CT_LTGREY] );
return;
}

... vs JKG's code ...

if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM )
{
    UI_DrawProportionalString (320, 170, "Press E to pick up weapon", UI_CENTER, colorTable[CT_WHITE], FONT_MEDIUM);
    return;
}

I'd like to point out here that both examples are technically incorrect. The string is wrong ("Press E to pick up weapon" doesn't account for binds, and "Press to Use" is kinda weird language), the centering is incorrect on yours, and there isn't a distance calculation for either one, so you'll be able to highlight items from far away.

 

I like GSA's version of this, which accounted for binds, displayed a picture of the weapon and its name, and had colors to boot. It was quite beautiful, but a little bit buggy sometimes. Unfortunately I'm at work right now, or else I'd be able to pull it up as an example of the best way to do this. (I didn't code this chunk in JKG, I believe Pande or UniqueOne or someone else did this)

 

 

Firstly thanks for taking the time to look at the code .

 

Im always open to useful advice,corrections and tips that help me learn and correct mistakes i have made.

 

 

Firstly i can explain my thinking about w = CG_DrawStrlen( va( "Civilian" ) ) * TINYCHAR_WIDTH;

 

the three cases i used are 

if ( crossEnt->client->playerTeam == TEAM_PLAYER )

if ( crossEnt->client->playerTeam == TEAM_ENEMY )

if ( crossEnt->client->playerTeam == TEAM_NEUTRAL || crossEnt->client->playerTeam == TEAM_FREE )

 

 

all end with

 

CG_DrawBigStringColor(320- w / 2,170,va( "Friend" ), colorTable[CT_WHITE] );

CG_DrawBigStringColor(320- w / 2,170,va( "Enemy" ), colorTable[CT_WHITE] );

CG_DrawBigStringColor(320- w / 2,170,va( "Civilian" ), colorTable[CT_WHITE] );

 

 

so i thought if i used the biggest word of the three = Civilian. Then the spacing would be enough as all the name are different lengths ,they wont end in the same place so the dont need to start in the same place ?

 

Also i have to be honest .The distance idea is something i didnt think of. So i have to say thankyou. After playtesting for some time i think a distance limit is a good idea.

 

 

As for my

 

CG_DrawBigStringColor(320- w / 2,170,va( "Press to Use" ), colorTable[CT_LTGREY] );

 

vs your

 

UI_DrawProportionalString (320, 170, "Press E to pick up weapon", UI_CENTER, colorTable[CT_WHITE], FONT_MEDIUM);

 

the simplest methods are the best

 

here the multiplayer version




/*
=====================
CG_DrawCrosshairNames
=====================
*/
static void CG_DrawCrosshairNames( void ) 
{
	float		*color;
	char		*name;
	char		sanitized[1024];
	int			baseColor;
	qboolean	isVeh = qfalse;
	float w;

	if ( cg_drawCrosshair.integer < 0 )
	{
		return;
	}

	if(in_camera)
	{
		return;
	}

	CG_ScanForCrosshairEntity();

	
    if ( cg_entities[cg.crosshairClientNum].currentState.eType == ET_ITEM )
    {
        UI_DrawProportionalString (320, 170, "Press to Use", UI_CENTER | UI_SMALLFONT, colorTable[CT_LTGREY]);
        return;
    }
    else if (cg.crosshairClientNum < ENTITYNUM_WORLD)
	{
		centity_t *veh = &cg_entities[cg.crosshairClientNum];

		if (veh->currentState.eType == ET_NPC &&
			veh->currentState.NPC_class == CLASS_VEHICLE &&
			veh->currentState.owner < MAX_CLIENTS)
		{ //draw the name of the pilot then
			cg.crosshairClientNum = veh->currentState.owner;
			cg.crosshairVehNum = veh->currentState.number;
			cg.crosshairVehTime = cg.time;
			isVeh = qtrue; 
		}
	}

	if (cg_entities[cg.crosshairClientNum].currentState.powerups & (1 << PW_CLOAKED))
	{
		return;
	}

	color = CG_FadeColor( cg.crosshairClientTime, 1000 );
	
	if ( !color )
	{
		trap_R_SetColor( NULL );
		return;
	}

	name = cgs.clientinfo[ cg.crosshairClientNum ].name;

	w = CG_DrawStrlen( va( "Civilian" ) ) * TINYCHAR_WIDTH;

	if (cg.snap->ps.duelInProgress)
	{
		if (cg.crosshairClientNum != cg.snap->ps.duelIndex)
		{ //grey out crosshair for everyone but your foe if you're in a duel
			baseColor = CT_BLACK;
		}
	}
	else if (cg_entities[cg.crosshairClientNum].currentState.bolt1)
	{ //this fellow is in a duel. We just checked if we were in a duel above, so
	  //this means we aren't and he is. Which of course means our crosshair greys out over him.
		baseColor = CT_BLACK;
	}

	CG_SanitizeString(name, sanitized);

	if (isVeh)
	{
		char str[MAX_STRING_CHARS];
		Com_sprintf(str, MAX_STRING_CHARS, "%s (pilot)", sanitized);
		UI_DrawProportionalString(320, 170, str, UI_CENTER | UI_SMALLFONT, colorTable[CT_BLUE]);
	}
	else
	{
		if ( !cg_drawCrosshairNames.integer ) 
		{
			return;
		}
		if ( ( cgs.clientinfo[ cg.crosshairClientNum ].team == TEAM_RED ) )
		{ 
			CG_DrawSmallStringColor( 320 - w / 2, 170, name,  colorTable[CT_RED] );
		}
		else if ( ( cgs.clientinfo[ cg.crosshairClientNum ].team == TEAM_BLUE ) )
		{ 
			CG_DrawSmallStringColor( 320 - w / 2, 170, name,  colorTable[CT_GREEN] );
		}
		else if ( ( cgs.clientinfo[ cg.crosshairClientNum ].team == TEAM_SPECTATOR ) )
		{ 
			CG_DrawSmallStringColor( 320 - w / 2, 170, name , colorTable[CT_CYAN] );
		}
		else
		{ 
			CG_DrawSmallStringColor( 320 - w / 2, 170, name, colorTable[CT_YELLOW] );
		}
	}
	trap_R_SetColor( NULL );
}

note the 

 

else if (cg.crosshairClientNum < ENTITYNUM_WORLD)
{
centity_t *veh = &cg_entities[cg.crosshairClientNum];
 
if (veh->currentState.eType == ET_NPC &&
veh->currentState.NPC_class == CLASS_VEHICLE &&
veh->currentState.owner < MAX_CLIENTS)
{ //draw the name of the pilot then
cg.crosshairClientNum = veh->currentState.owner;
cg.crosshairVehNum = veh->currentState.number;
cg.crosshairVehTime = cg.time;
isVeh = qtrue; 
}
}
 
 
i stole the idea from this
 
currentState.eType == ET_

i tried ET_MOVER also but it was too much info in screen .

 

I didn't want it to be like JKG with

"Press E to pick up weapon"

and i haven't thought of anything better than 

Press to Use

I did think about  "Touch to use" but it looks kinda gay  :rolleyes: 

 

GSA's version sounds cool.

Posted

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.

 

Serenity, just add new npc parameter:

mynpc
{
 name  "My NPC"
 playerModel  kyle
}

:)

  • 5 months later...
Posted

Ive started porting EoC/SJE over to OpenJk Code base.

 

First mission:

 

FIX: MP Sabertrace to match SP = Managed to port most of sp sabersystem in to MP about 80%.

 

Stabilize the bots by making them use as much NPC AI as possible = managed about 80%. Note:bot and Singleplayer NPC,s now act almost exactly the same in Combat.

 

Added manualblocking to MP +SP (See controls menu)

 

Added kick function and Melee to SP+MP

 

Add FULL support for Jedi Outcast (including Galak_Mech) = About 80% Finished

 

Here is a Pre Alpha tester if anyone is interested:  http://www.mediafire.com/download/z2zy4gm8fbp1f1g/SerenityJediEngine-Openjk-Pr-Alpha+0.1.rar

Smoo, DarthStiv and Lancelot like this
Posted

I saw ur server and it was on ffa_bespin so ihopped on lol fun map, ill try out the mod next time

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...