This is an automated email from the git hooks/post-receive script. smcv pushed a commit to branch debian/master in repository openjk.
commit b48f21e28523b5a733fe53c99c99e2b18f7a13e9 Author: bibendovsky <[email protected]> Date: Sun Jul 31 14:07:06 2016 +0300 JO: Disable GHOUL2 gore and ragdoll --- code/game/G_Timer.cpp | 11 +- code/game/ghoul2_shared.h | 16 +++ code/icarus/IcarusImplementation.cpp | 27 ++-- code/qcommon/q_shared.h | 10 ++ code/rd-vanilla/G2_API.cpp | 97 ++++++++++++++- code/rd-vanilla/G2_bones.cpp | 9 +- code/rd-vanilla/G2_misc.cpp | 225 +++------------------------------- code/rd-vanilla/tr_ghoul2.cpp | 59 ++++++++- code/server/sv_savegame.cpp | 17 ++- code/server/sv_snapshot.cpp | 2 + codeJK2/game/g_savegame.cpp | 6 + shared/qcommon/ojk_i_saved_game.h | 21 ++++ shared/qcommon/ojk_i_saved_game_fwd.h | 22 +++- shared/qcommon/ojk_saved_game.cpp | 23 +++- shared/qcommon/ojk_saved_game.h | 24 +++- 15 files changed, 327 insertions(+), 242 deletions(-) diff --git a/code/game/G_Timer.cpp b/code/game/G_Timer.cpp index b835174..e66ae8c 100644 --- a/code/game/G_Timer.cpp +++ b/code/game/G_Timer.cpp @@ -234,11 +234,14 @@ void TIMER_Load( void ) ::gi.saved_game->read_chunk( INT_ID('T','M','I','D')); - auto& sg_buffer = ::gi.saved_game->get_buffer(); + auto sg_buffer_data = static_cast<const char*>( + ::gi.saved_game->get_buffer_data()); - std::uninitialized_copy( - sg_buffer.cbegin(), - sg_buffer.cend(), + const auto sg_buffer_size = ::gi.saved_game->get_buffer_size(); + + std::uninitialized_copy_n( + sg_buffer_data, + sg_buffer_size, tempBuffer); ::gi.saved_game->read_chunk<int32_t>( diff --git a/code/game/ghoul2_shared.h b/code/game/ghoul2_shared.h index 29e9536..21eb846 100644 --- a/code/game/ghoul2_shared.h +++ b/code/game/ghoul2_shared.h @@ -127,6 +127,7 @@ struct boneInfo_t int boneBlendStart; // time bone angle blend with normal animation began mdxaBone_t newMatrix; // This is the lerped matrix that Ghoul2 uses on the client side - does not go across the network +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN int lastTimeUpdated; // if non-zero this is all intialized int lastContents; @@ -191,6 +192,7 @@ struct boneInfo_t int airTime; //base is in air, be more quick and sensitive about collisions //rww - RAGDOLL_END +#endif // !JK2_MODE boneInfo_t(): boneNumber(-1), @@ -231,6 +233,8 @@ boneInfo_t(): saved_game->write<int32_t>(boneBlendTime); saved_game->write<int32_t>(boneBlendStart); saved_game->write(newMatrix); + +#ifndef JK2_MODE saved_game->write<int32_t>(lastTimeUpdated); saved_game->write<int32_t>(lastContents); saved_game->write<float>(lastPosition); @@ -284,6 +288,7 @@ boneInfo_t(): saved_game->write<>(animFrameMatrix); saved_game->write<int32_t>(hasAnimFrameMatrix); saved_game->write<int32_t>(airTime); +#endif // !JK2_MODE } void sg_import( @@ -304,6 +309,8 @@ boneInfo_t(): saved_game->read<int32_t>(boneBlendTime); saved_game->read<int32_t>(boneBlendStart); saved_game->read(newMatrix); + +#ifndef JK2_MODE saved_game->read<int32_t>(lastTimeUpdated); saved_game->read<int32_t>(lastContents); saved_game->read<float>(lastPosition); @@ -357,6 +364,7 @@ boneInfo_t(): saved_game->read<>(animFrameMatrix); saved_game->read<int32_t>(hasAnimFrameMatrix); saved_game->read<int32_t>(airTime); +#endif // JK2_MODE } }; //we save from top to boltUsed here. Don't bother saving the position, it gets rebuilt every frame anyway @@ -511,7 +519,11 @@ public: ojk::ISavedGame* saved_game) const { saved_game->write<int32_t>(mModelindex); + +#ifndef JK2_MODE saved_game->write<int32_t>(animModelIndexOffset); +#endif // !JK2_MODE + saved_game->write<int32_t>(mCustomShader); saved_game->write<int32_t>(mCustomSkin); saved_game->write<int32_t>(mModelBoltLink); @@ -535,7 +547,11 @@ public: ojk::ISavedGame* saved_game) { saved_game->read<int32_t>(mModelindex); + +#ifndef JK2_MODE saved_game->read<int32_t>(animModelIndexOffset); +#endif // !JK2_MODE + saved_game->read<int32_t>(mCustomShader); saved_game->read<int32_t>(mCustomSkin); saved_game->read<int32_t>(mModelBoltLink); diff --git a/code/icarus/IcarusImplementation.cpp b/code/icarus/IcarusImplementation.cpp index a93fdc6..e0b1c5b 100644 --- a/code/icarus/IcarusImplementation.cpp +++ b/code/icarus/IcarusImplementation.cpp @@ -709,11 +709,14 @@ int CIcarus::Load() saved_game->read_chunk( INT_ID('I','S','E','Q')); - auto& sg_buffer = saved_game->get_buffer(); + auto sg_buffer_data = static_cast<const unsigned char*>( + saved_game->get_buffer_data()); - std::uninitialized_copy( - sg_buffer.cbegin(), - sg_buffer.cend(), + const auto sg_buffer_size = saved_game->get_buffer_size(); + + std::uninitialized_copy_n( + sg_buffer_data, + sg_buffer_size, m_byBuffer); //Load all signals @@ -829,14 +832,20 @@ void CIcarus::BufferRead( void *pDstBuff, unsigned long ulNumBytesToRead ) {// We've tried to read past the buffer... IGameInterface::GetGame()->DebugPrint( IGameInterface::WL_ERROR, "BufferRead: Buffer underflow, Looking for new block." ); // Read in the next block. - IGameInterface::GetGame()->get_saved_game()->read_chunk( + + auto saved_game = IGameInterface::GetGame()->get_saved_game(); + + saved_game->read_chunk( INT_ID('I','S','E','Q')); - auto& sg_buffer = IGameInterface::GetGame()->get_saved_game()->get_buffer(); + auto sg_buffer_data = static_cast<const unsigned char*>( + saved_game->get_buffer_data()); + + const auto sg_buffer_size = saved_game->get_buffer_size(); - std::uninitialized_copy( - sg_buffer.cbegin(), - sg_buffer.cend(), + std::uninitialized_copy_n( + sg_buffer_data, + sg_buffer_size, m_byBuffer); m_ulBytesRead = 0; //reset buffer diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index e20d577..ed87688 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -2704,6 +2704,7 @@ public: saved_game->write<int16_t>(leanStopDebounceTime); #ifdef JK2_MODE + saved_game->skip(2); saved_game->write<float>(saberLengthOld); #endif // JK2_MODE @@ -2872,6 +2873,7 @@ public: saved_game->read<int16_t>(leanStopDebounceTime); #ifdef JK2_MODE + saved_game->skip(2); saved_game->read<float>(saberLengthOld); #endif // JK2_MODE @@ -3162,7 +3164,9 @@ Ghoul2 Insert Start Ghoul2 Insert End */ +#ifndef JK2_MODE qboolean isPortalEnt; +#endif // !JK2_MODE void sg_export( @@ -3215,7 +3219,10 @@ Ghoul2 Insert End saved_game->write<float>(modelScale); saved_game->write<int32_t>(radius); saved_game->write<int32_t>(boltInfo); + +#ifndef JK2_MODE saved_game->write<int32_t>(isPortalEnt); +#endif // !JK2_MODE } void sg_import( @@ -3268,7 +3275,10 @@ Ghoul2 Insert End saved_game->read<float>(modelScale); saved_game->read<int32_t>(radius); saved_game->read<int32_t>(boltInfo); + +#ifndef JK2_MODE saved_game->read<int32_t>(isPortalEnt); +#endif // !JK2_MODE } } entityState_t; diff --git a/code/rd-vanilla/G2_API.cpp b/code/rd-vanilla/G2_API.cpp index 2129aab..ccff8dc 100644 --- a/code/rd-vanilla/G2_API.cpp +++ b/code/rd-vanilla/G2_API.cpp @@ -41,9 +41,11 @@ along with this program; if not, see <http://www.gnu.org/licenses/>. #endif #endif +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN #include "../ghoul2/ghoul2_gore.h" //rww - RAGDOLL_END +#endif // !JK2_MODE extern mdxaBone_t worldMatrix; extern mdxaBone_t worldMatrixInv; @@ -972,10 +974,12 @@ qboolean G2API_RemoveGhoul2Model(CGhoul2Info_v &ghlInfo, const int modelIndex) return qtrue; } +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN #define GHOUL2_RAG_STARTED 0x0010 #define GHOUL2_RAG_FORCESOLVE 0x1000 //api-override, determine if ragdoll should be forced to continue solving even if it thinks it is settled //rww - RAGDOLL_END +#endif // !JK2_MODE int G2API_GetAnimIndex(CGhoul2Info *ghlInfo) { @@ -1018,12 +1022,14 @@ qboolean G2API_SetAnimIndex(CGhoul2Info *ghlInfo, const int index) qboolean G2API_SetBoneAnimIndex(CGhoul2Info *ghlInfo, const int index, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int AcurrentTime, const float setFrame, const int blendTime) { +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN if (ghlInfo && (ghlInfo->mFlags & GHOUL2_RAG_STARTED)) { return qfalse; } //rww - RAGDOLL_END +#endif // !JK2_MODE qboolean ret=qfalse; if (G2_SetupModelPointers(ghlInfo)) @@ -1070,12 +1076,14 @@ qboolean G2API_SetBoneAnimIndex(CGhoul2Info *ghlInfo, const int index, const int qboolean G2API_SetBoneAnim(CGhoul2Info *ghlInfo, const char *boneName, const int startFrame, const int endFrame, const int flags, const float animSpeed, const int AcurrentTime, const float setFrame, const int blendTime) { +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN if (ghlInfo && ghlInfo->mFlags & GHOUL2_RAG_STARTED) { return qfalse; } //rww - RAGDOLL_END +#endif // !JK2_MODE qboolean ret=qfalse; G2ERROR(boneName,"NULL boneName"); @@ -1288,12 +1296,14 @@ qboolean G2API_SetBoneAnglesIndex(CGhoul2Info *ghlInfo, const int index, const v const Eorientations yaw, const Eorientations pitch, const Eorientations roll, qhandle_t *, int blendTime, int AcurrentTime) { +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN if (ghlInfo && ghlInfo->mFlags & GHOUL2_RAG_STARTED) { return qfalse; } //rww - RAGDOLL_END +#endif // !JK2_MODE qboolean ret=qfalse; if (G2_SetupModelPointers(ghlInfo)) @@ -1315,12 +1325,14 @@ qboolean G2API_SetBoneAngles(CGhoul2Info *ghlInfo, const char *boneName, const v const Eorientations up, const Eorientations left, const Eorientations forward, qhandle_t *, int blendTime, int AcurrentTime ) { +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN if (ghlInfo && ghlInfo->mFlags & GHOUL2_RAG_STARTED) { return qfalse; } //rww - RAGDOLL_END +#endif // !JK2_MODE qboolean ret=qfalse; G2ERROR(boneName,"NULL boneName"); @@ -1401,6 +1413,15 @@ qboolean G2API_StopBoneAngles(CGhoul2Info *ghlInfo, const char *boneName) return ret; } +#ifdef JK2_MODE +void G2API_SetRagDoll( + CGhoul2Info_v& ghoul2, + CRagDollParams* parms) +{ + static_cast<void>(ghoul2); + static_cast<void>(parms); +} +#else //rww - RAGDOLL_BEGIN class CRagDollParams; void G2_SetRagDoll(CGhoul2Info_v &ghoul2V,CRagDollParams *parms); @@ -1409,6 +1430,7 @@ void G2API_SetRagDoll(CGhoul2Info_v &ghoul2,CRagDollParams *parms) G2_SetRagDoll(ghoul2,parms); } //rww - RAGDOLL_END +#endif // JK2_MODE qboolean G2API_RemoveBone(CGhoul2Info *ghlInfo, const char *boneName) { @@ -1425,18 +1447,22 @@ qboolean G2API_RemoveBone(CGhoul2Info *ghlInfo, const char *boneName) return ret; } +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN #ifdef _DEBUG extern int ragTraceTime; extern int ragSSCount; extern int ragTraceCount; #endif +#endif // !JK2_MODE void G2API_AnimateG2Models(CGhoul2Info_v &ghoul2, int AcurrentTime,CRagDollUpdateParams *params) { #ifdef JK2_MODE - return; // handled elsewhere -#endif + static_cast<void>(ghoul2); + static_cast<void>(AcurrentTime); + static_cast<void>(params); +#else int model; int currentTime=G2API_GetTime(AcurrentTime); @@ -1460,9 +1486,11 @@ void G2API_AnimateG2Models(CGhoul2Info_v &ghoul2, int AcurrentTime,CRagDollUpdat // assert(ragTraceTime < 15); //assert(ragTraceCount < 600); #endif +#endif // JK2_MODE } //rww - RAGDOLL_END +#ifndef JK2_MODE int G2_Find_Bone_Rag(CGhoul2Info *ghlInfo, boneInfo_v &blist, const char *boneName); #define RAG_PCJ (0x00001) #define RAG_EFFECTOR (0x00100) @@ -1493,9 +1521,18 @@ static inline boneInfo_t *G2_GetRagBoneConveniently(CGhoul2Info_v &ghoul2, const return bone; } +#endif // !JK2_MODE qboolean G2API_RagPCJConstraint(CGhoul2Info_v &ghoul2, const char *boneName, vec3_t min, vec3_t max) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(boneName); + static_cast<void>(min); + static_cast<void>(max); + + return false; +#else boneInfo_t *bone = G2_GetRagBoneConveniently(ghoul2, boneName); if (!bone) @@ -1512,10 +1549,18 @@ qboolean G2API_RagPCJConstraint(CGhoul2Info_v &ghoul2, const char *boneName, vec VectorCopy(max, bone->maxAngles); return qtrue; +#endif // JK2_MODE } qboolean G2API_RagPCJGradientSpeed(CGhoul2Info_v &ghoul2, const char *boneName, const float speed) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(boneName); + static_cast<void>(speed); + + return false; +#else boneInfo_t *bone = G2_GetRagBoneConveniently(ghoul2, boneName); if (!bone) @@ -1531,10 +1576,18 @@ qboolean G2API_RagPCJGradientSpeed(CGhoul2Info_v &ghoul2, const char *boneName, bone->overGradSpeed = speed; return qtrue; +#endif // JK2_MODE } qboolean G2API_RagEffectorGoal(CGhoul2Info_v &ghoul2, const char *boneName, vec3_t pos) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(boneName); + static_cast<void>(pos); + + return false; +#else boneInfo_t *bone = G2_GetRagBoneConveniently(ghoul2, boneName); if (!bone) @@ -1557,6 +1610,7 @@ qboolean G2API_RagEffectorGoal(CGhoul2Info_v &ghoul2, const char *boneName, vec3 bone->hasOverGoal = true; } return qtrue; +#endif // JK2_MODE } qboolean G2API_GetRagBonePos(CGhoul2Info_v &ghoul2, const char *boneName, vec3_t pos, vec3_t entAngles, vec3_t entPos, vec3_t entScale) @@ -1566,6 +1620,13 @@ qboolean G2API_GetRagBonePos(CGhoul2Info_v &ghoul2, const char *boneName, vec3_t qboolean G2API_RagEffectorKick(CGhoul2Info_v &ghoul2, const char *boneName, vec3_t velocity) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(boneName); + static_cast<void>(velocity); + + return false; +#else boneInfo_t *bone = G2_GetRagBoneConveniently(ghoul2, boneName); if (!bone) @@ -1583,10 +1644,17 @@ qboolean G2API_RagEffectorKick(CGhoul2Info_v &ghoul2, const char *boneName, vec3 bone->physicsSettled = false; return qtrue; +#endif // JK2_MODE } qboolean G2API_RagForceSolve(CGhoul2Info_v &ghoul2, qboolean force) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(force); + + return false; +#else assert(ghoul2.size()); CGhoul2Info *ghlInfo = &ghoul2[0]; @@ -1605,18 +1673,43 @@ qboolean G2API_RagForceSolve(CGhoul2Info_v &ghoul2, qboolean force) } return qtrue; +#endif // JK2_MODE } +#ifndef JK2_MODE qboolean G2_SetBoneIKState(CGhoul2Info_v &ghoul2, int time, const char *boneName, int ikState, sharedSetBoneIKStateParams_t *params); +#endif // !JK2_MODE + qboolean G2API_SetBoneIKState(CGhoul2Info_v &ghoul2, int time, const char *boneName, int ikState, sharedSetBoneIKStateParams_t *params) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(time); + static_cast<void>(boneName); + static_cast<void>(ikState); + static_cast<void>(params); + + return false; +#else return G2_SetBoneIKState(ghoul2, time, boneName, ikState, params); +#endif // JK2_MODE } +#ifndef JK2_MODE qboolean G2_IKMove(CGhoul2Info_v &ghoul2, int time, sharedIKMoveParams_t *params); +#endif // !JK2_MODE + qboolean G2API_IKMove(CGhoul2Info_v &ghoul2, int time, sharedIKMoveParams_t *params) { +#ifdef JK2_MODE + static_cast<void>(ghoul2); + static_cast<void>(time); + static_cast<void>(params); + + return false; +#else return G2_IKMove(ghoul2, time, params); +#endif // !JK2_MODE } qboolean G2API_RemoveBolt(CGhoul2Info *ghlInfo, const int index) diff --git a/code/rd-vanilla/G2_bones.cpp b/code/rd-vanilla/G2_bones.cpp index a710d20..8ab9a43 100644 --- a/code/rd-vanilla/G2_bones.cpp +++ b/code/rd-vanilla/G2_bones.cpp @@ -39,10 +39,12 @@ along with this program; if not, see <http://www.gnu.org/licenses/>. #include "../ghoul2/G2.h" #endif +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN #include <float.h> #include "../ghoul2/ghoul2_gore.h" //rww - RAGDOLL_END +#endif // !JK2_MODE extern cvar_t *r_Ghoul2BlendMultiplier; @@ -94,9 +96,11 @@ int G2_Add_Bone (const model_t *mod, boneInfo_v &blist, const char *boneName) mdxaSkelOffsets_t *offsets; boneInfo_t tempBone; +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN memset(&tempBone, 0, sizeof(tempBone)); //rww - RAGDOLL_END +#endif // !JK2_MODE offsets = (mdxaSkelOffsets_t *)((byte *)mod->mdxa + sizeof(mdxaHeader_t)); @@ -1046,6 +1050,7 @@ qboolean G2_Stop_Bone_Angles(CGhoul2Info *ghlInfo, boneInfo_v &blist, const char return qfalse; } +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN /* @@ -4755,6 +4760,7 @@ qboolean G2_IKMove(CGhoul2Info_v &ghoul2, int time, sharedIKMoveParams_t *params #endif return qtrue; } +#endif // !JK2_MODE // set the bone list to all unused so the bone transformation routine ignores it. void G2_Init_Bone_List(boneInfo_v &blist, int numBones) @@ -4775,7 +4781,7 @@ int G2_Get_Bone_Index(CGhoul2Info *ghoul2, const char *boneName, qboolean bAddIf } } - +#ifndef JK2_MODE void G2_FreeRag(void) { if(rag) { @@ -4783,3 +4789,4 @@ void G2_FreeRag(void) rag = NULL; } } +#endif // !JK2_MODE diff --git a/code/rd-vanilla/G2_misc.cpp b/code/rd-vanilla/G2_misc.cpp index 3954c8b..6a0111c 100644 --- a/code/rd-vanilla/G2_misc.cpp +++ b/code/rd-vanilla/G2_misc.cpp @@ -1780,142 +1780,29 @@ const auto BOLT_SAVE_BLOCK_SIZE = static_cast<int>(sizeof(SgBoltInfo)); const auto BONE_SAVE_BLOCK_SIZE = static_cast<int>(sizeof(SgBoneInfo)); #endif -#if 0 -void G2_SaveGhoul2Models(CGhoul2Info_v &ghoul2) -{ - char *pGhoul2Data = NULL; - int iGhoul2Size = 0; - - // is there anything to save? - if (!ghoul2.IsValid()||!ghoul2.size()) - { - uint32_t empty_value = 0; - - ::ri.saved_game->write_chunk<uint32_t>( - INT_ID('G','H','L','2'), - empty_value); //write out a zero buffer - - return; - } - - // this one isn't a define since I couldn't work out how to figure it out at compile time - constexpr auto ghoul2BlockSize = static_cast<int>(sizeof(SgCGhoul2Info)); - - // add in count for number of ghoul2 models - iGhoul2Size += 4; - // start out working out the total size of the buffer we need to allocate - for (int i=0; i<ghoul2.size();i++) - { - iGhoul2Size += ghoul2BlockSize; - // add in count for number of surfaces - iGhoul2Size += 4; - iGhoul2Size += (ghoul2[i].mSlist.size() * SURFACE_SAVE_BLOCK_SIZE); - // add in count for number of bones - iGhoul2Size += 4; - iGhoul2Size += (ghoul2[i].mBlist.size() * BONE_SAVE_BLOCK_SIZE); - // add in count for number of bolts - iGhoul2Size += 4; - iGhoul2Size += (ghoul2[i].mBltlist.size() * BOLT_SAVE_BLOCK_SIZE); - } - - // ok, we should know how much space we need now - pGhoul2Data = (char*)R_Malloc(iGhoul2Size, TAG_GHOUL2, qfalse); - - // now lets start putting the data we care about into the buffer - char *tempBuffer = pGhoul2Data; - - // save out how many ghoul2 models we have - *(int32_t*)tempBuffer = static_cast<int32_t>(ghoul2.size()); - tempBuffer +=4; - - for (int i = 0; i<ghoul2.size();i++) - { - // first save out the ghoul2 details themselves -// OutputDebugString(va("G2_SaveGhoul2Models(): ghoul2[%d].mModelindex = %d\n",i,ghoul2[i].mModelindex)); -#if 0 - memcpy(tempBuffer, &ghoul2[i].mModelindex, ghoul2BlockSize); -#else - ::sg_export( - ghoul2[i], - *reinterpret_cast<SgCGhoul2Info*>(tempBuffer)); -#endif - tempBuffer += ghoul2BlockSize; - - // save out how many surfaces we have - *(int32_t*)tempBuffer = static_cast<int32_t>(ghoul2[i].mSlist.size()); - tempBuffer +=4; - - // now save the all the surface list info - for (size_t x=0; x<ghoul2[i].mSlist.size(); x++) - { -#if 0 - memcpy(tempBuffer, &ghoul2[i].mSlist[x], SURFACE_SAVE_BLOCK_SIZE); -#else - ::sg_export( - ghoul2[i].mSlist[x], - *reinterpret_cast<SgSurfaceInfo*>(tempBuffer)); -#endif - tempBuffer += SURFACE_SAVE_BLOCK_SIZE; - } - - // save out how many bones we have - *(int32_t*)tempBuffer = static_cast<int32_t>(ghoul2[i].mBlist.size()); - tempBuffer +=4; - - // now save the all the bone list info - for (size_t x = 0; x<ghoul2[i].mBlist.size(); x++) - { -#if 0 - memcpy(tempBuffer, &ghoul2[i].mBlist[x], BONE_SAVE_BLOCK_SIZE); -#else - ::sg_export( - ghoul2[i].mBlist[x], - *reinterpret_cast<SgBoneInfo*>(tempBuffer)); -#endif - tempBuffer += BONE_SAVE_BLOCK_SIZE; - } - - // save out how many bolts we have - *(int32_t*)tempBuffer = static_cast<int32_t>(ghoul2[i].mBltlist.size()); - tempBuffer +=4; - - // lastly save the all the bolt list info - for (size_t x = 0; x<ghoul2[i].mBltlist.size(); x++) - { -#if 0 - memcpy(tempBuffer, &ghoul2[i].mBltlist[x], BOLT_SAVE_BLOCK_SIZE); -#else - ::sg_export( - ghoul2[i].mBltlist[x], - *reinterpret_cast<SgBoltInfo*>(tempBuffer)); -#endif - tempBuffer += BOLT_SAVE_BLOCK_SIZE; - } - } - ::ri.saved_game->write_chunk( - INT_ID('G','H','L','2'), - pGhoul2Data, - iGhoul2Size); - - R_Free(pGhoul2Data); -} -#else void G2_SaveGhoul2Models( CGhoul2Info_v& ghoul2) { + ::ri.saved_game->reset_buffer(); + // is there anything to save? if (!ghoul2.IsValid() || ghoul2.size() == 0) { - auto empty_value = 0; +#ifdef JK2_MODE + ::ri.saved_game->write_chunk_and_size<int32_t>( + INT_ID('G', 'L', 'S', '2'), + INT_ID('G', 'H', 'L', '2')); +#else + const int zero_size = 0; ::ri.saved_game->write_chunk<int32_t>( INT_ID('G', 'H', 'L', '2'), - empty_value); //write out a zero buffer + zero_size); //write out a zero buffer +#endif // JK2_MODE return; } - ::ri.saved_game->reset_buffer(); // save out how many ghoul2 models we have auto model_count = ghoul2.size(); @@ -1966,93 +1853,16 @@ void G2_SaveGhoul2Models( } } +#ifdef JK2_MODE + ::ri.saved_game->write_chunk_and_size<int32_t>( + INT_ID('G', 'L', 'S', '2'), + INT_ID('G', 'H', 'L', '2')); +#else ::ri.saved_game->write_chunk( INT_ID('G', 'H', 'L', '2')); +#endif // JK2_MODE } -#endif - -#if 0 -void G2_LoadGhoul2Model(CGhoul2Info_v &ghoul2, char *buffer) -{ - // first thing, lets see how many ghoul2 models we have, and resize our buffers accordingly - auto newSize = *(int32_t*)buffer; - ghoul2.resize(newSize); - buffer += 4; - - // did we actually resize to a value? - if (!newSize) - { - // no, ok, well, done then. - return; - } - - // this one isn't a define since I couldn't work out how to figure it out at compile time - constexpr auto ghoul2BlockSize = static_cast<int>(sizeof(SgCGhoul2Info)); - - // now we have enough instances, lets go through each one and load up the relevant details - for (int i=0; i<ghoul2.size(); i++) - { - ghoul2[i].mSkelFrameNum = 0; - ghoul2[i].mModelindex=-1; - ghoul2[i].mFileName[0]=0; - ghoul2[i].mValid=false; - // load the ghoul2 info from the buffer - ::sg_import( - *reinterpret_cast<const SgCGhoul2Info*>(buffer), - ghoul2[i]); - - buffer +=ghoul2BlockSize; - - if (ghoul2[i].mModelindex!=-1&&ghoul2[i].mFileName[0]) - { - ghoul2[i].mModelindex = i; - G2_SetupModelPointers(&ghoul2[i]); - } - - // give us enough surfaces to load up the data - ghoul2[i].mSlist.resize(*(int32_t*)buffer); - buffer +=4; - // now load all the surfaces - for (size_t x=0; x<ghoul2[i].mSlist.size(); x++) - { - ::sg_import( - *reinterpret_cast<const SgSurfaceInfo*>(buffer), - ghoul2[i].mSlist[x]); - - buffer += SURFACE_SAVE_BLOCK_SIZE; - } - - // give us enough bones to load up the data - ghoul2[i].mBlist.resize(*(int32_t*)buffer); - buffer +=4; - - // now load all the bones - for (size_t x = 0; x<ghoul2[i].mBlist.size(); x++) - { - ::sg_import( - *reinterpret_cast<const SgBoneInfo*>(buffer), - ghoul2[i].mBlist[x]); - - buffer += BONE_SAVE_BLOCK_SIZE; - } - - // give us enough bolts to load up the data - ghoul2[i].mBltlist.resize(*(int32_t*)buffer); - buffer +=4; - - // now load all the bolts - for (size_t x = 0; x<ghoul2[i].mBltlist.size(); x++) - { - ::sg_import( - *reinterpret_cast<const SgBoltInfo*>(buffer), - ghoul2[i].mBltlist[x]); - - buffer += BOLT_SAVE_BLOCK_SIZE; - } - } -} -#else // FIXME Remove 'buffer' parameter void G2_LoadGhoul2Model( CGhoul2Info_v& ghoul2, @@ -2137,5 +1947,6 @@ void G2_LoadGhoul2Model( ::ri.saved_game); } } + + ::ri.saved_game->ensure_all_data_read(); } -#endif diff --git a/code/rd-vanilla/tr_ghoul2.cpp b/code/rd-vanilla/tr_ghoul2.cpp index d81e7fc..cc3cdba 100644 --- a/code/rd-vanilla/tr_ghoul2.cpp +++ b/code/rd-vanilla/tr_ghoul2.cpp @@ -70,9 +70,11 @@ void G2Time_ReportTimers(void) } #endif +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN #include <float.h> //rww - RAGDOLL_END +#endif // !JK2_MODE extern cvar_t *r_Ghoul2UnSqash; extern cvar_t *r_Ghoul2AnimSmooth; @@ -101,18 +103,24 @@ const static mdxaBone_t identityMatrix = class CTransformBone { public: +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN int touchRender; //rww - RAGDOLL_END +#endif // !JK2_MODE + mdxaBone_t boneMatrix; //final matrix int parent; // only set once int touch; // for minimal recalculation CTransformBone() { touch=0; + +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN touchRender = 0; //rww - RAGDOLL_END +#endif // !JK2_MODE } }; @@ -156,6 +164,8 @@ class CBoneCache mFinalBones[index].touch=mCurrentTouch; } } + +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN void SmoothLow(int index) { @@ -200,6 +210,8 @@ class CBoneCache #endif// _DEBUG } //rww - RAGDOLL_END +#endif // !JK2_MODE + public: int frameSize; const mdxaHeader_t *header; @@ -219,11 +231,14 @@ public: int incomingTime; int mCurrentTouch; + +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN int mCurrentTouchRender; int mLastTouch; int mLastLastTouch; //rww - RAGDOLL_END +#endif // !JK2_MODE // for render smoothing bool mSmoothingActive; @@ -258,10 +273,14 @@ public: mFinalBones[i].parent=skel->parent; } mCurrentTouch=3; + +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN mLastTouch=2; mLastLastTouch=1; //rww - RAGDOLL_END +#endif // !JK2_MODE + } ~CBoneCache () { @@ -349,6 +368,8 @@ public: } return mFinalBones[index].boneMatrix; } + +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN const inline mdxaBone_t &EvalRender(int index) { @@ -385,13 +406,20 @@ public: return mFinalBones[index].parent; } //rww - RAGDOLL_END +#endif // !JK2_MODE // Added by BTO (VV) - This is probably broken // Need to add in smoothing step? CTransformBone *EvalFull(int index) { +#ifdef JK2_MODE // Eval(index); + +// FIXME BBi Was commented + Eval(index); +#else EvalRender(index); +#endif // JK2_MODE if (mSmoothingActive) { return mSmoothBones + index; @@ -413,6 +441,7 @@ static inline float G2_GetVertBoneWeightNotSlow( const mdxmVertex_t *pVert, cons return fBoneWeight; } +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN const mdxaHeader_t *G2_GetModA(CGhoul2Info &ghoul2) { @@ -627,6 +656,7 @@ int G2_GetParentBoneMatrixLow(CGhoul2Info &ghoul2,int boneNum,const vec3_t scale return parent; } //rww - RAGDOLL_END +#endif // !JK2_MODE void RemoveBoneCache(CBoneCache *boneCache) { @@ -1185,6 +1215,7 @@ void G2_TimingModel(boneInfo_t &bone,int currentTime,int numFramesInFile,int &cu */ } +#ifndef JK2_MODE //basically construct a seperate skeleton with full hierarchy to store a matrix //off which will give us the desired settling position given the frame in the skeleton //that should be used -rww @@ -1312,6 +1343,7 @@ void G2_RagGetAnimMatrix(CGhoul2Info &ghoul2, const int boneNum, mdxaBone_t &mat matrix = bone.animFrameMatrix; } +#endif // !JK2_MODE // transform each individual bone's information - making sure to use any override information provided, both for angles and for animations, as // well as multiplying each bone's matrix by it's parents matrix @@ -1853,6 +1885,7 @@ void G2_TransformGhoulBones(boneInfo_v &rootBoneList,mdxaBone_t &rootMatrix, CGh float val=r_Ghoul2AnimSmooth->value; if (smooth&&val>0.0f&&val<1.0f) { +#ifndef JK2_MODE ghoul2.mBoneCache->mLastTouch=ghoul2.mBoneCache->mLastLastTouch; if(ghoul2.mFlags & GHOUL2_RAG_STARTED) @@ -1880,6 +1913,7 @@ void G2_TransformGhoulBones(boneInfo_v &rootBoneList,mdxaBone_t &rootMatrix, CGh } } } +#endif // !JK2_MODE ghoul2.mBoneCache->mSmoothFactor=val; ghoul2.mBoneCache->mSmoothingActive=true; @@ -1894,6 +1928,7 @@ void G2_TransformGhoulBones(boneInfo_v &rootBoneList,mdxaBone_t &rootMatrix, CGh } ghoul2.mBoneCache->mCurrentTouch++; +#ifndef JK2_MODE //rww - RAGDOLL_BEGIN if (HackadelicOnClient) { @@ -1905,6 +1940,7 @@ void G2_TransformGhoulBones(boneInfo_v &rootBoneList,mdxaBone_t &rootMatrix, CGh ghoul2.mBoneCache->mCurrentTouchRender=0; } //rww - RAGDOLL_END +#endif // !JK2_MODE // ghoul2.mBoneCache->mWraithID=0; ghoul2.mBoneCache->frameSize = 0;// can be deleted in new G2 format //(int)( &((mdxaFrame_t *)0)->boneIndexes[ ghoul2.aHeader->numBones ] ); @@ -2984,8 +3020,12 @@ void RB_SurfaceGhoul( CRenderableSurface *surf ) const mdxaBone_t *bone2; for ( j = 0; j < numVerts; j++, baseVertex++,v++ ) { - +#ifdef JK2_MODE + // FIXME BBi + bone = &bones->Eval(piBoneReferences[G2_GetVertBoneIndex( v, 0 )]); +#else bone = &bones->EvalRender(piBoneReferences[G2_GetVertBoneIndex( v, 0 )]); +#endif // JK2_MODE int iNumWeights = G2_GetVertWeights( v ); tess.normal[baseVertex][0] = DotProduct( bone->matrix[0], v->normal ); tess.normal[baseVertex][1] = DotProduct( bone->matrix[1], v->normal ); @@ -3002,7 +3042,12 @@ void RB_SurfaceGhoul( CRenderableSurface *surf ) fBoneWeight = G2_GetVertBoneWeightNotSlow( v, 0); if (iNumWeights==2) { +#ifdef JK2_MODE + // FIXME BBi + bone2 = &bones->Eval(piBoneReferences[G2_GetVertBoneIndex( v, 1 )]); +#else bone2 = &bones->EvalRender(piBoneReferences[G2_GetVertBoneIndex( v, 1 )]); +#endif // JK2_MODE /* useless transposition tess.xyz[baseVertex][0] = @@ -3031,7 +3076,13 @@ void RB_SurfaceGhoul( CRenderableSurface *surf ) fTotalWeight=fBoneWeight; for (k=1; k < iNumWeights-1 ; k++) { +#ifdef JK2_MODE + // FIXME BBi + bone = &bones->Eval(piBoneReferences[G2_GetVertBoneIndex( v, k )]); +#else bone = &bones->EvalRender(piBoneReferences[G2_GetVertBoneIndex( v, k )]); +#endif // JK2_MODE + fBoneWeight = G2_GetVertBoneWeightNotSlow( v, k); fTotalWeight += fBoneWeight; @@ -3039,7 +3090,13 @@ void RB_SurfaceGhoul( CRenderableSurface *surf ) tess.xyz[baseVertex][1] += fBoneWeight * ( DotProduct( bone->matrix[1], v->vertCoords ) + bone->matrix[1][3] ); tess.xyz[baseVertex][2] += fBoneWeight * ( DotProduct( bone->matrix[2], v->vertCoords ) + bone->matrix[2][3] ); } + +#ifdef JK2_MODE + // FIXME BBi + bone = &bones->Eval(piBoneReferences[G2_GetVertBoneIndex( v, k )]); +#else bone = &bones->EvalRender(piBoneReferences[G2_GetVertBoneIndex( v, k )]); +#endif // JK2_MODE fBoneWeight = 1.0f-fTotalWeight; tess.xyz[baseVertex][0] += fBoneWeight * ( DotProduct( bone->matrix[0], v->vertCoords ) + bone->matrix[0][3] ); diff --git a/code/server/sv_savegame.cpp b/code/server/sv_savegame.cpp index aba6ce0..167014a 100644 --- a/code/server/sv_savegame.cpp +++ b/code/server/sv_savegame.cpp @@ -572,7 +572,7 @@ void SG_WriteCvars(void) void SG_ReadCvars(void) { int iCount; - const char* psName; + std::string psName; const char* psValue; auto saved_game = &ojk::SavedGame::get_instance(); @@ -586,18 +586,17 @@ void SG_ReadCvars(void) saved_game->read_chunk( INT_ID('C','V','A','R')); - auto name_buffer = saved_game->get_buffer(); - psName = reinterpret_cast<const char*>(name_buffer.data()); + psName = reinterpret_cast<const char*>( + saved_game->get_buffer_data()); saved_game->read_chunk( INT_ID('V','A','L','U')); - auto value_buffer = saved_game->get_buffer(); - psValue = reinterpret_cast<const char*>(value_buffer.data()); + psValue = reinterpret_cast<const char*>( + saved_game->get_buffer_data()); - - ::Cvar_Set(psName, psValue); + ::Cvar_Set(psName.c_str(), psValue); } } @@ -686,8 +685,8 @@ void SG_ReadServerConfigStrings( void ) saved_game->read_chunk( INT_ID('C','S','D','A')); - auto& sg_buffer = saved_game->get_buffer(); - psName = reinterpret_cast<const char*>(sg_buffer.data()); + psName = reinterpret_cast<const char*>( + saved_game->get_buffer_data()); Com_DPrintf( "Cfg str %d = %s\n",iIndex, psName); diff --git a/code/server/sv_snapshot.cpp b/code/server/sv_snapshot.cpp index 16e5f3f..acc9c87 100644 --- a/code/server/sv_snapshot.cpp +++ b/code/server/sv_snapshot.cpp @@ -417,11 +417,13 @@ static void SV_AddEntitiesVisibleFromPoint( vec3_t origin, clientSnapshot_t *fra continue; } +#ifndef JK2_MODE if (ent->s.isPortalEnt) { //rww - portal entities are always sent as well SV_AddEntToSnapshot( svEnt, ent, eNums ); continue; } +#endif // !JK2_MODE #ifndef JK2_MODE if ( sightOn ) diff --git a/codeJK2/game/g_savegame.cpp b/codeJK2/game/g_savegame.cpp index 34b6279..71a7d0b 100644 --- a/codeJK2/game/g_savegame.cpp +++ b/codeJK2/game/g_savegame.cpp @@ -889,6 +889,12 @@ static void ReadGEntities(qboolean qbAutosave) // the scary ghoul2 stuff... (fingers crossed) // { +#ifdef JK2_MODE + // Skip GL2 data size + ::gi.saved_game->read_chunk( + INT_ID('G','L','2','S')); +#endif // JK2_MODE + ::gi.saved_game->read_chunk( INT_ID('G','H','L','2')); diff --git a/shared/qcommon/ojk_i_saved_game.h b/shared/qcommon/ojk_i_saved_game.h index 125064c..cb83e41 100644 --- a/shared/qcommon/ojk_i_saved_game.h +++ b/shared/qcommon/ojk_i_saved_game.h @@ -71,6 +71,27 @@ void ISavedGame::read_chunk( // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // write_chunk +template<typename TSize> +void ISavedGame::write_chunk_and_size( + const ChunkId size_chunk_id, + const ChunkId data_chunk_id) +{ + save_buffer(); + + auto data_size = get_buffer_size(); + + reset_buffer(); + + write_chunk<TSize>( + size_chunk_id, + data_size); + + load_buffer(); + + write_chunk( + data_chunk_id); +} + template<typename TDst, typename TSrc> void ISavedGame::write_chunk( const ChunkId chunk_id, diff --git a/shared/qcommon/ojk_i_saved_game_fwd.h b/shared/qcommon/ojk_i_saved_game_fwd.h index b55fe77..91a7e61 100644 --- a/shared/qcommon/ojk_i_saved_game_fwd.h +++ b/shared/qcommon/ojk_i_saved_game_fwd.h @@ -10,7 +10,6 @@ #include <cstdint> #include <string> -#include <vector> namespace ojk @@ -21,7 +20,6 @@ class ISavedGame { public: using ChunkId = uint32_t; - using Buffer = std::vector<uint8_t>; ISavedGame(); @@ -72,6 +70,13 @@ public: virtual void write_chunk( const ChunkId chunk_id) = 0; + // Writes a data-chunk into the file from the internal buffer + // prepended with a size-chunk that holds a size of the data-chunk. + template<typename TSize> + void write_chunk_and_size( + const ChunkId size_chunk_id, + const ChunkId data_chunk_id); + // Writes a value or an array of values into the file via // the internal buffer. template<typename TDst = void, typename TSrc = void> @@ -134,8 +139,17 @@ public: int count) = 0; - // Returns an I/O buffer. - virtual const Buffer& get_buffer() const = 0; + // Stores current I/O buffer and it's position. + virtual void save_buffer() = 0; + + // Restores saved I/O buffer and it's position. + virtual void load_buffer() = 0; + + // Returns a pointer to data in the I/O buffer. + virtual const void* get_buffer_data() const = 0; + + // Returns a current size of the I/O buffer. + virtual int get_buffer_size() const = 0; // Clears buffer and resets it's offset to the beginning. diff --git a/shared/qcommon/ojk_saved_game.cpp b/shared/qcommon/ojk_saved_game.cpp index 8c63d9c..d10cecc 100644 --- a/shared/qcommon/ojk_saved_game.cpp +++ b/shared/qcommon/ojk_saved_game.cpp @@ -12,7 +12,9 @@ namespace ojk SavedGame::SavedGame() : file_handle_(), io_buffer_(), + saved_io_buffer_(), io_buffer_offset_(), + saved_io_buffer_offset_(), rle_buffer_(), is_readable_(), is_writable_(), @@ -621,9 +623,26 @@ void SavedGame::skip( io_buffer_offset_ = new_offset; } -const SavedGame::Buffer& SavedGame::get_buffer() const +void SavedGame::save_buffer() { - return io_buffer_; + saved_io_buffer_ = io_buffer_; + saved_io_buffer_offset_ = io_buffer_offset_; +} + +void SavedGame::load_buffer() +{ + io_buffer_ = saved_io_buffer_; + io_buffer_offset_ = saved_io_buffer_offset_; +} + +const void* SavedGame::get_buffer_data() const +{ + return io_buffer_.data(); +} + +int SavedGame::get_buffer_size() const +{ + return static_cast<int>(io_buffer_.size()); } void SavedGame::rename( diff --git a/shared/qcommon/ojk_saved_game.h b/shared/qcommon/ojk_saved_game.h index 481b71c..8b5a9b6 100644 --- a/shared/qcommon/ojk_saved_game.h +++ b/shared/qcommon/ojk_saved_game.h @@ -23,7 +23,6 @@ class SavedGame : { public: using ChunkId = uint32_t; - using Buffer = std::vector<uint8_t>; SavedGame(); @@ -99,8 +98,20 @@ public: void skip( int count) override; - // Returns an I/O buffer. - const Buffer& get_buffer() const override; + + // Stores current I/O buffer and it's position. + void save_buffer() override; + + // Restores saved I/O buffer and it's position. + void load_buffer() override; + + + // Returns a pointer to data in the I/O buffer. + const void* get_buffer_data() const override; + + // Returns a current size of the I/O buffer. + int get_buffer_size() const override; + // Clears buffer and resets it's offset to the beginning. void reset_buffer() override; @@ -130,6 +141,7 @@ protected: private: + using Buffer = std::vector<uint8_t>; using BufferOffset = Buffer::size_type; using Paths = std::vector<std::string>; @@ -140,9 +152,15 @@ private: // I/O buffer. Buffer io_buffer_; + // Saved copy of the I/O buffer. + Buffer saved_io_buffer_; + // A current offset inside the I/O buffer. BufferOffset io_buffer_offset_; + // Saved I/O buffer offset. + BufferOffset saved_io_buffer_offset_; + // RLE codec buffer. Buffer rle_buffer_; -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openjk.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

