X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=pr_cmds.c;h=925fa93809c649ea4cf1d595c4f4b9ea0ffa94c4;hb=b49e92062e402ecdc1a7407d942bfd7252c4426d;hp=e7289720460ac58696c2fda7b01e841a41f342f2;hpb=ac947d2fbb445473c266390a1fca26c8be8611c4;p=xonotic%2Fdarkplaces.git diff --git a/pr_cmds.c b/pr_cmds.c index e7289720..925fa938 100644 --- a/pr_cmds.c +++ b/pr_cmds.c @@ -75,6 +75,7 @@ char *ENGINE_EXTENSIONS = "DP_CL_LOADSKY " "DP_CON_SET " "DP_CON_SETA " +"DP_CON_STARTMAP " "DP_EF_ADDITIVE " "DP_EF_BLUE " "DP_EF_FLAME " @@ -1400,7 +1401,7 @@ void PF_walkmove (void) // assume failure if it returns early G_FLOAT(OFS_RETURN) = 0; - + ent = PROG_TO_EDICT(pr_global_struct->self); if (ent == sv.edicts) PF_WARNING("walkmove: can not modify world entity\n"); @@ -2599,22 +2600,22 @@ void PF_te_plasmaburn (void) MSG_WriteCoord(&sv.datagram, G_VECTOR(OFS_PARM0)[2], sv.protocol); } -static void clippointtosurface(msurface_t *surf, vec3_t p, vec3_t out) +static void clippointtosurface(msurface_t *surface, vec3_t p, vec3_t out) { int i, j; vec3_t v1, clipplanenormal, normal; vec_t clipplanedist, clipdist; VectorCopy(p, out); - if (surf->flags & SURF_PLANEBACK) - VectorNegate(surf->plane->normal, normal); + if (surface->flags & SURF_PLANEBACK) + VectorNegate(surface->plane->normal, normal); else - VectorCopy(surf->plane->normal, normal); - for (i = 0, j = surf->poly_numverts - 1;i < surf->poly_numverts;j = i, i++) + VectorCopy(surface->plane->normal, normal); + for (i = 0, j = surface->mesh.num_vertices - 1;i < surface->mesh.num_vertices;j = i, i++) { - VectorSubtract(&surf->poly_verts[j * 3], &surf->poly_verts[i * 3], v1); + VectorSubtract(&surface->mesh.data_vertex3f[j * 3], &surface->mesh.data_vertex3f[i * 3], v1); VectorNormalizeFast(v1); CrossProduct(v1, normal, clipplanenormal); - clipplanedist = DotProduct(&surf->poly_verts[i * 3], clipplanenormal); + clipplanedist = DotProduct(&surface->mesh.data_vertex3f[i * 3], clipplanenormal); clipdist = DotProduct(out, clipplanenormal) - clipplanedist; if (clipdist > 0) { @@ -2624,7 +2625,7 @@ static void clippointtosurface(msurface_t *surf, vec3_t p, vec3_t out) } } -static msurface_t *getsurface(edict_t *ed, int surfnum) +static msurface_t *getsurface(edict_t *ed, int surfacenum) { int modelindex; model_t *model; @@ -2634,74 +2635,74 @@ static msurface_t *getsurface(edict_t *ed, int surfnum) if (modelindex < 1 || modelindex >= MAX_MODELS) return NULL; model = sv.models[modelindex]; - if (surfnum < 0 || surfnum >= model->nummodelsurfaces) + if (surfacenum < 0 || surfacenum >= model->nummodelsurfaces) return NULL; - return model->brushq1.surfaces + surfnum + model->firstmodelsurface; + return model->brushq1.surfaces + surfacenum + model->firstmodelsurface; } //PF_getsurfacenumpoints, // #434 float(entity e, float s) getsurfacenumpoints = #434; void PF_getsurfacenumpoints(void) { - msurface_t *surf; + msurface_t *surface; // return 0 if no such surface - if (!(surf = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) + if (!(surface = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) { G_FLOAT(OFS_RETURN) = 0; return; } - G_FLOAT(OFS_RETURN) = surf->poly_numverts; + G_FLOAT(OFS_RETURN) = surface->mesh.num_vertices; } //PF_getsurfacepoint, // #435 vector(entity e, float s, float n) getsurfacepoint = #435; void PF_getsurfacepoint(void) { edict_t *ed; - msurface_t *surf; + msurface_t *surface; int pointnum; VectorClear(G_VECTOR(OFS_RETURN)); ed = G_EDICT(OFS_PARM0); if (!ed || ed->e->free) return; - if (!(surf = getsurface(ed, G_FLOAT(OFS_PARM1)))) + if (!(surface = getsurface(ed, G_FLOAT(OFS_PARM1)))) return; pointnum = G_FLOAT(OFS_PARM2); - if (pointnum < 0 || pointnum >= surf->poly_numverts) + if (pointnum < 0 || pointnum >= surface->mesh.num_vertices) return; // FIXME: implement rotation/scaling - VectorAdd(&surf->poly_verts[pointnum * 3], ed->v->origin, G_VECTOR(OFS_RETURN)); + VectorAdd(&surface->mesh.data_vertex3f[pointnum * 3], ed->v->origin, G_VECTOR(OFS_RETURN)); } //PF_getsurfacenormal, // #436 vector(entity e, float s) getsurfacenormal = #436; void PF_getsurfacenormal(void) { - msurface_t *surf; + msurface_t *surface; VectorClear(G_VECTOR(OFS_RETURN)); - if (!(surf = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) + if (!(surface = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) return; // FIXME: implement rotation/scaling - if (surf->flags & SURF_PLANEBACK) - VectorNegate(surf->plane->normal, G_VECTOR(OFS_RETURN)); + if (surface->flags & SURF_PLANEBACK) + VectorNegate(surface->plane->normal, G_VECTOR(OFS_RETURN)); else - VectorCopy(surf->plane->normal, G_VECTOR(OFS_RETURN)); + VectorCopy(surface->plane->normal, G_VECTOR(OFS_RETURN)); } //PF_getsurfacetexture, // #437 string(entity e, float s) getsurfacetexture = #437; void PF_getsurfacetexture(void) { - msurface_t *surf; + msurface_t *surface; G_INT(OFS_RETURN) = 0; - if (!(surf = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) + if (!(surface = getsurface(G_EDICT(OFS_PARM0), G_FLOAT(OFS_PARM1)))) return; - G_INT(OFS_RETURN) = PR_SetString(surf->texinfo->texture->name); + G_INT(OFS_RETURN) = PR_SetString(surface->texinfo->texture->name); } //PF_getsurfacenearpoint, // #438 float(entity e, vector p) getsurfacenearpoint = #438; void PF_getsurfacenearpoint(void) { - int surfnum, best, modelindex; + int surfacenum, best, modelindex; vec3_t clipped, p; vec_t dist, bestdist; edict_t *ed; model_t *model; - msurface_t *surf; + msurface_t *surface; vec_t *point; G_FLOAT(OFS_RETURN) = -1; ed = G_EDICT(OFS_PARM0); @@ -2720,19 +2721,19 @@ void PF_getsurfacenearpoint(void) VectorSubtract(point, ed->v->origin, p); best = -1; bestdist = 1000000000; - for (surfnum = 0;surfnum < model->nummodelsurfaces;surfnum++) + for (surfacenum = 0;surfacenum < model->nummodelsurfaces;surfacenum++) { - surf = model->brushq1.surfaces + surfnum + model->firstmodelsurface; - dist = PlaneDiff(p, surf->plane); + surface = model->brushq1.surfaces + surfacenum + model->firstmodelsurface; + dist = PlaneDiff(p, surface->plane); dist = dist * dist; if (dist < bestdist) { - clippointtosurface(surf, p, clipped); + clippointtosurface(surface, p, clipped); VectorSubtract(clipped, p, clipped); dist += DotProduct(clipped, clipped); if (dist < bestdist) { - best = surfnum; + best = surfacenum; bestdist = dist; } } @@ -2743,17 +2744,17 @@ void PF_getsurfacenearpoint(void) void PF_getsurfaceclippedpoint(void) { edict_t *ed; - msurface_t *surf; + msurface_t *surface; vec3_t p, out; VectorClear(G_VECTOR(OFS_RETURN)); ed = G_EDICT(OFS_PARM0); if (!ed || ed->e->free) return; - if (!(surf = getsurface(ed, G_FLOAT(OFS_PARM1)))) + if (!(surface = getsurface(ed, G_FLOAT(OFS_PARM1)))) return; // FIXME: implement rotation/scaling VectorSubtract(G_VECTOR(OFS_PARM2), ed->v->origin, p); - clippointtosurface(surf, p, out); + clippointtosurface(surface, p, out); // FIXME: implement rotation/scaling VectorAdd(out, ed->v->origin, G_VECTOR(OFS_RETURN)); } @@ -2876,7 +2877,11 @@ void PF_fgets(void) string[end] = 0; // remove \n following \r if (c == '\r') + { c = FS_Getc(pr_files[filenum]); + if (c != '\n') + FS_UnGetc(pr_files[filenum], (unsigned char)c); + } if (developer.integer) Con_Printf("fgets: %s\n", string); if (c >= 0 || end) @@ -3166,7 +3171,7 @@ int SV_GetTagMatrix (matrix4x4_t *out, edict_t *ent, int tagindex) else Matrix4x4_CreateIdentity(&tagmatrix); - if ((val = GETEDICTFIELDVALUE(ent, eval_tag_entity)) && val->edict) + if ((val = GETEDICTFIELDVALUE(ent, eval_tag_entity)) && val->edict) { // DP_GFX_QUAKE3MODELTAGS, scan all chain and stop on unattached entity attachloop = 0; do @@ -3194,14 +3199,14 @@ int SV_GetTagMatrix (matrix4x4_t *out, edict_t *ent, int tagindex) Matrix4x4_Concat(out, &entitymatrix, &tagmatrix); out->m[0][3] = entitymatrix.m[0][3] + val->_float*(entitymatrix.m[0][0]*tagmatrix.m[0][3] + entitymatrix.m[0][1]*tagmatrix.m[1][3] + entitymatrix.m[0][2]*tagmatrix.m[2][3]); out->m[1][3] = entitymatrix.m[1][3] + val->_float*(entitymatrix.m[1][0]*tagmatrix.m[0][3] + entitymatrix.m[1][1]*tagmatrix.m[1][3] + entitymatrix.m[1][2]*tagmatrix.m[2][3]); - out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); + out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); Matrix4x4_Copy(&tagmatrix, out); // finally transformate by matrix of tag on parent entity Matrix4x4_Concat(out, &attachmatrix, &tagmatrix); out->m[0][3] = attachmatrix.m[0][3] + attachmatrix.m[0][0]*tagmatrix.m[0][3] + attachmatrix.m[0][1]*tagmatrix.m[1][3] + attachmatrix.m[0][2]*tagmatrix.m[2][3]; out->m[1][3] = attachmatrix.m[1][3] + attachmatrix.m[1][0]*tagmatrix.m[0][3] + attachmatrix.m[1][1]*tagmatrix.m[1][3] + attachmatrix.m[1][2]*tagmatrix.m[2][3]; - out->m[2][3] = attachmatrix.m[2][3] + attachmatrix.m[2][0]*tagmatrix.m[0][3] + attachmatrix.m[2][1]*tagmatrix.m[1][3] + attachmatrix.m[2][2]*tagmatrix.m[2][3]; + out->m[2][3] = attachmatrix.m[2][3] + attachmatrix.m[2][0]*tagmatrix.m[0][3] + attachmatrix.m[2][1]*tagmatrix.m[1][3] + attachmatrix.m[2][2]*tagmatrix.m[2][3]; Matrix4x4_Copy(&tagmatrix, out); ent = attachent; @@ -3221,7 +3226,7 @@ int SV_GetTagMatrix (matrix4x4_t *out, edict_t *ent, int tagindex) Matrix4x4_Concat(out, &entitymatrix, &tagmatrix); out->m[0][3] = entitymatrix.m[0][3] + val->_float*(entitymatrix.m[0][0]*tagmatrix.m[0][3] + entitymatrix.m[0][1]*tagmatrix.m[1][3] + entitymatrix.m[0][2]*tagmatrix.m[2][3]); out->m[1][3] = entitymatrix.m[1][3] + val->_float*(entitymatrix.m[1][0]*tagmatrix.m[0][3] + entitymatrix.m[1][1]*tagmatrix.m[1][3] + entitymatrix.m[1][2]*tagmatrix.m[2][3]); - out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); + out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); if ((val = GETEDICTFIELDVALUE(ent, eval_viewmodelforclient)) && val->edict) {// RENDER_VIEWMODEL magic @@ -3236,7 +3241,7 @@ int SV_GetTagMatrix (matrix4x4_t *out, edict_t *ent, int tagindex) Matrix4x4_Concat(out, &entitymatrix, &tagmatrix); out->m[0][3] = entitymatrix.m[0][3] + val->_float*(entitymatrix.m[0][0]*tagmatrix.m[0][3] + entitymatrix.m[0][1]*tagmatrix.m[1][3] + entitymatrix.m[0][2]*tagmatrix.m[2][3]); out->m[1][3] = entitymatrix.m[1][3] + val->_float*(entitymatrix.m[1][0]*tagmatrix.m[0][3] + entitymatrix.m[1][1]*tagmatrix.m[1][3] + entitymatrix.m[1][2]*tagmatrix.m[2][3]); - out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); + out->m[2][3] = entitymatrix.m[2][3] + val->_float*(entitymatrix.m[2][0]*tagmatrix.m[0][3] + entitymatrix.m[2][1]*tagmatrix.m[1][3] + entitymatrix.m[2][2]*tagmatrix.m[2][3]); /* // Cl_bob, ported from rendering code @@ -3364,7 +3369,7 @@ void PF_search_begin(void) caseinsens = G_FLOAT(OFS_PARM1); quiet = G_FLOAT(OFS_PARM2); - + for(handle = 0; handle < MAX_SEARCHES; handle++) if(!pr_fssearchlist[handle]) break; @@ -3394,7 +3399,7 @@ void PF_search_end(void) int handle; handle = G_FLOAT(OFS_PARM0); - + if(handle < 0 || handle >= MAX_SEARCHES) { Con_Printf("PF_search_end: invalid handle %i\n", handle); @@ -3433,7 +3438,7 @@ void PF_search_getsize(void) Con_Printf("PF_search_getsize: no such handle %i\n", handle); return; } - + G_FLOAT(OFS_RETURN) = pr_fssearchlist[handle]->numfilenames; } @@ -3467,7 +3472,7 @@ void PF_search_getfilename(void) Con_Printf("PF_search_getfilename: invalid filenum %i\n", filenum); return; } - + tmp = PR_GetTempString(); strcpy(tmp, pr_fssearchlist[handle]->filenames[filenum]);