corpsehit->flags |= MF_SOLID; check = P_CheckPosition(corpsehit, corpsehit->x, corpsehit->y); if(demo_version >= 331) corpsehit->flags &= ~MF_SOLID; corpsehit->height >>= 2; } else { int height,radius; height = corpsehit->height; // save temporarily radius = corpsehit->radius; // save temporarily corpsehit->height = P_ThingInfoHeight(corpsehit->info); corpsehit->radius = corpsehit->info->radius; corpsehit->flags |= MF_SOLID; check = P_CheckPosition(corpsehit,corpsehit->x,corpsehit->y); corpsehit->height = height; // restore corpsehit->radius = radius; // restore // ^ corpsehit->flags &= ~MF_SOLID; } // | // phares if(!check) return true; // doesn't fit here return false; // got one, so stop checking } // // A_VileChase
AActor::AActor (fixed_t ix, fixed_t iy, fixed_t iz, mobjtype_t itype) : x(0), y(0), z(0), snext(NULL), sprev(NULL), angle(0), sprite(SPR_UNKN), frame(0), pitch(0), roll(0), effects(0), bnext(NULL), bprev(NULL), subsector(NULL), floorz(0), ceilingz(0), radius(0), height(0), momx(0), momy(0), momz(0), validcount(0), type(MT_UNKNOWNTHING), info(NULL), tics(0), state(NULL), flags(0), flags2(0), special1(0), special2(0), health(0), movedir(0), movecount(0), visdir(0), reactiontime(0), threshold(0), player(NULL), lastlook(0), inext(NULL), iprev(NULL), translation(NULL), translucency(0), waterlevel(0), onground(0), touching_sectorlist(NULL), deadtic(0), oldframe(0), rndindex(0), netid(0), tid(0) { state_t *st; // Fly!!! fix it in P_RespawnSpecial if ((unsigned int)itype >= NUMMOBJTYPES) { I_Error ("Tried to spawn actor type %d\n", itype); } self.init(this); info = &mobjinfo[itype]; type = itype; x = ix; y = iy; radius = info->radius; height = P_ThingInfoHeight(info); flags = info->flags; flags2 = info->flags2; health = info->spawnhealth; translucency = info->translucency; rndindex = M_Random(); if (multiplayer && serverside) netid = ServerNetID.ObtainNetID(); if (sv_skill != sk_nightmare) reactiontime = info->reactiontime; if (clientside) lastlook = P_Random() % MAXPLAYERS_VANILLA; else lastlook = P_Random() % MAXPLAYERS; // do not set the state with P_SetMobjState, // because action routines can not be called yet st = &states[info->spawnstate]; state = st; tics = st->tics; sprite = st->sprite; frame = st->frame; touching_sectorlist = NULL; // NULL head of sector list // phares 3/13/98 // set subsector and/or block links LinkToWorld (); if(!subsector) return; floorz = subsector->sector->floorheight; ceilingz = subsector->sector->ceilingheight; if (iz == ONFLOORZ) { z = floorz; } else if (iz == ONCEILINGZ) { z = ceilingz - height; } else if (flags2 & MF2_FLOATBOB) { z = floorz + iz; // artifact z passed in as height } else { z = iz; } }