Are author medals too easy for you, but Champion medals still seem out of reach? Do you need something in-between?
This is of course inspired by the Champion Medals plugin. Warrior medals are available for every official campaign (including training and the TMO discoveries), Weekly Grands, Weekly Shorts (first year), and every Track of the Day. Warrior medals may also be added for club campaigns by request from the campaign's author/maintainer. Message me on Discord, create a GitHub issue, or message me directly from the plugin to request Warrior medals for your campaign. Check all Warrior medal times on my website!
Medals may be manually adjusted due to physics changes or for being more difficult than they should be. Message me on Discord, create a GitHub issue, or message me directly from the plugin if you feel like a Warrior medal does not make sense in some way. Do not ask for Warrior medals to be harder - grind for the Champion medal instead.
This plugin, like most of mine, is licensed under BSD 2-Clause, which is one of the most lenient. You may also use Warrior medal data in whichever way you like without permission, though if you want to get it directly from my API, please at least discuss it with me first so we can work out a good solution for your needs.
-
2 weeks after the season starts
-
1/4 of the way between author and world record
-
examples:
Map World Record Warrior Author Summer 2024 - 01 22.325 23.524 23.923 Summer 2024 - 25 1:07.943 1:09.746 1:10.347 -
note: starting Winter 2026, medals are instead calculated like so:
- White series: 3/4 of the way between author and world record
- Green: 5/8
- Blue: 1/2
- Red: 3/8
- Black: 1/4 (unchanged)
-
2 days after the map releases (Tuesday 18:00 CET)
-
3/8 of the way between author and world record
-
examples:
Map World Record Warrior Author First Chill (#5) 9:28.571 10:02.392 10:22.684 Green Flow (#6) 9:22.727 10:25.987 11:03.942
-
when leaderboards are revealed (1 week after release)
-
1/2 of the way between author and world record
-
discontinued after week 52
-
examples:
Map World Record Warrior Author First (#1) 16.005 16.819 17.632 Not Cut Proof (#37) 9.244 12.192 15.139
-
2 hours after the track releases (21:00 CET)
-
if someone has author by at least 8ms:
- 1/8 of the way between author and world record
- otherwise 1 ms faster than author
-
does not account for Champion medal times, so it may be equal or faster
-
examples (arbitrarily chosen values):
World Record Warrior Author 44.926 45.584 45.678 40.069 39.999 40.000
- when I have time after someone requests medals for a campaign
- unless decided otherwise, medal will be halfway between author and world record (same as Weekly Shorts)
def calc_warrior_time(author_time: int, world_record: int, factor: float | None = 0.25) -> int:
'''
- `factor` is offset from AT
- between `0.0` and `1.0`
- examples, given AT is `10.000` and WR is `8.000`:
- `0.000` - AT (`10.000`)
- `0.125` - 1/8 of the way between AT and WR (`9.750`) (tracks of the day)
- `0.250` - 1/4 of the way between AT and WR (`9.500`) (seasonal campaigns)
- `0.500` - 1/2 of the way between AT and WR (`9.000`) (weekly shorts/club campaigns)
- `0.750` - 3/4 of the way between AT and WR (`8.500`)
- `1.000` - WR (`8.000`)
'''
return author_time - max(
int((author_time - world_record) * (factor if factor is not None else 0.25)),
1
)Please use this plugin as a dependency! While it's useful on its own, I would love to see integration in some more popular plugins. Include this in your info.toml: optional_dependencies = [ "WarriorMedals" ]
string GetColorWarriorStr()
vec3 GetColorWarriorVec()
Returns the plugin's main color as a string or a vec3.
const UI::Texture@ GetIconWarrior32()
const UI::Texture@ GetIconWarrior512()
Returns the Warrior medal icon with a size of 32x32 or 512x512.
const dictionary@ GetMaps()
Returns all cached map data.
Keys are map UIDs and values are of type WarriorMedals::Map@.
uint GetWMTime()
uint GetWMTime(const string &in uid)
Returns the Warrior medal time for the current map or given map UID.
If there is an error or the map does not have a Warrior medal, returns 0.
Does not query the API for a time, so the plugin must already have it cached for this to return a time.
Only use this if you need a synchronous function.
uint GetWMTimeAsync()
uint GetWMTimeAsync(const string &in uid)
Returns the Warrior medal time for the current map or given map UID.
If there is an error or the map does not have a Warrior medal, returns 0.
Queries the API for a medal time if the plugin does not have it cached.
Use this instead of the synchronous version if possible.
