diff --git a/Neo Geo CD/Top Player's Golf.rascript b/Neo Geo CD/Top Player's Golf.rascript index b0669c6..42ab284 100644 --- a/Neo Geo CD/Top Player's Golf.rascript +++ b/Neo Geo CD/Top Player's Golf.rascript @@ -6,6 +6,7 @@ // 0x02=Nassau Game function match_stroke() => byte(0x006d) == 0 function match_play() => byte(0x006d) == 1 +function nassau_play() => byte(0x006d) == 2 // $00BE: [16bit] Message Type // 0x02=Green On // 0x03=Rough @@ -30,6 +31,7 @@ function hole() => byte(0x0109) // 0x00=1P // 0x01=2P function one_player() => byte(0x0618) == 0 +function two_player() => byte(0x0618) == 1 //Top Player's Country Club Data: tp_pars = { 0:4, @@ -150,6 +152,7 @@ function pone_strokes() => word(0x455) function ptwo_strokes() => word(0x457) function matchplay_win(course, holes) => match_play() && + one_player() && hole() == holes - 1 && //For readability purposes, calculate actual in-game check after function pass. pone_strokes() < ptwo_strokes() && (always_false() @@ -159,7 +162,7 @@ function matchplay_win(course, holes) => achievement( "Front Nine Top Competition", - "Beat your opponent with a better score on Top Player's Championship Golf Course Holes 1-9", + "Beat your opponent with a better score on Top Player's Championship Golf Course Holes 1-9 in Match Play Mode", points=10, trigger= matchplay_win(course_topplayers, 9) @@ -171,6 +174,53 @@ achievement( trigger= matchplay_win(course_topplayers, 18) ) + +achievement( + "SNK Victory", + "Get a better score than your opponent on SNK Championship Golf Course Holes 1-9 in Match Play Mode", + points=10, + trigger= + matchplay_win(course_snk, 9) +) +achievement( + "SNK Trophy", + "Get a better score than your opponent on all 18 holes at SNK Championship Golf Course in Match Play Mode", + points=25, + trigger= + matchplay_win(course_snk, 18) +) +function nassau_mode() => + byte(0x0619) +out = 0 +in = 1 +function nassau_switch() => measured(repeated(1, pone_strokes() != prev(pone_strokes()) || ptwo_strokes() != prev(ptwo_strokes()))) +function nassau_result() => + always_false() + || hole() == 0 && nassau_mode() == in && nassau_switch() + || hole() == 17 && nassau_mode() == out && nassau_switch() + //|| hole() == 17 && nassau_mode() == out && repeated(0, pone_strokes() != prev(pone_strokes() || ptwo_strokes() != prev(ptwo_strokes())) +achievement( + "Top Nassau Player", + "Win a Nassau Game against your opponent at Top Player's Championship Golf Course", + points=25, + trigger= + nassau_play() && + course() == course_topplayers && + one_player() && + pone_strokes() < ptwo_strokes() && + nassau_result() +) +achievement( + "SNassauK Success", + "Win a Nassau Game against your opponent at SNK Championship Golf Course", + points=25, + trigger= + nassau_play() && + course() == course_snk && + one_player() && + pone_strokes() < ptwo_strokes() && + nassau_result() +) achievement( "Hole Master", "Get a Hole in One on any course!", @@ -182,3 +232,10 @@ achievement( ) + + + + + + + diff --git a/PlayStation 2/Egg Mania Eggstreme Madness [Subset - Bonus].rascript b/PlayStation 2/Egg Mania Eggstreme Madness [Subset - Bonus].rascript index c1be63d..f29dec1 100644 --- a/PlayStation 2/Egg Mania Eggstreme Madness [Subset - Bonus].rascript +++ b/PlayStation 2/Egg Mania Eggstreme Madness [Subset - Bonus].rascript @@ -174,9 +174,25 @@ achievement( - - - +function lb_speedrun(m_name, d_name, mode, diff, rounds){ + leaderboard( + m_name + " Mode " + d_name, + "Fastest time to complete", + mode() == mode && difficulty() == diff && prev(screen()) == 4 && screen() == 0x270f, + screen() == 0, + round() == rounds && prev(level_state()) != 1 && level_state() == 1, + always_true(), + "FRAMES", + true + ) +} +lb_speedrun("Over Easy", "", overeasy, over, 8) +lb_speedrun("Hardboiled", "- Easy", hardboiled, easy, 8) +lb_speedrun("Hardboiled", "- Medium", hardboiled, med, 9) +lb_speedrun("Hardboiled", "- Hard", hardboiled, hard, 10) +lb_speedrun("Bomb", "- Easy", bomb, easy, 8) +lb_speedrun("Bomb", "- Medium", bomb, med, 9) +lb_speedrun("Bomb", "- Hard", bomb, hard, 10) diff --git a/PlayStation 2/Egg Mania Eggstreme Madness.rascript b/PlayStation 2/Egg Mania Eggstreme Madness.rascript index f287c4f..e5a6444 100644 --- a/PlayStation 2/Egg Mania Eggstreme Madness.rascript +++ b/PlayStation 2/Egg Mania Eggstreme Madness.rascript @@ -61,6 +61,7 @@ hard = 2 overeasy = 2 hardboiled = 3 bomb = 9 +solo = 0xa survival = 0xb function mode() => dword(0x4c08a4) function clear(mode, target) => mode() == mode && prev(rounds()) == target && rounds() == target+1 @@ -195,11 +196,95 @@ achievement( trigger= block_use(0, block_storm) ) +function screen() => dword(0x4c081c) +function difficulty() => dword(0x4c087c) +easy = 0 +med = 1 +hard = 2 +over = 3 +function lb_speedrun(m_name, d_name, mode, diff, rounds){ + leaderboard( + m_name + " Mode " + d_name, + "Fastest time to complete", + mode() == mode && difficulty() == diff && prev(screen()) == 4 && screen() == 0x270f, + screen() == 0, + rounds() == rounds && prev(level_state()) != 1 && level_state() == 1, + always_true(), + "FRAMES", + true + ) +} +lb_speedrun("Over Easy", "", overeasy, over, 8) +lb_speedrun("Hardboiled", "- Easy", hardboiled, easy, 8) +lb_speedrun("Hardboiled", "- Medium", hardboiled, med, 9) +lb_speedrun("Hardboiled", "- Hard", hardboiled, hard, 10) +lb_speedrun("Bomb", "- Easy", bomb, easy, 8) +lb_speedrun("Bomb", "- Medium", bomb, med, 9) +lb_speedrun("Bomb", "- Hard", bomb, hard, 10) +function in_game() => screen() == 0x270f +score = rich_presence_macro("Number", dword(0x004c05bc)) +function losses() => dword(0x004bffe4) +credits = rich_presence_macro("Number", rounds() - 1 - losses()) +rounds = rich_presence_macro("Number", rounds()) +difficulties = { + 0:"Easy", + 1:"Medium", + 2:"Hard" +} +diff = rich_presence_lookup("Difficulty", difficulty(), difficulties) +char = { + 0x00:"Eggy", + 0x01:"Robo", + 0x02:"Bebub", + 0x03:"Yolko", + 0x04:"Coolio", + 0x05:"Funky", + 0x06:"Astro", + 0x07:"Spook", + 0x08:"Spike", + 0x09:"Angelica", + 0x0a:"Sir Eggalot", + 0x0b:"Poncho", + 0x0d:"Yolkohama" +} +function char_id() => dword(0x004c0864) +char = rich_presence_lookup("Character", char_id(), char) +rich_presence_conditional_display(mode() == overeasy && in_game(), "Playing as {0} in Over Easy on Round {1} ❤️ {2} 🏆 {3}", + char, + rounds, + credits, + score +) +rich_presence_conditional_display(mode() == hardboiled && in_game(), "Playing as {0} in Hardboiled on Round {1} Difficulty: {2} ❤️ {3} 🏆 {4}", + char, + rounds, + diff, + credits, + score +) +rich_presence_conditional_display(mode() == bomb && in_game(), "Playing as {0} in Bomb Mode on Round {1} Difficulty: {2} ❤️ {3} 🏆 {4}", + char, + rounds, + diff, + credits, + score - +) +rich_presence_conditional_display(mode() == survival && in_game(), "Playing as {0} in Survival Difficulty: {1}. Wins: {2} 🏆 {3}", + char, + diff, + rich_presence_macro("Number", survival_win()), + score +) +rich_presence_conditional_display(mode() == solo && in_game(), "Playing as {0} in Solo Difficulty: {1} 🏆 {2}", + char, + diff, + score +) +rich_presence_display("In Menu") diff --git a/PlayStation 2/Ice Age 2 The Meltdown.rascript b/PlayStation 2/Ice Age 2 The Meltdown.rascript index 46ab466..ba6d558 100644 --- a/PlayStation 2/Ice Age 2 The Meltdown.rascript +++ b/PlayStation 2/Ice Age 2 The Meltdown.rascript @@ -21,6 +21,7 @@ // $3B64EC: [32bit] Cheat Flag - Level Select Active // 0x00=No // 0x01=Yes + // $3B6504: [32bit] Cheat Flag Unlock all bonuses // 0x00=No // 0x01=Yes @@ -33,6 +34,9 @@ // $3B6564: [32bit] Cheat Flag - Infinite Pebbles // 0x00=No // 0x01=Yes +cheats = [0x3b64ec, 0x3b6504, 0x3b6534, 0x3b654c, 0x3b6564] +function cheats_off() => all_of(cheats, b => dword(b) == 0) + // $3B7328: [32bit] Selected Menu Index // $3B7CDC: [Pointer] Animal Base // +0x0 - Enemy Data 1 @@ -75,23 +79,199 @@ // 0xe1>0xdf=End of game Glacier function level_id() => word(0x3b8194) -function base_progression(start, dest) => prev(level_id()) == start && level_id() == dest +function progress(start, dest) => prev(level_id()) == start && level_id() == dest //&& cheats_off() //Can turn off for testing purposes. +waterpark_one = 0x6b +waterpark_two = 0x6c +waterpark_three = 0x6d +waterpark_four = 0x6e waterpark_five = 0xc2 eviscerator = 0x123 forest_one = 0x77 +forest_two = 0x74 +forest_three = 0x75 +ice_river = 0x91 +maelstrom = 0x92 +maelstrom_two = 0x136 +mudbog_one = 0x8d +mudbog_two = 0x8c +mudbog_three = 0x8b +mudbog_four = 0x8f +mudbog_five = 0x8e +slothvil_one = 0x8a +slothvil_two = 0x87 +slothvil_three = 0x88 +slothvil_four = 0x89 +slothvil_five = 0x86 +glacier_one = 0xdf +glacier_two = 0xe0 +glacier_three = 0xe1 +achievement( + "Park Basics", + "Clear Waterpark 1", + points=2, + trigger= + progress(waterpark_one, waterpark_two) +) +achievement( + "Diego's Arrival", + "Clear Waterpark 2", + points=2, + trigger= + progress(waterpark_two, waterpark_three) +) +achievement( + "A Boaring Introduction", + "Clear Waterpark 3", + points=3, + trigger= + progress(waterpark_three, waterpark_four) +) +achievement( + "Batting Eyes", + "Clear Waterpark 4", + points=3, + trigger= + progress(waterpark_four, waterpark_five) +) achievement( "The Ice Age Begins", "Clear Waterpark 5", points=5, trigger= - base_progression(0xc2, 0x123) + progress(waterpark_five, eviscerator) ) achievement( "Treacherous Slide", "Clear Eviscerator", points=5, trigger= - base_progression(eviscerator, forest_one) + progress(eviscerator, forest_one) +) +achievement( + "New Environment!", + "Clear Forest 1", + points=5, + trigger= + progress(forest_one, forest_two) +) +achievement( + "Nest Rescuer", + "Clear Forest 2", + points=5, + trigger= + progress(forest_two, forest_three) +) +achievement( + "The Grand Tree", + "Clear Forest 3", + points=5, + trigger= + progress(forest_three, ice_river) +) +achievement( + "Polar Plunge", + "Clear Ice River", + points=5, + trigger= + progress(ice_river, maelstrom) +) +achievement( + "In The Mouth of the Beast", + "Clear Maelstrom", + points=5, + trigger= + progress(maelstrom, maelstrom_two) +) +achievement( + "Pond Exploration", + "Clear Mudbog 1", + points=5, + trigger= + progress(mudbog_one, mudbog_two) +) +achievement( + "Egg Mixup!", + "Clear Mudbog 2", + points=5, + trigger= + progress(mudbog_two, mudbog_three) +) +achievement( + "Hippo Mud Slide", + "Clear Mudbog 3", + points=5, + trigger= + progress(mudbog_three, mudbog_four) +) +achievement( + "Spider Caverns", + "Clear Mudbog 4", + points=5, + trigger= + progress(mudbog_four, mudbog_five) +) +achievement( + "Tasty Swamp Nuts", + "Clear Mudbog 5", + points=5, + trigger= + progress(mudbog_five, slothvil_one) +) +achievement( + "Ritualistic Dancing", + "Clear Sloth Village 1", + points=5, + trigger= + progress(slothvil_one, slothvil_two) +) +achievement( + "Tiki Towers for Hours", + "Clear Sloth Village 2", + points=5, + trigger= + progress(slothvil_two, slothvil_three) +) +achievement( + "Lava Land", + "Clear Sloth Village 3", + points=5, + trigger= + progress(slothvil_three, slothvil_four) +) +achievement( + "Webs, Fire, Lava", + "Clear Sloth Village 4", + points=5, + trigger= + progress(slothvil_four, slothvil_five) +) +achievement( + "Sacrifical Rescue", + "Clear Sloth Village 5", + points=5, + trigger= + progress(slothvil_five, glacier_one) +) +achievement( + "Frozen Horizons", + "Clear Glacier 1", + points=5, + trigger= + progress(glacier_one, glacier_two) +) +achievement( + "Piranha Waters", + "Clear Glacier 2", + points=10, + trigger= + progress(glacier_two, glacier_three) +) +achievement( + "End of the Meltdown", + "Clear Glacier 3 and beat the game!", + points=25, + trigger= + progress(glacier_three, glacier_one) ) // $3B821C: [32bit] Game Paused // 0x00=No @@ -116,8 +296,18 @@ achievement( // $1FFDCD0: [32bit] Acorn Pointer // + 0x654 = Count +// $3B4174: [32bit] Minigame Pointer +// +0xc = [32bit] Amt Collected +// +0x10 = [32bit] Target Count +// +0x1c = [Float] Time Left +minigame_root = dword(0x3b4174) +function minigame_amount() => dword(minigame_root + 0xc) +function minigame_target() => dword(minigame_root + 0x10) +function minigame_time() => float(minigame_root + 0x1c) + // $3b8340: [Pointer] Evicserator // +0x162=[16bit] Score! Wow! + function eviscerator_score() => word(dword(0x3b8340) + 0x162) function evisc_cheevo(name, target, target_desc, points) { achievement(