Hyudoro: flickering shadows for patrolling and stealing from a player

- Shadow flickers in high contrast colors while patrolling
- Shadow flickers black/white for short time after Hyudoro
  steals from a player
- (Resetting shadow for hovering stack already handled by
  append_hyudoro)
This commit is contained in:
James R. 2023-09-17 20:35:02 -07:00
parent 43ca8a2f4c
commit e0d7d08dde

View file

@ -62,6 +62,7 @@ K_ChangePlayerItem
#define hyudoro_target(o) ((o)->target)
#define hyudoro_stolefrom(o) ((o)->hnext)
#define hyudoro_timer(o) ((o)->movedir)
#define hyudoro_center_max_radius(o) ((o)->threshold)
#define hyudoro_center_master(o) ((o)->target)
@ -522,6 +523,12 @@ hyudoro_patrol_hit_player
hyu->renderflags &= ~(RF_DONTDRAW);
// Reset shadow to default (after alt_shadow)
reset_shadow(hyu);
// This will flicker the shadow
hyudoro_timer(hyu) = 18;
return true;
}
@ -621,6 +628,31 @@ trail_ghosts
P_SetTarget(&ghost->tracer, hyu);
}
static void
alt_shadow (mobj_t *hyu)
{
/* spaced out pulse, fake randomness */
switch (leveltime % (7 + ((leveltime / 8) % 3)))
{
default:
hyu->shadowcolor = 15;
hyu->whiteshadow = false;
break;
case 1:
hyu->shadowcolor = 5;
hyu->whiteshadow = true;
break;
case 2:
hyu->shadowcolor = 181;
hyu->whiteshadow = true;
break;
case 3:
hyu->shadowcolor = 255;
hyu->whiteshadow = true;
break;
}
}
void
Obj_InitHyudoroCenter (mobj_t * center, mobj_t * master)
{
@ -680,11 +712,15 @@ Obj_HyudoroThink (mobj_t *hyu)
project_hyudoro(hyu);
trail_ghosts(hyu, false);
alt_shadow(hyu);
break;
case HYU_RETURN:
move_to_player(hyu);
trail_ghosts(hyu, true);
if (hyudoro_timer(hyu) > 0)
hyu->whiteshadow = !hyu->whiteshadow;
break;
case HYU_HOVER:
@ -695,6 +731,9 @@ Obj_HyudoroThink (mobj_t *hyu)
}
break;
}
if (hyudoro_timer(hyu) > 0)
hyudoro_timer(hyu)--;
}
void