minigen: Add black fragments to common objects on valid road
- Drawn underneath absolutely everything else, because it's the least specific of all the guides minigen can provide
- "Common objects" includes:
- Rings/spheres
- Waypoints
- Item boxes/spots
- Overtime kiosk
- Rings
- Item Capsules
- The above were chosen because they're a good distinctor between sectors that are valid to drive on and sectors that would be valid were there no impassable lines or massive height differences preventing the player from getting there.
Related:
- K_TerrainHasAffect now has a "bad only" check mode.
- If true only report back for strong friction, any offroad, any damage, or stairjank.
This commit is contained in:
parent
1b163a93f9
commit
c9b532ad84
3 changed files with 60 additions and 19 deletions
59
src/am_map.c
59
src/am_map.c
|
|
@ -962,8 +962,8 @@ static ffloor_t *AM_CompareFOFs(size_t i, ffloor_t *rover, ffloor_t *secondaryst
|
|||
terrain2 = K_GetTerrainForFlatNum(*secondaryrover->bottompic);
|
||||
}
|
||||
|
||||
if ((terrain1 && K_TerrainHasAffect(terrain1))
|
||||
|| (terrain2 && K_TerrainHasAffect(terrain2)))
|
||||
if ((terrain1 && K_TerrainHasAffect(terrain1, false))
|
||||
|| (terrain2 && K_TerrainHasAffect(terrain2, false)))
|
||||
continue;
|
||||
|
||||
break;
|
||||
|
|
@ -1106,8 +1106,8 @@ static void AM_drawWalls(UINT8 pass)
|
|||
defercol = CDWALLCOLORS; // possible ceiling offroad boundary
|
||||
}
|
||||
|
||||
if ((terrain1 && K_TerrainHasAffect(terrain1))
|
||||
|| (terrain2 && K_TerrainHasAffect(terrain2)))
|
||||
if ((terrain1 && K_TerrainHasAffect(terrain1, false))
|
||||
|| (terrain2 && K_TerrainHasAffect(terrain2, false)))
|
||||
{
|
||||
if (pass & PASS_INTANGIBLE)
|
||||
AM_drawMline(&l, defercol); // Yep, definitely a functionality boundary
|
||||
|
|
@ -1239,13 +1239,6 @@ static inline void AM_drawPlayers(void)
|
|||
player_t *p;
|
||||
INT32 color = GREENS;
|
||||
|
||||
if (!multiplayer)
|
||||
{
|
||||
AM_drawLineCharacter(player_arrow, NUMPLYRLINES, 16<<FRACBITS, plr->mo->angle, DWHITE, plr->mo->x, plr->mo->y);
|
||||
return;
|
||||
}
|
||||
|
||||
// multiplayer (how??)
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i] || players[i].spectator)
|
||||
|
|
@ -1272,7 +1265,46 @@ static inline void AM_drawThings(UINT8 colors)
|
|||
t = sectors[i].thinglist;
|
||||
while (t)
|
||||
{
|
||||
AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES, 16<<FRACBITS, t->angle, colors, t->x, t->y);
|
||||
if (!t->player)
|
||||
AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES, 16<<FRACBITS, t->angle, colors, t->x, t->y);
|
||||
t = t->snext;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void AM_drawSpecialThingsOnly(UINT8 colors)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < numsectors; i++)
|
||||
{
|
||||
terrain_t *terrain = NULL;
|
||||
mobj_t *t = NULL;
|
||||
|
||||
if (sectors[i].damagetype != 0
|
||||
|| sectors[i].friction < ORIG_FRICTION
|
||||
|| sectors[i].offroad != 0)
|
||||
continue;
|
||||
|
||||
terrain = K_GetTerrainForFlatNum(sectors[i].floorpic);
|
||||
if (!terrain)
|
||||
terrain = K_GetTerrainForFlatNum(sectors[i].ceilingpic);
|
||||
|
||||
if (terrain && K_TerrainHasAffect(terrain, true))
|
||||
continue;
|
||||
|
||||
t = sectors[i].thinglist;
|
||||
while (t)
|
||||
{
|
||||
if (t->type == MT_RANDOMITEM
|
||||
|| t->type == MT_PAPERITEMSPOT
|
||||
|| t->type == MT_OVERTIME_CENTER
|
||||
|| t->type == MT_RING
|
||||
|| t->type == MT_BLUESPHERE
|
||||
|| t->type == MT_WAYPOINT
|
||||
|| t->type == MT_ITEMCAPSULE
|
||||
|| t->flags & MF_SPRING)
|
||||
AM_drawLineCharacter(thintriangle_guy, NUMTHINTRIANGLEGUYLINES, 16<<FRACBITS, t->angle, colors, t->x, t->y);
|
||||
t = t->snext;
|
||||
}
|
||||
}
|
||||
|
|
@ -1320,8 +1352,8 @@ void AM_Drawer(void)
|
|||
AM_clearFB(BACKGROUND);
|
||||
if (draw_grid) AM_drawGrid(GRIDCOLORS);
|
||||
AM_drawWalls(PASS_FOF|PASS_INTANGIBLE|PASS_SOLID);
|
||||
AM_drawPlayers();
|
||||
AM_drawThings(THINGCOLORS);
|
||||
AM_drawPlayers();
|
||||
|
||||
if (!followplayer) AM_drawCrosshair(XHAIRCOLORS);
|
||||
}
|
||||
|
|
@ -1377,6 +1409,7 @@ minigen_t *AM_MinimapGenerate(INT32 mul)
|
|||
|
||||
//AM_clearFB(BACKGROUND);
|
||||
memset(am_buf, 0xff, (f_w*f_h));
|
||||
AM_drawSpecialThingsOnly(BACKGROUND);
|
||||
AM_drawWalls(PASS_FOF);
|
||||
AM_drawWalls(PASS_INTANGIBLE);
|
||||
AM_drawWalls(PASS_SOLID);
|
||||
|
|
|
|||
|
|
@ -1635,12 +1635,19 @@ static void K_TerrainDefaults(terrain_t *terrain)
|
|||
See header file for description.
|
||||
--------------------------------------------------*/
|
||||
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain)
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly)
|
||||
{
|
||||
return (terrain->friction != 0
|
||||
if (terrain->friction > 0
|
||||
|| terrain->offroad != 0
|
||||
|| terrain->damageType != -1
|
||||
// || terrain->trickPanel != 0
|
||||
|| (terrain->flags & TRF_STAIRJANK))
|
||||
return true;
|
||||
|
||||
if (badonly)
|
||||
return false;
|
||||
|
||||
return (terrain->friction != 0
|
||||
//|| terrain->trickPanel != 0
|
||||
|| terrain->speedPad != 0
|
||||
|| terrain->springStrength != 0
|
||||
|| terrain->flags != 0);
|
||||
|
|
|
|||
|
|
@ -595,18 +595,19 @@ boolean K_InitTerrainPwad(UINT16 wadNum);
|
|||
void K_InitTerrain(void);
|
||||
|
||||
/*--------------------------------------------------
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain)
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly)
|
||||
|
||||
Checks if Terrain block has a gameplay-affecting property.
|
||||
|
||||
Input Arguments:-
|
||||
terrain - Terrain structure to default.
|
||||
terrain - Terrain structure to compare with default.
|
||||
badonly - Only checks for negative properties if true
|
||||
|
||||
Return:-
|
||||
false if functionally default, otherwise true.
|
||||
--------------------------------------------------*/
|
||||
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain);
|
||||
boolean K_TerrainHasAffect(terrain_t *terrain, boolean badonly);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
|||
Loading…
Reference in a new issue