180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
case I_YELLOWARMOUR:
radditem(n, d->armour);
d->armourtype = A_YELLOW;
break;
case I_QUAD:
radditem(n, d->quadmillis);
conoutf("you got the quad!");
break;
};
};
// these functions are called when the client touches the item
void
additem(int i, int &v, int spawnsec)
{
if (v < itemstats[ents[i].type - I_SHELLS]
.max) // don't pick up if not needed
{
addmsg(1, 3, SV_ITEMPICKUP, i,
m_classicsp ? 100000
: spawnsec); // first ask the server for an ack
ents[i].spawned = false; // even if someone else gets it first
};
};
void
teleport(int n, dynent *d) // also used by monsters
{
int e = -1, tag = ents[n].attr1, beenhere = -1;
for (;;) {
e = findentity(TELEDEST, e + 1);
if (e == beenhere || e < 0) {
conoutf("no teleport destination for tag %d", tag);
return;
};
if (beenhere < 0)
beenhere = e;
if (ents[e].attr2 == tag) {
d->o.x = ents[e].x;
d->o.y = ents[e].y;
|
|
<
<
>
>
<
<
>
>
|
|
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
case I_YELLOWARMOUR:
radditem(n, d->armour);
d->armourtype = A_YELLOW;
break;
case I_QUAD:
radditem(n, d->quadmillis);
conoutf(@"you got the quad!");
break;
}
}
// these functions are called when the client touches the item
void
additem(int i, int &v, int spawnsec)
{
if (v < itemstats[ents[i].type - I_SHELLS]
.max) // don't pick up if not needed
{
addmsg(1, 3, SV_ITEMPICKUP, i,
m_classicsp ? 100000
: spawnsec); // first ask the server for an ack
ents[i].spawned = false; // even if someone else gets it first
}
}
void
teleport(int n, dynent *d) // also used by monsters
{
int e = -1, tag = ents[n].attr1, beenhere = -1;
for (;;) {
e = findentity(TELEDEST, e + 1);
if (e == beenhere || e < 0) {
conoutf(@"no teleport destination for tag %d", tag);
return;
};
if (beenhere < 0)
beenhere = e;
if (ents[e].attr2 == tag) {
d->o.x = ents[e].x;
d->o.y = ents[e].y;
|
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
|
void
checkquad(int time)
{
if (player1->quadmillis && (player1->quadmillis -= time) < 0) {
player1->quadmillis = 0;
playsoundc(S_PUPOUT);
conoutf("quad damage is over");
};
};
void
putitems(uchar *&p) // puts items in network stream and also spawns them locally
{
loopv(ents) if ((ents[i].type >= I_SHELLS && ents[i].type <= I_QUAD) ||
ents[i].type == CARROT)
{
putint(p, i);
ents[i].spawned = true;
};
};
void
resetspawns()
{
loopv(ents) ents[i].spawned = false;
};
void
setspawn(uint i, bool on)
{
if (i < (uint)ents.length())
ents[i].spawned = on;
};
|
|
<
<
>
>
<
<
>
>
|
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
|
void
checkquad(int time)
{
if (player1->quadmillis && (player1->quadmillis -= time) < 0) {
player1->quadmillis = 0;
playsoundc(S_PUPOUT);
conoutf(@"quad damage is over");
}
}
void
putitems(uchar *&p) // puts items in network stream and also spawns them locally
{
loopv(ents) if ((ents[i].type >= I_SHELLS && ents[i].type <= I_QUAD) ||
ents[i].type == CARROT)
{
putint(p, i);
ents[i].spawned = true;
}
}
void
resetspawns()
{
loopv(ents) ents[i].spawned = false;
};
void
setspawn(uint i, bool on)
{
if (i < (uint)ents.length())
ents[i].spawned = on;
};
|