- Add Obj_SetEmeraldAwardee
- Separate object receiving emerald from object being
orbited
- Obj_BeginEmeraldOrbit sets both, if the awardee isn't
explicitly set
- Don't HUD track emeralds without emerald flag set
This commit handles everything except actually respawning
the player at a checkpoint.
- Checkpoints are formed by two checkpoint things (2030):
- thingarg0 - The ID for the checkpoint. Must be the
same for these two things, and these two
things only. ID cannot be 0.
- angle - The direction the player is intended to face
after respawning. Must be the same for both
things.
- Each checkpoint thing is a starpost with a stick and an
orb at the end.
- By default, the sticks are lowered to horizontal and
face toward the opposite starpost.
- Rainbow tether sparkles form a field between the two
starposts.
- When a player crosses between these two starposts, each
spins in the direction that the player crossed. The
sparkles also fly out in that direction.
- Over time the sticks pivot upward.
- When the starposts are done spinning, the sticks will be
pointing straight upward.
- Orb at the end of the stick begins flashing when the
starpost is done spinnning.
- Players may cross multiple checkpoints.
- When this happens, any previously activated checkpoint
will have its stick lowered back to horizontal, and its
orb will stop flashing.
- Battle: plays once the orbiting collection animation
finishes and the player's emerald flags are updated
- Centered on the player
- Sealed Star: plays as soon as the orbiting animation
begins
- Centered on the emerald
- Battle emeralds orbit into the player's body upon
collection
- Emerald shrinks down to a speck
- Orbiting speed increases over time
- Player's emerald flags altered at the end of the
animation
Side effects:
- HUD tracking icon now uses emerald's color in Sealed
Stars.
- UFO emerald doesn't disappear when collected. This is
WIP because the emerald is intended to orbit the player.
- Add K_BattleOvertimeKiller
- Kills an object if it is outside of the Overtime
Barrier in Battle
- Add Obj_SpawnEmeraldSparks
- Use this function for MT_EMERALD, MT_MONITOR and
MT_SPECIAL_UFO
- Move thinking code for MT_EMERALD and MT_MONITOR to
objects/monitor.c and objects/emerald.c
Since it's already ticking for the sake of a fuse, make it handle its own movement/scaling as well.
Spawning is still handled by the player thinker (and can be blocked by hitlag), but this permits it to disappear when a player dies/disconnects the server.
- Spawned from underneath the UFO and is thrusted downwards
- Is spawned as splats instead of papersprites
- Colorized to sapphire
- Despawns on any ground contact
- MT_BATTLEUFO_SPAWNER args[0] is the ID
- Spawn a random UFO from the list spawner at the start of
Battle
- UFO spawns 200 units above the spawner
- After destroyig a UFO, wait 25 seconds before spawning
the next UFO (next ID in the list)
- Spawns on player when they use their first power-up
- Lasts as long as player has any power-up
- A hexagon of animated, additive, fullbright papersprites
surround and move with the player, takes player's angle
Thinkers and most collision.
- 4 Super Flickys deploy from above the owner player, in
a radius.
- Radius shrinks as Flickys descend.
- Flickys orbit their owner until coming within range of
another player.
- The entire group of Flickys attack another player at
once, with some delay between each.
- Flickys accelerate toward their target, constantly
building speed.
- When a Flicky is both within a short radius of its
target and the angle of momentum is narrowed toward the
target, the Flicky will sharply accelerate to impale the
target.
- When a Flicky is both outside of a long radius of its
target and the angle of momentum is facing away from the
target, the Flicky's momentum will be drastically cut in
order to make it easier for the Flicky to turn around.
- After one of the Flickys in the group hits its target,
all but one of the group is free to hunt a different
target.
- A new target is chosen from a radius around the current
target.
- Flickys can only target players who are not respawning
and who have not already been attacked by another
Flicky.
- Super Flickys can be blocked by a Guard. The Super
Flicky shall have all its momentum reflected (strong
knockback).
- Super Flickys can be insta-whipped. This shall have the
same effect as a Guard, with the additional effect of
knocking the 'Super' out of the Super Flicky.
- Non-Super Flickys are knocked back with gravity. After
bouncing off the ground once, it regains flight and will
continue to chase its target. However, it cannot damage
the target. After 5 seconds, the Flicky regains Super
state.
- The Flicky power-up is on a timer. After the timer
expires, Flickys lose Super state and ascend back into
the air (reverse of their initial descent).
- If the Super Flicky is not orbiting its target when it
ascends, it retains all horizontal momentum during the
ascent, 'flying off into the distance'.
- 3 splats spawn before the instawhip cooldown runs out
- Splats angle steeply outward in a triangle formation
- VFX is animated, animation runs out right when instawhip
cooldown completely runs out
- Gachabom hits an object and is destroyed immediately
(does not bounce off like Orbinauts or Jawz).
- Gachabom explosion spawns in its place.
- (New) Gachabom physically returns to the player who
threw it.
- Since they're not necessarily going to be randomised, make the prefix Obj_Audience instead of Obj_RandomAudience.
- Externalise some properties that we may not want affecting all hypothetical uses.
- Flag auto-application should be done externally, since this won't be general.
- Focusing on player should be controlled by the function call, not an ambiguous flag.
- Replaces Chao audience entirely
- Convenient, because one of the two default follower types used in the audience is Chao
- Can provide one follower, or a list of followers, on the stringarg1 (seperated by spaces/commas) and it'll pick randomly between them
- If not provided, uses the mapheader follower list
- Can provide one skincolor, or a list of skincolors, on the stringarg2 (seperated by spaces/commas) and it'll pick randomly between them
- If not provided, uses the follower's default color
- If the follower's default color is Match/Opposite or the user provides "Random" in stringarg2, pick a random skincolor
- If arg3 is set, floats in the air
- MTF_OBJECTSPECIAL in binary format
- If arg4 is set, faces the closest player
- MTF_AMBUSH in binary format
- Uses some funny mathematical tricks to avoid checking on the same frame as every other audience member at once