Add mobj_t.gravity
https://codeberg.org/srb2classic/srb2classic/pulls/39
This commit is contained in:
parent
c1b6cdb624
commit
32313adde6
4 changed files with 27 additions and 2 deletions
|
|
@ -83,6 +83,7 @@ enum mobj_e {
|
|||
mobj_tracer,
|
||||
mobj_friction,
|
||||
mobj_movefactor,
|
||||
mobj_gravity,
|
||||
mobj_fuse,
|
||||
mobj_watertop,
|
||||
mobj_waterbottom,
|
||||
|
|
@ -171,6 +172,7 @@ static const char *const mobj_opt[] = {
|
|||
"tracer",
|
||||
"friction",
|
||||
"movefactor",
|
||||
"gravity",
|
||||
"fuse",
|
||||
"watertop",
|
||||
"waterbottom",
|
||||
|
|
@ -479,6 +481,9 @@ static int mobj_get(lua_State *L)
|
|||
case mobj_movefactor:
|
||||
lua_pushfixed(L, mo->movefactor);
|
||||
break;
|
||||
case mobj_gravity:
|
||||
lua_pushfixed(L, mo->gravity);
|
||||
break;
|
||||
case mobj_fuse:
|
||||
lua_pushinteger(L, mo->fuse);
|
||||
break;
|
||||
|
|
@ -955,6 +960,9 @@ static int mobj_set(lua_State *L)
|
|||
case mobj_movefactor:
|
||||
mo->movefactor = luaL_checkfixed(L, 3);
|
||||
break;
|
||||
case mobj_gravity:
|
||||
mo->gravity = luaL_checkfixed(L, 3);
|
||||
break;
|
||||
case mobj_fuse:
|
||||
mo->fuse = luaL_checkinteger(L, 3);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1143,7 +1143,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
if (!gravsector) // If there is no 3D floor gravity, check sector's gravity
|
||||
gravsector = mo->subsector->sector;
|
||||
|
||||
gravityadd = -FixedMul(gravity, P_GetSectorGravityFactor(gravsector));
|
||||
gravityadd = -FixedMul(FixedMul(gravity, mo->gravity), P_GetSectorGravityFactor(gravsector));
|
||||
|
||||
if ((gravsector->flags & MSF_GRAVITYFLIP) && gravityadd > 0)
|
||||
{
|
||||
|
|
@ -10909,6 +10909,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
mobj->friction = ORIG_FRICTION;
|
||||
|
||||
mobj->movefactor = FRACUNIT;
|
||||
mobj->gravity = FRACUNIT;
|
||||
|
||||
// All mobjs are created at 100% scale.
|
||||
mobj->scale = FRACUNIT;
|
||||
|
|
|
|||
|
|
@ -386,6 +386,7 @@ struct mobj_t
|
|||
|
||||
fixed_t friction;
|
||||
fixed_t movefactor;
|
||||
fixed_t gravity;
|
||||
fixed_t lastmomz;
|
||||
|
||||
INT32 fuse; // Does something in P_MobjThinker on reaching 0.
|
||||
|
|
|
|||
|
|
@ -2069,7 +2069,8 @@ typedef enum
|
|||
MD2_ITNEXT = 1<<27,
|
||||
MD2_LASTMOMZ = 1<<28,
|
||||
MD2_TERRAIN = 1<<29,
|
||||
MD2_LIGHTLEVEL = (INT32)(1U<<30),
|
||||
MD2_LIGHTLEVEL = 1<<30,
|
||||
MD2_GRAVITY = (INT32)(1U<<31)
|
||||
} mobj_diff2_t;
|
||||
|
||||
typedef enum
|
||||
|
|
@ -2375,6 +2376,8 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
diff2 |= MD2_LASTMOMZ;
|
||||
if (mobj->terrain != NULL || mobj->terrainOverlay != NULL)
|
||||
diff2 |= MD2_TERRAIN;
|
||||
if (mobj->gravity != FRACUNIT)
|
||||
diff2 |= MD2_GRAVITY;
|
||||
|
||||
if (diff2 != 0)
|
||||
diff |= MD_MORE;
|
||||
|
|
@ -2641,6 +2644,10 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
WRITEUINT32(save->p, K_GetTerrainHeapIndex(mobj->terrain));
|
||||
WRITEUINT32(save->p, SaveMobjnum(mobj->terrainOverlay));
|
||||
}
|
||||
if (diff2 & MD2_GRAVITY)
|
||||
{
|
||||
WRITEFIXED(save->p, mobj->gravity);
|
||||
}
|
||||
|
||||
WRITEUINT32(save->p, mobj->mobjnum);
|
||||
}
|
||||
|
|
@ -3882,6 +3889,14 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
{
|
||||
mobj->terrain = NULL;
|
||||
}
|
||||
if (diff2 & MD2_GRAVITY)
|
||||
{
|
||||
mobj->gravity = READFIXED(save->p);
|
||||
}
|
||||
else
|
||||
{
|
||||
mobj->gravity = FRACUNIT;
|
||||
}
|
||||
|
||||
// Reset some non-synch values
|
||||
mobj->sloperoll = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue