JACoders / OpenJK

Community effort to maintain and improve Jedi Academy (SP & MP) + Jedi Outcast (SP only) released by Raven Software
GNU General Public License v2.0
2.03k stars 614 forks source link

"support flags" for generic mod feature support #140

Open Razish opened 11 years ago

Razish commented 11 years ago

When developing JA++, I ran into several issues of JA+ version sniffing. I ended up faking these version numbers, and developed a [client/server] support flag system, where the client hints what features it supports (/setu csf 0xFFFFFFFF on init) such as large (32 player) scoreboard, K/D scoreboard, fixed weapon animations (missing concussion rifle anims), and other things that would otherwise break base compatibility.

The code looks like this

if ( Server_Supports( SSF_SCOREBOARD_KD ) )
    cg.scores[scoreIndex].deaths        = atoi( CG_Argv( i * scoreOffset + 18 ) );

// or
if ( !Client_Supports( ent, CSF_SCOREBOARD_LARGE ) ) {
    if ( numSorted > MAX_CLIENT_SCORE_SEND )
        numSorted = MAX_CLIENT_SCORE_SEND;
}

Having an open standard for this would be a nice way to offer inter-mod support without version sniffing. Of course major gameplay changing mods won't need to worry about this, but for lighter server mods that don't require a client modification where people are free to use their own mods (e.g. a JA++ server with JA+, base and Smod clients all able to support these features) this is a rather nice approach in my opinion.

Server sets 'ssf' as serverinfo, client sets 'csf' as userinfo. Both are represented in hex so it only uses a few characters.

@ensiform you mentioned something about my JA+ compatibility changes, was this it =p?

eezstreet commented 11 years ago

Did you fix the first person weapon animations in MP? (chunkiness, also Stouker rifle missing its _barrel animation)?

Sent from my Windows Phone


From: Razishmailto:notifications@github.com Sent: ‎4/‎20/‎2013 9:33 PM To: Razish/OpenJKmailto:OpenJK@noreply.github.com Subject: [OpenJK] "support flags" for generic mod feature support (#140)

When developing JA++, I ran into several issues of JA+ version sniffing. I ended up faking these version numbers, and developed a [client/server] support flag system, where the client hints what features it supports (/setu csf 0xFFFFFFFF on init) such as large (32 player) scoreboard, K/D scoreboard, fixed weapon animations (missing concussion rifle anims), and other things that would otherwise break base compatibility.

The code looks like this

if ( Server_Supports( SSF_SCOREBOARD_KD ) )
        cg.scores[scoreIndex].deaths            = atoi( CG_Argv( i * scoreOffset + 18 ) );

// or
if ( !Client_Supports( ent, CSF_SCOREBOARD_LARGE ) ) {
        if ( numSorted > MAX_CLIENT_SCORE_SEND )
                numSorted = MAX_CLIENT_SCORE_SEND;
}

Having an open standard for this would be a nice way to offer inter-mod support without version sniffing. Of course major gameplay changing mods won't need to worry about this, but for lighter server mods that don't require a client modification where people are free to use their own mods (e.g. a JA++ server with JA+, base and Smod clients all able to support these features) this is a rather nice approach in my opinion.

Server sets 'ssf' as serverinfo, client sets 'csf' as userinfo. Both are represented in hex so it only uses a few characters.

@ensiform you mentioned something about my JA+ compatibility changes, was this it =p?


Reply to this email directly or view it on GitHub: https://github.com/Razish/OpenJK/issues/140

Razish commented 11 years ago

Yeah, but that's a different issue (entirely client-side) This is about bg changes that require a client mod to look right (prediction and such)