00001
00002
00003
00004 #include "cg_local.h"
00005
00006 #include "../ui/ui_shared.h"
00007
00008 displayContextDef_t cgDC;
00009
00010 #if !defined(CL_LIGHT_H_INC)
00011 #include "cg_lights.h"
00012 #endif
00013
00014 extern int cgSiegeRoundState;
00015 extern int cgSiegeRoundTime;
00016
00017
00018
00019 void CG_InitItems(void);
00020
00021
00022
00023
00024 void CG_InitJetpackGhoul2(void);
00025 void CG_CleanJetpackGhoul2(void);
00026
00027 vec4_t colorTable[CT_MAX] =
00028 {
00029 {0, 0, 0, 0},
00030 {0, 0, 0, 1},
00031 {1, 0, 0, 1},
00032 {0, 1, 0, 1},
00033 {0, 0, 1, 1},
00034 {1, 1, 0, 1},
00035 {1, 0, 1, 1},
00036 {0, 1, 1, 1},
00037 {1, 1, 1, 1},
00038 {0.75f, 0.75f, 0.75f, 1},
00039 {0.50f, 0.50f, 0.50f, 1},
00040 {0.25f, 0.25f, 0.25f, 1},
00041 {0.15f, 0.15f, 0.15f, 1},
00042
00043 {0.810f, 0.530f, 0.0f, 1},
00044 {0.810f, 0.530f, 0.0f, 1},
00045 {0.610f, 0.330f, 0.0f, 1},
00046 {0.402f, 0.265f, 0.0f, 1},
00047
00048 {0.503f, 0.375f, 0.996f, 1},
00049 {0.367f, 0.261f, 0.722f, 1},
00050 {0.199f, 0.0f, 0.398f, 1},
00051 {0.160f, 0.117f, 0.324f, 1},
00052
00053 {0.300f, 0.628f, 0.816f, 1},
00054 {0.300f, 0.628f, 0.816f, 1},
00055 {0.191f, 0.289f, 0.457f, 1},
00056 {0.125f, 0.250f, 0.324f, 1},
00057
00058 {0.796f, 0.398f, 0.199f, 1},
00059 {0.796f, 0.398f, 0.199f, 1},
00060 {0.558f, 0.207f, 0.027f, 1},
00061 {0.328f, 0.125f, 0.035f, 1},
00062
00063 {0.996f, 0.796f, 0.398f, 1},
00064 {0.996f, 0.796f, 0.398f, 1},
00065 {0.605f, 0.441f, 0.113f, 1},
00066 {0.386f, 0.308f, 0.148f, 1},
00067
00068 {0.648f, 0.562f, 0.784f, 1},
00069 {0.648f, 0.562f, 0.784f, 1},
00070 {0.437f, 0.335f, 0.597f, 1},
00071 {0.308f, 0.269f, 0.375f, 1},
00072
00073 {0.816f, 0.531f, 0.710f, 1},
00074 {0.816f, 0.531f, 0.710f, 1},
00075 {0.566f, 0.269f, 0.457f, 1},
00076 {0.343f, 0.226f, 0.316f, 1},
00077
00078 {0.929f, 0.597f, 0.929f, 1},
00079 {0.570f, 0.371f, 0.570f, 1},
00080 {0.355f, 0.199f, 0.355f, 1},
00081 {0.285f, 0.136f, 0.230f, 1},
00082
00083 {0.953f, 0.378f, 0.250f, 1},
00084 {0.953f, 0.378f, 0.250f, 1},
00085 {0.593f, 0.121f, 0.109f, 1},
00086 {0.429f, 0.171f, 0.113f, 1},
00087 {.25f, 0, 0, 1},
00088 {.70f, 0, 0, 1},
00089
00090 {0.717f, 0.902f, 1.0f, 1},
00091 {0.574f, 0.722f, 0.804f, 1},
00092 {0.287f, 0.361f, 0.402f, 1},
00093 {0.143f, 0.180f, 0.201f, 1},
00094
00095 {0.871f, 0.386f, 0.375f, 1},
00096 {0.435f, 0.193f, 0.187f, 1},
00097 { 0, .5f, .5f, 1},
00098 { 0, .25f, .25f, 1},
00099 { .179f, .51f, .92f, 1},
00100 { .199f, .71f, .92f, 1},
00101 { .5f, .05f, .4f, 1},
00102
00103 { 0.0f, .613f, .097f, 1},
00104 { 0.835f, .015f, .015f, 1},
00105 { .567f, .685f, 1.0f, .75f},
00106 { .515f, .406f, .507f, 1},
00107 { 1.0f, .658f, .062f, 1},
00108
00109 };
00110
00111 #include "holocronicons.h"
00112
00113 int cgWeatherOverride = 0;
00114
00115 int forceModelModificationCount = -1;
00116
00117 void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum );
00118 void CG_Shutdown( void );
00119
00120 void CG_CalcEntityLerpPositions( centity_t *cent );
00121 void CG_ROFF_NotetrackCallback( centity_t *cent, const char *notetrack);
00122
00123 #include "../namespace_begin.h"
00124 void UI_CleanupGhoul2(void);
00125 #include "../namespace_end.h"
00126
00127 static int C_PointContents(void);
00128 static void C_GetLerpOrigin(void);
00129 static void C_GetLerpData(void);
00130 static void C_Trace(void);
00131 static void C_G2Trace(void);
00132 static void C_G2Mark(void);
00133 static int CG_RagCallback(int callType);
00134 static void C_GetBoltPos(void);
00135 static void C_ImpactMark(void);
00136
00137 #ifdef _XBOX
00138 #define MAX_MISC_ENTS 500
00139 #else
00140 #define MAX_MISC_ENTS 4000
00141 #endif
00142
00143
00144
00145 static refEntity_t MiscEnts[MAX_MISC_ENTS];
00146 static float Radius[MAX_MISC_ENTS];
00147 static float zOffset[MAX_MISC_ENTS];
00148
00149 static int NumMiscEnts = 0;
00150
00151 extern autoMapInput_t cg_autoMapInput;
00152 extern int cg_autoMapInputTime;
00153 extern vec3_t cg_autoMapAngle;
00154
00155 void CG_MiscEnt(void);
00156 void CG_DoCameraShake( vec3_t origin, float intensity, int radius, int time );
00157
00158
00159 qboolean CG_NoUseableForce(void)
00160 {
00161 int i = FP_HEAL;
00162 while (i < NUM_FORCE_POWERS)
00163 {
00164 if (i != FP_SABERTHROW &&
00165 i != FP_SABER_OFFENSE &&
00166 i != FP_SABER_DEFENSE &&
00167 i != FP_LEVITATION)
00168 {
00169 if (cg.predictedPlayerState.fd.forcePowersKnown & (1 << i))
00170 {
00171 return qfalse;
00172 }
00173 }
00174 i++;
00175 }
00176
00177
00178 return qtrue;
00179 }
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189 #include "../namespace_begin.h"
00190 int vmMain( int command, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8, int arg9, int arg10, int arg11 ) {
00191
00192 switch ( command ) {
00193 case CG_INIT:
00194 CG_Init( arg0, arg1, arg2 );
00195 return 0;
00196 case CG_SHUTDOWN:
00197 CG_Shutdown();
00198 return 0;
00199 case CG_CONSOLE_COMMAND:
00200 return CG_ConsoleCommand();
00201 case CG_DRAW_ACTIVE_FRAME:
00202 CG_DrawActiveFrame( arg0, arg1, arg2 );
00203 return 0;
00204 case CG_CROSSHAIR_PLAYER:
00205 return CG_CrosshairPlayer();
00206 case CG_LAST_ATTACKER:
00207 return CG_LastAttacker();
00208 case CG_KEY_EVENT:
00209 CG_KeyEvent(arg0, arg1);
00210 return 0;
00211 case CG_MOUSE_EVENT:
00212 cgDC.cursorx = cgs.cursorX;
00213 cgDC.cursory = cgs.cursorY;
00214 CG_MouseEvent(arg0, arg1);
00215 return 0;
00216 case CG_EVENT_HANDLING:
00217 CG_EventHandling(arg0);
00218 return 0;
00219
00220 case CG_POINT_CONTENTS:
00221 return C_PointContents();
00222
00223 case CG_GET_LERP_ORIGIN:
00224 C_GetLerpOrigin();
00225 return 0;
00226
00227 case CG_GET_LERP_DATA:
00228 C_GetLerpData();
00229 return 0;
00230
00231 case CG_GET_GHOUL2:
00232 return (int)cg_entities[arg0].ghoul2;
00233
00234
00235
00236 case CG_GET_MODEL_LIST:
00237 return (int)cgs.gameModels;
00238
00239 case CG_CALC_LERP_POSITIONS:
00240 CG_CalcEntityLerpPositions( &cg_entities[arg0] );
00241 return 0;
00242
00243 case CG_TRACE:
00244 C_Trace();
00245 return 0;
00246 case CG_GET_SORTED_FORCE_POWER:
00247 return forcePowerSorted[arg0];
00248 case CG_G2TRACE:
00249 C_G2Trace();
00250 return 0;
00251
00252 case CG_G2MARK:
00253 C_G2Mark();
00254 return 0;
00255
00256 case CG_RAG_CALLBACK:
00257 return CG_RagCallback(arg0);
00258
00259 case CG_INCOMING_CONSOLE_COMMAND:
00260
00261
00262
00263
00264 #if 0
00265 {
00266 TCGIncomingConsoleCommand *icc = (TCGIncomingConsoleCommand *)cg.sharedBuffer;
00267 if (strstr(icc->conCommand, "wait"))
00268 {
00269 Com_Printf("You can't use commands containing the string wait with MyMod v1.0\n");
00270 icc->conCommand[0] = 0;
00271 return 0;
00272 }
00273 else if (strstr(icc->conCommand, "blah"))
00274 {
00275 strcpy(icc->conCommand, "quit");
00276 return 0;
00277 }
00278 }
00279 #endif
00280 return 1;
00281
00282 case CG_GET_USEABLE_FORCE:
00283 return CG_NoUseableForce();
00284
00285 case CG_GET_ORIGIN:
00286 VectorCopy(cg_entities[arg0].currentState.pos.trBase, (float *)arg1);
00287 return 0;
00288
00289 case CG_GET_ANGLES:
00290 VectorCopy(cg_entities[arg0].currentState.apos.trBase, (float *)arg1);
00291 return 0;
00292
00293 case CG_GET_ORIGIN_TRAJECTORY:
00294 return (int)&cg_entities[arg0].nextState.pos;
00295
00296 case CG_GET_ANGLE_TRAJECTORY:
00297 return (int)&cg_entities[arg0].nextState.apos;
00298
00299 case CG_ROFF_NOTETRACK_CALLBACK:
00300 CG_ROFF_NotetrackCallback( &cg_entities[arg0], (const char *)arg1 );
00301 return 0;
00302
00303 case CG_IMPACT_MARK:
00304 C_ImpactMark();
00305 return 0;
00306
00307 case CG_MAP_CHANGE:
00308
00309
00310
00311 cg.mMapChange = qtrue;
00312 return 0;
00313
00314 case CG_AUTOMAP_INPUT:
00315
00316 {
00317 autoMapInput_t *autoInput = (autoMapInput_t *)cg.sharedBuffer;
00318
00319 memcpy(&cg_autoMapInput, autoInput, sizeof(autoMapInput_t));
00320
00321 if (!arg0)
00322 {
00323 cg_autoMapInputTime = cg.time + 1000;
00324 }
00325 else
00326 {
00327 if (cg_autoMapInput.yaw)
00328 {
00329 cg_autoMapAngle[YAW] += cg_autoMapInput.yaw;
00330 }
00331
00332 if (cg_autoMapInput.pitch)
00333 {
00334 cg_autoMapAngle[PITCH] += cg_autoMapInput.pitch;
00335 }
00336 cg_autoMapInput.yaw = 0.0f;
00337 cg_autoMapInput.pitch = 0.0f;
00338 }
00339 }
00340 return 0;
00341
00342 case CG_MISC_ENT:
00343 CG_MiscEnt();
00344 return 0;
00345
00346 case CG_FX_CAMERASHAKE:
00347 {
00348 TCGCameraShake *data = (TCGCameraShake *)cg.sharedBuffer;
00349
00350 CG_DoCameraShake( data->mOrigin, data->mIntensity, data->mRadius, data->mTime );
00351 }
00352 return 0;
00353
00354 default:
00355 CG_Error( "vmMain: unknown command %i", command );
00356 break;
00357 }
00358 return -1;
00359 }
00360 #include "../namespace_end.h"
00361
00362 static int C_PointContents(void)
00363 {
00364 TCGPointContents *data = (TCGPointContents *)cg.sharedBuffer;
00365
00366 return CG_PointContents( data->mPoint, data->mPassEntityNum );
00367 }
00368
00369 static void C_GetLerpOrigin(void)
00370 {
00371 TCGVectorData *data = (TCGVectorData *)cg.sharedBuffer;
00372
00373 VectorCopy(cg_entities[data->mEntityNum].lerpOrigin, data->mPoint);
00374 }
00375
00376 static void C_GetLerpData(void)
00377 {
00378 TCGGetBoltData *data = (TCGGetBoltData *)cg.sharedBuffer;
00379
00380 VectorCopy(cg_entities[data->mEntityNum].lerpOrigin, data->mOrigin);
00381 VectorCopy(cg_entities[data->mEntityNum].modelScale, data->mScale);
00382 VectorCopy(cg_entities[data->mEntityNum].lerpAngles, data->mAngles);
00383 if (cg_entities[data->mEntityNum].currentState.eType == ET_PLAYER)
00384 {
00385 data->mAngles[PITCH] = 0.0f;
00386 data->mAngles[ROLL] = 0.0f;
00387 }
00388 else if (cg_entities[data->mEntityNum].currentState.eType == ET_NPC)
00389 {
00390 Vehicle_t *pVeh = cg_entities[data->mEntityNum].m_pVehicle;
00391 if (!pVeh)
00392 {
00393 data->mAngles[PITCH] = 0.0f;
00394 data->mAngles[ROLL] = 0.0f;
00395 }
00396 else if (pVeh->m_pVehicleInfo->type == VH_SPEEDER)
00397 {
00398 data->mAngles[PITCH] = 0.0f;
00399 }
00400 else if (pVeh->m_pVehicleInfo->type != VH_FIGHTER)
00401 {
00402 data->mAngles[PITCH] = 0.0f;
00403 data->mAngles[ROLL] = 0.0f;
00404 }
00405 }
00406 }
00407
00408 static void C_Trace(void)
00409 {
00410 TCGTrace *td = (TCGTrace *)cg.sharedBuffer;
00411
00412 CG_Trace(&td->mResult, td->mStart, td->mMins, td->mMaxs, td->mEnd, td->mSkipNumber, td->mMask);
00413 }
00414
00415 static void C_G2Trace(void)
00416 {
00417 TCGTrace *td = (TCGTrace *)cg.sharedBuffer;
00418
00419 CG_G2Trace(&td->mResult, td->mStart, td->mMins, td->mMaxs, td->mEnd, td->mSkipNumber, td->mMask);
00420 }
00421
00422 static void C_G2Mark(void)
00423 {
00424 TCGG2Mark *td = (TCGG2Mark *)cg.sharedBuffer;
00425 trace_t tr;
00426 vec3_t end;
00427
00428 VectorMA(td->start, 64, td->dir, end);
00429 CG_G2Trace(&tr, td->start, NULL, NULL, end, ENTITYNUM_NONE, MASK_PLAYERSOLID);
00430
00431 if (tr.entityNum < ENTITYNUM_WORLD &&
00432 cg_entities[tr.entityNum].ghoul2)
00433 {
00434 centity_t *cent = &cg_entities[tr.entityNum];
00435
00436
00437
00438 CG_AddGhoul2Mark(td->shader, td->size, tr.endpos, end, tr.entityNum,
00439 cent->lerpOrigin, cent->lerpAngles[YAW], cent->ghoul2, cent->modelScale,
00440 Q_irand(2000, 4000));
00441
00442 }
00443 }
00444
00445 static void CG_DebugBoxLines(vec3_t mins, vec3_t maxs, int duration)
00446 {
00447 vec3_t start;
00448 vec3_t end;
00449 vec3_t vert;
00450
00451 float x = maxs[0] - mins[0];
00452 float y = maxs[1] - mins[1];
00453
00454 start[2] = maxs[2];
00455 vert[2] = mins[2];
00456
00457 vert[0] = mins[0];
00458 vert[1] = mins[1];
00459 start[0] = vert[0];
00460 start[1] = vert[1];
00461 CG_TestLine(start, vert, duration, 0x00000ff, 1);
00462
00463 vert[0] = mins[0];
00464 vert[1] = maxs[1];
00465 start[0] = vert[0];
00466 start[1] = vert[1];
00467 CG_TestLine(start, vert, duration, 0x00000ff, 1);
00468
00469 vert[0] = maxs[0];
00470 vert[1] = mins[1];
00471 start[0] = vert[0];
00472 start[1] = vert[1];
00473 CG_TestLine(start, vert, duration, 0x00000ff, 1);
00474
00475 vert[0] = maxs[0];
00476 vert[1] = maxs[1];
00477 start[0] = vert[0];
00478 start[1] = vert[1];
00479 CG_TestLine(start, vert, duration, 0x00000ff, 1);
00480
00481
00482 VectorCopy(maxs, start);
00483 VectorCopy(maxs, end);
00484 start[0] -= x;
00485 CG_TestLine(start, end, duration, 0x00000ff, 1);
00486 end[0] = start[0];
00487 end[1] -= y;
00488 CG_TestLine(start, end, duration, 0x00000ff, 1);
00489 start[1] = end[1];
00490 start[0] += x;
00491 CG_TestLine(start, end, duration, 0x00000ff, 1);
00492 CG_TestLine(start, maxs, duration, 0x00000ff, 1);
00493
00494 VectorCopy(mins, start);
00495 VectorCopy(mins, end);
00496 start[0] += x;
00497 CG_TestLine(start, end, duration, 0x00000ff, 1);
00498 end[0] = start[0];
00499 end[1] += y;
00500 CG_TestLine(start, end, duration, 0x00000ff, 1);
00501 start[1] = end[1];
00502 start[0] -= x;
00503 CG_TestLine(start, end, duration, 0x00000ff, 1);
00504 CG_TestLine(start, mins, duration, 0x00000ff, 1);
00505 }
00506
00507
00508 static int CG_RagCallback(int callType)
00509 {
00510 switch(callType)
00511 {
00512 case RAG_CALLBACK_DEBUGBOX:
00513 {
00514 ragCallbackDebugBox_t *callData = (ragCallbackDebugBox_t *)cg.sharedBuffer;
00515
00516 CG_DebugBoxLines(callData->mins, callData->maxs, callData->duration);
00517 }
00518 break;
00519 case RAG_CALLBACK_DEBUGLINE:
00520 {
00521 ragCallbackDebugLine_t *callData = (ragCallbackDebugLine_t *)cg.sharedBuffer;
00522
00523 CG_TestLine(callData->start, callData->end, callData->time, callData->color, callData->radius);
00524 }
00525 break;
00526 case RAG_CALLBACK_BONESNAP:
00527 {
00528 ragCallbackBoneSnap_t *callData = (ragCallbackBoneSnap_t *)cg.sharedBuffer;
00529 centity_t *cent = &cg_entities[callData->entNum];
00530 int snapSound = trap_S_RegisterSound(va("sound/player/bodyfall_human%i.wav", Q_irand(1, 3)));
00531
00532 trap_S_StartSound(cent->lerpOrigin, callData->entNum, CHAN_AUTO, snapSound);
00533 }
00534 case RAG_CALLBACK_BONEIMPACT:
00535 break;
00536 case RAG_CALLBACK_BONEINSOLID:
00537 #if 0
00538 {
00539 ragCallbackBoneInSolid_t *callData = (ragCallbackBoneInSolid_t *)cg.sharedBuffer;
00540
00541 if (callData->solidCount > 16)
00542 {
00543 centity_t *cent = &cg_entities[callData->entNum];
00544 vec3_t slideDir;
00545
00546 VectorSubtract(cent->lerpOrigin, callData->bonePos, slideDir);
00547 VectorAdd(cent->ragOffsets, slideDir, cent->ragOffsets);
00548
00549 cent->hasRagOffset = qtrue;
00550 }
00551 }
00552 #endif
00553 break;
00554 case RAG_CALLBACK_TRACELINE:
00555 {
00556 ragCallbackTraceLine_t *callData = (ragCallbackTraceLine_t *)cg.sharedBuffer;
00557
00558 CG_Trace(&callData->tr, callData->start, callData->mins, callData->maxs,
00559 callData->end, callData->ignore, callData->mask);
00560 }
00561 break;
00562 default:
00563 Com_Error(ERR_DROP, "Invalid callType in CG_RagCallback");
00564 break;
00565 }
00566
00567 return 0;
00568 }
00569
00570 static void C_ImpactMark(void)
00571 {
00572 TCGImpactMark *data = (TCGImpactMark *)cg.sharedBuffer;
00573
00574
00575
00576
00577
00578 CG_ImpactMark(data->mHandle, data->mPoint, data->mAngle, data->mRotation,
00579 data->mRed, data->mGreen, data->mBlue, data->mAlphaStart, qtrue, data->mSizeStart, qfalse);
00580 }
00581
00582 void CG_MiscEnt(void)
00583 {
00584 int modelIndex;
00585 refEntity_t *RefEnt;
00586 TCGMiscEnt *data = (TCGMiscEnt *)cg.sharedBuffer;
00587 vec3_t mins, maxs;
00588 float *radius, *zOff;
00589
00590 if (NumMiscEnts >= MAX_MISC_ENTS)
00591 {
00592 return;
00593 }
00594
00595 radius = &Radius[NumMiscEnts];
00596 zOff = &zOffset[NumMiscEnts];
00597 RefEnt = &MiscEnts[NumMiscEnts++];
00598
00599 modelIndex = trap_R_RegisterModel(data->mModel);
00600 if (modelIndex == 0)
00601 {
00602 Com_Error(ERR_DROP, "client_model has invalid model definition");
00603 return;
00604 }
00605
00606 *zOff = 0;
00607
00608 memset(RefEnt, 0, sizeof(refEntity_t));
00609 RefEnt->reType = RT_MODEL;
00610 RefEnt->hModel = modelIndex;
00611 RefEnt->frame = 0;
00612 trap_R_ModelBounds(modelIndex, mins, maxs);
00613 VectorCopy(data->mScale, RefEnt->modelScale);
00614 VectorCopy(data->mOrigin, RefEnt->origin);
00615
00616 VectorScaleVector(mins, data->mScale, mins);
00617 VectorScaleVector(maxs, data->mScale, maxs);
00618 *radius = Distance(mins, maxs);
00619
00620 AnglesToAxis( data->mAngles, RefEnt->axis );
00621 ScaleModelAxis(RefEnt);
00622 }
00623
00624 void CG_DrawMiscEnts(void)
00625 {
00626 int i;
00627 refEntity_t *RefEnt;
00628 float *radius, *zOff;
00629 vec3_t difference;
00630 vec3_t cullOrigin;
00631
00632 RefEnt = MiscEnts;
00633 radius = Radius;
00634 zOff = zOffset;
00635 for(i=0;i<NumMiscEnts;i++)
00636 {
00637 VectorCopy(RefEnt->origin, cullOrigin);
00638 cullOrigin[2] += 1.0f;
00639
00640 if (*zOff)
00641 {
00642 cullOrigin[2] += *zOff;
00643 }
00644
00645 if (cg.snap && trap_R_inPVS(cg.refdef.vieworg, cullOrigin, cg.snap->areamask))
00646 {
00647 VectorSubtract(RefEnt->origin, cg.refdef.vieworg, difference);
00648 if (VectorLength(difference)-(*radius) <= cg.distanceCull)
00649 {
00650 trap_R_AddRefEntityToScene(RefEnt);
00651 }
00652 }
00653 RefEnt++;
00654 radius++;
00655 zOff++;
00656 }
00657 }
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691 cg_t cg;
00692 cgs_t cgs;
00693 centity_t cg_entities[MAX_GENTITIES];
00694
00695 centity_t *cg_permanents[MAX_GENTITIES];
00696 int cg_numpermanents = 0;
00697
00698 weaponInfo_t cg_weapons[MAX_WEAPONS];
00699 itemInfo_t cg_items[MAX_ITEMS];
00700
00701
00702 vmCvar_t cg_centertime;
00703 vmCvar_t cg_runpitch;
00704 vmCvar_t cg_runroll;
00705 vmCvar_t cg_bobup;
00706 vmCvar_t cg_bobpitch;
00707 vmCvar_t cg_bobroll;
00708
00709 vmCvar_t cg_shadows;
00710 vmCvar_t cg_renderToTextureFX;
00711 vmCvar_t cg_drawTimer;
00712 vmCvar_t cg_drawFPS;
00713 vmCvar_t cg_drawSnapshot;
00714 vmCvar_t cg_draw3dIcons;
00715 vmCvar_t cg_drawIcons;
00716 vmCvar_t cg_drawAmmoWarning;
00717 vmCvar_t cg_drawCrosshair;
00718 vmCvar_t cg_drawCrosshairNames;
00719 vmCvar_t cg_drawRadar;
00720 vmCvar_t cg_drawVehLeadIndicator;
00721 vmCvar_t cg_dynamicCrosshair;
00722 vmCvar_t cg_dynamicCrosshairPrecision;
00723 vmCvar_t cg_drawRewards;
00724 vmCvar_t cg_drawScores;
00725 vmCvar_t cg_crosshairSize;
00726 vmCvar_t cg_crosshairX;
00727 vmCvar_t cg_crosshairY;
00728 vmCvar_t cg_crosshairHealth;
00729 vmCvar_t cg_draw2D;
00730 vmCvar_t cg_drawStatus;
00731 vmCvar_t cg_animSpeed;
00732 vmCvar_t cg_debugAnim;
00733 vmCvar_t cg_debugSaber;
00734 vmCvar_t cg_debugPosition;
00735 vmCvar_t cg_debugEvents;
00736 vmCvar_t cg_errorDecay;
00737 vmCvar_t cg_nopredict;
00738 vmCvar_t cg_noPlayerAnims;
00739 vmCvar_t cg_showmiss;
00740 vmCvar_t cg_showVehMiss;
00741 vmCvar_t cg_footsteps;
00742 vmCvar_t cg_addMarks;
00743 vmCvar_t cg_viewsize;
00744 vmCvar_t cg_drawGun;
00745 vmCvar_t cg_gun_frame;
00746 vmCvar_t cg_gun_x;
00747 vmCvar_t cg_gun_y;
00748 vmCvar_t cg_gun_z;
00749 vmCvar_t cg_autoswitch;
00750 vmCvar_t cg_ignore;
00751 vmCvar_t cg_simpleItems;
00752 vmCvar_t cg_fov;
00753 vmCvar_t cg_zoomFov;
00754
00755 vmCvar_t cg_swingAngles;
00756
00757 vmCvar_t cg_oldPainSounds;
00758
00759 vmCvar_t cg_ragDoll;
00760
00761 vmCvar_t cg_jumpSounds;
00762
00763 vmCvar_t cg_autoMap;
00764 vmCvar_t cg_autoMapX;
00765 vmCvar_t cg_autoMapY;
00766 vmCvar_t cg_autoMapW;
00767 vmCvar_t cg_autoMapH;
00768
00769 #ifndef _XBOX // Hmmm. This is also in game. I think this is safe.
00770 vmCvar_t bg_fighterAltControl;
00771 #endif
00772
00773 vmCvar_t cg_chatBox;
00774 vmCvar_t cg_chatBoxHeight;
00775
00776 vmCvar_t cg_saberModelTraceEffect;
00777
00778 vmCvar_t cg_saberClientVisualCompensation;
00779
00780 vmCvar_t cg_g2TraceLod;
00781
00782 vmCvar_t cg_fpls;
00783
00784 vmCvar_t cg_ghoul2Marks;
00785
00786 vmCvar_t cg_optvehtrace;
00787
00788 vmCvar_t cg_saberDynamicMarks;
00789 vmCvar_t cg_saberDynamicMarkTime;
00790
00791 vmCvar_t cg_saberContact;
00792 vmCvar_t cg_saberTrail;
00793
00794 vmCvar_t cg_duelHeadAngles;
00795
00796 vmCvar_t cg_speedTrail;
00797 vmCvar_t cg_auraShell;
00798
00799 vmCvar_t cg_repeaterOrb;
00800
00801 vmCvar_t cg_animBlend;
00802
00803 vmCvar_t cg_dismember;
00804
00805 vmCvar_t cg_thirdPersonSpecialCam;
00806
00807 vmCvar_t cg_thirdPerson;
00808 vmCvar_t cg_thirdPersonRange;
00809 vmCvar_t cg_thirdPersonAngle;
00810 vmCvar_t cg_thirdPersonPitchOffset;
00811 vmCvar_t cg_thirdPersonVertOffset;
00812 vmCvar_t cg_thirdPersonCameraDamp;
00813 vmCvar_t cg_thirdPersonTargetDamp;
00814
00815 vmCvar_t cg_thirdPersonAlpha;
00816 vmCvar_t cg_thirdPersonHorzOffset;
00817
00818 vmCvar_t cg_stereoSeparation;
00819 vmCvar_t cg_lagometer;
00820 vmCvar_t cg_drawEnemyInfo;
00821 vmCvar_t cg_synchronousClients;
00822 vmCvar_t cg_stats;
00823 vmCvar_t cg_buildScript;
00824 vmCvar_t cg_forceModel;
00825 vmCvar_t cg_paused;
00826 vmCvar_t cg_blood;
00827 vmCvar_t cg_predictItems;
00828 vmCvar_t cg_deferPlayers;
00829 vmCvar_t cg_drawTeamOverlay;
00830 vmCvar_t cg_teamOverlayUserinfo;
00831 vmCvar_t cg_drawFriend;
00832 vmCvar_t cg_teamChatsOnly;
00833 vmCvar_t cg_hudFiles;
00834 vmCvar_t cg_scorePlum;
00835 vmCvar_t cg_smoothClients;
00836
00837 #include "../namespace_begin.h"
00838 vmCvar_t pmove_fixed;
00839
00840 vmCvar_t pmove_msec;
00841
00842 vmCvar_t g_showDuelHealths;
00843 #include "../namespace_end.h"
00844
00845 vmCvar_t cg_pmove_msec;
00846 vmCvar_t cg_cameraMode;
00847 vmCvar_t cg_cameraOrbit;
00848 vmCvar_t cg_cameraOrbitDelay;
00849 vmCvar_t cg_timescaleFadeEnd;
00850 vmCvar_t cg_timescaleFadeSpeed;
00851 vmCvar_t cg_timescale;
00852 vmCvar_t cg_noTaunt;
00853 vmCvar_t cg_noProjectileTrail;
00854
00855
00856
00857
00858 vmCvar_t cg_debugBB;
00859
00860
00861
00862
00863
00864 vmCvar_t cg_currentSelectedPlayer;
00865 vmCvar_t cg_currentSelectedPlayerName;
00866
00867 vmCvar_t cg_recordSPDemo;
00868 vmCvar_t cg_recordSPDemoName;
00869 vmCvar_t cg_showVehBounds;
00870
00871 vmCvar_t ui_myteam;
00872
00873 vmCvar_t cg_snapshotTimeout;
00874
00875 typedef struct {
00876 vmCvar_t *vmCvar;
00877 char *cvarName;
00878 char *defaultString;
00879 int cvarFlags;
00880 } cvarTable_t;
00881
00882 static cvarTable_t cvarTable[] = {
00883 { &cg_ignore, "cg_ignore", "0", 0 },
00884 { &cg_autoswitch, "cg_autoswitch", "1", CVAR_ARCHIVE },
00885 { &cg_drawGun, "cg_drawGun", "1", CVAR_ARCHIVE },
00886 { &cg_zoomFov, "cg_zoomfov", "40.0", CVAR_ARCHIVE },
00887 { &cg_fov, "cg_fov", "80", CVAR_ARCHIVE },
00888 { &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE },
00889 { &cg_stereoSeparation, "cg_stereoSeparation", "0.4", CVAR_ARCHIVE },
00890 { &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE },
00891 { &cg_renderToTextureFX, "cg_renderToTextureFX", "1", CVAR_ARCHIVE },
00892 { &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE },
00893 { &cg_drawStatus, "cg_drawStatus", "1", CVAR_ARCHIVE },
00894 { &cg_drawTimer, "cg_drawTimer", "0", CVAR_ARCHIVE },
00895 { &cg_drawFPS, "cg_drawFPS", "0", CVAR_ARCHIVE },
00896 { &cg_drawSnapshot, "cg_drawSnapshot", "0", CVAR_ARCHIVE },
00897 { &cg_draw3dIcons, "cg_draw3dIcons", "1", CVAR_ARCHIVE },
00898 { &cg_drawIcons, "cg_drawIcons", "1", CVAR_ARCHIVE },
00899 { &cg_drawAmmoWarning, "cg_drawAmmoWarning", "0", CVAR_ARCHIVE },
00900 { &cg_drawEnemyInfo, "cg_drawEnemyInfo", "1", CVAR_ARCHIVE },
00901 { &cg_drawCrosshair, "cg_drawCrosshair", "1", CVAR_ARCHIVE },
00902 { &cg_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE },
00903 { &cg_drawRadar, "cg_drawRadar", "1", CVAR_ARCHIVE },
00904 { &cg_drawVehLeadIndicator, "cg_drawVehLeadIndicator", "1", CVAR_ARCHIVE },
00905 { &cg_drawScores, "cg_drawScores", "1", CVAR_ARCHIVE },
00906 { &cg_dynamicCrosshair, "cg_dynamicCrosshair", "1", CVAR_ARCHIVE },
00907
00908
00909 { &cg_dynamicCrosshairPrecision, "cg_dynamicCrosshairPrecision", "1", CVAR_ARCHIVE },
00910 { &cg_drawRewards, "cg_drawRewards", "1", CVAR_ARCHIVE },
00911 { &cg_crosshairSize, "cg_crosshairSize", "24", CVAR_ARCHIVE },
00912 { &cg_crosshairHealth, "cg_crosshairHealth", "0", CVAR_ARCHIVE },
00913 { &cg_crosshairX, "cg_crosshairX", "0", CVAR_ARCHIVE },
00914 { &cg_crosshairY, "cg_crosshairY", "0", CVAR_ARCHIVE },
00915 { &cg_simpleItems, "cg_simpleItems", "0", CVAR_ARCHIVE },
00916 { &cg_addMarks, "cg_marks", "1", CVAR_ARCHIVE },
00917 { &cg_lagometer, "cg_lagometer", "0", CVAR_ARCHIVE },
00918 { &cg_gun_x, "cg_gunX", "0", CVAR_CHEAT },
00919 { &cg_gun_y, "cg_gunY", "0", CVAR_CHEAT },
00920 { &cg_gun_z, "cg_gunZ", "0", CVAR_CHEAT },
00921 { &cg_centertime, "cg_centertime", "3", CVAR_CHEAT },
00922 { &cg_runpitch, "cg_runpitch", "0.002", CVAR_ARCHIVE},
00923 { &cg_runroll, "cg_runroll", "0.005", CVAR_ARCHIVE },
00924 { &cg_bobup , "cg_bobup", "0.005", CVAR_ARCHIVE },
00925 { &cg_bobpitch, "cg_bobpitch", "0.002", CVAR_ARCHIVE },
00926 { &cg_bobroll, "cg_bobroll", "0.002", CVAR_ARCHIVE },
00927
00928 { &cg_animSpeed, "cg_animspeed", "1", CVAR_CHEAT },
00929 { &cg_debugAnim, "cg_debuganim", "0", CVAR_CHEAT },
00930 { &cg_debugSaber, "cg_debugsaber", "0", CVAR_CHEAT },
00931 { &cg_debugPosition, "cg_debugposition", "0", CVAR_CHEAT },
00932 { &cg_debugEvents, "cg_debugevents", "0", CVAR_CHEAT },
00933 { &cg_errorDecay, "cg_errordecay", "100", 0 },
00934 { &cg_nopredict, "cg_nopredict", "0", 0 },
00935 { &cg_noPlayerAnims, "cg_noplayeranims", "0", CVAR_CHEAT },
00936 { &cg_showmiss, "cg_showmiss", "0", 0 },
00937 { &cg_showVehMiss, "cg_showVehMiss", "0", 0 },
00938 { &cg_footsteps, "cg_footsteps", "3", CVAR_ARCHIVE },
00939 { &cg_swingAngles, "cg_swingAngles", "1", 0 },
00940
00941 { &cg_oldPainSounds, "cg_oldPainSounds", "0", 0 },
00942
00943 { &cg_ragDoll, "broadsword", "0", 0 },
00944
00945 { &cg_jumpSounds, "cg_jumpSounds", "0", 0 },
00946
00947 { &cg_autoMap, "r_autoMap", "0", CVAR_ARCHIVE },
00948 { &cg_autoMapX, "r_autoMapX", "496", CVAR_ARCHIVE },
00949 { &cg_autoMapY, "r_autoMapY", "32", CVAR_ARCHIVE },
00950 { &cg_autoMapW, "r_autoMapW", "128", CVAR_ARCHIVE },
00951 { &cg_autoMapH, "r_autoMapH", "128", CVAR_ARCHIVE },
00952
00953 { &bg_fighterAltControl, "bg_fighterAltControl", "0", CVAR_SERVERINFO },
00954
00955 { &cg_chatBox, "cg_chatBox", "10000", CVAR_ARCHIVE },
00956 { &cg_chatBoxHeight, "cg_chatBoxHeight", "350", CVAR_ARCHIVE },
00957
00958 { &cg_saberModelTraceEffect, "cg_saberModelTraceEffect", "0", 0 },
00959
00960
00961
00962 { &cg_saberClientVisualCompensation, "cg_saberClientVisualCompensation", "1", 0 },
00963
00964 { &cg_g2TraceLod, "cg_g2TraceLod", "2", 0 },
00965
00966 { &cg_fpls, "cg_fpls", "0", 0 },
00967
00968 { &cg_ghoul2Marks, "cg_ghoul2Marks", "16", 0 },
00969
00970 { &cg_optvehtrace, "com_optvehtrace", "0", 0 },
00971
00972 { &cg_saberDynamicMarks, "cg_saberDynamicMarks", "0", 0 },
00973 { &cg_saberDynamicMarkTime, "cg_saberDynamicMarkTime", "60000", 0 },
00974
00975 { &cg_saberContact, "cg_saberContact", "1", 0 },
00976 { &cg_saberTrail, "cg_saberTrail", "1", 0 },
00977
00978 { &cg_duelHeadAngles, "cg_duelHeadAngles", "0", 0 },
00979
00980 { &cg_speedTrail, "cg_speedTrail", "1", 0 },
00981 { &cg_auraShell, "cg_auraShell", "1", 0 },
00982
00983 { &cg_repeaterOrb, "cg_repeaterOrb", "0", 0 },
00984
00985 { &cg_animBlend, "cg_animBlend", "1", 0 },
00986
00987 { &cg_dismember, "cg_dismember", "0", CVAR_ARCHIVE },
00988
00989 { &cg_thirdPersonSpecialCam, "cg_thirdPersonSpecialCam", "0", 0 },
00990
00991 { &cg_thirdPerson, "cg_thirdPerson", "0", CVAR_ARCHIVE },
00992 { &cg_thirdPersonRange, "cg_thirdPersonRange", "80", CVAR_CHEAT },
00993 { &cg_thirdPersonAngle, "cg_thirdPersonAngle", "0", CVAR_CHEAT },
00994 { &cg_thirdPersonPitchOffset, "cg_thirdPersonPitchOffset", "0", CVAR_CHEAT },
00995 { &cg_thirdPersonVertOffset, "cg_thirdPersonVertOffset", "16", CVAR_CHEAT },
00996 { &cg_thirdPersonCameraDamp, "cg_thirdPersonCameraDamp", "0.3", 0 },
00997 { &cg_thirdPersonTargetDamp, "cg_thirdPersonTargetDamp", "0.5", CVAR_CHEAT },
00998
00999 { &cg_thirdPersonHorzOffset, "cg_thirdPersonHorzOffset", "0", CVAR_CHEAT },
01000 { &cg_thirdPersonAlpha, "cg_thirdPersonAlpha", "1.0", CVAR_CHEAT },
01001
01002 { &cg_forceModel, "cg_forceModel", "0", CVAR_ARCHIVE },
01003 { &cg_predictItems, "cg_predictItems", "1", CVAR_ARCHIVE },
01004 { &cg_deferPlayers, "cg_deferPlayers", "1", CVAR_ARCHIVE },
01005 { &cg_drawTeamOverlay, "cg_drawTeamOverlay", "0", CVAR_ARCHIVE },
01006 { &cg_teamOverlayUserinfo, "teamoverlay", "0", CVAR_ROM | CVAR_USERINFO },
01007 { &cg_stats, "cg_stats", "0", 0 },
01008 { &cg_drawFriend, "cg_drawFriend", "1", CVAR_ARCHIVE },
01009 { &cg_teamChatsOnly, "cg_teamChatsOnly", "0", CVAR_ARCHIVE },
01010
01011
01012 { &cg_buildScript, "com_buildScript", "0", 0 },
01013 { &cg_paused, "cl_paused", "0", CVAR_ROM },
01014 { &cg_blood, "com_blood", "1", CVAR_ARCHIVE },
01015 { &cg_synchronousClients, "g_synchronousClients", "0", 0 },
01016
01017
01018
01019 { &cg_currentSelectedPlayer, "cg_currentSelectedPlayer", "0", CVAR_ARCHIVE},
01020 { &cg_currentSelectedPlayerName, "cg_currentSelectedPlayerName", "", CVAR_ARCHIVE},
01021
01022 { &cg_recordSPDemo, "ui_recordSPDemo", "0", CVAR_ARCHIVE},
01023 { &cg_recordSPDemoName, "ui_recordSPDemoName", "", CVAR_ARCHIVE},
01024
01025 { &cg_cameraOrbit, "cg_cameraOrbit", "0", CVAR_CHEAT},
01026 { &cg_cameraOrbitDelay, "cg_cameraOrbitDelay", "50", CVAR_ARCHIVE},
01027 { &cg_timescaleFadeEnd, "cg_timescaleFadeEnd", "1", 0},
01028 { &cg_timescaleFadeSpeed, "cg_timescaleFadeSpeed", "0", 0},
01029 { &cg_timescale, "timescale", "1", 0},
01030 { &cg_scorePlum, "cg_scorePlums", "1", CVAR_ARCHIVE},
01031 { &cg_hudFiles, "cg_hudFiles", "ui/jahud.txt", CVAR_ARCHIVE},
01032 { &cg_smoothClients, "cg_smoothClients", "1", CVAR_ARCHIVE},
01033 { &cg_cameraMode, "com_cameraMode", "0", CVAR_CHEAT},
01034
01035 { &pmove_fixed, "pmove_fixed", "0", 0},
01036 { &pmove_msec, "pmove_msec", "8", 0},
01037 { &cg_noTaunt, "cg_noTaunt", "0", CVAR_ARCHIVE},
01038 { &cg_noProjectileTrail, "cg_noProjectileTrail", "0", CVAR_ARCHIVE},
01039
01040 { &cg_showVehBounds, "cg_showVehBounds", "0", 0},
01041
01042 { &ui_myteam, "ui_myteam", "0", CVAR_ROM|CVAR_INTERNAL},
01043 { &cg_snapshotTimeout, "cg_snapshotTimeout", "10", CVAR_ARCHIVE },
01044
01045
01046
01047
01048
01049 { &cg_debugBB, "debugBB", "0", 0},
01050
01051
01052
01053 };
01054
01055 static int cvarTableSize = sizeof( cvarTable ) / sizeof( cvarTable[0] );
01056
01057
01058
01059
01060
01061
01062 void CG_RegisterCvars( void ) {
01063 int i;
01064 cvarTable_t *cv;
01065 char var[MAX_TOKEN_CHARS];
01066
01067 for ( i = 0, cv = cvarTable ; i < cvarTableSize ; i++, cv++ ) {
01068 trap_Cvar_Register( cv->vmCvar, cv->cvarName,
01069 cv->defaultString, cv->cvarFlags );
01070 }
01071
01072
01073 trap_Cvar_VariableStringBuffer( "sv_running", var, sizeof( var ) );
01074 cgs.localServer = atoi( var );
01075
01076 forceModelModificationCount = cg_forceModel.modificationCount;
01077
01078 trap_Cvar_Register(NULL, "model", DEFAULT_MODEL, CVAR_USERINFO | CVAR_ARCHIVE );
01079 trap_Cvar_Register(NULL, "forcepowers", DEFAULT_FORCEPOWERS, CVAR_USERINFO | CVAR_ARCHIVE );
01080
01081
01082 trap_Cvar_Register(NULL, "ui_about_gametype", "0", CVAR_ROM|CVAR_INTERNAL );
01083