Commit graph

346 commits

Author SHA1 Message Date
toaster
7916a6e1cb UC_UNLOCKPERCENT: Only evaluate when not in-game
- M_MapLocked uses netgame state, so too easy to get Test Run early (resolves #859)
- Major iteration of unlockable structs and related, so may also confer a performance benefit
2024-01-07 14:03:06 +00:00
toaster
83366b6507 More universal Course restriction based on progression
All courses are restricted in Match Race/Time Attack/Online if not visited in GP UNLESS:
- It is the first Race Course of a Cup
- Course has "NoVisitNeeded = True`
    - The Controls Tutorial and Test Run are the only two stages that will need this

The above replaces:
- A lot of restricted courses having to be marked with `FinishNeeded = True`
    - Hidden Palace
    - Sealed Stars 1-14
        - Once Special Mode is unlocked, it will now be possible to practice Sealed Stars before rematching them in GP
- Almost all Tutorial-specific behaviour, since it was heinously hacky

HOWEVER, `FinishNeeded = True` was left in specifically for future releases, and I reserve the right to use it on Adventure Example again before launch.
2024-01-07 13:57:05 +00:00
toaster
e9b7ed8101 Intentfully permit gaps between Emblem IDs
Introduces ET_NONE, to match SECRET_NONE for Challenges
2024-01-05 20:50:54 +00:00
toaster
6feb8370f6 AUTOMEDAL_MAX for range checks
Comments have also been updated to acknowledge the AUTOMEDAL_ constants
2024-01-05 12:03:18 +00:00
Eidolon
7521e42e62 Add automedal time configs and calculation 2024-01-03 12:24:33 -06:00
toaster
a15f6280d7 UCRP_TRACKHAZARD fixes
- describe as "course hazard", not "track hazard", to match updated player-facing lingo
- Add rudimentary handling to allow achievement in Prison Break, Versus
2023-12-27 15:16:03 +00:00
toaster
49e48c267a Use thin font for Challenge descriptions 2023-12-26 17:02:11 +00:00
toaster
b88372c85d PodiumCup challenge description: Correctly use extrainfo1 instead of requirement for Grade 2023-12-24 16:31:03 +00:00
toaster
9fc49acec6 M_PrecacheLevelLocks: Better diagnostic information 2023-12-23 22:59:42 +00:00
toaster
64922460ac Handle Podium unlocks during mapload, not when finishing the ceremony
Solves mid-podium crashes not granting second page material
2023-12-23 22:12:00 +00:00
toaster
a4c91f66ec Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into tutorial-pass 2023-12-17 12:09:06 +00:00
Eidolon
88ee385ee3 Enforce C11 standard compliance, -Werror=vla 2023-12-14 21:53:18 -06:00
SteelT
6eb31a4ced Fix m_cond.c compiler error 2023-12-14 19:12:18 -05:00
toaster
11fcb0b9ae Goner Setup: Cook 3 - Add "Outro"
One last guaranteed visit to the setup, to get a sendoff before the game truly begins.
(The "survey program" joke is now themed softlock prevention.)
2023-12-07 23:36:02 +00:00
toaster
e91115a8fa Goner Setup: Cook 2
- More dialogue
- Restrict access to your choices based on your progress through the Goner Setup.
- Save progress through the setup to gamedata
    - Resets to beginning when Challenges is cleared
- Passwords
    - Only permit the password entry in like the first two seconds
        - Preemptively disarms potentially annoying people in stream chats
    - Make wrongwarp also quit the game on exit instead of returning to the title screen
    - Add GDQ cheats
        - `savetheanimals`
        - `savetheframes`
        - Both do practically the same thing, with slightly modified dialogue.
            - Skips all of the normal dialogue.
            - Performing a social experiment on anyone who might stream this game at a charity event. :)
2023-12-03 22:34:06 +00:00
toaster
fcb696d1ad First pass at the "Game Truly Starting" apparatus
- Unlock Ring Cup to get the real Title Screen, demos and all.
- Allows M_InterruptMenuWithChallenges.
2023-11-27 23:52:14 +00:00
toaster
98b22c0c6e Self-review now that I'm not dead tired
- Fixes for UC_ALLCUPRECORDS
    - Actually use the capped difficulty variable
    - For the "every Cup" case, don't permit modded Cups to affect the result
- M_CheckCupEmeralds (referenced for the above)
    - Also do not permit modded Cups to affect the result
