Commit graph

367 commits

Author SHA1 Message Date
Eidolon
892a6b8620 Merge public master 2025-08-12 16:49:14 -05:00
Eidolon
255570cfca Dynamically allocate skins
This avoids an issue where the skins array takes up a fixed, but large
amount of memory at runtime. On x86_64 linux, that array is roughly 80
megabytes in memory, most of which is unused when the game is unmodded.
Instead, we treat `skins` as a dynamically resizing array, and it is an
array-of-pointers into separate allocated `skin_t`.

This is based on Lactozilla's skin limit MR for SRB2, but I've rewritten
it because RR has diverged quite a bit.

This was verified to check every access of `skins` by using clangd's
find-all-references function. However, I have only tested plain skins,
not Lua addons, so that could afford some extra checking.
2025-08-12 15:33:00 -05:00
Lach
bbe231e994 Add Ancient Gear object type & unlock type 2025-08-10 01:51:34 +10:00
VelocitOni
62e14fb2a3 Change some menu wording
"finish a perfect round" specifies above Gear 1, and Intense GP mentions top half instead of "4th" (because this changes in co-op)
2025-08-03 01:22:35 -04:00
toaster
f8aaa43f73 Reset *all* First Boot specific state in M_ClearSecrets, not M_ClearStats
Guarantees wiping gamedata will send you through goner again, since otherwise why are we wiping gonerlevel
Also fixes restarting Goner's audio
2025-07-24 20:03:47 +01:00
toaster
43fef1a59b Replace the Playground Hack with a specific fix via a case that needed its own function 2025-07-24 19:40:51 +01:00
toaster
295e8dd0ce Add Goner Choice
- Selection between Tails' Way (existing Tutorial) and Eggman's Way (Playground)
    - Semi-passable UI
    - Characterful descriptions
- Add "PlaygroundRoute" condition to Challenges
    - Fires if you select Eggman's Way
- 0 Chao Keys unless you go back to Goner for the outro (which Playground skips)
2025-07-23 19:25:52 +01:00
Antonio Martinez
79e4af5b8e oops I'm a dipshit 2025-05-24 21:34:46 -04:00
Antonio Martinez
1b308d0278 Perfect Round + SIGL Duel support 2025-05-24 21:26:35 -04:00
toaster
ecb4ffeeca Add bonus pickups in conditions you couldn't grab Spray Cans before
- If you've gotten every Spray Can, or you're on a custom course...
- Only one of these spawns per map
- Correctly save and load these
- Statistics menu counts base-game bonuses
- If there are gaps in the list, or new Spray Cans are added later, these base-game bonuses are converted into the new Spray Cans
- New graphics required so far:
    - SBONA0 to SBONP0 - 16-frame prerendered circling sprite animation
    - GOTBON - 8x8 representation of the SBON object
