static qboolean BG_RAG_ParseAnimFile(int handle, animModelInfo_t *animModelInfo) { pc_token_t token; qhandle_t mdxFile; animation_t *animation; if (!trap_PC_ReadToken(handle, &token)) { return BG_RAG_ParseError(handle, "expected mdx filename"); } if (!(mdxFile = trap_R_RegisterModel(token.string))) { return BG_RAG_ParseError(handle, "failed to load %s", token.string); } if (!trap_PC_ReadToken(handle, &token) || Q_stricmp(token.string, "{")) { return BG_RAG_ParseError(handle, "expected '{'"); } while (1) { if (!trap_PC_ReadToken(handle, &token)) { return BG_RAG_ParseError(handle, "unexpected EOF"); } if (token.string[0] == '}') { break; } if (!(animation = BG_RAG_FindFreeAnimation(mdxFile, token.string))) { return BG_RAG_ParseError(handle, "out of animation storage space"); } Q_strncpyz(animation->name, token.string, sizeof(animation->name)); Q_strlwr(animation->name); if (!BG_RAG_ParseAnimation(handle, animation)) { return qfalse; } animModelInfo->animations[animModelInfo->numAnimations] = animation; animModelInfo->numAnimations++; } return qtrue; }
static qboolean BG_RAG_ParseAnimFile(int handle, animModelInfo_t *animModelInfo) { pc_token_t token; #ifdef CGAMEDLL qhandle_t mdxFile; #else char mdxFileName[MAX_QPATH]; #endif // CGAMEDLL animation_t *animation; if (!trap_PC_ReadToken(handle, &token)) { return BG_RAG_ParseError(handle, "expected mdx filename"); } #ifdef CGAMEDLL if (!(mdxFile = trap_R_RegisterModel(token.string))) { return BG_RAG_ParseError(handle, "failed to load %s", token.string); } #else Q_strncpyz(mdxFileName, token.string, sizeof(mdxFileName)); #endif // CGAMEDLL if (!trap_PC_ReadToken(handle, &token) || Q_stricmp(token.string, "{")) { return BG_RAG_ParseError(handle, "expected '{'"); } while (1) { if (!trap_PC_ReadToken(handle, &token)) { return BG_RAG_ParseError(handle, "unexpected EOF"); } if (token.string[0] == '}') { break; } #ifdef CGAMEDLL if (!(animation = BG_RAG_FindFreeAnimation(mdxFile, token.string))) { #else if (!(animation = BG_RAG_FindFreeAnimation(mdxFileName, token.string))) { #endif // CGAMEDLL return BG_RAG_ParseError(handle, "out of animation storage space"); } Q_strncpyz(animation->name, token.string, sizeof(animation->name)); Q_strlwr(animation->name); if (!BG_RAG_ParseAnimation(handle, animation)) { return qfalse; } animModelInfo->animations[animModelInfo->numAnimations] = animation; animModelInfo->numAnimations++; } return qtrue; } qboolean BG_R_RegisterAnimationGroup(const char *filename, animModelInfo_t *animModelInfo) { pc_token_t token; int handle; animModelInfo->numAnimations = 0; animModelInfo->footsteps = FOOTSTEP_NORMAL; animModelInfo->gender = GENDER_MALE; animModelInfo->isSkeletal = qtrue; animModelInfo->version = 3; animModelInfo->numHeadAnims = 0; handle = trap_PC_LoadSource(filename); if (!handle) { return qfalse; } if (!trap_PC_ReadToken(handle, &token) || Q_stricmp(token.string, "animgroup")) { return BG_RAG_ParseError(handle, "expected 'animgroup'"); } if (!trap_PC_ReadToken(handle, &token) || Q_stricmp(token.string, "{")) { return BG_RAG_ParseError(handle, "expected '{'"); } while (1) { if (!trap_PC_ReadToken(handle, &token)) { break; } if (token.string[0] == '}') { break; } if (!Q_stricmp(token.string, "animfile")) { if (!BG_RAG_ParseAnimFile(handle, animModelInfo)) { return qfalse; } } else { return BG_RAG_ParseError(handle, "unknown token '%s'", token.string); } } trap_PC_FreeSource(handle); return qtrue; }