2023-11-22 11:40:10 +00:00
toaster
9989543346 UC_ALLCUPRECORDS
New condition for tracking multiple cups' windata.
`Condition1 = AllCupRecords RR_Egg Bronze`
- All cups up to Egg Cup must be completed at Bronze or better
`Condition1 = AllCupRecords`
- All cups in the game must be completed
`Condition1 = AllCupRecords All Any Master`
- All cups in the game must be completed on Master mode`
2023-11-22 00:34:39 +00:00
toaster
382119b8fb Second row of cups is invisible if none of them are unlocked
- Controlled by M_CupSecondRowLocked
    - Looks for any Cup with associated unlockable that's on the second row
    - Cached on load for both relevant menus - Cupgrid and Challenges
- Custom cups will be stretched out onto more pages
    - Side incentive of unlocking more material: Less annoying interactions with custom material
- Pages with nothing unlocked are completely skipped over

Also moves a bunch of minor things which previously used magic numbers to the CUPMENU_COLUMNS/CUPMENU_ROWS defines, for sanity
2023-11-20 21:09:33 +00:00
toaster
ce085c3f66 failedtutorialchallenge -> enteredtutorialchallenge
Track ENTERING the challenge, instead of when you fail it
Allows for system-level ironclad prevention against multiple tutorial challenge runs on the same gamedata
2023-11-17 16:54:33 +00:00
toaster
e2a3acc99d Track failing the Tutorial Challenge
I do NOT want to touch ACS today, but all the important pieces are now there for this feature
2023-11-16 23:09:41 +00:00
toaster
0762b93ef2 Tutorial skipping challenge - first pass
- Go to a MainCfg-specified map on its guessed gametype
    - `TutorialChallengeMap = RR_ZonedCity`
- Some unique settings
    - K_CanChangeRules() == false
    - If GTR_CIRCUIT, make it Hard Speed
    - If GTR_BUMPERS, die in one hit
    - If GTR_BOTS, make them all difficulty 13 of the default bot skin
    - No Medals or Spray Cans during the Tutorial Challenge
- Complete the stage in 1st place or don't bother at all
- Has the "Give up" menu option available, but no "Try Again"
- Condition for successfully completing the Tutorial Skip
    - `Condition1 = TutorialSkip`

Related bugfixes:
- Correctly wipe skipstats when returning to the Title/menus
- Typing of `ultimatemode` (hey this isn't accessible by anything right now I wonder)
2023-11-16 21:44:52 +00:00
toaster
91f411d52b VC requests for auto-naming AltMusic Challenge
- Replace the track #1/#2 with side B/C
- Add invalid map-set text
2023-10-20 20:39:16 +01:00
toaster
5aa71fb43e PrecacheLevelLocks: Automate naming SECRET_ALTMUSIC
Untested, might need to patch iF Oni runs into bugs
2023-10-20 18:24:07 +01:00
toaster
22bef38562 Self-review: Fix missing space in "reach at least400% on the speedometer" 2023-10-20 16:18:10 +01:00
toaster
82afb5da5a Self-review: Grade S is not an available rank for the Tally 2023-10-20 16:14:58 +01:00
toaster
d1ad45236f Self-review: Guarantee the first character of the Challenge Hint is also uppercase, thanks to a possible prefix being "The Controls Tutorial:" 2023-10-20 15:34:44 +01:00
toaster
94cfda6832 Self-review: TrackHazard
- Fix the highest bit handling
- Cleaner code for specific lap handling
2023-10-20 15:21:22 +01:00
toaster
dc72602b00 UnlockPercent: Add fudge value
If you're hypothetically gating a Character behind 100% of Characters unlocked... that'll never come true!
To that end, allow a fudge value to be specified.
It's added to the unlock count before comparing it against the percentage.
2023-10-20 14:27:19 +01:00
toaster
d122ddf1c7 UC_TOTALTUMBLETIME: Show centiseconds too 2023-10-20 13:31:58 +01:00
toaster
a1f93b4c60 UCRP_FINISHGRADE A
"get grade A or better"
Not for Podium, use PodiumCup instead for that
2023-10-20 13:03:45 +01:00
toaster
48bb2e1b3c Add support for PodiumCup Any 2023-10-20 12:41:07 +01:00
toaster
f68d58fb85 UCRP_PODIUMCUP: Make %s Cup mixed case 2023-10-20 12:36:22 +01:00
toaster
d3b35099fc UCRP_TARGETATTACKMETHOD: Don't care about everseenspecial since this can be used with Prison Break now too 2023-10-19 22:13:36 +01:00
toaster
d8e6e1d1a4 UC_TOTALTUMBLETIME
`Condition1 = TotalTumbleTime 30*TICRATE
"tumble through the air for 30:00"

