mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00
Bomb Rush Cyberfunk: Implement new game (#2925)
Adds Team Reptile's Bomb Rush Cyberfunk as a new game.
This commit is contained in:
162
worlds/bomb_rush_cyberfunk/Options.py
Normal file
162
worlds/bomb_rush_cyberfunk/Options.py
Normal file
@@ -0,0 +1,162 @@
|
||||
from dataclasses import dataclass
|
||||
from Options import Choice, Toggle, DefaultOnToggle, Range, DeathLink, PerGameCommonOptions
|
||||
import typing
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from random import Random
|
||||
else:
|
||||
Random = typing.Any
|
||||
|
||||
|
||||
class Logic(Choice):
|
||||
"""Choose the logic used by the randomizer."""
|
||||
display_name = "Logic"
|
||||
option_glitchless = 0
|
||||
option_glitched = 1
|
||||
default = 0
|
||||
|
||||
|
||||
class SkipIntro(DefaultOnToggle):
|
||||
"""Skips escaping the police station.
|
||||
Graffiti spots tagged during the intro will not unlock items."""
|
||||
display_name = "Skip Intro"
|
||||
|
||||
|
||||
class SkipDreams(Toggle):
|
||||
"""Skips the dream sequences at the end of each chapter.
|
||||
This can be changed later in the options menu inside the Archipelago phone app."""
|
||||
display_name = "Skip Dreams"
|
||||
|
||||
|
||||
class SkipHands(Toggle):
|
||||
"""Skips spraying the lion statue hands after the dream in Chapter 5."""
|
||||
display_name = "Skip Statue Hands"
|
||||
|
||||
|
||||
class TotalRep(Range):
|
||||
"""Change the total amount of REP in your world.
|
||||
At least 960 REP is needed to finish the game.
|
||||
Will be rounded to the nearest number divisible by 8."""
|
||||
display_name = "Total REP"
|
||||
range_start = 1000
|
||||
range_end = 2000
|
||||
default = 1400
|
||||
|
||||
def round_to_nearest_step(self):
|
||||
rem: int = self.value % 8
|
||||
if rem >= 5:
|
||||
self.value = self.value - rem + 8
|
||||
else:
|
||||
self.value = self.value - rem
|
||||
|
||||
def get_rep_item_counts(self, random_source: Random, location_count: int) -> typing.List[int]:
|
||||
def increment_item(item: int) -> int:
|
||||
if item >= 32:
|
||||
item = 48
|
||||
else:
|
||||
item += 8
|
||||
return item
|
||||
|
||||
items = [8]*location_count
|
||||
while sum(items) < self.value:
|
||||
index = random_source.randint(0, location_count-1)
|
||||
while items[index] >= 48:
|
||||
index = random_source.randint(0, location_count-1)
|
||||
items[index] = increment_item(items[index])
|
||||
|
||||
while sum(items) > self.value:
|
||||
index = random_source.randint(0, location_count-1)
|
||||
while not (items[index] == 16 or items[index] == 24 or items[index] == 32):
|
||||
index = random_source.randint(0, location_count-1)
|
||||
items[index] -= 8
|
||||
|
||||
return [items.count(8), items.count(16), items.count(24), items.count(32), items.count(48)]
|
||||
|
||||
|
||||
class EndingREP(Toggle):
|
||||
"""Changes the final boss to require 1000 REP instead of 960 REP to start."""
|
||||
display_name = "Extra REP Required"
|
||||
|
||||
|
||||
class StartStyle(Choice):
|
||||
"""Choose which movestyle to start with."""
|
||||
display_name = "Starting Movestyle"
|
||||
option_skateboard = 2
|
||||
option_inline_skates = 3
|
||||
option_bmx = 1
|
||||
default = 2
|
||||
|
||||
|
||||
class LimitedGraffiti(Toggle):
|
||||
"""Each graffiti design can only be used a limited number of times before being removed from your inventory.
|
||||
In some cases, such as completing a dream, using graffiti to defeat enemies, or spraying over your own graffiti,
|
||||
uses will not be counted.
|
||||
If enabled, doing graffiti is disabled during crew battles, to prevent softlocking."""
|
||||
display_name = "Limited Graffiti"
|
||||
|
||||
|
||||
class SGraffiti(Choice):
|
||||
"""Choose if small graffiti should be separate, meaning that you will need to switch characters every time you run
|
||||
out, or combined, meaning that unlocking new characters will add 5 uses that any character can use.
|
||||
Has no effect if Limited Graffiti is disabled."""
|
||||
display_name = "Small Graffiti Uses"
|
||||
option_separate = 0
|
||||
option_combined = 1
|
||||
default = 0
|
||||
|
||||
|
||||
class JunkPhotos(Toggle):
|
||||
"""Skip taking pictures of Polo for items."""
|
||||
display_name = "Skip Polo Photos"
|
||||
|
||||
|
||||
class DontSavePhotos(Toggle):
|
||||
"""Photos taken with the Camera app will not be saved.
|
||||
This can be changed later in the options menu inside the Archipelago phone app."""
|
||||
display_name = "Don't Save Photos"
|
||||
|
||||
|
||||
class ScoreDifficulty(Choice):
|
||||
"""Alters the score required to win score challenges and crew battles.
|
||||
This can be changed later in the options menu inside the Archipelago phone app."""
|
||||
display_name = "Score Difficulty"
|
||||
option_normal = 0
|
||||
option_medium = 1
|
||||
option_hard = 2
|
||||
option_very_hard = 3
|
||||
option_extreme = 4
|
||||
default = 0
|
||||
|
||||
|
||||
class DamageMultiplier(Range):
|
||||
"""Multiplies all damage received.
|
||||
At 3x, most damage will OHKO the player, including falling into pits.
|
||||
At 6x, all damage will OHKO the player.
|
||||
This can be changed later in the options menu inside the Archipelago phone app."""
|
||||
display_name = "Damage Multiplier"
|
||||
range_start = 1
|
||||
range_end = 6
|
||||
default = 1
|
||||
|
||||
|
||||
class BRCDeathLink(DeathLink):
|
||||
"""When you die, everyone dies. The reverse is also true.
|
||||
This can be changed later in the options menu inside the Archipelago phone app."""
|
||||
|
||||
|
||||
@dataclass
|
||||
class BombRushCyberfunkOptions(PerGameCommonOptions):
|
||||
logic: Logic
|
||||
skip_intro: SkipIntro
|
||||
skip_dreams: SkipDreams
|
||||
skip_statue_hands: SkipHands
|
||||
total_rep: TotalRep
|
||||
extra_rep_required: EndingREP
|
||||
starting_movestyle: StartStyle
|
||||
limited_graffiti: LimitedGraffiti
|
||||
small_graffiti_uses: SGraffiti
|
||||
skip_polo_photos: JunkPhotos
|
||||
dont_save_photos: DontSavePhotos
|
||||
score_difficulty: ScoreDifficulty
|
||||
damage_multiplier: DamageMultiplier
|
||||
death_link: BRCDeathLink
|
Reference in New Issue
Block a user