mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-01-05 06:22:51 +00:00
hardcode ring vaccums
This commit is contained in:
parent
ca90d27e30
commit
12b80b392b
5 changed files with 111 additions and 0 deletions
27
src/info.c
27
src/info.c
|
|
@ -30702,6 +30702,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
MF_SOLID, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DLZ_SUCKEDRING,
|
||||
-1, // doomednum
|
||||
S_RING, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
32*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -262,6 +262,11 @@ void Obj_DLZSeasawCollide(mobj_t *mo, mobj_t *mo2);
|
|||
void Obj_DLZHoverSpawn(mobj_t *mo);
|
||||
void Obj_DLZHoverCollide(mobj_t *mo, mobj_t *mo2);
|
||||
|
||||
/* DLZ Ring Vaccum */
|
||||
void Obj_DLZRingVaccumSpawn(mobj_t *mo);
|
||||
void Obj_DLZRingVaccumCollide(mobj_t *mo, mobj_t *mo2);
|
||||
void Obj_DLZSuckedRingThink(mobj_t *mo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ void Obj_DLZHoverSpawn(mobj_t *mo)
|
|||
mo->destscale = mapobjectscale*4;
|
||||
}
|
||||
|
||||
// collision between MT_PLAYER and hover
|
||||
void Obj_DLZHoverCollide(mobj_t *mo, mobj_t *mo2)
|
||||
{
|
||||
player_t *p = mo->player;
|
||||
|
|
@ -66,4 +67,67 @@ void Obj_DLZHoverCollide(mobj_t *mo, mobj_t *mo2)
|
|||
|
||||
p->lasthover = leveltime;
|
||||
}
|
||||
}
|
||||
|
||||
// Ring Vaccum:
|
||||
void Obj_DLZRingVaccumSpawn(mobj_t *mo)
|
||||
{
|
||||
P_SetScale(mo, mapobjectscale*4);
|
||||
mo->destscale = mapobjectscale*4;
|
||||
}
|
||||
|
||||
// collision between MT_FLINGRING and ring vaccum
|
||||
void Obj_DLZRingVaccumCollide(mobj_t *mo, mobj_t *mo2)
|
||||
{
|
||||
mobj_t *fake;
|
||||
|
||||
if (mo->z + mo->height < mo2->z)
|
||||
return;
|
||||
|
||||
if (mo->z > mo2->z + mo2->height)
|
||||
return;
|
||||
|
||||
if (!P_IsObjectOnGround(mo) || mo->momz)
|
||||
return;
|
||||
|
||||
fake = P_SpawnMobj(mo->x, mo->y, mo->z, MT_FLINGRING);
|
||||
P_SetScale(fake, mo->scale);
|
||||
fake->scalespeed = mapobjectscale/64;
|
||||
fake->destscale = 1;
|
||||
|
||||
P_SetTarget(&fake->target, mo2);
|
||||
|
||||
fake->angle = R_PointToAngle2(mo2->x, mo2->y, fake->x, fake->y);
|
||||
fake->movefactor = R_PointToDist2(mo2->x, mo2->y, fake->x, fake->y);
|
||||
|
||||
P_RemoveMobj(mo);
|
||||
}
|
||||
|
||||
void Obj_DLZSuckedRingThink(mobj_t *mo)
|
||||
{
|
||||
mobj_t *t = mo->target;
|
||||
fixed_t x, y;
|
||||
|
||||
// commit die if the target disappears for some fucking reason
|
||||
if (!t || P_MobjWasRemoved(t))
|
||||
{
|
||||
P_RemoveMobj(mo);
|
||||
return;
|
||||
}
|
||||
|
||||
x = t->x + mo->movefactor*FINECOSINE(mo->angle>>ANGLETOFINESHIFT);
|
||||
y = t->y + mo->movefactor*FINESINE(mo->angle>>ANGLETOFINESHIFT);
|
||||
|
||||
P_MoveOrigin(mo, x, y, mo->z);
|
||||
|
||||
if (mo->cusval < 24)
|
||||
mo->cusval++;
|
||||
|
||||
mo->angle += mo->cusval*ANG1;
|
||||
|
||||
if (mo->cusval > 8 && mo->movefactor)
|
||||
mo->movefactor -= 1;
|
||||
|
||||
if (mo->scale < mapobjectscale/12)
|
||||
P_RemoveMobj(mo);
|
||||
}
|
||||
|
|
@ -758,6 +758,14 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
return BMIT_CONTINUE;
|
||||
}
|
||||
|
||||
if (thing->type == MT_DLZ_RINGVACCUM)
|
||||
{
|
||||
if (tm.thing->type == MT_FLINGRING)
|
||||
Obj_DLZRingVaccumCollide(tm.thing, thing);
|
||||
|
||||
return BMIT_CONTINUE;
|
||||
}
|
||||
|
||||
if (tm.thing->type == MT_INSTAWHIP)
|
||||
{
|
||||
if (tm.thing->z > thing->z + thing->height)
|
||||
|
|
|
|||
|
|
@ -9733,6 +9733,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
Obj_DLZSeasawThink(mobj);
|
||||
break;
|
||||
|
||||
case MT_DLZ_SUCKEDRING:
|
||||
Obj_DLZSuckedRingThink(mobj);
|
||||
break;
|
||||
|
||||
default:
|
||||
// check mobj against possible water content, before movement code
|
||||
P_MobjCheckWater(mobj);
|
||||
|
|
@ -11175,6 +11179,9 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
case MT_DLZ_HOVER:
|
||||
Obj_DLZHoverSpawn(mobj);
|
||||
break;
|
||||
case MT_DLZ_RINGVACCUM:
|
||||
Obj_DLZRingVaccumSpawn(mobj);
|
||||
break;
|
||||
case MT_SNEAKERPANEL:
|
||||
Obj_SneakerPanelSpawn(mobj);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue