Commit graph

256 commits

Author SHA1 Message Date
toaster
4344221252 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into seeecret-colors 2023-06-28 12:48:50 +01:00
toaster
5036719280 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into seeecret-colors
# Conflicts:
#	src/k_menudraw.c
2023-06-26 23:25:47 +01:00
toaster
c9817b957a New unlockable type for watching the Credits from start to finish
Also makes gamedata save/load a little more forward compatible longterm by making a UINT32 bitfield for various once-event flags, with increased minor version
2023-06-26 22:32:47 +01:00
toaster
15d744c4e3 M_CheckCupEmeralds: Only count the first instance of each Emerald in the cups
This prevents custom cups from being counted as completing primary Sealed Star progression unless you wipe existing ones.
2023-06-26 13:33:28 +01:00
toaster
060c03f011 Ring Racers-specific Evaluation
- Four evaluation modes.
    - Perfect
        - Currently no visual implementation
    - All others have a cool set of visuals
        - Multi-stage animation of a glowing threat and a Star that's Sealed
        - If they're relevant, show the gems you HAVEN'T grabbed
        - Three modes here
            - No gems
                - For Easy mode, asks you to brave a higher difficulty
            - Chaos Emeralds
                - Not all 7 chaos emeralds? Push your rank harder!
            - Super Emeralds
                - Not all 7 super emeralds? Further challenge awaits!
- `useBlackRock` to make evaluation context less specific for custom material is replaced with `useSeal` option
- M_CheckCupEmeralds(difficulty)
    - Returns the Emeralds you have for that difficulty
    - Obviously returns 0 for Easy
    - Makes the method of checking collected Emeralds for cup contexts significantly easier
2023-06-25 23:49:20 +01:00
toaster
7d4efd6629 M_GetNextAchievedUnlock: Correctly handle reaching the Chao Key limit 2023-06-09 17:34:29 +01:00
toaster
7c91f768d8 Move GDMUSIC_KEYG set to Challenges Menu key addition rather than gamedata, to behave across gameboots 2023-06-09 16:55:00 +01:00
toaster
bf5aa4b5d8 M_GetNextAchievedUnlock: Skip over adding Chao Keys if you've already unlocked everything
I considered restricting it even further to "unlock every minor unlock that can be unlocked by a Chao Key", but decided that if you haven't "completed the game" yet, you should still be periodically reminded of it.
2023-06-09 16:46:58 +01:00
toaster
8efd4788e7 enum gdmusic_t
Replaces existing musicflag system, which only had one flag, with a priority system that overrides menu music in general.
Also adds the CHAO KEY FREE DDL WORKING 2023 goofy music for matchesplayed Chao Key generation.
2023-06-07 23:05:19 +01:00
toaster
e162fffecf UC_PASSWORD
Unlockable type that supports entering (case-insensitive) string
2023-06-07 17:46:21 +01:00
toaster
f106d14d69 M_SanitiseChallengeGrid
Attempts to recover Challenge Grids that aren't quite appropriate for the current suite of unlocks.
- If there's multiple small tiles pointing to the same unlock, turn the later ones empty.
- If there's a small tile that SHOULD present on the grid and an empty spot, put the needed tile in that spot.
- Otherwise, regenerate the entire grid.
This will permit us to change the number of unlockables without forcing people to run with the command line param `-resetchallengegrid` to see 'em.
2023-06-07 17:46:21 +01:00
toaster
4ceeea0bbd M_GetConditionString: On second thoughts, to avoid misleading with ideas of a Battle win, prefix UC_ALLEMERALDS/UC_ALLCHAOS/UC_ALLSUPER with GRAND PRIX: 2023-06-07 17:46:20 +01:00
toaster
7d57be18c3 M_GetConditionString: Since completing a cup at any difficulty now downpopulates, remove all "or better" for GP difficulty related conditions
In addition, disable the "on Normal difficulty", as it's impossible to get Emeralds on Easy
2023-06-07 17:46:20 +01:00
toaster
2ab046fc30 M_GetConditionString: Hide Cup for UCRP_PODIUMCUP if not unlocked 2023-06-07 17:46:20 +01:00
toaster
c0e4e4075b M_PopulateChallengeGrid: Fix memory corruption on fresh gamedata creation 2023-05-31 00:53:57 +01:00
toaster
0c7d66791b Expand datatype for Unlockables, emblems (Medals + nonmedals), and Conditions.
Made sure there is more than enough headroom for our current purposes.
It should be easy to double again if necessary now that the datatypes have been increased... but that would be obscene at this point
- 1024 Unlockables and 1024 Conditions (these were always tied together in slots)
- 2048 emblems (Medals + nonmedals). If we ship with ~250 maps this permits 8 Medals per map - which is higher than we intend right now but could easily fill out in patches
2023-05-30 21:08:29 +01:00
toaster
1527471678 Character win records
Track wins per character.
- If you have an existing gamedata of minor version 2 or earlier, attempt to import your last-used profile's wins onto the character you last used on that profile, so you're not starting from nothing. It's not quite accurate, but it's something.
- Much like map headers and cups, these are also tracked in an unloaded_skins_t linked list. That work was done in this commit because gamedata is actually loaded before even base-game characters, which is annoying but at least confirmed it was working quicker.
- TEMPORARY: Your per-character wins are displayed in your latest-log.txt, in lieu of an update to the in-game statistics menu
2023-05-30 12:21:41 +01:00
toaster
4682f03f91 On reflection, whether a map is visited should be cleared at the same time as its time attack record data, not seperately. 2023-05-30 12:21:39 +01:00
toaster
4c34d04f8a recorddata_t handling adjustments
Preperatory work for the next feature on my agenda.
- No longer independently allocated.
    - This was a byproduct of the previous NUMMAPS-based implementation. It's just cleaner to have it live directly on the mapheader_t, no caveats about it.
- Now contains mapvisited bitflag array.
    - Now all to-gamedata properties on a mapheader's struct are grouped together.
        - I was of two minds about it, but decided that this would have cleaner guarantees for compartmentalisation, saving, and loading.
        - They can still be wiped independently (G_ClearRecords for time/lap and M_ClearSecrets for mapvisited).
2023-05-30 12:21:39 +01:00
toaster
533508d7b0 Level and cup header information: Hashing for referencing by name
Foundational assistive work.
Also guarantees a consistent cup name length in memory, as some places read/wrote 15 bytes, and some places read/wrote 16 bytes. We settle on the latter (including null terminator) for the broadest backwards compatibility.
2023-05-30 12:21:39 +01:00
Sally Coolatta
c486ec19af SECRET_COLOR 2023-04-25 14:19:52 +01:00
AJ Martinez
3012839138 Serverside PWR: Completely rip out profile PWR, add PWR to XD_ADDPLAYER 2023-04-11 19:38:02 +01:00
toaster
8d66b279f8 FREE PLAY: Correct mistaken assumptions.
- Make the check consistent between HUD and Challenge conditions by revolving both around M_NotFreePlay.
    - The HUD appearance checked every individual component of K_CanChangeRules, so just straight up do that here.
    - If the rules can be changed, battleprisons is always FREE PLAY no matter how many players are present (because it can change quickly).
2023-04-03 00:28:38 +01:00
toaster
a0cdc6b71a FREE PLAY: Make a little more consistent
- Cooperative gametypes do not count as FREE PLAY
- Sealed Stars count as a Cooperative gametype
- Fix Battle Fullscreen having had inverted presence of FREE PLAY since bosses were added
2023-04-03 00:28:36 +01:00
toaster
49f7b75454 UCRP_ISCHARACTER:: Show as "???" if you haven't unlocked the character 2023-03-31 16:09:19 +01:00
toaster
9f1ab11bb1 UCRP_TRIGGER: Since we're not doing the custom condition string, just say the player has to "do something special on [levelname]". 2023-03-31 16:03:52 +01:00
James R
a50f665d68 UC_ROUNDSPLAYED: correct wording to "Prison" 2023-03-18 04:48:51 -07:00
toaster
3e900d7f57 G_DirtyGameData: Dirty bit only applied in I_Error and signal handlers, nowhere else
- Unfortunately, the way this system previously worked, the unlock was given to you for free if you accidentially opened two copies of the game at once.
- Instead, open the file in r+ mode, shimmy along 5 bytes, and write a `true` to be read later.
- Far more memory safe than rewriting the entire gamedata out on crash.

ALSO:
- crashflags has been split into boolean evercrashed and UINT8 musicflags.
    - We don't need to track if the LAST session was a crash, at least not right now.
    - Opens the floor up to other music like Loser Club happening on the Challenges menu.
2023-03-17 14:42:06 +00:00
toaster
3ead0d09c4 Jartha review: Issues with activation and comments of UCRP_WETPLAYER and UCRP_FALLOFF 2023-03-17 13:00:17 +00:00
toaster
e5f88dd2c6 UC_ADDON: On second thoughts, don't have seperate conditions for DEVELOP and non-DEVELOP
Any difference in behaviour between these is a possible avenue for bugs which take some time to be discovered
2023-03-16 23:27:21 +00:00
toaster
7b917930d4 M_BuildConditionSetString: Fix capitalisation rules to prevent "NO CONTEST On GREEN HILLS"
(The desired version of the string is "NO CONTEST on GREEN HILLS".)
Instead, searches for the first ':'.
- If found, goes to the first non-whitespace character afterwards and toupper's it.
- If not, goes to the first non-whitespace character at all and toupper's it.
2023-03-16 14:05:54 +00:00
toaster
412107c140 Adjust string for UCRP_FINISHTIMEEXACT to match the same number of visible digits by using X as a wildcard millisecond 2023-03-16 13:04:14 +00:00
toaster
680416946a UCRP_FINISHTIMEEXACT: Round to the nearest second 2023-03-16 13:01:26 +00:00
toaster
e943ba7548 Challenge condition string: Grey out if you've unlocked the space with a Chao Key and haven't achieved its associated condition yet
You can still achieve it and make it full-bright at a later date
2023-03-15 14:51:13 +00:00
toaster
7f3836f916 Chao Key changes
- Chao Keys are now UINT16 instead of UINT8
- The maximum number of Chao Keys is now 9999, which is the largest number of 9s that can fit in a UINT16
- Used keys no longer count towards your total
Will mildly corrupt gamedatas made with previous conditions-cascading builds, but only in a way that gives you extra keys than you've earned.
2023-03-15 14:49:22 +00:00
toaster
bb98db6fce Ring count formatting: Correct to always have leading 0s for up to 3 digits 2023-03-15 13:14:12 +00:00
toaster
2d7ef00e29 Discoveries while self-reviewing during description creation
- Rename "FinishAllPrisons" and correct text to refer to Prisons
- Do not hint at greater speeds for UCRP_ISDIFFICULTY
2023-03-14 20:59:51 +00:00
toaster
107acf34d3 Fix some softlock circumstances caused by the Chao Key system
- Nonzero keys pending, but zero pending rounds
- Nonzero keys pending, but too many keys already earned
2023-03-14 12:28:52 +00:00
toaster
60fee59c54 Adjust Test Run's exceptions for lock checks
- Revert the blanket exception so Lost and Found won't always have it available
- Won't be considered cheating to go to Test Run on game boot even if not unlocked
- Made the lack of exception for Test Run in Command_Map_f's cheat check more intentional
2023-03-13 17:28:55 +00:00
toaster
425f260914 Never consider TEST RUN locked
- Repairs access to TEST RUN cup
- We want to make it an unlockable later, so...
- M_MapLocked data types corrected
2023-03-12 20:41:00 +00:00
toaster
241475155b Rename "Break the Capsules" to "Prison Break"
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
2023-03-12 20:17:46 +00:00
toaster
84e807cfa0 UCRP_ISENGINECLASS
Checks for the player's character's engine class
As before, A-I and J are valid classes
2023-03-12 15:55:14 +00:00
toaster
01f6eb71f5 Optimisation: reduce the number of calls to M_CheckUnlockConditions
- 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
2023-03-12 13:52:28 +00:00
toaster
5a9281ecfb Three new UCRP's
- 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
2023-03-11 23:56:58 +00:00
toaster
4d88923173 UC_ALLCHAOS, UC_ALLSUPER, UC_ALLEMERALDS: Provide a ??? tease for Master difficulty if not unlocked 2023-03-11 21:09:43 +00:00
toaster
6f62abc1ef UCRP_FINISHPLACE: Don't permit messed up position of 0 2023-03-11 21:06:37 +00:00
toaster
f411ca1e85 UC_ALLCHAOS, UC_ALLSUPER, UC_ALLEMERALDS: Move to using KARTSPEED/KARTGP constants directly 2023-03-11 19:42:20 +00:00
toaster
6129d810cc UC_ALLCHAOS, UC_ALLSUPER, and UC_ALLEMERALDS
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
2023-03-10 22:50:08 +00:00
toaster
b3aa2520bc gamedata->everseenspecial
Record whether you've ever successfully entered a special stage
Used for conditions which were previously checking for whether you'd completed a special stage - which I think is a bit too restrictive for someone figuring out what next to lab
2023-03-10 22:43:06 +00:00
toaster
cbebfe5a62 UC_POWERLEVEL: Do not iterate over your profiles in GS_LEVEL 2023-03-10 22:41:03 +00:00