|
|
|
@ -5,6 +5,7 @@
|
|
|
|
|
#include "moon/utils/umath.h"
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include "moon/ui/interfaces/moon-screen.h"
|
|
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
#include "pc/cheats.h"
|
|
|
|
@ -15,72 +16,75 @@ extern "C" {
|
|
|
|
|
|
|
|
|
|
struct AchievementEntry {
|
|
|
|
|
long long launchTime;
|
|
|
|
|
bool dead = false;
|
|
|
|
|
Achievement* achievement;
|
|
|
|
|
|
|
|
|
|
int state = 0;
|
|
|
|
|
int width = 0;
|
|
|
|
|
int height = 32;
|
|
|
|
|
bool dead = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::map<std::string, Achievement*> registeredAchievements;
|
|
|
|
|
std::map<Achievement*, AchievementEntry*> entries;
|
|
|
|
|
std::map<std::string, AchievementEntry*> entries;
|
|
|
|
|
|
|
|
|
|
namespace AchievementList {
|
|
|
|
|
/* Star achievements */
|
|
|
|
|
Achievement* STAR = new Achievement("", "", "/", "", 0, 0, nullptr);
|
|
|
|
|
Achievement* GET_1_STAR = MoonAchievements::bind(new Achievement("achievement.get1Stars", "textures/segment2/segment2.05C00.rgba16", "Your journey begins!", "Get one star", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_8_STARS = MoonAchievements::bind(new Achievement("achievement.get8Stars", "textures/segment2/segment2.05C00.rgba16", "You feel a strong power", "Get 8 stars", 0, 5, GET_1_STAR));
|
|
|
|
|
Achievement* GET_30_STARS = MoonAchievements::bind(new Achievement("achievement.get30Stars", "textures/segment2/segment2.05C00.rgba16", "TBD", "Get 30 stars", 0, 5, GET_8_STARS));
|
|
|
|
|
Achievement* GET_50_STARS = MoonAchievements::bind(new Achievement("achievement.get50Stars", "textures/segment2/segment2.05C00.rgba16", "Lucky Eight", "Get 50 stars", 0, 5, GET_30_STARS));
|
|
|
|
|
Achievement* GET_70_STARS = MoonAchievements::bind(new Achievement("achievement.get70Stars", "textures/segment2/segment2.05C00.rgba16", "Halfway done!", "Get 70 stars", 0, 5, GET_50_STARS));
|
|
|
|
|
Achievement* GET_120_STARS = MoonAchievements::bind(new Achievement("achievement.get120Stars", "textures/segment2/segment2.05C00.rgba16", "The Completionist", "Get 120 stars", 0, 5, GET_70_STARS));
|
|
|
|
|
Achievement* GET_1_STAR = MoonAchievements::bind(new Achievement("achievement.get1Stars", "textures/segment2/segment2.05C00.rgba16", "Your journey begins!", "Get one star", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_8_STARS = MoonAchievements::bind(new Achievement("achievement.get8Stars", "textures/segment2/segment2.05C00.rgba16", "You feel a strong power", "Get 8 stars", 0, 150, GET_1_STAR));
|
|
|
|
|
Achievement* GET_30_STARS = MoonAchievements::bind(new Achievement("achievement.get30Stars", "textures/segment2/segment2.05C00.rgba16", "TBD", "Get 30 stars", 0, 150, GET_8_STARS));
|
|
|
|
|
Achievement* GET_50_STARS = MoonAchievements::bind(new Achievement("achievement.get50Stars", "textures/segment2/segment2.05C00.rgba16", "Lucky Eight", "Get 50 stars", 0, 150, GET_30_STARS));
|
|
|
|
|
Achievement* GET_70_STARS = MoonAchievements::bind(new Achievement("achievement.get70Stars", "textures/segment2/segment2.05C00.rgba16", "Halfway done!", "Get 70 stars", 0, 150, GET_50_STARS));
|
|
|
|
|
Achievement* GET_120_STARS = MoonAchievements::bind(new Achievement("achievement.get120Stars", "textures/segment2/segment2.05C00.rgba16", "The Completionist", "Get 120 stars", 0, 150, GET_70_STARS));
|
|
|
|
|
|
|
|
|
|
/* Cap Achievements */
|
|
|
|
|
Achievement* UNLOCK_WING_CAP = MoonAchievements::bind(new Achievement("achievement.unlockWingCap", "textures/segment2/segment2.05C00.rgba16", "Super Man-rio", "Unlock the wing cap", 0, 5, nullptr));
|
|
|
|
|
Achievement* UNL0CK_METAL_CAP = MoonAchievements::bind(new Achievement("achievement.unlockMetalCap", "textures/segment2/segment2.05C00.rgba16", "Heavy-Headed", "Unlock the metal cap", 0, 5, nullptr));
|
|
|
|
|
Achievement* UNLOCK_VANISH_CAP = MoonAchievements::bind(new Achievement("achievement.unlockVanishCap", "textures/segment2/segment2.05C00.rgba16", "Wait, Where Is He?", "Unlock the vanish cap", 0, 5, nullptr));
|
|
|
|
|
Achievement* UNLOCK_WING_CAP = MoonAchievements::bind(new Achievement("achievement.unlockWingCap", "textures/segment2/segment2.05C00.rgba16", "Super Man-rio", "Unlock the wing cap", 0, 150, nullptr));
|
|
|
|
|
Achievement* UNL0CK_METAL_CAP = MoonAchievements::bind(new Achievement("achievement.unlockMetalCap", "textures/segment2/segment2.05C00.rgba16", "Heavy-Headed", "Unlock the metal cap", 0, 150, nullptr));
|
|
|
|
|
Achievement* UNLOCK_VANISH_CAP = MoonAchievements::bind(new Achievement("achievement.unlockVanishCap", "textures/segment2/segment2.05C00.rgba16", "Wait, Where Is He?", "Unlock the vanish cap", 0, 150, nullptr));
|
|
|
|
|
|
|
|
|
|
/* Level Achievements */
|
|
|
|
|
Achievement* GET_6_LEVEL_STARS = MoonAchievements::bind(new Achievement("achievement.get6MainStars", "textures/segment2/segment2.05C00.rgba16", "F Rank", "Get all 6 Main Stars in One Level", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_100_COIN_STAR = MoonAchievements::bind(new Achievement("achievement.get100CoinStar", "textures/segment2/segment2.05C00.rgba16", "E Rank", "UGet a 100 Coin Star in One Level", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_ALL_LVL_COINS = MoonAchievements::bind(new Achievement("achievement.getAllCoins", "textures/segment2/segment2.05C00.rgba16", "D Rank", "Get all Coins in One Level", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_0_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInBasement", "textures/segment2/segment2.05C00.rgba16", "B Rank", "Get all Main Stars in the Basement", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_1_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor1", "textures/segment2/segment2.05C00.rgba16", "C Rank", "Get all Main Stars in the First Floor", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_2_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor2", "textures/segment2/segment2.05C00.rgba16", "A Rank", "Get all Main Stars in the Second Floor", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_3_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor3", "textures/segment2/segment2.05C00.rgba16", "S Rank", "Get all Main Stars in the Third Floor", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_CASTLE_STARS = MoonAchievements::bind(new Achievement("achievement.getAllCastleStars", "textures/segment2/segment2.05C00.rgba16", "S+ Rank", "Get all Castle Secret Stars", 0, 5, nullptr));
|
|
|
|
|
Achievement* GET_6_LEVEL_STARS = MoonAchievements::bind(new Achievement("achievement.get6MainStars", "textures/segment2/segment2.05C00.rgba16", "F Rank", "Get all 6 Main Stars in One Level", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_100_COIN_STAR = MoonAchievements::bind(new Achievement("achievement.get100CoinStar", "textures/segment2/segment2.05C00.rgba16", "E Rank", "UGet a 100 Coin Star in One Level", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_ALL_LVL_COINS = MoonAchievements::bind(new Achievement("achievement.getAllCoins", "textures/segment2/segment2.05C00.rgba16", "D Rank", "Get all Coins in One Level", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_0_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInBasement", "textures/segment2/segment2.05C00.rgba16", "B Rank", "Get all Main Stars in the Basement", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_1_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor1", "textures/segment2/segment2.05C00.rgba16", "C Rank", "Get all Main Stars in the First Floor", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_2_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor2", "textures/segment2/segment2.05C00.rgba16", "A Rank", "Get all Main Stars in the Second Floor", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_FLOOR_3_STARS = MoonAchievements::bind(new Achievement("achievement.getAllStarsInFloor3", "textures/segment2/segment2.05C00.rgba16", "S Rank", "Get all Main Stars in the Third Floor", 0, 150, nullptr));
|
|
|
|
|
Achievement* GET_CASTLE_STARS = MoonAchievements::bind(new Achievement("achievement.getAllCastleStars", "textures/segment2/segment2.05C00.rgba16", "S+ Rank", "Get all Castle Secret Stars", 0, 150, nullptr));
|
|
|
|
|
|
|
|
|
|
/* Boss Achievements */
|
|
|
|
|
Achievement* DEFEAT_KINGBOB = MoonAchievements::bind(new Achievement("achievement.beatKingBobOmb", "textures/segment2/segment2.05C00.rgba16", "Explosive Test", "Beat King Bob-Omb", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_XINGWHOMP = MoonAchievements::bind(new Achievement("achievement.beatKingWhomp", "textures/segment2/segment2.05C00.rgba16", "Come On And Slam", "Beat King Whomp", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_ALL_BOOS = MoonAchievements::bind(new Achievement("achievement.beatAll3BoosOnLLL", "textures/segment2/segment2.05C00.rgba16", "Mario, Where Are You??", "Beat all 3 Boos from BBH", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_MRI = MoonAchievements::bind(new Achievement("achievement.beatMr.I", "textures/segment2/segment2.05C00.rgba16", "I vs Eye", "Beat Mr.I", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_ALL_BULLY = MoonAchievements::bind(new Achievement("achievement.beatAllBigBullies", "textures/segment2/segment2.05C00.rgba16", "The Real Bully", "Beat all big bullies from LLL", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_EYEROK = MoonAchievements::bind(new Achievement("achievement.beatEyerok", "textures/segment2/segment2.05C00.rgba16", "Welcome To The Jam", "Beat Eyerok", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_WIGGLER = MoonAchievements::bind(new Achievement("achievement.beatWiggler", "textures/segment2/segment2.05C00.rgba16", "Insecticude", "Beat Wiggler", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER1 = MoonAchievements::bind(new Achievement("achievement.beatFirstBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Trapped In The Dark", "Beat first Bowser", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER2 = MoonAchievements::bind(new Achievement("achievement.beatSecondBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Burned By The Lava", "Beat second Bowser", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER3 = MoonAchievements::bind(new Achievement("achievement.beatFinalBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Launched Into The Sky", "Beat final Bowser", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_120S_BOWSER = MoonAchievements::bind(new Achievement("achievement.beatGame120Stars", "textures/segment2/segment2.05C00.rgba16", "Power Battle", "Beat final Bowser with 120 stars", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEFEAT_KINGBOB = MoonAchievements::bind(new Achievement("achievement.beatKingBobOmb", "textures/segment2/segment2.05C00.rgba16", "Explosive Test", "Beat King Bob-Omb", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_XINGWHOMP = MoonAchievements::bind(new Achievement("achievement.beatKingWhomp", "textures/segment2/segment2.05C00.rgba16", "Come On And Slam", "Beat King Whomp", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_ALL_BOOS = MoonAchievements::bind(new Achievement("achievement.beatAll3BoosOnLLL", "textures/segment2/segment2.05C00.rgba16", "Mario, Where Are You??", "Beat all 3 Boos from BBH", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_MRI = MoonAchievements::bind(new Achievement("achievement.beatMr.I", "textures/segment2/segment2.05C00.rgba16", "I vs Eye", "Beat Mr.I", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_ALL_BULLY = MoonAchievements::bind(new Achievement("achievement.beatAllBigBullies", "textures/segment2/segment2.05C00.rgba16", "The Real Bully", "Beat all big bullies from LLL", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_EYEROK = MoonAchievements::bind(new Achievement("achievement.beatEyerok", "textures/segment2/segment2.05C00.rgba16", "Welcome To The Jam", "Beat Eyerok", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_WIGGLER = MoonAchievements::bind(new Achievement("achievement.beatWiggler", "textures/segment2/segment2.05C00.rgba16", "Insecticude", "Beat Wiggler", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER1 = MoonAchievements::bind(new Achievement("achievement.beatFirstBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Trapped In The Dark", "Beat first Bowser", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER2 = MoonAchievements::bind(new Achievement("achievement.beatSecondBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Burned By The Lava", "Beat second Bowser", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_BOWSER3 = MoonAchievements::bind(new Achievement("achievement.beatFinalBowser", "textures/segment2/segment2.05C00.rgba16", "Bowser Launched Into The Sky", "Beat final Bowser", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEFEAT_120S_BOWSER = MoonAchievements::bind(new Achievement("achievement.beatGame120Stars", "textures/segment2/segment2.05C00.rgba16", "Power Battle", "Beat final Bowser with 120 stars", 0, 150, nullptr));
|
|
|
|
|
|
|
|
|
|
/* Death Achievements */
|
|
|
|
|
Achievement* DEATH_BY_ENEMY = MoonAchievements::bind(new Achievement("achievement.deathByEnemy", "textures/segment2/segment2.05C00.rgba16", "Classic Way", "Get killed by a normal enemy", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_BOSS = MoonAchievements::bind(new Achievement("achievement.deathByBoss", "textures/segment2/segment2.05C00.rgba16", "Git Gud", "Get killed by a boss", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_BOWSER = MoonAchievements::bind(new Achievement("achievement.deathByBowser", "textures/segment2/segment2.05C00.rgba16", "Bad Ending", "Get killed by Bowser", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_CRUSHING = MoonAchievements::bind(new Achievement("achievement.deathByCrushing", "textures/segment2/segment2.05C00.rgba16", "Space Jam", "Get crushed", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_FALLING = MoonAchievements::bind(new Achievement("achievement.deathByFalling", "textures/segment2/segment2.05C00.rgba16", "My Leg!", "Die by falling", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_FIRE = MoonAchievements::bind(new Achievement("achievement.deathByFire", "textures/segment2/segment2.05C00.rgba16", "Roasted Mario", "Die by fire", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_SAND = MoonAchievements::bind(new Achievement("achievement.deathBySand", "textures/segment2/segment2.05C00.rgba16", "Sinked", "Die by sinking sand", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_DROWNING = MoonAchievements::bind(new Achievement("achievement.deathByDrowning", "textures/segment2/segment2.05C00.rgba16", "Under The Sea", "Die by drowning", 0, 5, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_ENEMY = MoonAchievements::bind(new Achievement("achievement.deathByEnemy", "textures/segment2/segment2.05C00.rgba16", "Classic Way", "Get killed by a normal enemy", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_BOSS = MoonAchievements::bind(new Achievement("achievement.deathByBoss", "textures/segment2/segment2.05C00.rgba16", "Git Gud", "Get killed by a boss", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_BOWSER = MoonAchievements::bind(new Achievement("achievement.deathByBowser", "textures/segment2/segment2.05C00.rgba16", "Bad Ending", "Get killed by Bowser", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_CRUSHING = MoonAchievements::bind(new Achievement("achievement.deathByCrushing", "textures/segment2/segment2.05C00.rgba16", "Space Jam", "Get crushed", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_FALLING = MoonAchievements::bind(new Achievement("achievement.deathByFalling", "textures/segment2/segment2.05C00.rgba16", "My Leg!", "Die by falling", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_FIRE = MoonAchievements::bind(new Achievement("achievement.deathByFire", "textures/segment2/segment2.05C00.rgba16", "Roasted Mario", "Die by fire", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_SAND = MoonAchievements::bind(new Achievement("achievement.deathBySand", "textures/segment2/segment2.05C00.rgba16", "Sinked", "Die by sinking sand", 0, 150, nullptr));
|
|
|
|
|
Achievement* DEATH_BY_DROWNING = MoonAchievements::bind(new Achievement("achievement.deathByDrowning", "textures/segment2/segment2.05C00.rgba16", "Under The Sea", "Die by drowning", 0, 150, nullptr));
|
|
|
|
|
|
|
|
|
|
/* Extra Achievements */
|
|
|
|
|
Achievement* RELEASE_CHAIN_CHOMP = MoonAchievements::bind(new Achievement("achievement.releaseChainChomp", "textures/segment2/segment2.05C00.rgba16", "Git Gud", "Get killed by a boss", 0, 5, nullptr));
|
|
|
|
|
Achievement* JUMP_1000_TIMES = MoonAchievements::bind(new Achievement("achievement.jump1000Times", "textures/segment2/segment2.05C00.rgba16", "Bad Ending", "Get killed by Bowser", 0, 5, nullptr));
|
|
|
|
|
Achievement* TALK_25_TIMES = MoonAchievements::bind(new Achievement("achievement.talk25Times", "textures/segment2/segment2.05C00.rgba16", "Space Jam", "Get crushed", 0, 5, nullptr));
|
|
|
|
|
Achievement* SLIDE_20_TIMES = MoonAchievements::bind(new Achievement("achievement.slide20Times", "textures/segment2/segment2.05C00.rgba16", "My Leg!", "Die by falling", 0, 5, nullptr));
|
|
|
|
|
Achievement* WATCH_END_CREDITS = MoonAchievements::bind(new Achievement("achievement.watchEndCredits", "textures/segment2/segment2.05C00.rgba16", "Roasted Mario", "Die by fire", 0, 5, nullptr));
|
|
|
|
|
Achievement* TALK_WITH_YOSHI = MoonAchievements::bind(new Achievement("achievement.talkWithYoshi", "textures/segment2/segment2.05C00.rgba16", "Sinked", "Die by sinking sand", 0, 5, nullptr));
|
|
|
|
|
Achievement* TRIPLE_JUMP = MoonAchievements::bind(new Achievement("achievement.doATripleJump", "textures/segment2/segment2.05C00.rgba16", "Getting higher", "Do a triple jump", 0, 5, nullptr));
|
|
|
|
|
Achievement* CHEATER = MoonAchievements::bind(new Achievement("", "textures/segment2/segment2.05C00.rgba16", "What a loser!", "You turned on cheats", 0, 5, nullptr));
|
|
|
|
|
Achievement* RELEASE_CHAIN_CHOMP = MoonAchievements::bind(new Achievement("achievement.releaseChainChomp", "textures/segment2/segment2.05C00.rgba16", "Who Let The Dog Out?", "Get killed by a boss", 0, 150, nullptr));
|
|
|
|
|
Achievement* BEAT_EVERY_RACE = MoonAchievements::bind(new Achievement("achievement.jump1000Times", "textures/segment2/segment2.05C00.rgba16", "Olympic Runner", "Beat every race", 0, 150, nullptr));
|
|
|
|
|
Achievement* JUMP_1000_TIMES = MoonAchievements::bind(new Achievement("achievement.jump1000Times", "textures/segment2/segment2.05C00.rgba16", "Olympic Swimmer", "Grab every star that needs Metal Cap without it.", 0, 150, nullptr));
|
|
|
|
|
Achievement* TALK_25_TIMES = MoonAchievements::bind(new Achievement("achievement.talk25Times", "textures/segment2/segment2.05C00.rgba16", "Olympic Talker", "Talk 25 times with npcs", 0, 150, nullptr));
|
|
|
|
|
Achievement* SLIDE_20_TIMES = MoonAchievements::bind(new Achievement("achievement.slide20Times", "textures/segment2/segment2.05C00.rgba16", "Burned Ass", "Go trough slides 20 times", 0, 150, nullptr));
|
|
|
|
|
Achievement* WATCH_END_CREDITS = MoonAchievements::bind(new Achievement("achievement.watchEndCredits", "textures/segment2/segment2.05C00.rgba16", "The Cake Is A Lie?!", "Watch the end credits", 0, 150, nullptr));
|
|
|
|
|
Achievement* TALK_WITH_YOSHI = MoonAchievements::bind(new Achievement("achievement.talkWithYoshi", "textures/segment2/segment2.05C00.rgba16", "It Is You?", "Talk with Yoshi", 0, 150, nullptr));
|
|
|
|
|
|
|
|
|
|
Achievement* TRIPLE_JUMP = MoonAchievements::bind(new Achievement("achievement.doATripleJump", "textures/segment2/segment2.05C00.rgba16", "Getting higher", "Do a triple jump", 0, 150, nullptr));
|
|
|
|
|
Achievement* CHEATER = MoonAchievements::bind(new Achievement("", "textures/segment2/segment2.05C00.rgba16", "What a loser!", "You turned on cheats", 0, 150, nullptr));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
namespace MoonAchievements {
|
|
|
|
@ -101,35 +105,39 @@ namespace MoonInternal{
|
|
|
|
|
cheatsGotEnabled = true;
|
|
|
|
|
}
|
|
|
|
|
Moon::showAchievementById("achievement.get" + std::to_string(gHudDisplay.stars) + "Stars");
|
|
|
|
|
|
|
|
|
|
if(IsBtnPressed(MoonButtons::L_BTN)){
|
|
|
|
|
auto b = registeredAchievements.begin();
|
|
|
|
|
std::advance( b, rand() % registeredAchievements.size() );
|
|
|
|
|
Moon::showAchievementById(b->second->id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(status == "Init"){
|
|
|
|
|
Moon::registerHookListener({.hookName = HUD_DRAW, .callback = [](HookCall call){
|
|
|
|
|
int id = 0;
|
|
|
|
|
for (auto const& [key, aEntry] : entries) {
|
|
|
|
|
if( !aEntry->dead ) {
|
|
|
|
|
std::cout << key << " - " << aEntry->launchTime << std::endl;
|
|
|
|
|
bool shouldClose = aEntry->launchTime >= aEntry->achievement->duration;
|
|
|
|
|
int achievementWidth = 31 + 5 + MoonGetTextWidth(aEntry->achievement->description, 1.0, false);
|
|
|
|
|
|
|
|
|
|
for(auto &achievement : entries){
|
|
|
|
|
long long millis = moon_get_milliseconds();
|
|
|
|
|
AchievementEntry* aEntry = achievement.second;
|
|
|
|
|
if(aEntry->dead || achievement.second->launchTime >= millis) continue;
|
|
|
|
|
bool shouldClose = millis >= achievement.second->launchTime + achievement.first->duration;
|
|
|
|
|
int achievementWidth = 31 + 5 + MoonGetTextWidth(achievement.first->description, 1.0, false);
|
|
|
|
|
int aX = GetScreenWidth(false) / 2 - aEntry->width / 2;
|
|
|
|
|
int aY = GetScreenHeight() - aEntry->height - 20;
|
|
|
|
|
|
|
|
|
|
int aX = GetScreenWidth(false) / 2 - aEntry->width / 2;
|
|
|
|
|
int aY = GetScreenHeight() - aEntry->height - 20;
|
|
|
|
|
|
|
|
|
|
MoonDrawRectangle(aX, aY, aEntry->width, aEntry->height, {0, 0, 0, 150}, false);
|
|
|
|
|
if(!shouldClose){
|
|
|
|
|
if(aEntry->width >= 32)
|
|
|
|
|
MoonDrawTexture(GFX_DIMENSIONS_FROM_LEFT_EDGE(aX), aY, 31, 31, sys_strdup(achievement.first->icon.c_str()));
|
|
|
|
|
if(aEntry->width >= achievementWidth * 0.9){
|
|
|
|
|
MoonDrawText(aX + 32 + 5, aY + 2, achievement.first->title, 0.8, {255,255,255,255}, true, false);
|
|
|
|
|
MoonDrawText(aX + 32 + 5, aY + 16, achievement.first->description, 0.8, {255,255,255,255}, true, false);
|
|
|
|
|
MoonDrawRectangle(aX, aY, aEntry->width, aEntry->height, {0, 0, 0, 150}, false);
|
|
|
|
|
if(!shouldClose){
|
|
|
|
|
if(aEntry->width >= 32)
|
|
|
|
|
MoonDrawTexture(GFX_DIMENSIONS_FROM_LEFT_EDGE(aX), aY, 31, 31, sys_strdup(aEntry->achievement->icon.c_str()));
|
|
|
|
|
if(aEntry->width >= achievementWidth * 0.9){
|
|
|
|
|
MoonDrawText(aX + 32 + 5, aY + 2, aEntry->achievement->title, 0.8, {255,255,255,255}, true, false);
|
|
|
|
|
MoonDrawText(aX + 32 + 5, aY + 16, aEntry->achievement->description, 0.8, {255,255,255,255}, true, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
aEntry->width = MathUtil::Lerp(aEntry->width, !shouldClose ? achievementWidth : 0, !shouldClose ? 0.2f : 0.35f);
|
|
|
|
|
aEntry->dead = shouldClose && aEntry->width <= 0;
|
|
|
|
|
break;
|
|
|
|
|
id++;
|
|
|
|
|
aEntry->width = MathUtil::Lerp(aEntry->width, !shouldClose ? achievementWidth : 0, !shouldClose ? 0.2f : 0.35f);
|
|
|
|
|
aEntry->dead = shouldClose && aEntry->width <= 0;
|
|
|
|
|
aEntry->launchTime++;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}});
|
|
|
|
|
}
|
|
|
|
@ -139,15 +147,9 @@ namespace MoonInternal{
|
|
|
|
|
namespace Moon {
|
|
|
|
|
void showAchievement(Achievement* achievement){
|
|
|
|
|
if(cheatsGotEnabled) return;
|
|
|
|
|
if(entries.find(achievement) != entries.end()) return;
|
|
|
|
|
long long time = 0;
|
|
|
|
|
if(entries.size() > 0)
|
|
|
|
|
for(auto &achievement : entries){
|
|
|
|
|
if(achievement.second->dead) continue;
|
|
|
|
|
long long now = moon_get_milliseconds();
|
|
|
|
|
time += (now - achievement.second->launchTime) + achievement.first->duration;
|
|
|
|
|
}
|
|
|
|
|
entries[achievement] = new AchievementEntry({.launchTime = time == 0 ? moon_get_milliseconds() + 100 : time});
|
|
|
|
|
if(entries.find(achievement->id) != entries.end()) return;
|
|
|
|
|
std::cout << "Achievement got triggered: " << achievement->title << std::endl;
|
|
|
|
|
entries.insert(std::pair<std::string, AchievementEntry*>(achievement->id, new AchievementEntry({ .launchTime = 0, .dead = false, .achievement = achievement })));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void showAchievementById(std::string id){
|
|
|
|
|