37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
-
+
-
+
-
-
-
-
-
+
+
+
+
+
|
{
static int modelnum = 0;
MD2 *m = mdllookup[name];
if (m != nil)
return m;
m = [[MD2 alloc] init];
m = [MD2 md2];
m.mdlnum = modelnum++;
m.mmi = [[MapModelInfo alloc] initWithRad:2 h:2 zoff:0 snap:0 name:@""];
m.mmi = [MapModelInfo infoWithRad:2 h:2 zoff:0 snap:0 name:@""];
m.loadname = name;
if (mdllookup == nil)
mdllookup = [[OFMutableDictionary alloc] init];
mdllookup[name] = m;
return m;
}
void
mapmodel(
OFString *rad, OFString *h, OFString *zoff, OFString *snap, OFString *name)
{
MD2 *m = loadmodel([name stringByReplacingOccurrencesOfString:@"\\"
withString:@"/"]);
m.mmi = [[MapModelInfo alloc] initWithRad:rad.cube_intValue
h:h.cube_intValue
zoff:zoff.cube_intValue
snap:snap.cube_intValue
name:m.loadname];
m.mmi = [MapModelInfo infoWithRad:rad.cube_intValue
h:h.cube_intValue
zoff:zoff.cube_intValue
snap:snap.cube_intValue
name:m.loadname];
if (mapmodels == nil)
mapmodels = [[OFMutableArray alloc] init];
[mapmodels addObject:m];
}
COMMAND(mapmodel, ARG_5STR)
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
-
-
+
+
-
+
+
-
-
+
+
-
+
-
-
|
MapModelInfo *
getmminfo(int i)
{
return i < mapmodels.count ? mapmodels[i].mmi : nil;
}
void
rendermodel(OFString *mdl, int frame, int range, int tex, float rad, float x,
float y, float z, float yaw, float pitch, bool teammate, float scale,
rendermodel(OFString *mdl, int frame, int range, int tex, float rad,
OFVector3D position, float yaw, float pitch, bool teammate, float scale,
float speed, int snap, int basetime)
{
MD2 *m = loadmodel(mdl);
if (isoccluded(player1.o.x, player1.o.y, x - rad, z - rad, rad * 2))
if (isoccluded(player1.o.x, player1.o.y, position.x - rad,
position.z - rad, rad * 2))
return;
delayedload(m);
int xs, ys;
glBindTexture(GL_TEXTURE_2D,
tex ? lookuptexture(tex, &xs, &ys) : FIRSTMDL + m.mdlnum);
int ix = (int)x;
int iy = (int)z;
int ix = (int)position.x;
int iy = (int)position.z;
OFVector3D light = OFMakeVector3D(1, 1, 1);
if (!OUTBORD(ix, iy)) {
sqr *s = S(ix, iy);
float ll = 256.0f; // 0.96f;
float of = 0.0f; // 0.1f;
light.x = s->r / ll + of;
light.y = s->g / ll + of;
light.z = s->b / ll + of;
}
if (teammate) {
light.x *= 0.6f;
light.y *= 0.7f;
light.z *= 1.2f;
}
[m renderWithLight:light
frame:frame
range:range
x:x
position:position
y:y
z:z
yaw:yaw
pitch:pitch
scale:scale
speed:speed
snap:snap
basetime:basetime];
}
|