Commit graph

213 commits

Author SHA1 Message Date
Sal
3958c15dfe New Credits 2024-01-28 23:31:30 +00:00
James R
db4e2e692b Add LobbySize option to level headers, controls whether the map appears in vote, based on player count
- Prevents a map from appearing on the vote screen if
  there are too many players
- LobbySize
  - Duel - 2 players max
  - Small - 5 players max
  - Medium - 10 players max
  - Large - 16 players max (default if not set)
- Future proofing
  - Doesn't count bot players in gametypes that don't
    support bots
2024-01-13 22:56:17 -08:00
Oni
df5c866573 Merge branch 'map-access-flingerdinger' into 'master'
Stronger Course progression restriction

Closes #832, #859, and #839

See merge request KartKrew/Kart!1795
2024-01-09 08:11:12 +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
Eidolon
7521e42e62 Add automedal time configs and calculation 2024-01-03 12:24:33 -06:00
toaster
80e519e442 mapheader_t destroyforchallenge: Actually read supplied mobjtypes past the first one
Fixes Joypolis chairs not being counted
2023-12-27 15:28:34 +00:00
toaster
d3af5db874 readcondition: Fix AllChaos/AllSuper/AllEmeralds difficulty restriction 2023-12-23 21:38:23 +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
toaster
436ba88220 readskincolor: sizeof is compile-time evaluated, literally why do we need to run the allocator for this 2023-12-16 22:00:58 +00:00
Eidolon
88ee385ee3 Enforce C11 standard compliance, -Werror=vla 2023-12-14 21:53:18 -06: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
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
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
e060e9dadc More consistent handling of special event round icons
- Gametypes have "GPpic" and "GPpicMini" parameters
- These are shown in contexts where a Round Number would be shown in GP, but an eventmode is under way.
- Instead of having different rules to show up on the pause menu, titlecard, and tally/intermission...
    - Pause Menu Roundqueue, Tally, and Intermission have all been aligned to the same rules.
    - As long as the titlecard is standard, it will show the GP Pic per those rules. (GTR_SPECIALSTART and GTR_BOSS still have their unique behaviour here)
2023-10-25 20:34:40 +01:00
toaster
e98a24363d IsDifficulty: Fix setting Hard/Master 2023-10-21 11:27:31 +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
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
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
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
0478d9a2e3 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into break-through-them-all 2023-10-19 17:32:35 +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
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
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
acad8754c8 Merge branch 'master' of https://git.do.srb2.org/KartKrew/Kart into break-through-them-all 2023-10-17 23:32:08 +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
Sally Coolatta
5d9e813c5e Fixes for titlemaps
- Removed all old dev title screen remainders that were interfering with titlemaps.
- F_VersionDrawer displays on all title screen types
- SA2 intro sound only plays whenever there's am actual title card to show (before it checked for not GS_CEREMONY?)
- Removed redundant customversionstring check in menus (F_VersionDrawer already handles customversionstring)
2023-10-17 17:56:10 -04:00
toaster
35ca8e6191 UCRP_SPEEDOMETER
Provide a percentage between 100 and 999 inclusive.
Reach that speed on the speedometer at any point during the race to achieve the condition.
2023-10-17 22:53:40 +01:00
toaster
9e1aec4298 UCRP_RETURNMARKTOSENDER
"when cursed with Eggmark, blow up the racer responsible"
Just a simple condition. Either it happens or it doesn't.
MT_SPBEXPLOSION now tracks whether it was made by KITEM_EGGMAN or KITEM_SPB, too!
2023-10-17 22:25:47 +01:00
toaster
3e494a342c UCRP_GACHABOMMISER
Break a target (Prison Egg/UFO) using exactly one Gachabom again and again
Becomes invalid if an Insta-Whip collides with a target, or you throw two at the same time
2023-10-17 21:09:22 +01:00
toaster
01b97cb829 Update UCRP_UFOATTACKMETHOD into UCRP_TARGETATTACKMETHOD
Supports Prison Eggs and Gachabom now as well.
For the original behaviour, combine with the new UCRP_SMASHUFO.
2023-10-17 21:03:20 +01:00
Oni
005d05ac15 Merge branch 'threaded-software' into 'master'
Threaded software

See merge request KartKrew/Kart!1553
2023-10-17 09:28:59 +00:00
toaster
d11fe78e90 UCRP_UFOATTACKMETHOD
`Condition1 = UfoAttackMethod [type]`
    - "smash a UFO Catcher using only [type]"
        - Combine with `Prefix_SealedStar` or `Prefix_IsMap [special stage stage]`
        - Shows up as "???"
    - Types supported:
        - `Boost` - "boost power" (sneakers)
        - `Whip` - "Insta-Whip"
        - `Banana` - "Bananas"
        - `Orbinaut`- "Orbinauts"
        - `Jawz` - "Jawz"
        - `SPB` - "Self Propelled Bombs"
    - Other types could be added on request, these were just the easy ones