Also makes all the time-based non-playing Conditions use get_number so TICRATE can be provided
2023-10-19 20:22:17 +01:00
toaster
42233cfb9e UCRP_GROWCONSECUTIVEBEAMS
- Condition1 = GrowConsecutiveBeams 4
- "touch the blue beams from your own Shrink at least 4 times before returning to normal size
2023-10-19 19:44:37 +01:00
toaster
6211c0b222 UCRP_GIANTRACERSHRUNKENORBI
"hit a giant racer with a shrunken Orbinaut"
Does what it says on the tin
2023-10-19 18:43:40 +01:00
toaster
d2d7830afc UCRP_HASFOLLOWER
Self-explanatory.
- `Condition1 = HasFollower Buzz_Bomber`
    - "with Buzz Bomber in tow"
    - Combine with Podium checks or other completion-based challenges.
2023-10-19 18:06:27 +01:00
toaster
de79dfe983 UCRP_MAPDESTROYOBJECTS
You have to destroy all objects of a certain list of types.
UNLIKE OTHER CHALLENGES, this is dependent on a mapheader parameter!!
The author of this commit just didn't want to create too laggy a condition check.
- `Condition1 = MapDestroyObjects RR_ESPRESSOLANE tables & chairs
- Map RR_ESPRESSOLANE
    - DestroyObjectsForChallenges = MT_ESPTABLE,MT_ESPCHAIR
2023-10-19 17:28:55 +01:00
toaster
a6ef8d357c UCRP_DRAFTDURATION
"consistently draft off other racers for [parameter] seconds"
Actually counts leniency tics too, but if the leniency hits 0 it gets reset.
2023-10-18 02:32:46 +01:00
toaster
83acdaa0cf UCRP_HITDRAFTERLOOKBACK
"hit a racer drafting off you while looking back at them"
Self-explanatory set of conditions
Wrote a commented out more compicated check for valid angles between player and target, but lastdraft probably is good enough for these purpses
2023-10-18 02:05:12 +01:00
toaster
a7940684f6 UCRP_WHIPHYUU
Insta-Whip another racer while you yourself are invisible from Hyuudoro, it's shrimple
Also updates the phrasing used for UCRP_TRIPWIREHYUU to match ("afflicted by Hyudoro")
2023-10-18 01:18:34 +01:00
toaster
1c887a7041 UCRP_LANDMINEDUNK: The official parsing is "Land Mine" 2023-10-18 00:45:26 +01:00
toaster
edd3e8bbea UCRP_PODIUMNOCONTINUES
Fires if no continues have been used (as tracked on the Ceremony Ranking screen)
2023-10-18 00:42:59 +01:00
toaster
813ad52b15 Guarantee UCRP_PODIUMxx events only occour ig grandprixinfo.gp is true
Currently podium is GP only, but that won't be forever
2023-10-18 00:42:02 +01:00
toaster
acdb7fd869 UCRP_CHASEDBYSPB
True if the player has PF_RINGLOCK (SPB on the HUD). Probably the cleanest implementation.
Stacks well with "finish in 1st".
2023-10-18 00:10:40 +01:00
toaster
a746c4f33f SPB-related conditions: Make hyphenation consistent 2023-10-18 00:07:30 +01:00
toaster
e9d4cc2f3a UCRP_TRACKHAZARD, UCRP_FAULTED: Use latestlap instead of current lap when determining elegibility 2023-10-17 23:25:26 +01:00
toaster
fa2e54dd13 UCRP_FAULTED
- `Condition1 = Faulted Yes`
    - `FAULT during POSITION`
    - for example, combine with "& finish in 1st"
- `Condition1 = Faulted No`
    - `don't FAULT during POSITION`
2023-10-17 23:21:47 +01:00
toaster
90a65220b2 UCRP_FALLOFF, UCRP_TOUCHOFFROAD, UCRP_TOUCHSNEAKERPANEL, UCRP_RINGDEBT: Only evaluate the "false" case if the player is exiting or has PF_NOCONTEST 2023-10-17 23:20:16 +01:00