mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Allow $$$.sav to archive and read ffloor_t userdata Lua extvars
Oh, and P_GetFFloorByID is now a thing, to assist with the above. Also added a suitable description for P_GetFFloorBySec
This commit is contained in:
parent
c8a2eaf8a6
commit
3fba690d0a
3 changed files with 68 additions and 0 deletions
|
|
@ -474,6 +474,7 @@ enum
|
||||||
ARCH_SECTOR,
|
ARCH_SECTOR,
|
||||||
ARCH_SEG,
|
ARCH_SEG,
|
||||||
ARCH_NODE,
|
ARCH_NODE,
|
||||||
|
ARCH_FFLOOR,
|
||||||
ARCH_MAPHEADER,
|
ARCH_MAPHEADER,
|
||||||
|
|
||||||
ARCH_TEND=0xFF,
|
ARCH_TEND=0xFF,
|
||||||
|
|
@ -495,6 +496,7 @@ static const struct {
|
||||||
{META_SECTOR, ARCH_SECTOR},
|
{META_SECTOR, ARCH_SECTOR},
|
||||||
{META_SEG, ARCH_SEG},
|
{META_SEG, ARCH_SEG},
|
||||||
{META_NODE, ARCH_NODE},
|
{META_NODE, ARCH_NODE},
|
||||||
|
{META_FFLOOR, ARCH_FFLOOR},
|
||||||
{META_MAPHEADER, ARCH_MAPHEADER},
|
{META_MAPHEADER, ARCH_MAPHEADER},
|
||||||
{NULL, ARCH_NULL}
|
{NULL, ARCH_NULL}
|
||||||
};
|
};
|
||||||
|
|
@ -707,6 +709,32 @@ static UINT8 ArchiveValue(int TABLESINDEX, int myindex)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ARCH_FFLOOR:
|
||||||
|
{
|
||||||
|
ffloor_t *rover = *((ffloor_t **)lua_touserdata(gL, myindex));
|
||||||
|
if (!rover)
|
||||||
|
WRITEUINT8(save_p, ARCH_NULL);
|
||||||
|
else {
|
||||||
|
ffloor_t *r2 = NULL;
|
||||||
|
UINT16 i = 0;
|
||||||
|
// search for id
|
||||||
|
for (r2 = rover->target->ffloors; r2; r2 = r2->next);
|
||||||
|
{
|
||||||
|
if (r2 == rover)
|
||||||
|
break;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (!r2)
|
||||||
|
WRITEUINT8(save_p, ARCH_NULL);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WRITEUINT8(save_p, ARCH_FFLOOR);
|
||||||
|
WRITEUINT16(save_p, rover->target - sectors);
|
||||||
|
WRITEUINT16(save_p, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ARCH_MAPHEADER:
|
case ARCH_MAPHEADER:
|
||||||
{
|
{
|
||||||
mapheader_t *header = *((mapheader_t **)lua_touserdata(gL, myindex));
|
mapheader_t *header = *((mapheader_t **)lua_touserdata(gL, myindex));
|
||||||
|
|
@ -891,6 +919,15 @@ static UINT8 UnArchiveValue(int TABLESINDEX)
|
||||||
case ARCH_NODE:
|
case ARCH_NODE:
|
||||||
LUA_PushUserdata(gL, &nodes[READUINT16(save_p)], META_NODE);
|
LUA_PushUserdata(gL, &nodes[READUINT16(save_p)], META_NODE);
|
||||||
break;
|
break;
|
||||||
|
case ARCH_FFLOOR:
|
||||||
|
{
|
||||||
|
sector_t *sector = §ors[READUINT16(save_p)];
|
||||||
|
UINT16 id = READUINT16(save_p);
|
||||||
|
ffloor_t *rover = P_GetFFloorByID(sector, id);
|
||||||
|
if (rover)
|
||||||
|
LUA_PushUserdata(gL, rover, META_FFLOOR);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ARCH_MAPHEADER:
|
case ARCH_MAPHEADER:
|
||||||
LUA_PushUserdata(gL, §ors[READUINT16(save_p)], META_MAPHEADER);
|
LUA_PushUserdata(gL, §ors[READUINT16(save_p)], META_MAPHEADER);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
29
src/p_spec.c
29
src/p_spec.c
|
|
@ -4708,6 +4708,13 @@ void P_UpdateSpecials(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets a 3Dfloor by control sector.
|
||||||
|
*
|
||||||
|
* \param sec Target sector.
|
||||||
|
* \param sec2 Control sector.
|
||||||
|
* \return Pointer to found 3Dfloor, or NULL.
|
||||||
|
* \sa P_GetFFloorByID
|
||||||
|
*/
|
||||||
static inline ffloor_t *P_GetFFloorBySec(sector_t *sec, sector_t *sec2)
|
static inline ffloor_t *P_GetFFloorBySec(sector_t *sec, sector_t *sec2)
|
||||||
{
|
{
|
||||||
ffloor_t *rover;
|
ffloor_t *rover;
|
||||||
|
|
@ -4720,6 +4727,28 @@ static inline ffloor_t *P_GetFFloorBySec(sector_t *sec, sector_t *sec2)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets a 3Dfloor by ID number.
|
||||||
|
*
|
||||||
|
* \param sec Target sector.
|
||||||
|
* \param id ID of 3Dfloor in target sector. Can be a number from 0 to sec->numattached-1.
|
||||||
|
* \return Pointer to found 3Dfloor, or NULL.
|
||||||
|
* \sa P_GetFFloorBySec
|
||||||
|
*/
|
||||||
|
ffloor_t *P_GetFFloorByID(sector_t *sec, UINT16 id)
|
||||||
|
{
|
||||||
|
ffloor_t *rover;
|
||||||
|
UINT16 i = 0;
|
||||||
|
|
||||||
|
if (!sec->ffloors)
|
||||||
|
return NULL;
|
||||||
|
if (id >= sec->numattached)
|
||||||
|
return NULL; // ID out of range
|
||||||
|
for (rover = sec->ffloors; rover; rover = rover->next)
|
||||||
|
if (i++ == id)
|
||||||
|
return rover;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/** Adds a newly formed 3Dfloor structure to a sector's ffloors list.
|
/** Adds a newly formed 3Dfloor structure to a sector's ffloors list.
|
||||||
*
|
*
|
||||||
* \param sec Target sector.
|
* \param sec Target sector.
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,8 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller
|
||||||
void P_LinedefExecute(INT16 tag, mobj_t *actor, sector_t *caller);
|
void P_LinedefExecute(INT16 tag, mobj_t *actor, sector_t *caller);
|
||||||
void P_ChangeSectorTag(UINT32 sector, INT16 newtag);
|
void P_ChangeSectorTag(UINT32 sector, INT16 newtag);
|
||||||
|
|
||||||
|
ffloor_t *P_GetFFloorByID(sector_t *sec, UINT16 id);
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_LIGHTS
|
// P_LIGHTS
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue