- UFO is always solid.
- Adds a height check if the player is no boosting.
- Stumbles if the player is within a 60 degree cone of the
direction the UFO is moving. (Only applies if not
boosting.)
We had this collective consciousness bigbrain moment in VC together, and it can literally only happen in this branch because unlocks.pk3 is the only main-game asset that needs to change for it
Solves the big problem we had with mixing up Item Capsules and ~~Battle Capsules~~ PRISON EGGS
- SECRET_SKIN:
- Shows the character icon you'd have to pick (Eggman for Eggrobo, etc)
- Shows the Engine Class section of the charsel grid you'd have to pick
- SECRET_FOLLOWER:
- Shows the category icon you'd have to pick (3DB for Whirl, etc)
- SECRET_CUP:
- Shows the position on the cup grid, INCLUDING previous pages
Before unlockable conditions dependent on Engine Class are added, standardise the system.
- enum constant in r_skins.h from A-I + J
- Engine Class J is for SF_IRONMAN
- The Joker in the pack of cards
- Also immediately after I in the alphabet
- It's a Jape that works on multiple levels
- Integrate into K_UpdateEngineSounds
- Ignores Engine Class J
- Show the Engine Class in character select extrainfo mode, even in situations character name would have been the only thing shown
- For P_Ticker()'s calls to M_UpdateUnlockablesAndExtraEmblems
- Do not check non-UCRP_REQUIRESPLAYING conditions
- Controlled by a new `boolean doall` parameter to M_UpdateUnlockablesAndExtraEmblems
- Most other contexts have this as true
- Forced true if update is meant to be silent
- Only check UCRP_REQUIRESPLAYING conditions if a relevant property has been touched
- Controlled by a new `boolean checkthisframe` property on roundcondition_t
- Set in all contexts where roundcondition_t is modified
- Would also be set on lap change, but that case is already covered by the following
- Check all conditions, both UCRP_REQUIRESPLAYING and not, on:
- local player K_HandleLapIncrement
- local player P_DoPlayerExit
- local player P_DoTimeOver
- Controlled by a new `boolean deferredconditioncheck` property on gamedata_t
Fixed in two ways:
- P_LoadExtraVertices is a special construct for extended blockmap types. This is easily resolved with num_orig_vertexes before loading the map.
- Original Doom-style blockmap with ZenNode however also adds additional vertices directly into VERTEXES. These have to simply be ignored by cross-referencing them with linedefs to see if they are used by anything.
Unfortunately this means that K_AdjustWaypointsParameters no longer saves to UDMF converted maps, because it requires sector thinglists, FOFs, and spawned mobjs.
- UCRP_ISDIFFICULTY
- Example: IsDifficulty Hard - "on Hard difficulty"
- Does what it says on the tin
- You can't specify Easy because there is nothing easier than Easy
- Does it based on the GPsetting if in grand prix, or the level setting otherwise
- UCRP_PODIUMCUP
- Example: PodiumCup Ring - "complete RING CUP"
- Example: PodiumCup Barrier Silver - "get Silver or better on BARRIER CUP"
- Example: PodiumCup Goggles S - "get grade S on GOGGLES CUP"
- Basically a monolithic cup completion handler.
- Only happens after rankings begins in Podium ceremony.
- UCRP_PODIUMEMERALD
- Example: PodiumEmerald - "collect the Emerald"
- Get the Emerald to the ceremony and this is yours.
- UCRP_PODIUMPRIZE
- Example: PodiumPrize - "collect the prize"
- LITERALLY identical to PodiumEmerald except the string
- Doing it seperately from PodiumCup means we can't check whether that cup uses an Emerald or another Catcher Prize automagically
This condition blocked items from doing damage after just
being thrown. The intention was to not let shotgun Ballhog
instakill the player. This is now prevented by
MF2_ALREADYHIT instead.
blame cab1af549
Damage can't be ignored entirely while in hitlag because
that defeats stacked hitlag (wombo combo).
But it should be ignored if in an invincible state.
Bubble Shield could collide with the same object up to
5 times per tic! (3 times at least!)
1) P_CheckPosition from MFE_ONGROUND being unset.
2) P_CheckPosition AGAIN from MFE_ONGROUND being unset
while literally being on the ground. This one's
probably a bug in general but it's beyond the scope of
this commit. It's also scary movement code, yiiiikes...
3) P_MoveOrigin to teleport the Bubble to its holder's
position.
4) If something moves into the Bubble.
5) If something moves into the player holding the Bubble.
This generated extra unwated hitlag, especially noticeable
against invincible players.
To reduce these to one collision only, the Bubble is now
MF_NOCLIPTHING except while calling P_MoveOrigin. The
player's own hitbox is also disabled for Bubble
collisions.
- Move condition for whether hitlag came from a constant
damage source into P_DamageMobj directly. Should be more
accurate if a player is dealt brand new damage, the
constant damage still won't count.
- player->invulnhitlag renamed to player->nullHitlag
- Slope thrust is scaled with game speed. Makes Easy more reasonable, and Hard goofier.
- Slope upward/downward thrust multiplier is applied to all objects equally, instead of only players.
Measures whether you have all 7 Chaos Emeralds, 7 Super Emeralds, or 14 Emeralds
- Hidden if you haven't entered a special stage yet
- Checks all cups and all relevant difficulties outside of GS_LEVEL
- You can specify a difficulty of Normal, Hard, or Master