Map things are writeable in Lua, which I am pretty certain is a mistake because mapthings are not sent over the network at all. I considered making them net-synced (it would be relatively easy), but it also aligns with another, more "philosophical" issue: Doom generally copies over properties from mapthing_t into mobj_t, and then only refers to it again when needing to respawn an object -- mapthing_t is not really intended to be referred to very often at runtime. At best it's slightly annoying since some objects rely on a spawnpoint for behavior changes, at worst it may make ACS more confusing in the future since Thing and Mobj tags are mixed together or less useful since they wouldn't be able to modify behaviors of objects that are based on args.
So I decided to solve these two issues at the same time; just treat mapthing_t as something to copy values from, like OG Doom does it. This basically just means that special and args are also part of the mobj now instead of the mapthing, which should fill any desire to edit this stuff from Lua, and reduces the number of instances where objects need to check for their spawnpoint to function properly.
- Add flag application in function signature
- Consistent gating of extra PF_NOCONTEST application behind not already exiting
- This should fix dying after winning in K_Cooperative gametypes breaking things
- P_DoAllPlayersExit
- Consistent condition of playeringame, spectator, exiting, etc checks
- Also could force-give a life (for Battle Prisons)
- Quake epicenter + radius now work.
- Since quake epicenter works, removed the display player check on all of the quakes, so other players can feel them.
- Multiple quake effects are stored in a linked list and dynamically created/freed, so they can stack together.
- Made in china
- Made the quake effects only work on the z axis.
- Quakes now alternate their intensity and dampen it over time, instead of randomly picking values.
- Added quake effects for offroad and stair-jank
- Disabled quakes in reducevfx
- Removed actionmovie and windowquake (sorry jartha)
MAXRADIUS was previously an arbitrary value id Software set as whatever their biggest object would be (which they broke that rule anyway). It is now the radius of a blockmap block, which should be a large enough of a nudge value to handle all cases. (Still don't recommend making objects any bigger than a Spider Mastermind though.)
- If Global-type map emblem has GE_FOLLOWER, attempt to take on the appearance of the follower specified by var2.
- Unlike MT_RANDOMAUDIENCE, this picks whether the object should be floating or hopping based on the specified mode of the source Follower.
- Always chooses to face the nearest player.
- Rearrange some properties affected by Obj_Audience/audience.c to not conflict with MT_EMBLEM
- 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
- Y is now additionally another macro for HOLD!
- Disable HOLD! drop from respawning when done with Ring Shooter.
- Immediate release Ring Shooter now goes back a waypoint, and does not have a minimum distance to go forward anymore.
- Uses P_GetNextEmerald to determine the associated emerald. Earlier work paying dividends!
- Color selected matching Cup Select screen
- New states which can be used in other contexts
- S_SUPEREMERALD1 and S_SUPEREMERALD2
- S_SUPEREMERALD_UNDER
- Uses a lot of existing apparatus, just leveraged to draw horizontally instead of a full map.
- Currently only functional in Sealed Star contexts, due to K_GetCircuitLength having no clean alternative for sprint tracks.
- Tracks Catcher/Emerald.
- K_drawKartProgressionMinimapIcon and K_getKartProgressionMinimapDistance
- Abstracts the progress of converting distance to finish into a position on the bar.
- Sibling function of K_drawKartMinimapIcon
- The author of this commit wanted to make it an alternate outcome of this function, which it shares a lot of similarity with, but doing waypoint traversal in HUD for objects that don't independently track their distance would absolutely tank performance.
- Tidying up in the main function permitted less minimap state to be used in these.
- Handles putting an object into the hyuu's inventory.
- Permits Sink conversion for items which are a little too powerful to give to someone who was JUST in first place.
- For now, the item to convert is an SPB.