Skip to content

Commit

Permalink
Add 5 Rock Band games (ArchipelagoMW#32)
Browse files Browse the repository at this point in the history
RB 1 through 4 plus Lego Rock Band are in this, with some NDS-only switches for the two games where it matters, otherwise very direct implementations.
  • Loading branch information
JCBoorgo authored Jan 10, 2025
1 parent 5f61635 commit 602bb9e
Show file tree
Hide file tree
Showing 5 changed files with 684 additions and 0 deletions.
128 changes: 128 additions & 0 deletions worlds/keymasters_keep/games/lego_rock_band_game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
from __future__ import annotations

import functools
from typing import List

from dataclasses import dataclass

from Options import Toggle

from ..game import Game
from ..game_objective_template import GameObjectiveTemplate

from ..enums import KeymastersKeepGamePlatforms


@dataclass
class LegoRockBandArchipelagoOptions:
lego_rock_band_nds_only: LegoRockBandNDSOnly


class LegoRockBandGame(Game):
# Initial implementation by JCBoorgo

name = "Lego Rock Band"
platform = KeymastersKeepGamePlatforms.PS3

platforms_other = [
KeymastersKeepGamePlatforms.X360,
KeymastersKeepGamePlatforms.WII,
KeymastersKeepGamePlatforms.NDS
]

is_adult_only_or_unrated = False

options_cls = LegoRockBandArchipelagoOptions

def optional_game_constraint_templates(self) -> List[GameObjectiveTemplate]:
return list()

def game_objective_templates(self) -> List[GameObjectiveTemplate]:
return [
GameObjectiveTemplate(
label="Play TRACK",
data={"TRACK": (self.tracks, 1)},
is_time_consuming=False,
is_difficult=False,
weight=3,
),
GameObjectiveTemplate(
label="Get a Full Combo on TRACK",
data={"TRACK": (self.tracks, 1)},
is_time_consuming=False,
is_difficult=True,
weight=1,
),
]

def tracks(self) -> List[str]:
track_list = self.tracks_nds

if not self.archipelago_options.lego_rock_band_nds_only.value:
track_list += self.tracks_base

return sorted(track_list)

@functools.cached_property
def tracks_base(self) -> List[str]:
return [
"Aliens Exist",
"Breakout",
"Crocodile Rock",
"Dig",
"Dreaming of You",
"Every Little Thing She Does Is Magic",
"Fire",
"Make Me Smile (Come Up and See Me)",
"Naïve",
"Real Wild Child",
"Ride a White Swan",
"Rooftops (A Liberation Broadcast)",
"Short and Sweet",
"Stumble and Fall",
"Summer of '69",
"Thunder",
"Tick Tick Boom",
"Valerie",
"Word Up!",
"You Give Love a Bad Name"
]

@functools.cached_property
def tracks_nds(self) -> List[str]:
return [
"A-Punk",
"Accidentally in Love",
"Check Yes Juliet",
"Crash",
"Free Fallin'",
"Ghostbusters",
"Girls & Boys",
"Grace",
"I Want You Back",
"In Too Deep",
"Kung Fu Fighting",
"Let's Dance",
"Life Is a Highway",
"Monster",
"Ruby",
"So What",
"Song 2",
"Suddenly I See",
"Swing, Swing",
"The Final Countdown",
"The Passenger",
"Two Princes",
"Walking on Sunshine",
"We Are the Champions",
"We Will Rock You"
]


# Archipelago Options
class LegoRockBandNDSOnly(Toggle):
"""
Indicates whether to only include the Nintendo DS tracks in the list for Lego Rock Band.
"""

display_name = "Lego Rock Band NDS Only"
150 changes: 150 additions & 0 deletions worlds/keymasters_keep/games/rock_band_2_game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
from __future__ import annotations

import functools
from typing import List

from dataclasses import dataclass

from ..game import Game
from ..game_objective_template import GameObjectiveTemplate

from ..enums import KeymastersKeepGamePlatforms


@dataclass
class RockBand2ArchipelagoOptions:
pass


class RockBand2Game(Game):
# Initial implementation by JCBoorgo

name = "Rock Band 2"
platform = KeymastersKeepGamePlatforms.X360

platforms_other = [
KeymastersKeepGamePlatforms.PS3,
KeymastersKeepGamePlatforms.PS2,
KeymastersKeepGamePlatforms.WII,
]

is_adult_only_or_unrated = False

options_cls = RockBand2ArchipelagoOptions

def optional_game_constraint_templates(self) -> List[GameObjectiveTemplate]:
return list()

def game_objective_templates(self) -> List[GameObjectiveTemplate]:
return [
GameObjectiveTemplate(
label="Play TRACK",
data={"TRACK": (self.tracks, 1)},
is_time_consuming=False,
is_difficult=False,
weight=3
),
GameObjectiveTemplate(
label="Get a Full Combo on TRACK",
data={"TRACK": (self.tracks, 1)},
is_time_consuming=False,
is_difficult=True,
weight=1
),
]

def tracks(self) -> List[str]:
return sorted(self.tracks_base)

@functools.cached_property
def tracks_base(self) -> List[str]:
return [
"A Jagged Gorgeous Winter",
"Ace of Spades '08",
"Alabama Getaway",
"Alex Chilton",
"Alive",
"Almost Easy",
"American Woman",
"Any Way You Want It",
"Aqualung",
"Bad Reputation",
"Battery",
"Bodhisattva",
"Carry On Wayward Son",
"Chop Suey",
"Colony of Birchmen",
"Come Out and Play (Keep 'Em Separated)",
"Conventional Lover",
"Cool for Cats",
"De-Luxe",
"Down with the Sickness",
"Drain You",
"E-Pro",
"Everlong",
"Eye of the Tiger",
"Feel the Pain",
"Float On",
"Get Clean",
"Girl's Not Grey",
"Give It All",
"Give It Away",
"Go Your Own Way",
"Hello There",
"Hungry Like the Wolf",
"I Was Wrong",
"Kids in America",
"Lazy Eye",
"Let There Be Rock",
"Livin' on a Prayer",
"Lump",
"Man in the Box",
"Master Exploder",
"Mountain Song",
"My Own Worst Enemy",
"New Kid in School",
"Night Lies",
"Nine in the Afternoon",
"One Step Closer",
"One Way or Another",
"Our Truth",
"Painkiller",
"Panic Attack",
"PDA",
"Peace Sells",
"Pinball Wizard",
"Pretend We're Dead",
"Psycho Killer",
"Pump It Up",
"Ramblin' Man",
"Rebel Girl",
"Rob the Prez-O-Dent",
"Rock'n Me",
"Round and Round",
"Shackler's Revenge",
"Shooting Star",
"Shoulder to the Plow",
"So What'cha Want",
"Souls of Black",
"Spirit in the Sky",
"Spoonman",
"Supreme Girl",
"Tangled Up in Blue",
"Teen Age Riot",
"Testify",
"That's What You Get",
"The Middle",
"The Trees (Vault Edition)",
"Today",
"Uncontrollable Urge",
"Visions",
"We Got the Beat",
"Welcome to the Neighborhood",
"Where'd You Go?",
"White Wedding (Part 1)",
"You Oughta Know"
]


# Archipelago Options
# ...
Loading

0 comments on commit 602bb9e

Please sign in to comment.