In addition, the prototype for P_MobjWasRemoved was moved to `p_mobj.h`.
It's EXTREMELY important that we're able to safely check mobj pointers anywhere a mobj_t is possible to observe, without including the full `p_local.h`...
2023-10-17 01:07:03 +01:00
toaster
d4e3d8433d UCRP_TRACKHAZARD
A series of 100 booleans on the roundconditions struct, one per possible lap.
Allows for a full suite of track hazard touching conditions - see the following examples.

- `Condition1 = Prefix_IsMap RR_MOTOBUGMOTORWAY
- `Condition1 = TrackHazard No`
- `Condition1 = IsMap RR_MOTOBUGMOTORWAY`
    - "MOTOBUG MOTORWAY: Don't touch any track hazard"
- `Condition1 = Prefix_GrandPrix`
- `Condition1 = IsMap RR_HARDBOILEDSTADIUM`
- `Condition1 = TrackHazard Yes`
- `Condition1 = And`
- `Condition1 = FinishPlace 1`
    - "GRAND PRIX: On HARD-BOILED STADIUM, touch a track hazard every lap & finish in 1st"
- `Condition1 = Prefix IsMap RR_DEATHEGG`
- `Condition1 = Trackhazard No 8`
    - "DEATH EGG ZONE: Don't touch any track hazard on lap 8"
- `Condition1 = Prefix_IsMap RR_SPEEDHIGHWAY
- `Condition1 = TrackHazard No Final`
    - "SPEED HIGHWAY: Don't touch any track hazard on the final lap"
2023-10-16 17:09:12 +01:00
toaster
6b2e0a508d UCRP_RINGS, UCRP_RINGSEXACT
`Rings 10` - "with at least 10 Rings"
`RingsExact -14` - "with exactly -14 Rings"
(`Rings 20` will also be parsed as "with exactly -20 Rings")
2023-10-15 00:17:20 +01:00
toaster
b2aac22856 UCRP_FINISHPERFECT
Complete a perfect round (1st every lap) to get this
2023-10-14 23:21:51 +01:00
Eidolon
2d614781eb i_system.c -> cpp, disable mumble 2023-10-14 15:26:52 -05:00
toaster
52674c7bb2 UC_UNLOCKPERCENT
- `UnlockPercent 40 AltMusic` - "Get 40% of alternate music"
- `UnlockPercent 1 Color` - "Get 1% of Spray Cans"
- `UnlockPercent 20 Map` - "Get 20% of Courses"
- `UnlockPercent 55 Cup` - "Get 55% of Cups"
- `UnlockPercent 100` - "Get 100% completion"
    - Provide a percentage and, optionally, an Unlockable type
    - This only works for Unlockable Types where there are expected to be more than one per board
2023-10-14 18:42:27 +01:00
toaster
1c4750a0a2 readcondition: Support non-fragmented parameters that can be used for the Challenge Description directly
- "DescriptionOverride" (new!)
    - Provide a full description in place of the params and this will be used
    - Any conditions that are before it will not be wiped, so you can prefix it if you need to
    - Can be used with any other set of Conditions
        - `Condition1 = DescriptionOverride Complete the sentence: "ring racers (???)"`
- "Password"
    - Now supports passwords that contain spaces
        - `Condition1 = Password race as a ring!`
- "WetPlayer"
    - Now supports liquids that contain spaces
    - HOWEVER, it comes with the following caveats as part of the change:
        - The strictness level must be provided first.
        - You can't leave the strictness out. The previous default behaviour now requires STANDARD to be explicitly written.
        - `Condition1 = WetPlayer Standard Mega Mack` can be used, now.
2023-10-13 16:25:05 +01:00
AJ Martinez
680c063e3a "DARKNESS" mapheader option for Shrink lighting 2023-10-12 21:07:04 -07:00
toaster
f8de2cfc83 UC_PRISONEGGCD
Gamedata minor version was updated again.
(God this was a weirdly big amount of work and it's not even polished.)
- Condition1 = PrisonEggCD [Level that has to be unlocked]
- Approximately every 30 Prison Eggs destroyed, you get a shot at a Prison Egg Drop.
    - The only Prison Egg Drop implemented right now is an Alt Music CD.
    - Your [Wild Prize] is guaranteed to be selected only from conditions associated with levels that are unlocked!
- Only spawns in Grand Prix Bonus Rounds, for netsync and game design.
- The number is fuzzed. If you start the level with 0 Prison Eggs to destroy, it selects a random number of Prisons in the level to bust.
- If you miss the pickup (such as into a deathpit), you'll get another shot in the immediate next Bonus Round you play.

Also:
- The number of Chao Keys you start your gamedata with is now part of the header file, not buried in the wiping function.
- Removed the ACTUAL last object definition vestiges of the Emerald Hunt gamemode.
2023-10-12 21:12:08 +01:00
toaster
d784f6ad4a SECRET_ALTMUSIC
Restricts a map's alt music, in order of music definition.
Supports out-of-order discoveries!
2023-10-08 21:22:58 +01:00
toaster
ce3b6e304b Add UC_MAPMYSTICMELODY
If you activate an Ancient Shrine on that level, the condition triggers and the Challenge is achieved.
2023-10-06 22:32:43 +01:00
toaster
fe62e76a39 readfollower: Default horn to sfx_horn00 if an invalid enum is provided 2023-10-06 22:19:02 +01:00