Sledding Game
Install

Details

Last Updated
First Uploaded
Downloads
248
Likes
0
Size
32KB
Dependency string
CluelessFrog-AchievementPatch-1.0.0
Dependants

Categories

AchievementPatch

A MelonLoader mod for Sledding Game that fixes the achievements which are bugged, fragile, or unintuitive in vanilla.

Install

  1. Install MelonLoader (0.7.2+ Open-Beta) into your Sledding Game folder.
  2. Launch the game once with MelonLoader so it generates the IL2CPP wrappers.
  3. Drop AchievementPatch.dll into <Sledding Game>\Mods\.
  4. Launch the game. You'll see AchievementPatch v1.0.0 loading... in the MelonLoader console.

The mod runs a sweep every 5 seconds that reads your persistent save state — so if you crossed any of the milestones before installing the mod, the corresponding achievements will fire within ~5 seconds of loading into a save.

Patches

Sled Master — Sled 1,000,000 metres (most-asked-about fix)

Vanilla problem: The achievement checks against a session/runtime counter that doesn't reliably catch save-loaded values, so players who legitimately cross 1M can find the achievement never fires.

Patch: Every 5-second sweep reads PlayerSavedStats.GetStatAsFloat(StatType.DistanceSled) and fires ACH_SLED_MASTER (id 17) once it's ≥ 1,000,000. Cross-session, no fragility — if your save shows the distance, you get the achievement.

Barista — Make 1,000 cups of hot cocoa

Vanilla problem: "Make" is misleading. The HotCocoaDispenser's pour-completion path (HotCocoaDispenser.CompleteDrinkPour) feeds into the VendingMachinesUsed stat (id 32), but the vanilla unlock check doesn't always pick it up reliably.

Patch: Sweep reads PlayerSavedStats.GetStatAsFloat(StatType.VendingMachinesUsed) and fires ACH_BARISTA (id 16) once it's ≥ 1,000. Counts every cup you've ever poured at a dispenser, across sessions.

Training Arc — Hit all the targets on the map

Vanilla problem: The description says "hit all the targets on the map" but the actual code is per-statue: each StatueSetup has its own target list with a hidden time limit (timeToHitAllTargets), then a second interact-window timer (timeToInteractAfterAllTargetsHit), and some statue puzzles in the map don't have physical targets placed at all — they're effectively uncompletable. Even completing one cleanly often doesn't trigger the achievement.

Patch: We hook StatueSetup.InteractableEvent_UnlockItem — the per-statue unlock event that fires when you genuinely complete and interact with a statue. Once you've cleared 5 distinct statue puzzles the mod fires ACH_TRAINING_ARC (id 12). This is the mod's chosen compromise: cleaner than the vanilla "do every uncompletable puzzle" requirement, still meaningful effort (you're solving 5 timed snowball puzzles), and entirely legitimate — every count comes from the dev's own completion event.

Drinking Game — Drink 1,000 cups of hot cocoa

Vanilla problem: Same loose stat-check fragility as Sled Master / Barista.

Patch: Sweep reads PlayerSavedStats.GetStatAsFloat(StatType.LiquidConsumed) (matches the in-game constant COCOA_DRINKS_CONSUMED_ACHIEVEMENT_THRESHOLD = 1000) and fires ACH_DRINKING_GAME (id 19) once you've drunk ≥ 1,000 cocoa cups. Drinking in this case = the Drink.Server_Drink consumption path

Fisherman — Catch all 20 unique fish

Vanilla problem: The vanilla achievement check uses the per-session _fishCaughtThisSession list rather than the persistent _fishTypesCaughtSet HashSet, so players who catch their 20 fish across multiple sessions (very common over hours of play) never get the achievement to fire.

Patch: Every sweep we read PlayerSavedStats._fishTypesCaughtSet.Count — the game's own permanent record of every fish type ever caught on this save — and fire ACH_FISHERMAN (id 27) once it hits 20. Loading any save where you've ever caught all 20 will trigger the unlock within 5 seconds.

The mod also prints a missing-fish console line every 60 seconds (e.g. "(8/20, 12 total catches) Still need: Catfish, Salmon, ...") so you can see what you still need to catch.

Drive By — Hit a player with a snowball while sledding

Vanilla problem: State check for "is the local player currently sledding" sometimes misfires when the snowball-hit event arrives.

Patch: We hook Snowball.LocalPlayerHitOtherPlayer, read PlayerControl.LocalPlayerInstance.GetPlayerState() immediately, and if the state name is Sled we fire ACH_DRIVE_BY (id 5). Uses the real static property LocalPlayerInstance (not the legacy LocalPlayer) so it actually resolves at runtime.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.