2025-05-20 20:27:06 +01:00
toaster
3f9c0685eb Move cache_spraycan on the mapheader_t struct to recorddata_t
Still in that struct, just in a more appropriate container
2025-05-20 20:18:11 +01:00
Ashnal
144e2be262 More renaming 2025-05-18 14:30:46 -04:00
toaster
beacbca72a M_EmblemMapNum: Free medal string once no longer relevant 2025-02-19 15:46:06 +00:00
toaster
405c6cb3e2 M_GetConditionString, UC_EMBLEM: Prevent Medal ID out-of-bounds 2025-02-19 15:46:06 +00:00
Eidolon
a4d304a1f5 Update copyright years to 2025 2025-02-13 15:32:26 -06:00
AJ Martinez
d32ba6cf64 Vicious difficulty 2024-05-05 13:57:18 -07:00
AJ Martinez
1a8b4dc78f Retheme difficulty modes 2024-05-05 20:56:40 +01:00
toaster
8790e20df7 PodiumCup condition: Don't say "Grade S or better"
No longer in unlocks.pk3, but fixed for future
2024-05-02 23:07:56 +01:00
toaster
2be1a50ae1 Allow Chao Keying large tiles if the only touching locked tiles are Big Challenges
Defuses the 12-long chain scenario in a relatively fair way
2024-05-01 00:03:38 +01:00
toaster
04214c05ec Reduce code duplication in M_UpdateChallengeGridExtraData for adjacency rules 2024-05-01 00:03:26 +01:00
Sally Coolatta
2c5caf582b "TutorialDone" unlockable condition
Replace all instances of `MapBeaten RR_SunbeamParadiseSprings` with `TutorialDone`, for the new early exits to work.
2024-04-25 15:18:47 -04:00
toaster
ff05516901 Don't show Super Emerald related condition text if you haven't unlocked the second row of cups yet 2024-04-15 14:52:16 +01:00
toaster
9d5860d38d Also prevent Fury Bike chao key blastin (resolves #1275)
Fury Bike ID handled by #define now
2024-04-14 23:04:53 +00:00
toaster
c9651f92af Grab a certain prize from a random Prison Egg
Extra word added because the newline situation sucks
2024-04-14 23:38:28 +01:00
toaster
6df31e96f0 M_BuildConditionString: Fix invalid conjunction behaviour
- Nothing except DescriptionOverride will prevent an `- OR ` being inserted
- Question marks for further secret types won't prevent alternate conditions from showing up
2024-04-14 21:33:45 +01:00
toaster
39d701359a The "(Find other secrets to learn about this...)" text only happens if it's at the start of the challenge, otherwise it does "???" as before
Least need to go over and check every challenge description again
2024-04-14 21:16:32 +01:00
toaster
2caa5ff018 Dedicated server -spoilers startup parameter
Servers should get enough free for a healthy launch ecosystem, but not everything.
We'll give the relevant password out after, like, the first week probably? Please be patient, commit-diver
2024-04-12 14:17:33 +01:00
Oni
a7951fc41c Merge branch 'furybike' into 'master'
Fury Bike

See merge request KartKrew/Kart!2273
2024-04-12 03:41:24 +00:00
Oni
283f2188db Merge branch 'clear-data-fixes' into 'master'
Erase Data screen now has responsibilities more properly divided

Closes #1204 and #1155

See merge request KartKrew/Kart!2263
2024-04-12 03:40:14 +00:00
AJ Martinez
cb7a579b16 Fury Bike 2024-04-11 17:43:59 -07:00
toaster
a1ed3f8b23 "Clear GP and Record Data" has handed off some of its respnsibilities
- Map visitation flags (used for level select access) are now cleared by using "Clear Challenges Data" instead
    - Custom courses will still have their data completely wiped here because it's the case most likely to mean "I want to remove everything", and because I don't want to pick through all the possible places to nuke 'em
- Skin stats (and Eidolon's map stats) are now cleared by using "Clear Statistics Data" instead
2024-04-10 20:22:29 +01:00
toaster
0c782767be Add "then" condition string builder type
Better for some sentences
2024-04-10 17:24:45 +01:00
toaster
9383551cc3 Remove quotation marks from UC_UNLOCKABLE condition text 2024-04-10 17:20:45 +01:00
toaster
595c1ff9c8 BONUS ROUND --> GRAND PRIX
Also, slightly clearer phrasing for "Grab a certain prize"
2024-04-09 16:55:57 +01:00
toaster
4794440eea FinishTime, FinishTimeExact, FinishTimeLeft conditions: Guarantee all Prison Eggs are broken before awarding
Fixes how running out of time activated the Death Egg's Eye challenge
Done this way to avoid extensive last minute unlocks.pk3 update
2024-04-08 23:11:12 +01:00
toaster
5b466527e8 Merge branch 'throw-more-dots' into 'master'
Add a bunch more statistics

See merge request KartKrew/Kart!1973
2024-04-06 22:08:30 +00:00
Eidolon
23e4df3c90 Add per-map time stats and TA/SPB time stats 2024-04-06 11:25:31 -05:00
Eidolon
3ebe235154 Add total netgame time stat 2024-04-06 11:25:31 -05:00
Eidolon
0cd5a662ce Add statistic for time looking at statistics 2024-04-06 11:25:31 -05:00
Eidolon
19341b71a3 Add total menu time stat 2024-04-06 11:25:31 -05:00
Eidolon
a0d52ddacd Add per-gametype time stats 2024-04-06 11:25:31 -05:00
toaster
3e8bb45f2a Challenge Condition final hardcoded adjustments
- play 4 Prison Rounds --> clear 4 Prison Rounds
- draft -> tether
2024-04-05 20:27:57 +01:00
toaster
b35a05ad61 M_CountMedals: Don't count Platinums towards the overall counter, they're explicitly 101%
(This func isn't used by Challenges - M_GotEnoughMedals is, and that doesn't care about AUTOMEDAL_PLATINUM)
2024-04-05 00:38:58 +01:00
toaster
b8c67dcc9e Copyright update: Recieved notice of legal name change
(which is formal speak for I got back in contact with an old friend :D )
2024-04-03 20:44:19 +01:00
toaster
d7f4cd2d8f Copyright update for Viv Grannell specifically (the author of this commit) 2024-04-02 17:38:18 +01:00
James R.
96948258d2 Merge branch 'challenge-reskin' into 'master'
Halt skin-switching Challenge cheese (resolves #1231)

Closes #1231

See merge request KartKrew/Kart!2206
2024-04-02 00:39:23 +00:00
toaster
3d5c0182fe M_BuildConditionSetString: Show a more tantalising message for Challenges with forbidden descriptions
"(Find other secrets to learn about this...)" - this replaces "???"
2024-04-01 18:44:15 +01:00
toaster
b818a7d776 Forbid character-based unlocks if you switched your skin in a context where it didn't auto-spectate you (more robust stop for #1231) 2024-04-01 18:03:00 +01:00
AJ Martinez
9d304846d5 Allow UCRP_FINISHGRADE to fire when skipping tally 2024-03-31 15:35:21 -07:00
James R
acbb7eb463 Add password checking system
Co-authored-by: toaster <rollerorbital@gmail.com>
2024-03-28 00:09:11 -07:00