API Reference

Below is a description of the Client class that you’ll be interfacing with, as well as the data model used by the module including Enums and Dataclasses.

Client

This is the class you’ll be interfacing with to get data about the games. Most methods are static, however you can create an instance with a Ninja Kiwi Open Access Key to gain access to more functions.

class bloonspy.Client(open_access_key: str)

Client for all API calls.

Parameters:

open_access_key (str) – Your OAK for the Ninja Kiwi Open Data API.

static bosses() List[BossEvent]

Get a list of Boss events.

static challenges(challenge_filter: ChallengeFilter, pages: int = 1, start_from_page: int = 1) List[Challenge]

Get a list of challenges given a specific filter.

Note

The returned Challenge objects will only have the properties id, name, created_at, and creator_id loaded.

Parameters:
  • challenge_filter (ChallengeFilter) – Which type of challenges you’d like to see.

  • pages (int) – The number of pages to fetch.

  • start_from_page (int) – The page to start fetching from.

Returns:

A list of challenges (lazy loaded).

Return type:

List[bloonspy.model.btd6.Challenge]

static contested_territories() List[ContestedTerritoryEvent]

Get a list of Contested Territory events.

static custom_maps(custom_map_fliter: CustomMapFilter, pages: int = 1, start_from_page: int = 1) List[CustomMap]

Get a list of challenges given a specific filter.

Note

The returned CustomMap objects will only have the properties id, name, and created_at loaded.

Parameters:
  • custom_map_fliter (CustomMapFilter) – Which type of custom maps you’d like to see.

  • pages (int) – The number of pages to fetch.

  • start_from_page (int) – The page to start fetching from.

Returns:

A list of custom maps (lazy loaded).

Return type:

List[bloonspy.model.btd6.CustomMap]

static get_boss(boss_id: str, eager: bool = False) BossEvent

Fetch a specific Boss event by its ID.

Note

If lazy loaded, the returned BossEvent objects will only have the property id loaded.

Parameters:
  • boss_id (str) – The boss ID.

  • eager (bool) – If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The found Boss event.

Return type:

BossEvent

Raises:

NotFound – If no boss event with that ID is found.

static get_challenge(challenge_id: str) Challenge

Fetch a specific challenge by its ID.

Parameters:

challenge_id (str) – The challenge ID.

Returns:

The found challenge.

Return type:

Challenge

Raises:

NotFound – If no challenge with the given ID is found.

static get_contested_territory(ct_id: str, eager: bool = False) ContestedTerritoryEvent

Fetch a specific Contested Territory event by its ID.

Note

If lazy loaded, the returned ContestedTerritoryEvent object will only have the property id loaded.

Parameters:
  • ct_id (str) – The ID of the event.

  • eager (bool) –

    If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The found Contested Territory event.

Return type:

ContestedTerritoryEvent

Raises:

NotFound – If no CT with that ID is found.

static get_custom_map(map_id: str) CustomMap

Fetch a specific custom map by its ID.

Parameters:

map_id (str) – The challenge ID.

Returns:

The found map.

Return type:

CustomMap

Raises:

NotFound – If no custom map with the given ID is found.

static get_odyssey(odyssey_id: str, eager: bool = False) OdysseyEvent

Fetch a specific Odyssey by its ID.

Note

If lazy loaded, the returned OdysseyEvent object will only have the property id loaded.

Parameters:
  • odyssey_id (str) – The ID of the odyssey.

  • eager (bool) –

    If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The found odyssey.

Return type:

OdysseyEvent

Raises:

NotFound – If no odyssey with that ID is found.

static get_race(race_id: str, eager: bool = False) Race

Fetch a specific Race by its ID.

Note

If lazy loaded, the returned Race objects will only have the properties id loaded.

Parameters:
  • race_id (str) – The ID of the race.

  • eager (bool) –

    If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The found race.

Return type:

Race

Raises:

NotFound – If no race with that ID is found.

static get_team(team_id: str) Team

Fetch a specific team by its ID.

Parameters:

team_id (str) – The ID of the team.

Returns:

The found team.

Return type:

Team

Raises:

NotFound – If no team with that ID is found.

static get_user(identifier: str) User

Fetch a specific user by an identifier.

Parameters:

identifier (str) – The user ID, or its OAK.

Returns:

The found user.

Return type:

User

Raises:

NotFound – If no user with the given ID/OAK is found.

static odysseys() List[OdysseyEvent]

Get a list of Odyssey events.

static races() List[Race]

Get a list of Race events.

Note

The returned Race objects will only have the properties id, name, start, end, and total_scores loaded.

Model

Loadable

class bloonspy.model.Loadable

Represents a resource that can be loaded.

x == y

Checks if the Event is equal to another Event.

property id: str

The unique ID of the resource.

load_resource(only_if_unloaded: bool = True) None

Load the resource.

Parameters:

only_if_unloaded (bool) – Only make an API call if the resource is unloaded. If False, it essentially “reloads” the resource.

Raises:

bloonspy.exceptions.NotFound – If the resource is not found.

property loaded: bool

True if the resource is loaded.

Challenge

class bloonspy.model.btd6.Challenge

Bases: Loadable

A BTD6 Challenge. It extends Loadable.

property challenge_map: Asset

Name and URL of the map the challenge takes place in.

property created_at: datetime

The time the challenge was created at.

creator() User

Fetch the creator of the challenge.

Warning

This function needs the property creator_id to be loaded, or it will make another API call to fetch that first.

Returns:

The creator of the challenge of None if there isn’t one.

Return type:

User or None

property creator_id: str

The ID of the challenge’s creator. None if there isn’t one (e.g. Odyssey challenges).

property disable_continues: bool

True if Continues are disabled.

property disable_double_cash: bool

True if Double Cash is disabled.

property disable_instas: bool

True if Insta Monkeys is disabled.

property disable_monkey_knowledge: bool

True if Monkey Knowledge is disabled.

property disable_powers: bool

True if Powers are disabled.

property disable_selling: bool

True if Selling is disabled.

property end_round: int

The round the challenge ends at.

property game_version: GameVersion

The latest game version the challenge was last beaten in.

property gamemode: Gamemode

Gamemode of the challenge.

property id: str

The unique ID of the challenge.

property least_cash_used: int | Infinity

Least Cash restriction on the challenge. If there’s none, it’s Infinity.

property least_tiers_used: int | Infinity

Least Tiers restriction on the challenge. If there’s none, it’s Infinity.

property losses: int

How many times the challenge has been lost.

property losses_unique: int

Amount of unique people that have lost the challenge.

property max_lives: int

The maximum amount of lives you can have.

property max_paragons: int

The maximum amount of paragons you can have at any given time.

property max_towers: int

The maximum amount of towers you can have at any given time.

property modifiers: Dict[ChallengeModifier, float]

Challenge modifiers, such as bloon speeds and health.

property name: str

The name of the challenge.

property plays: int

How many times the challenge has been played.

property plays_unique: int

Amount of unique people that have played the challenge.

property powers: Dict[Power, int | Infinity]

The powers allowed for the challenge, and how many you can use of each.

property restarts: int

New in 0.3.0

The number of times users have restarted the challenge.

property round_sets: List[str]

Names of the round sets of the challenge.

property seed: int

The RNG seed for the challenge.

property start_round: int

The round the challenge starts at.

property starting_cash: int

The amount of cash you start with.

property starting_lives: int

The amount of lives you start with.

property towers: Dict[Tower, Restriction]

Tower and Hero restrictions on the challenge.

property upvotes: int

Amount of upvotes the challenge has.

property wins: int

How many times the challenge has been won.

property wins_unique: int

Amount of unique people that have won the challenge.

User

class bloonspy.model.btd6.User

Bases: Loadable

A BTD6 player. Inherits from Loadable.

property achievements: int

Number of achievements this user unlocked.

property avatar: Asset

The user’s current avatar.

property banner: Asset

The user’s current banner.

property boss_elite_medals: EventMedals

Ranked elite boss medals.

property boss_normal_medals: EventMedals

Ranked normal boss mdeals.

property coop_medals: MapMedals

Medals earned in coop mode.

property ct_global_medals: CtGlobalMedals

Contested Territory global medals.

property ct_local_medals: CtLocalMedals

Contested Territory local medals.

property followers: int

Number of followers this user has.

get_progress() UserSave

New in 0.5.0

Get an user’s save state.

Warning

The field id must be an OAK. Currently, the only way to guarantee this is if the object has been generated through bloonspy.Client.get_user() with an OAK passed as identifier.

Returns:

The User’s progress.

Return type:

UserSave

Raises:
  • NotFound – If the player is not found.

  • Forbidden – If the player is not identified through its OAK but rather through its ID.

has_oak() bool

New in 0.5.0

Checks whether the user is identified through an OAK instead of an ID. If True, it means it will have access to many methods such as get_progress().

Returns:

Whether the User is identified through its OAK.

Return type:

bool

property heroes_placed: Dict[Tower, int]

Number of times each hero has been placed.

property name: str

The name of the user.

property race_medals: EventMedals

Race event medals.

property rank: int

The user’s rank.

property single_player_medals: MapMedals

Medals earned in single player mode.

property stats: GameplayStats

Gameplay stats.

property veteran_rank: int

The user’s veteran rank, or 0 if they haven’t reached it yet.

Team

class bloonspy.model.btd6.Team

Bases: Loadable

A BTD6 Team.

property banner: Asset

The team’s equipped banner.

property frame: Asset

The team’s equipped frame.

property full_name: str

The complete name of the team. It may not be exactly what you see in game, in some cases it has the team code appended at the end, among other things.

property icon: Asset

The team’s equipped icon.

property is_disbanded: bool

New in 0.6.1.

Shortcut for status == TeamStatus.DISBANDED. If you’re fetching a team through the leaderboard, it has the advantage of not causing an extra API call to fetch the status property.

property member_count: int

The team’s member count.

property name: str

The name of the team, as seen in-game.

owner() User

Fetch the owner of the team.

Warning

This function needs the property owner_id to be loaded, or it will make another API call to fetch that first.

Returns:

The owner of the team.

Return type:

User or None

property owner_id: str

The ID of the user who currently owns the team.

property status: TeamStatus

The team’s entry status (public, closed, …).

Event

class bloonspy.model.Event

A game event.

x == y

Checks if the Event is equal to another Event.

property end: datetime

When the event ends.

property id: str

The unique ID of the event.

load_event(only_if_unloaded: bool = True) None

Load the event.

Parameters:

only_if_unloaded (bool) – Only make an API call if the event is unloaded. If False, it essentially “reloads” the event.

Raises:

bloonspy.exceptions.NotFound – If the resource is not found.

property name: str

The name of the event.

property start: datetime

When the event starts.

Race

class bloonspy.model.btd6.Race

Bases: Challenge

A race event. Inherits from Challenge.

property end: datetime

When the event ends.

leaderboard(pages: int = 1, start_from_page: int = 1) List[RacePlayer]

Get a page of the leaderboard for this event.

Note

The returned RacePlayer objects will only have the properties id, name, score, and submission_time loaded.

Parameters:
  • pages (int) – Number of pages to fetch.

  • start_from_page (int) – The first page to fetch.

Returns:

A list of players in the leaderboard.

Return type:

List[RacePlayer]

Raises:

NotFound – If the race doesn’t exist or is expired.

property name: str

The name of the race.

property start: datetime

When the event starts.

property total_scores: int

Number of users who played and submitted a score.

RacePlayer

class bloonspy.model.btd6.RacePlayer

Bases: User

An user who played a race and is now on the leaderboard. Inherits from User.

property name: str

The name of the user.

property score: Score

The time the user got.

property score_parts: List[Score]

The score parts.

property submission_time: datetime

The time the user’s score was submitted at.

BossEvent

class bloonspy.model.btd6.BossEvent

Bases: Event

A boss event. Inherits from Event.

property boss_banner: str

The URL to the banner used to advertise the event.

property boss_bloon: BossBloon

The boss bloon in this event.

elite(eager: bool = False) Boss

Get the elite boss challenge.

Note

If lazy loaded, the returned Boss object will only have the properties id, name, boss_bloon, is_elite, and total_scores loaded.

Parameters:

eager (bool) –

If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The elite boss event.

Return type:

Boss

property scoring_type: ScoreType

New in 0.6.2

The scoring type of the leaderboard.

standard(eager: bool = False) Boss

Get the standard boss challenge.

Note

If lazy loaded, the returned Boss object will only have the properties id, name, boss_bloon, is_elite, and total_scores loaded.

Parameters:

eager (bool) –

If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The standard boss event.

Return type:

Boss

property total_scores_elite: int

Total scores submitted in the elite boss.

property total_scores_standard: int

Total scores submitted in the standard boss.

Boss

class bloonspy.model.btd6.Boss

Bases: Challenge

A Boss challenge. Inherits from Challenge.

property boss_bloon: BossBloon

The boss in this challenge.

property is_elite: bool

True if the boss is Elite.

leaderboard(pages: int = 1, start_from_page: int = 1, team_size: int = 1) List[BossPlayer] | List[BossPlayerTeam]

Get a page of the leaderboard for this boss.

Note

The returned BossPlayer objects will only have the properties id, name, score, and submission_time loaded.

Parameters:
  • pages (int) – Number of pages to fetch.

  • start_from_page (int) – The first page to fetch.

  • team_size (int) – The team size to get the leaderboard for.

Returns:

A list of players in the leaderboard.

Return type:

Union[List[BossPlayer], List[BossPlayerTeam]]

Raises:
  • NotFound – If the boss doesn’t exist or is expired.

  • BadTeamSize – If team_size is less than 1 or more than 4.

property total_scores: int

The total scores submitted.

BossPlayer

class bloonspy.model.btd6.BossPlayer

Bases: User

An user who played the boss event and submitted a ranked score. Inherits from User.

property name: str

The name of the user.

property score: Score

The time the user got.

property score_parts: List[Score]

The score parts.

property submission_time: datetime

The time the user’s score was submitted at.

BossPlayerTeam

class bloonspy.model.btd6.BossPlayerTeam

A team of players who played a Ranked Co-op Boss Event.

property is_fully_loaded: bool

Whether the team is fully loaded.

Due to API restrictions, when calling leaderboard() to get coop leaderboards, the team at the end of the List could not have all of its members loaded.

property players: Tuple[BossPlayer]

The users in the team.

property score: Score

The time the team got.

property score_parts: List[Score]

The score parts.

property submission_time: datetime

The time the team’s score was submitted at.

OdysseyEvent

class bloonspy.model.btd6.OdysseyEvent

Bases: Event

An Odyssey event. Inherits from Event.

property description: str

New in 0.3.0

The Odyssey’s description.

easy(eager: bool = False) Odyssey

Get the easy mode version of the Odyssey.

Note

If lazily loaded, the returned Odyssey object will only have the properties id, name, and difficulty loaded.

Parameters:

eager (bool) –

If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The easy mode of the odyssey.

Return type:

Odyssey

hard(eager: bool = False) Odyssey

Get the hard mode version of the Odyssey.

Note

If lazily loaded, the returned Odyssey object will only have the properties id, name, and difficulty loaded.

Parameters:

eager (bool) –

If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The hard mode of the odyssey.

Return type:

Odyssey

medium(eager: bool = False) Odyssey

Get the medium mode version of the Odyssey.

Note

If lazily loaded, the returned Odyssey object will only have the properties id, name, and difficulty loaded.

Parameters:

eager (bool) –

If True, it loads all of the data right away. Set it to False if you want to limit API calls and don’t need all the data. For more information, please read Lazy and Eager Loading.

Returns:

The medium mode of the odyssey.

Return type:

Odyssey

Odyssey

class bloonspy.model.btd6.Odyssey

Bases: Loadable

Represents a single Odyssey. Inherits from Loadable.

property available_powers: Dict[Power, int]

Available powers to choose from for the odyssey.

property available_towers: Dict[Tower, Restriction]

Available towers to choose from for the odyssey.

property default_powers: Dict[Power, int]

Default powers for the odyssey.

property default_towers: Dict[Tower, int]

Default towers for the odyssey.

property description: str

New in 0.3.0

The Odyssey’s description

property difficulty: OdysseyDifficulty

The Odysseys’s difficulty

property is_extreme: bool

True if the odyssey is extreme.

maps() List[Challenge]

Get all of the odyssey’s challenges.

property max_boat_seats: int

Max number of monkeys you can take.

property max_monkey_seats: int

Max number of monkey types you can take.

property max_power_slots: int

Max number of powers you can take.

property name: str

The Odyssey’s name

property rewards: List[Power | InstaMonkey | Reward]

Rewards for completing the odyssey.

property starting_lives: int

Odyssey’s starting lives

ContestedTerritoryEvent

class bloonspy.model.btd6.ContestedTerritoryEvent

Bases: Event

A Contested Territory event. Inherits from Event.

property event_number: int

Number of the event.

leaderboard_player(pages: int = 1, start_from_page: int = 1) list[bloonspy.model.btd6.ContestedTerritory.CtPlayer]

Get a page of the player leaderboard.

Note

The returned CtPlayer objects will only have the properties id, name, and score loaded.

Parameters:
  • pages (int) – Number of pages to fetch.

  • start_from_page (int) – The first page to fetch.

Returns:

A list of players in the leaderboard.

Return type:

List[CtPlayer]

Raises:

NotFound – If the boss doesn’t exist or is expired.

leaderboard_team(pages: int = 1, start_from_page: int = 1) list[bloonspy.model.btd6.ContestedTerritory.CtTeam]

Get a page of the team leaderboard.

Note

The returned CtTeam objects will only have the properties id, name, and score loaded.

Parameters:
  • pages (int) – Number of pages to fetch.

  • start_from_page (int) – The first page to fetch.

Returns:

A list of teams in the leaderboard.

Return type:

List[CtTeam]

Raises:

NotFound – If the boss doesn’t exist or is expired.

property name: str

The name of the event.

property total_scores_player: int

Number of players who participated in the event.

property total_scores_team: int

Number of teams who participated in the event.

CtPlayer

class bloonspy.model.btd6.CtPlayer

Bases: User

A player who has played a CT event and is on the leaderboard. Inherits from User.

property name: str

The name of the user.

property score: int

The current CT points of the user.

CtTeam

class bloonspy.model.btd6.CtTeam

Bases: Team

A team who participated in Contested Territory and is on the leaderboards. Inherits from Team.

property score: int

The current total CT points of the team.

CustomMap

class bloonspy.model.btd6.CustomMap

Bases: Loadable

New in 0.7.0

A custom map created by an user.

property created_at: datetime

The time the map was created at.

creator() User

Fetch the creator of the map.

Returns:

The creator of the challenge.

property game_version: GameVersion

The game version this map was created in.

property id: str

The unique ID of the custom map.

property losses: int

How many times people have lost on this map.

property losses_unique: int

How many unique people have lost at this map.

property name: str

The name of the custom map.

property plays: int

The amount of times this map has been played.

property plays_unique: int

How many unique users have played the map.

property restarts: int

How many times this map has been restarted.

property thumbnail: str

URL to an image of the custom map.

property upvotes: int

How many upvotes this map has.

property wins: int

How many times this time has been beaten.

property wins_unique: int

How many unique players have won at this map.

Data Classes

UserSave

class bloonspy.model.btd6.UserSave

New in 0.5.0

A dataclass detailing an user’s save state.

achievements_claimed: list[bloonspy.model.btd6.Progress.Achievement]

Achievements claimed.

big_bloons_active: bool

Whether Big Bloons is active.

big_towers_active: bool

Whether Big Towers is active.

challenges_played: int

Total challenges played.

challenges_shared: int

Total challenges shared.

collection_event_crates_opened: int

Number of ollect event crates opened.

consecutive_daily_challenges_completed: int

Current number of consecutive days a Daily Challenge has been completed.

continues_used: int

Continues used.

daily_reward_count: int

Daily rewards claimed.

static fetch(oak: str) UserSave

Get an UserSave object through an OAK.

Parameters:

oak (str) – The OAK used to get the save of.

Returns:

The UserSave belonging to the User who owns the OAK.

Return type:

UserSave

Raises:

bloonspy.exceptions.NotFound – If the player is not found.

games_played: int

Total games played.

highest_round: int

Highest seen round.

insta_monkeys: dict[bloonspy.model.btd6.Tower.Tower, dict[bloonspy.model.btd6.Rewards.InstaMonkey, int]]

Insta monkeys collected.

knowledge_points: int

Current Monkey Knowledge points.

latest_game_version: GameVersion

The latest version of the game that this player has played.

map_progress: dict[bloonspy.model.btd6.Map.Map, bloonspy.model.btd6.Map.MapProgress]

The player’s map completions.

monkey_money: int

Current Monkey Money.

named_monkeys: dict[bloonspy.model.btd6.Tower.Tower, str]

Named monkey names.

powers: dict[bloonspy.model.btd6.Power.Power, bloonspy.model.btd6.Power.PowerAmount]

New in 0.5.1. Amount of powers obtained.

primary_hero: Tower

Current Selected Hero.

rank: int

Current Rank.

small_bloons_active: bool

Whether Small Bloons is active.

small_towers_active: bool

Whether Small Towers is active.

total_completed_odysseys: int

Total Odysseys completed.

total_daily_challenges_completed: int

Total Daily Challenges completed.

total_races_entered: int

Total eaces entered.

total_team_trophies_earned: int

Lifetime team trophies earned through events.

total_trophies_earned: int

Lifetime trophies earned through events.

tower_xp: dict[bloonspy.model.btd6.Tower.Tower, int]

XP accumulated for each tower.

trophies: int

Current trophies.

trophy_store_items: TrophyStoreItemStatus

Trophy Store items purchased.

unlocked_big_bloons: bool

Whether Big Bloons has been unlocked.

unlocked_big_towers: bool

Whether Big Towers has been unlocked.

unlocked_hero_skins: dict[bloonspy.model.btd6.Tower.HeroSkin, bool]

Hero skins unlocked.

unlocked_heros: dict[bloonspy.model.btd6.Tower.Tower, bool]

Heroes unlocked.

unlocked_knowledge: dict[bloonspy.model.btd6.Progress.MonkeyKnowledge, bool]

Monkey Knowledge unlocked.

unlocked_small_bloons: bool

Whether Small Bloons has been unlocked.

unlocked_small_towers: bool

Whether Small Towers has been unlocked.

unlocked_towers: dict[bloonspy.model.btd6.Tower.Tower, bool]

Towers unlocked.

unlocked_upgrades: dict[bloonspy.model.btd6.Progress.Upgrade, bool]

Upgrades unlocked.

veteran_rank: int

Current Veteran Rank.

veteran_xp: int

Current Veteran XP.

xp: int

Current XP.

GameVersion

Asset

InstaMonkey

class bloonspy.model.btd6.InstaMonkey

An Insta Monkey. Can be created manually by passing a Tower and 3 paths as parameters.

from bloonspy import btd6, exceptions

glaive_dominus = btd6.InstaMonkey(btd6.Tower.BOOMERANG_MONKEY, 5, 0, 0)
try:
    invalid_insta = btd6.InstaMonkey(btd6.Tower.BOOMERANG_MONKEY, 3, 3, 3)
except exceptions.InvalidTowerPath:
    print("3-3-3 is not a valid path!")
bottom_path: int

Bottom path upgrades.

middle_path: int

Middle path upgrades.

property tier: int

The tier of the Insta Monkey.

top_path: int

Top path upgrades.

tower: Tower

The tower this Insta Monkey is for.

Reward

class bloonspy.model.btd6.Reward

A generic reward.

amount: int

Amount of the reward.

type: Literal['MonkeyMoney', 'CollectionEvent']

Name of the reward.

ChallengeModifier

class bloonspy.model.btd6.ChallengeModifier

All the modifiers of a challenge.

ability_cooldown_reduction: float = 1.0

Multiplier for ability cooldowns.

all_camo: bool = False

If True, all bloons will be camo.

all_regrow: bool = False

If True, all bloons will be regrow.

bloon_speed: float = 1.0

Bloon speed multiplier.

boss_health: float = 1.0

Boss bloon health multiplier

boss_speed: float = 1.0

Boss bloon speed multiplier.

ceramic_health: float = 1.0

Ceramic layer health multiplier.

moab_health: float = 1.0

MOAB class bloon health multiplier.

moab_speed: float = 1.0

MOAB speed multiplier.

regrow_rate: float = 1.0

Regrow rate multiplier

removable_cost: float = 1.0

Multiplier for the cost of track removables.

Gamemode

class bloonspy.model.btd6.Gamemode

Difficulty and mode for a game. Can be created manually by passing a Difficulty and Mode enum as parameters.

from bloonspy import btd6

chimps = btd6.Gamemode(btd6.Difficulty.HARD, btd6.Mode.CHIMPS)
military_only = btd6.Gamemode(btd6.Difficulty.MEDIUM, btd6.Mode.MILITARY_ONLY)
some_custom_mode = btd6.Gamemode(btd6.Difficulty.EASY, btd6.Mode.DOUBLE_HP_MOABS)
difficulty: Difficulty

The game’s difficulty.

static easy_modes() list['Gamemode']

Shortcut for getting all Easy mode gamemodes.

Returns:

A list of gamemodes.

Return type:

list[Gamemode]

static hard_modes() list['Gamemode']

Shortcut for getting all Hard mode gamemodes.

Returns:

A list of gamemodes.

Return type:

list[Gamemode]

static medium_modes() list['Gamemode']

Shortcut for getting all Medium mode gamemodes.

Returns:

A list of gamemodes.

Return type:

list[Gamemode]

mode: Mode

The game’s mode.

EventMedals

class bloonspy.model.btd6.EventMedals

Medal set for events.

first: int = 0

Number of first place finishes.

second: int = 0

Number of second place finishes.

third: int = 0

Number of third place finishes.

top_10_percent: int = 0

Number of Top 10% finishes.

top_1_percent: int = 0

Number of Top 1% finishes.

top_25_percent: int = 0

Number of Top 25% finishes.

top_50: int = 0

Number of Top 50 finishes.

top_50_percent: int = 0

Number of Top 50% finishes.

top_75_percent: int = 0

Number of Top 75% finishes.

CtLocalMedals

class bloonspy.model.btd6.CtLocalMedals

Medal set for Contested Territory (local leaderboard).

first: int = 0

Number of first place finishes.

second: int = 0

Number of second place finishes.

third: int = 0

Number of third place finishes.

top_10: int = 0

Number of Top 10 finishes.

top_20: int = 0

Number of Top 20 finishes.

top_40: int = 0

Number of Top 40 finishes.

top_60: int = 0

Number of Top 60 finishes.

CtGlobalMedals

class bloonspy.model.btd6.CtGlobalMedals

Medal set for Contested Territory (global leaderboard).

top_100: int = 0

Number of Top 100 finishes.

top_10_percent: int = 0

Number of Top 10% finishes.

top_1_percent: int = 0

Number of Top 1% finishes.

top_25: int = 0

Number of Top 25 finishes.

top_25_percent: int = 0

Number of Top 25% finishes.

top_50_percent: int = 0

Number of Top 50% finishes.

top_75_percent: int = 0

Number of Top 75% finishes.

MapMedals

class bloonspy.model.btd6.MapMedals

Medal set for maps.

alternate_bloons_rounds: int = 0

Number of medals for Hard - Alternate Bloons Rounds.

apopalypse: int = 0

Number of medals for Medium - Apopalypse.

chimps_black: int = 0

Number of medals for Hard - CHIMPS (black).

chimps_red: int = 0

Number of medals for Hard - CHIMPS (red).

deflation: int = 0

Number of medals for Easy - Deflation.

double_hp_moabs: int = 0

Number of medals for Hard - Double HP MOABs.

easy: int = 0

Number of medals for Easy - Standard.

half_cash: int = 0

Number of medals for Hard - Half Cash.

hard: int = 0

Number of medals for Hard - Standard.

impoppable: int = 0

Number of medals for Hard - Impoppable.

magic_only: int = 0

Number of medals for Hard - Magic only.

medium: int = 0

Number of medals for Medium - Standard.

military_only: int = 0

Number of medals for Medium - Military only.

primary_only: int = 0

Number of medals for Easy - Primary only.

reverse: int = 0

Number of medals for Medium - Reverse.

Restriction

class bloonspy.model.btd6.Restriction

Generic tower restriction.

max_towers: int | Infinity

Max amount of towers you can place of a kind.

TowerRestriction

class bloonspy.model.btd6.TowerRestriction

Non-hero restriction. Inherits from Restriction.

bottom_path_blocked: int

Number of restricted bottom path upgrades.

middle_path_blocked: int

Number of restricted middle path upgrades.

top_path_blocked: int

Number of restricted top path upgrades.

BloonsPoppedStats

GameplayStats

class bloonspy.model.btd6.GameplayStats

User’s gameplay stats.

bloons_leaked: int = 0

Total RBE leaked.

bloons_popped: BloonsPoppedStats

In depth stats about bloons popped.

cash_earned: int = 0

Total cash earned.

challenges_completed: int = 0

Total challenges completed.

collection_chests_opened: int = 0

Number of collection chests opened.

coop_cash_given: int = 0

Total cash gifted in coop games.

daily_rewards: int = 0

Total daily rewards collected.

damage_done_to_bosses: int = 0

Total damage done to Boss bloons

game_count: int = 0

Number of games played

games_won: int = 0

Number of games won

highest_round: int = 0

Highest round beaten

highest_round_chimps: int = 0

Highest round beaten in CHIMPS mode

highest_round_deflation: int = 0

Highest round beaten in Deflation mode

insta_monkey_collection: int = 0

Number of unique Insta Monkeys collected

monkey_teams_wins: int = 0

Number of games won with the Monkey Teams restrictions.

most_experienced_monkey: Tower = 'Dart Monkey'

Monkey with the most XP.

necro_bloons_reanimated: int = 0

Number of necro bloons reanimated.

powers_used: int = 0

Number of powers used.

total_odyssey_stars: int = 0

Total odyssey stars.

total_odysseys_completed: int = 0

Number of odysseys completed.

total_trophies_earned: int = 0

Lifetime trophies earned through events.

transforming_tonics_used: int = 0

Number of times the Transformation Tonic ability was used.

Infinity

class bloonspy.Infinity

Class to represent infinity.

To check whether something is infinity, just see if they’re equal.

not_infinity = 3
print(not_infinity == Infinity)  # False
infinity = Infinity()
print(infinity == Infinity)  # True

Score

class bloonspy.model.btd6.Score

An event score.

x == y

Checks if the Score is equal to another Score.

x >= y

Checks if the Score is greater or equal than another Score.

x <= y

Checks if the Score is less or equal than another Score.

x > y

Checks if the Score is greater than another Score.

x < y

Checks if the Score is less than another Score.

type: ScoreType

What the score represents.

value: int | timedelta

The actual score value.

MapProgress

class bloonspy.model.btd6.MapProgress

New in 0.5.0

The User’s progress in a map.

beaten: bool

Whether the map was beaten at least once, in any gamemode.

coop: dict[bloonspy.model.btd6.Gamemode.Gamemode, bloonspy.model.btd6.Map.GamemodeCompletionData]

Coop map progress.

coop_border: MapBorder = 'None'

The border of the map, in coop.

single_player: dict[bloonspy.model.btd6.Gamemode.Gamemode, bloonspy.model.btd6.Map.GamemodeCompletionData]

Single player map progress.

single_player_border: MapBorder = 'None'

The border of the map.

GamemodeCompletionData

class bloonspy.model.btd6.GamemodeCompletionData

New in 0.5.0

Statistics of a gamemode in a map.

completed: bool

Whether this gamemode was beaten.

completed_without_loading_save: bool

Whether this gamemode was beaten without loading from saves.

highest_round: int

Highest round on this gamemode.

times_completed: int

Number of times this gamemode was completed.

TrophyStoreItemStatus

class bloonspy.model.btd6.TrophyStoreItemStatus

New in 0.5.0

Purchase status of all trophy store items.

all_monkeys: AllMonkeyFx

Cosmetics that apply to all monkeys.

avatars: dict[int, bool]

Avatars bought, the dict keys represent the numeric ID of the avatar.

banners: dict[int, bool]

Banners bought, the dict keys represent the numeric ID of the banner.

bloon_decals: BloonDecals

Decals that apply to Bloons, MOABs, or both.

bloon_pop_fx: BloonsPopFx

Effects when bloons pop.

coop_emotes: CoopEmotes

Coop emotes bought.

hero_fx: HeroPlacementFx

Hero placement/upgrade effects.

moab_skins: MoabSkins

Skins that apply to all or specific MOAB-class bloons.

monkey_names: bool

Whether Monkey Names has been bought.

music_tracks: MusicTracks

Music tracks bought.

pets: TowerPets

Tower pets bought.

power_skins: PowerSkins

Skins that apply to Powers.

projectiles: TowerProjectiles

Tower projectiles bought.

village_flags: VillageFlagCosmetics

Village flags bought.

HeroPlacementFx

class bloonspy.model.btd6.HeroPlacementFx

New in 0.5.0

Purchase status of Hero placement effects.

adora_sunbeam: bool

Adora’s Sunbeam placement FX.

benjamin_matrix: bool

Benjamin’s Matrix placement FX.

benjammin_party_lights: bool

BenJammin’s Party Lights placement FX.

biker_bones_hellrift: bool

Biker Bones’ Hellrift placement FX.

churchill_tank_drop: bool

Churchill’s Tank Drop placement FX.

cyber_quincy_fireworks: bool

Cyber Quincy’s Fireworks placement FX.

etn_beam_down: bool

ETN’s Beam Down placement FX.

ezili_glyph: bool

Ezili’s Glyph placement FX.

gwendolin_fireball: bool

Gwen’s Fireball placement FX.

pat_fusty_superjump: bool

Pat’s Superjump placement FX.

quincy_special_forces: bool

Quincy’s Special Forces placement FX.

striker_jones_paradrop: bool

Striker Jones’ Paradrop placement FX.

PowerSkins

class bloonspy.model.btd6.PowerSkins

New in 0.5.0

Purchase status of Power skins.

banana_farmer_banana_costume: bool

The Banana Farmer’s Banana Costume.

banana_farmer_reaper: bool

New in 0.5.1. The Banana Farmer’s Reaper.

camo_trap_sprinkler: bool

New in 0.5.1. The Camo Trap’s Sprinkler.

cash_drop_coffin: bool

New in 0.5.1. The Cash Drop’s Coffin Drop.

dart_time_matrix: bool

The Time Stop’s Dart Matrix.

energising_totem_christmas_tree: bool

New in 0.5.1. The Energising Totem’s Christmas Tree.

glue_trap_honey_trap: bool

The Glue Trap’s Honey Trap.

iceberg_pontoon: bool

The Pontoon’s Iceberg.

lava_lake: bool

The Portable Lake’s Lava Lake.

mine_bauble: bool

New in 0.5.1. The Moab Mine’s Bauble.

monkey_boost_fireworks: bool

New in 0.5.1. The Monkey Boost’s Fireworks.

monkey_boost_sugar_rush: bool

The Monkey Boost’s Sugar Rush.

retro_techbot: bool

New in 0.5.1. The Techbot’s Retro skin.

road_spikes_flower_patch: bool

The Road Spikes’ Flower Patch.

super_vampire_storm: bool

The Super Monkey Storm’s Vampire Storm.

thrive_stonks: bool

The Thrive Stonks.

TowerPets

class bloonspy.model.btd6.TowerPets

New in 0.5.0

Purchase status of Tower and Hero pets.

banana_farm_chicken: bool

The Banana Farm’s Chicken pet.

bomb_shooter_tortoise: bool

New in 0.5.1. The Bomb Shooter’s Tortoise pet.

brickell_parrot: bool

Brickell’s Parrot pet.

etienne_roomba: bool

Etienne’s Roomba pet.

ezili_frog: bool

Ezili’s Frog pet.

geraldo_pack_mule: bool

Gerald’s Pack Mule pet.

glue_gunner_rat: bool

The Glue Gunner’s Glue Rat pet.

gwendolin_firefox: bool

Gwen’s Firefox pet.

heli_pilot_hummingbird: bool

The Heli Pilot’s Hummingbird pet.

ice_monkey_snowman: bool

New in 0.5.1. The Ice Monkey’s Snowman pet.

joan_of_arc_adora_dragon: bool

Joan of Arc Adora’s Dragon pet.

monkey_ace_dragonfly: bool

The Monkey Ace’s Dragonfly pet.

monkey_buccaneer_narwhal: bool

The Monkey Buccaneer’s Narwhal pet.

monkey_sub_rubber_duck: bool

The Monkey Sub’s Rubber Duck pet.

mountain_obyn_balfrog: bool

Mountain Obyn’s Balfrog pet.

ninja_monkey_kiwi: bool

The Ninja’s Kiwi pet.

obyn_bunny: bool

Obyn’s Bunny pet.

obyn_wolf: bool

Obyn’s Wolf pet.

pat_penguin: bool

New in 0.5.1. Pat Fusty’s Penguin pet.

psi_bison: bool

Psi’s Bison pet.

quincy_dad_of_quincy: bool

Quincy’s Dad of Quincy pet.

sauda_crane: bool

Sauda’s Crane pet.

sentai_churchill_drone: bool

Sentai Churchill’s Drone pet.

sniper_monkey_chameleon: bool

The Sniper Monkey’s Chameleon pet.

striker_jones_german_shepherd: bool

Striker Jones’ German Shepherd pet.

super_monkey_bat: bool

The Super Monkey’s Bat pet.

tack_shooter_hedgehog: bool

The Tack Shooter’s Hedgehog pet.

village_elf: bool

New in 0.5.1. The Monkey Village’s Elf pet.

TowerProjectiles

class bloonspy.model.btd6.TowerProjectiles

New in 0.5.0

Purchase status of custom Tower projectiles.

alchemist_spring_flowers: bool

Alchemist’s spring flower projectiles.

bomb_pumpkin: bool

New in 0.5.1. The Bomb Shooter’s Pumpkin bombs.

boomerang_candy_cane: bool

New in 0.5.1. The Boomerang Monkey’s Candy Cane projectiles.

dart_monkey_snowballs: bool

New in 0.5.1. The Dart Monkey’s Snowball projectiles.

dartling_easter_eggs: bool

Dartling Gunner’s easter egg projectiles.

engineer_vampire_hunter: bool

New in 0.5.1. The Engineer’s Vampire bloontraps.

farm_candy_corn: bool

New in 0.5.1. The Banana Farm’s Candy Corn bananas.

farm_presents: bool

New in 0.5.1. The Banana Farm’s Present bananas.

monkey_ace_bones: bool

New in 0.5.1. The Monkey Ace’s Bone projectiles.

mortar_snow: bool

New in 0.5.1. The Mortar’s Snow projectiles.

ninja_snowflakes: bool

New in 0.5.1. The Ninja Monkey’s Snowflake projectiles.

sniper_confetti: bool

New in 0.5.1. The Sniper’s Confetti projectiles.

spike_factory_pineapples: bool

Spike Factory’s pineapple spikes.

tack_icicles: bool

New in 0.5.1. The Tack Shooter’s Icicle projectiles.

wizard_fireworks: bool

New in 0.5.1. The Wizard Monkey’s Firework projectiles.

wizard_zombies: bool

Necromancer’s smiling zombie bloons.

VillageFlagCosmetics

class bloonspy.model.btd6.VillageFlagCosmetics

New in 0.5.0

Purchase status of the Village flag cosmetics.

flag_australian: bool

The Australian flag

flag_banana: bool

The Banana Republic flag

flag_brazil: bool

The Brazil flag

flag_canada: bool

The Canada flag

flag_germany: bool

The Germany flag

flag_new_zeland: bool

The New Zeland flag

flag_pride: bool

The pride flag

flag_scotland: bool

The Scotland flag

flag_sweden: bool

The Sweden flag

flag_uk: bool

The UK flag

flag_usa: bool

The USA flag

MusicTracks

class bloonspy.model.btd6.MusicTracks

New in 0.5.0

Purchase status of music tracks.

bmc_street_party: bool

The “BMC Street Party” music track.

fiesta_synthwave_mix: bool

The “Fiesta Flamenco - Synthwave Mix” music track.

jingle_bloons: bool

The “Jingle - Bloons” music track.

sunset64_mix: bool

The “Sunset - 64 Mix” music track.

sunset_silent_night_mix: bool

The “Sunset - Silent Night Mix” music track.

sunshine_fiesta_mix: bool

The “Sunshine - Fiesta Mix” music track.

sunshine_gameboy_mix: bool

The “Sunshine - Gameboy Mix” music track.

title_fiesta_mix: bool

The “Title - Fiesta Mix” music track.

tribes_funked_mix: bool

The “Tribes - Funked Mix” music track.

tribes_jaloon_mix: bool

The “Tribes - Jaloon Mix” music track.

tropical_complextro_mix: bool

The “Tropical - Complextro Mix” music track.

tropical_octopus_mix: bool

The “Tropical - Octopus Mix” music track.

winter_chilled_mix: bool

The “Winter - Chilled Mix” music track.

AllMonkeyFx

class bloonspy.model.btd6.AllMonkeyFx

New in 0.5.0

Purchase status of Monkey FX that apply to all monkeys.

bats: bool

The Bats upgrade FX.

butterflies: bool

The Butterflies upgrade FX.

fireworks: bool

New in 0.5.1. The Fireworks upgrade FX.

ghosts: bool

The Ghosts upgrade FX.

presents: bool

New in 0.5.1. The Presents upgrade FX.

CoopEmotes

class bloonspy.model.btd6.CoopEmotes

New in 0.5.0

Purchase status of Coop emotes.

animation_begging_monkey: bool

The Pleeeease Monkey emote.

animation_ben_cool: bool

The Ben Cool emote.

animation_biker_bones_rage: bool

The Biker Bones Rage emote.

animation_ezili_facepalm: bool

The Ezili Facepalm emote.

animation_fistpump: bool

The Fist Pump emote.

animation_mind_blown: bool

The Mind Blown emote.

animation_obyn_peace: bool

The Obyn Peace emote.

animation_panic_monkey: bool

The Panic Monkey emote.

animation_pat_flex: bool

The Pat Flex emote.

animation_pixel_monkey_dance: bool

The Pixel Monkey Dance emote.

animation_psigh: bool

The Psigh emote.

animation_thinking_monkey: bool

The Thinking Monkey emote.

animation_trophy: bool

The Trophy emote.

animation_tumbleweed: bool

The Tumbleweed emote.

fullscreen_celebration: bool

The Celebration animation.

fullscreen_disco_ball: bool

The Disco Ball animation.

fullscreen_flower_bloom: bool

The Flower Bloom emote.

fullscreen_happy_holidays: bool

New in 0.5.1. The Happy Holidays! emote.

fullscreen_love_hearts: bool

The Love Hearts animation.

fullscreen_rainbow: bool

The Rainbow animation.

fullscreen_snow_and_sleighbells: bool

New in 0.5.1. The Snow and Sleighbells animation.

fullscreen_sparkling_hearts: bool

The Sparkling Hearts animation.

fulscreen_confetti_cannon: bool

The Confetti Cannon animation.

icon_danger: bool

The Danger Icon emote.

icon_no_cash_drops: bool

The No Cash Drops emote.

icon_player_numbers: bool

The Player Number Icons emote.

icon_skull_and_crossbones: bool

The Skull and Crossbones emote.

icon_stop: bool

The Stop Icon emote.

icon_tower_types: bool

New in 0.5.1. The Tower Types emote.

sound_airhorn: bool

The Airhorn sound.

sound_crickets: bool

The Crickets sound.

sound_scream: bool

The Scream sound.

sound_siren: bool

The Siren sound.

text_activate: bool

The “Activate!” emote.

text_all_is_fine: bool

The “All is Fine” emote.

text_amazing: bool

The “Amazing” emote.

text_lets_go: bool

The “Let’s Go” emote.

text_need_more: bool

The “Need More!” emote.

text_next_round_scary: bool

The “Next Round! Scary!” emote.

text_ok: bool

The “OK” emote.

text_perfect_timing: bool

The “Perfect Timing” emote.

text_why: bool

The “Why?!” emote.

BloonsPopFx

class bloonspy.model.btd6.BloonsPopFx

New in 0.5.0

Purchase status of Bloons Pop FX.

bones: bool

New in 0.5.1. The Bones pop FX

confetti: bool

The Confetti pop FX.

flowers: bool

The Flowers pop FX.

mo_monkeys: bool

The Mo’ Monkeys pop FX.

pewpew: bool

The PewPew Pop pop FX.

pow_pop: bool

The Pow Pop pop FX.

snowflakes: bool

The Snowflakes pop FX.

water_bloon: bool

The Water bloon pop FX.

BloonDecals

class bloonspy.model.btd6.BloonDecals

New in 0.5.0

Purchase status of bloon decals.

all_bucket_hat: bool

The Bucket Hat cosmetic.

all_cat_ear: bool

The Cat Ears cosmetic.

all_disguise_glasses: bool

The Disguise Glasses cosmetic.

all_elf_hat: bool

New in 0.5.1. The Elf Hat cosmetic.

all_googly_eyes: bool

The Googly Eyes cosmetic.

all_hatchet: bool

New in 0.5.1. The Hatchet cosmetic.

all_party_hat: bool

The Party Hat cosmetic.

all_sunglasses: bool

New in 0.5.1. The Sunglasses cosmetic.

all_top_hats: bool

The Top Hat cosmetic.

all_trucker_hats: bool

The Trucker Hat cosmetic.

bloons_beards: bool

The Beard cosmetic.

bloons_bunny_ears: bool

The Bunny Ears cosmetic.

bloons_daisy_chain: bool

The Daisy Chain cosmetic.

bloons_santa_hats: bool

New in 0.5.1. The Santa Hats cosmetic.

bloons_vampire_cape: bool

New in 0.5.1. The Vampire Cape cosmetic.

moab_red_nose: bool

New in 0.5.1. The Red Nose MOAB cosmetic.

MoabSkins

class bloonspy.model.btd6.MoabSkins

New in 0.5.0

Purchase status of MOAB skins.

all_old_timey: bool

The Old Timey skin.

bad_pinata: bool

The BAD Pinata skin.

bad_skeleton: bool

The BAD Skeleton skin.

bad_whale: bool

The BAD Whale skin.

bfb_btd4_retro: bool

The BFB BTD4 Retro skin.

bfb_chocolate_egg: bool

The BFB Chocolate Egg skin.

bfb_lantern: bool

The BFB Lantern skin.

bfb_lobster: bool

The BFB Lobster skin.

bfb_pizza: bool

The BFB Pizza skin.

bfb_sci_fi: bool

The BFB Sci-Fi skin.

ddt_doomsleigh: bool

New in 0.5.1. The DDT Doomsleigh skin.

ddt_neon: bool

The DDT Neon skin.

ddt_shark: bool

The DDT Shark skin.

ddt_spider: bool

New in 0.5.1. The DDT Spider skin.

moab_boat: bool

New in 0.5.1. The MOAB Boat skin.

moab_btd4_retro: bool

The MOAB BTD4 Retro skin.

moab_chocolate_egg: bool

The MOAB Chocolate Egg skin.

moab_football: bool

The MOAB Football skin.

moab_frozen_glacier: bool

The MOAB Frozen Glacier skin.

moab_mauler: bool

The MOAB Mauler skin.

moab_pufferfish: bool

The MOAB Pufferfish skin.

zomg_jack_o_lantern: bool

New in 0.5.1. The ZOMG Jack-O-Lantern skin.

zomg_steampunk: bool

The ZOMG Steampunk skin.

zomg_watermelon: bool

The ZOMG Watermelon skin.

PowerAmount

class bloonspy.model.btd6.PowerAmount

New in 0.5.1

Describes how many powers of a single type an User has.

is_new: bool

Whether the User has just gotten this power (it has the little red exclamation mark in the top-right).

quantity: int

How much of this power an user has.

CtTile

class bloonspy.model.btd6.CtTile

New in 0.6.0.

Represents a CT tile.

game_type: GameType

The tile challenge’s type. For spawn tiles, it’s None.

id: str

The 3 letter code of the tile.

relic: Relic = None

The relic this tile hosts, if any.

tile_type: CtTileType

The tile’s type.

Enums

BossBloon

enum bloonspy.model.btd6.BossBloon(value)

Valid Boss Bloons in the game.

Valid values are as follows:

BLOONARIUS = <BossBloon.BLOONARIUS: 'bloonarius'>
LYCH = <BossBloon.LYCH: 'lych'>
VORTEX = <BossBloon.VORTEX: 'vortex'>
DREADBLOON = <BossBloon.DREADBLOON: 'dreadbloon'>
PHAYZE = <BossBloon.PHAYZE: 'phayze'>

TeamStatus

enum bloonspy.model.btd6.TeamStatus(value)

Entrance status of a team.

Valid values are as follows:

PUBLIC = <TeamStatus.PUBLIC: 'Public'>
PRIVATE = <TeamStatus.PRIVATE: 'Closed'>
INVITE_ONLY = <TeamStatus.INVITE_ONLY: 'Invite Only'>
DISBANDED = <TeamStatus.DISBANDED: 'Disbanded'>

ChallengeFilter

enum bloonspy.model.btd6.ChallengeFilter(value)

Available challenge filters for search functions.

Valid values are as follows:

NEWEST = <ChallengeFilter.NEWEST: 'newest'>
TRENDING = <ChallengeFilter.TRENDING: 'trending'>
DAILY = <ChallengeFilter.DAILY: 'daily'>

Difficulty

enum bloonspy.model.btd6.Difficulty(value)

The three main game difficulties.

Valid values are as follows:

EASY = <Difficulty.EASY: 'Easy'>
MEDIUM = <Difficulty.MEDIUM: 'Medium'>
HARD = <Difficulty.HARD: 'Hard'>

Mode

enum bloonspy.model.btd6.Mode(value)

A game’s secondary mode.

Valid values are as follows:

STANDARD = <Mode.STANDARD: 'Standard'>
PRIMARY_ONLY = <Mode.PRIMARY_ONLY: 'Primary Only'>
DEFLATION = <Mode.DEFLATION: 'Deflation'>
MILITARY_ONLY = <Mode.MILITARY_ONLY: 'Military Only'>
REVERSE = <Mode.REVERSE: 'Reverse'>
APOPALYPSE = <Mode.APOPALYPSE: 'Apopalypse'>
MAGIC_ONLY = <Mode.MAGIC_ONLY: 'Magic Only'>
DOUBLE_HP_MOABS = <Mode.DOUBLE_HP_MOABS: 'Double HP MOABs'>
HALF_CASH = <Mode.HALF_CASH: 'Half Cash'>
ALTERNATE_BLOONS_ROUNDS = <Mode.ALTERNATE_BLOONS_ROUNDS: 'Alternate Bloons Rounds'>
IMPOPPABLE = <Mode.IMPOPPABLE: 'Impoppable'>
CHIMPS = <Mode.CHIMPS: 'CHIMPS'>

OdysseyDifficulty

enum bloonspy.model.btd6.OdysseyDifficulty(value)

The three difficulties Odysseys come in.

Valid values are as follows:

EASY = <OdysseyDifficulty.EASY: 'easy'>
MEDIUM = <OdysseyDifficulty.MEDIUM: 'medium'>
HARD = <OdysseyDifficulty.HARD: 'hard'>

Power

enum bloonspy.model.btd6.Power(value)

Available powers in the game

Valid values are as follows:

SMS = <Power.SMS: 'Super Monkey Storm'>
MONKEY_BOOST = <Power.MONKEY_BOOST: 'Monkeyboost'>
THRIVE = <Power.THRIVE: 'Thrive'>
TIME_STOP = <Power.TIME_STOP: 'Time Stop'>
CASH_DROP = <Power.CASH_DROP: 'Cash Drop'>
PONTOON = <Power.PONTOON: 'Pontoon'>
ROAD_SPIKES = <Power.ROAD_SPIKES: 'Road Spikes'>
GLUE_TRAP = <Power.GLUE_TRAP: 'Glue Trap'>
MOAB_MINE = <Power.MOAB_MINE: 'Moab Mine'>
CAMO_TRAP = <Power.CAMO_TRAP: 'Camo Trap'>
PORTABLE_LAKE = <Power.PORTABLE_LAKE: 'Portable Lake'>
TECH_BOT = <Power.TECH_BOT: 'Tech Bot'>
ENERGISING_TOTEM = <Power.ENERGISING_TOTEM: 'Energising Totem'>
BANANA_FARMER = <Power.BANANA_FARMER: 'Banana Farmer'>

Tower

enum bloonspy.model.btd6.Tower(value)

Available towers in the game.

Valid values are as follows:

QUINCY = <Tower.QUINCY: 'Quincy'>
GWENDOLIN = <Tower.GWENDOLIN: 'Gwendolin'>
STRIKER_JONES = <Tower.STRIKER_JONES: 'Striker Jones'>
OBYN = <Tower.OBYN: 'Obyn Greenfoot'>
CHURCHILL = <Tower.CHURCHILL: 'Captain Churchill'>
BENJAMIN = <Tower.BENJAMIN: 'Benjamin'>
EZILI = <Tower.EZILI: 'Ezili'>
PAT_FUSTY = <Tower.PAT_FUSTY: 'Pat Fusty'>
SAUDA = <Tower.SAUDA: 'Sauda'>
PSI = <Tower.PSI: 'Psi'>
GERALDO = <Tower.GERALDO: 'Geraldo'>
BRICKELL = <Tower.BRICKELL: 'Admiral Brickell'>
ETIENNE = <Tower.ETIENNE: 'Etienne'>
ADORA = <Tower.ADORA: 'Adora'>
DART_MONKEY = <Tower.DART_MONKEY: 'Dart Monkey'>
BOOMERANG_MONKEY = <Tower.BOOMERANG_MONKEY: 'Boomerang Monkey'>
TACK_SHOOTER = <Tower.TACK_SHOOTER: 'Tack Shooter'>
BOMB_SHOOTER = <Tower.BOMB_SHOOTER: 'Bomb Shooter'>
GLUE_GUNNER = <Tower.GLUE_GUNNER: 'Glue Gunner'>
ICE_MONKEY = <Tower.ICE_MONKEY: 'Ice Monkey'>
SNIPER_MONKEY = <Tower.SNIPER_MONKEY: 'Sniper Monkey'>
MONKEY_BUCCANEER = <Tower.MONKEY_BUCCANEER: 'Monkey Buccaneer'>
MONKEY_SUB = <Tower.MONKEY_SUB: 'Monkey Sub'>
DARTLING_GUNNER = <Tower.DARTLING_GUNNER: 'Dartling Gunner'>
MONKEY_ACE = <Tower.MONKEY_ACE: 'Monkey Ace'>
HELI_PILOT = <Tower.HELI_PILOT: 'Heli Pilot'>
MORTAR_MONKEY = <Tower.MORTAR_MONKEY: 'Mortar Monkey'>
WIZARD_MONKEY = <Tower.WIZARD_MONKEY: 'Wizard Monkey'>
NINJA_MONKEY = <Tower.NINJA_MONKEY: 'Ninja Monkey'>
SUPER_MONKEY = <Tower.SUPER_MONKEY: 'Super Monkey'>
DRUID = <Tower.DRUID: 'Druid'>
ALCHEMIST = <Tower.ALCHEMIST: 'Alchemist'>
MONKEY_VILLAGE = <Tower.MONKEY_VILLAGE: 'Monkey Village'>
BANANA_FARM = <Tower.BANANA_FARM: 'Banana Farm'>
ENGINEER_MONKEY = <Tower.ENGINEER_MONKEY: 'Engineer Monkey'>
SPIKE_FACTORY = <Tower.SPIKE_FACTORY: 'Spike Factory'>
BEAST_HANDLER = <Tower.BEAST_HANDLER: 'Beast Handler'>

ScoreType

enum bloonspy.model.btd6.ScoreType(value)

Ways to judge how good a player did in events.

Valid values are as follows:

GAME_TIME = <ScoreType.GAME_TIME: 'Game Time'>
LEAST_CASH = <ScoreType.LEAST_CASH: 'Least Cash'>
LEAST_TIERS = <ScoreType.LEAST_TIERS: 'Least Tiers'>
TIME_AFTER_EVENT_START = <ScoreType.TIME_AFTER_EVENT_START: 'Time After Event Start'>

MonkeyKnowledge

enum bloonspy.model.btd6.MonkeyKnowledge(value)

New in 0.5.0

The Monkey Knowledge points present in the game.

Valid values are as follows:

EXTRA_DART_POPS = <MonkeyKnowledge.EXTRA_DART_POPS: 'Extra Dart Pops'>
FAST_TACK_ATTACKS = <MonkeyKnowledge.FAST_TACK_ATTACKS: 'Fast Tack Attacks'>
INCREASED_LIFESPAN = <MonkeyKnowledge.INCREASED_LIFESPAN: 'Increased Lifespan'>
FRAGGY_FRAGS = <MonkeyKnowledge.FRAGGY_FRAGS: 'Fraggy Frags'>
FAST_GLUE = <MonkeyKnowledge.FAST_GLUE: 'Fast Glue'>
HARD_TACKS = <MonkeyKnowledge.HARD_TACKS: 'Hard Tacks'>
CHEAP_RANGS = <MonkeyKnowledge.CHEAP_RANGS: 'Cheap Rangs'>
ELITE_MILITARY_TRAINING = <MonkeyKnowledge.ELITE_MILITARY_TRAINING: 'Elite Military Training'>
AIRFORCE_UPGRADES = <MonkeyKnowledge.AIRFORCE_UPGRADES: 'Airforce Upgrades'>
NAVAL_UPGRADES = <MonkeyKnowledge.NAVAL_UPGRADES: 'Naval Upgrades'>
MAGIC_TRICKS = <MonkeyKnowledge.MAGIC_TRICKS: 'Magic Tricks'>
FLAT_PACK_BUILDINGS = <MonkeyKnowledge.FLAT_PACK_BUILDINGS: 'Flat Pack Buildings'>
ONE_MORE_SPIKE = <MonkeyKnowledge.ONE_MORE_SPIKE: 'One More Spike'>
MORE_VALUABLE_BANANAS = <MonkeyKnowledge.MORE_VALUABLE_BANANAS: 'More Valuable Bananas'>
SPEEDY_BREWING = <MonkeyKnowledge.SPEEDY_BREWING: 'Speedy Brewing'>
MO_MONKEY_MONEY = <MonkeyKnowledge.MO_MONKEY_MONEY: 'Mo Monkey Money'>
LINGERING_MAGIC = <MonkeyKnowledge.LINGERING_MAGIC: 'Lingering Magic'>
HOT_MAGIC = <MonkeyKnowledge.HOT_MAGIC: 'Hot Magic'>
FLAME_JET = <MonkeyKnowledge.FLAME_JET: 'Flame Jet'>
ARCANE_IMPALE = <MonkeyKnowledge.ARCANE_IMPALE: 'Arcane Impale'>
SUPER_RANGE = <MonkeyKnowledge.SUPER_RANGE: 'Super Range'>
MANA_SHIELD = <MonkeyKnowledge.MANA_SHIELD: 'Mana Shield'>
BUDGET_CLUSTERS = <MonkeyKnowledge.BUDGET_CLUSTERS: 'Budget Clusters'>
ICY_CHILL = <MonkeyKnowledge.ICY_CHILL: 'Icy Chill'>
CROSSBOW_REACH = <MonkeyKnowledge.CROSSBOW_REACH: 'Crossbow Reach'>
FOUR_AND_FOuR = <MonkeyKnowledge.FOUR_AND_FOuR: '4 And 4'>
MASTER_DOUBLE_CROSS = <MonkeyKnowledge.MASTER_DOUBLE_CROSS: 'Master Double Cross'>
BONUS_MONKEY = <MonkeyKnowledge.BONUS_MONKEY: 'Bonus Monkey'>
MORE_SPLATTY_GLUE = <MonkeyKnowledge.MORE_SPLATTY_GLUE: 'More Splatty Glue'>
AVIATION_GRADE_GLUE = <MonkeyKnowledge.AVIATION_GRADE_GLUE: 'Aviation Grade Glue'>
CHEAPER_SOLUTION = <MonkeyKnowledge.CHEAPER_SOLUTION: 'Cheaper Solution'>
MORE_CASH = <MonkeyKnowledge.MORE_CASH: 'More Cash'>
MORE_SPLODY = <MonkeyKnowledge.MORE_SPLODY: 'More Splody'>
SCHOLARSHIPS = <MonkeyKnowledge.SCHOLARSHIPS: 'Scholarships'>
HEROIC_REACH = <MonkeyKnowledge.HEROIC_REACH: 'Heroic Reach'>
SELF_TAUGHT_HEROES = <MonkeyKnowledge.SELF_TAUGHT_HEROES: 'Self Taught Heroes'>
HEROIC_VELOCITY = <MonkeyKnowledge.HEROIC_VELOCITY: 'Heroic Velocity'>
QUICK_HANDS = <MonkeyKnowledge.QUICK_HANDS: 'Quick Hands'>
HERO_FAVORS = <MonkeyKnowledge.HERO_FAVORS: 'Hero Favors'>
EMPOWERED_HEROES = <MonkeyKnowledge.EMPOWERED_HEROES: 'Empowered Heroes'>
ABILITY_DISCIPLINE = <MonkeyKnowledge.ABILITY_DISCIPLINE: 'Ability Discipline'>
ABILITY_MASTERY = <MonkeyKnowledge.ABILITY_MASTERY: 'Ability Mastery'>
BIG_BLOON_BLUEPRINTS = <MonkeyKnowledge.BIG_BLOON_BLUEPRINTS: 'Big Bloon Blueprints'>
BIG_BUNCH = <MonkeyKnowledge.BIG_BUNCH: 'Big Bunch'>
CERAMIC_SHOCK = <MonkeyKnowledge.CERAMIC_SHOCK: 'Ceramic Shock'>
CHEAPER_MAIMING = <MonkeyKnowledge.CHEAPER_MAIMING: 'Cheaper Maiming'>
BREAKING_BALLISTIC = <MonkeyKnowledge.BREAKING_BALLISTIC: 'Breaking Ballistic'>
RAPID_RAZORS = <MonkeyKnowledge.RAPID_RAZORS: 'Rapid Razors'>
CHARGED_CHINOOKS = <MonkeyKnowledge.CHARGED_CHINOOKS: 'Charged Chinooks'>
QUAD_BURST = <MonkeyKnowledge.QUAD_BURST: 'Quad Burst'>
MASTER_DEFENDER = <MonkeyKnowledge.MASTER_DEFENDER: 'Master Defender'>
FASTER_TAKEDOWNS = <MonkeyKnowledge.FASTER_TAKEDOWNS: 'Faster Takedowns'>
FARM_SUBSIDY = <MonkeyKnowledge.FARM_SUBSIDY: 'Farm Subsidy'>
WEAK_POINT = <MonkeyKnowledge.WEAK_POINT: 'Weak Point'>
CHEAPER_DOUBLES = <MonkeyKnowledge.CHEAPER_DOUBLES: 'Cheaper Doubles'>
INSIDER_TRADES = <MonkeyKnowledge.INSIDER_TRADES: 'Insider Trades'>
VIGILANT_SENTRIES = <MonkeyKnowledge.VIGILANT_SENTRIES: 'Vigilant Sentries'>
BIGGER_BANKS = <MonkeyKnowledge.BIGGER_BANKS: 'Bigger Banks'>
HEAVY_KNOCKBACK = <MonkeyKnowledge.HEAVY_KNOCKBACK: 'Heavy Knockback'>
STRIKE_DOWN_THE_FALSE = <MonkeyKnowledge.STRIKE_DOWN_THE_FALSE: 'Strike Down The False'>
STRONG_TONIC = <MonkeyKnowledge.STRONG_TONIC: 'Strong Tonic'>
ACCELERATED_AERODARTS = <MonkeyKnowledge.ACCELERATED_AERODARTS: 'Accelerated Aerodarts'>
EXTRA_BURNY_STUFF = <MonkeyKnowledge.EXTRA_BURNY_STUFF: 'Extra Burny Stuff'>
POPPY_BLADES = <MonkeyKnowledge.POPPY_BLADES: 'Poppy Blades'>
BIG_INFERNO = <MonkeyKnowledge.BIG_INFERNO: 'Big Inferno'>
TRADE_AGREEMENTS = <MonkeyKnowledge.TRADE_AGREEMENTS: 'Trade Agreements'>
EXTRA_BOUNCE = <MonkeyKnowledge.EXTRA_BOUNCE: 'Extra Bounce'>
SUB_ADMIRAL = <MonkeyKnowledge.SUB_ADMIRAL: 'Sub Admiral'>
RECURRING_RANGS = <MonkeyKnowledge.RECURRING_RANGS: 'Recurring Rangs'>
BIG_BLOON_SABOTAGE = <MonkeyKnowledge.BIG_BLOON_SABOTAGE: 'Big Bloon Sabotage'>
EMERGENCY_UNLOCK = <MonkeyKnowledge.EMERGENCY_UNLOCK: 'Emergency Unlock'>
FIRST_LAST_LINE_OF_DEFENSE = <MonkeyKnowledge.FIRST_LAST_LINE_OF_DEFENSE: 'First Last Line Of Defense'>
MONKEY_EDUCATION = <MonkeyKnowledge.MONKEY_EDUCATION: 'Monkey Education'>
GORGON_STORM = <MonkeyKnowledge.GORGON_STORM: 'Gorgon Storm'>
FORCE_VS_FORCE = <MonkeyKnowledge.FORCE_VS_FORCE: 'Force Vs Force'>
BONUS_GLUE_GUNNER = <MonkeyKnowledge.BONUS_GLUE_GUNNER: 'Bonus Glue Gunner'>
TARGETED_PINEAPPLES = <MonkeyKnowledge.TARGETED_PINEAPPLES: 'Targeted Pineapples'>
GUN_COOLANT = <MonkeyKnowledge.GUN_COOLANT: 'Gun Coolant'>
AERONAUTIC_SUBSIDY = <MonkeyKnowledge.AERONAUTIC_SUBSIDY: 'Aeronautic Subsidy'>
WINGMONKEY = <MonkeyKnowledge.WINGMONKEY: 'Wingmonkey'>
MONKEYS_TOGETHER_STRONG = <MonkeyKnowledge.MONKEYS_TOGETHER_STRONG: 'Monkeys Together Strong'>
XRAY_ULTRA = <MonkeyKnowledge.XRAY_ULTRA: 'Xray Ultra'>
THERE_CAN_BE_ONLY_ONE = <MonkeyKnowledge.THERE_CAN_BE_ONLY_ONE: 'There Can Be Only One'>
MILITARY_CONSCRIPTION = <MonkeyKnowledge.MILITARY_CONSCRIPTION: 'Military Conscription'>
CROSS_THE_STREAMS = <MonkeyKnowledge.CROSS_THE_STREAMS: 'Cross The Streams'>
JUST_ONE_MORE = <MonkeyKnowledge.JUST_ONE_MORE: 'Just One More'>
LONGER_DART_TIME = <MonkeyKnowledge.LONGER_DART_TIME: 'Longer Dart Time'>
CHEAPER_LAKES = <MonkeyKnowledge.CHEAPER_LAKES: 'Cheaper Lakes'>
LONGER_BOOSTS = <MonkeyKnowledge.LONGER_BOOSTS: 'Longer Boosts'>
PRE_GAME_PREP = <MonkeyKnowledge.PRE_GAME_PREP: 'Pre Game Prep'>
PAINT_STRIPPER = <MonkeyKnowledge.PAINT_STRIPPER: 'Paint Stripper'>
INLAND_REVENUE_STREAMS = <MonkeyKnowledge.INLAND_REVENUE_STREAMS: 'Inland Revenue Streams'>
BACKROOM_DEALS = <MonkeyKnowledge.BACKROOM_DEALS: 'Backroom Deals'>
BETTER_SELL_DEALS = <MonkeyKnowledge.BETTER_SELL_DEALS: 'Better Sell Deals'>
THICKER_FOAMS = <MonkeyKnowledge.THICKER_FOAMS: 'Thicker Foams'>
BIG_TRAPS = <MonkeyKnowledge.BIG_TRAPS: 'Big Traps'>
HEALTHY_BANANAS = <MonkeyKnowledge.HEALTHY_BANANAS: 'Healthy Bananas'>
SO_COLD = <MonkeyKnowledge.SO_COLD: 'So Cold'>
COME_ON_EVERYBODY = <MonkeyKnowledge.COME_ON_EVERYBODY: 'Come On Everybody'>
DOOR_GUNNER = <MonkeyKnowledge.DOOR_GUNNER: 'Door Gunner'>
ADVANCED_LOGISTICS = <MonkeyKnowledge.ADVANCED_LOGISTICS: 'Advanced Logistics'>
FLANKING_MANEUVERS = <MonkeyKnowledge.FLANKING_MANEUVERS: 'Flanking Maneuvers'>
BUDGET_BATTERY = <MonkeyKnowledge.BUDGET_BATTERY: 'Budget Battery'>
VERY_SHREDDY = <MonkeyKnowledge.VERY_SHREDDY: 'Very Shreddy'>
HARD_PRESS = <MonkeyKnowledge.HARD_PRESS: 'Hard Press'>
HI_VALUE_MINES = <MonkeyKnowledge.HI_VALUE_MINES: 'Hi Value Mines'>
TO_ARMS = <MonkeyKnowledge.TO_ARMS: 'To Arms'>
VETERAN_MONKEY_TRAINING = <MonkeyKnowledge.VETERAN_MONKEY_TRAINING: 'Veteran Monkey Training'>
GLOBAL_ABILITY_COOLDOWNS = <MonkeyKnowledge.GLOBAL_ABILITY_COOLDOWNS: 'Global Ability Cooldowns'>
WARM_OAK = <MonkeyKnowledge.WARM_OAK: 'Warm Oak'>
COLD_FRONT = <MonkeyKnowledge.COLD_FRONT: 'Cold Front'>
VINE_RUPTURE = <MonkeyKnowledge.VINE_RUPTURE: 'Vine Rupture'>
DIVERSION_TACTICS = <MonkeyKnowledge.DIVERSION_TACTICS: 'Diversion Tactics'>
DEADLY_TRANQUILITY = <MonkeyKnowledge.DEADLY_TRANQUILITY: 'Deadly Tranquility'>
TINY_TORNADOES = <MonkeyKnowledge.TINY_TORNADOES: 'Tiny Tornadoes'>
MEGA_MAULER = <MonkeyKnowledge.MEGA_MAULER: 'Mega Mauler'>
LONG_TURBO = <MonkeyKnowledge.LONG_TURBO: 'Long Turbo'>
BIONIC_AUGMENTATION = <MonkeyKnowledge.BIONIC_AUGMENTATION: 'Bionic Augmentation'>
BUDGET_PONTOONS = <MonkeyKnowledge.BUDGET_PONTOONS: 'Budget Pontoons'>
POWERFUL_MONKEY_STORM = <MonkeyKnowledge.POWERFUL_MONKEY_STORM: 'Powerful Monkey Storm'>
FIT_FARMERS = <MonkeyKnowledge.FIT_FARMERS: 'Fit Farmers'>
SUPA_THRIVE = <MonkeyKnowledge.SUPA_THRIVE: 'Supa Thrive'>
VIOLENT_IMPACT = <MonkeyKnowledge.VIOLENT_IMPACT: 'Violent Impact'>
BIG_CRYO_BLAST = <MonkeyKnowledge.BIG_CRYO_BLAST: 'Big Cryo Blast'>
HYPOTHERMIA = <MonkeyKnowledge.HYPOTHERMIA: 'Hypothermia'>
BUDGET_CASH_DROPS = <MonkeyKnowledge.BUDGET_CASH_DROPS: 'Budget Cash Drops'>
GRAND_PRIX_SPREE = <MonkeyKnowledge.GRAND_PRIX_SPREE: 'Grand Prix Spree'>
ACID_STABILITY = <MonkeyKnowledge.ACID_STABILITY: 'Acid Stability'>
BIGGER_CAMO_TRAP = <MonkeyKnowledge.BIGGER_CAMO_TRAP: 'Bigger Camo Trap'>

Upgrade

enum bloonspy.model.btd6.Upgrade(value)

New in 0.5.0

Every single tower upgrade present in the game.

Valid values are as follows:

DART_TOP_1 = <Upgrade.DART_TOP_1: 'Sharp Shots'>
DART_TOP_2 = <Upgrade.DART_TOP_2: 'Razor Sharp Shots'>
DART_TOP_3 = <Upgrade.DART_TOP_3: 'Spike-o-pult'>
DART_TOP_4 = <Upgrade.DART_TOP_4: 'Juggernaut'>
DART_TOP_5 = <Upgrade.DART_TOP_5: 'Ultra-Juggernaut'>
DART_MID_1 = <Upgrade.DART_MID_1: 'Quick Shots'>
DART_MID_2 = <Upgrade.DART_MID_2: 'Very Quick Shots'>
DART_MID_3 = <Upgrade.DART_MID_3: 'Triple Shot'>
DART_MID_4 = <Upgrade.DART_MID_4: 'Super Monkey Fan Club'>
DART_MID_5 = <Upgrade.DART_MID_5: 'Plasma Monkey Fan Club'>
DART_BTM_1 = <Upgrade.DART_BTM_1: 'Long Range Darts'>
DART_BTM_2 = <Upgrade.DART_BTM_2: 'Enhanced Eyesight'>
DART_BTM_3 = <Upgrade.DART_BTM_3: 'Crossbow'>
DART_BTM_4 = <Upgrade.DART_BTM_4: 'Sharp Shooter'>
DART_BTM_5 = <Upgrade.DART_BTM_5: 'Crossbow Master'>
DART_PARAGON = <Upgrade.DART_PARAGON: 'Apex Plasma Master'>
BOMB_TOP_1 = <Upgrade.BOMB_TOP_1: 'Bigger Bombs'>
BOMB_TOP_2 = <Upgrade.BOMB_TOP_2: 'Heavy Bombs'>
BOMB_TOP_3 = <Upgrade.BOMB_TOP_3: 'Really Big Bombs'>
BOMB_TOP_4 = <Upgrade.BOMB_TOP_4: 'Bloon Impact'>
BOMB_TOP_5 = <Upgrade.BOMB_TOP_5: 'Bloon Crush'>
BOMB_MID_1 = <Upgrade.BOMB_MID_1: 'Faster Reload'>
BOMB_MID_2 = <Upgrade.BOMB_MID_2: 'Missile Launcher'>
BOMB_MID_3 = <Upgrade.BOMB_MID_3: 'MOAB Mauler'>
BOMB_MID_4 = <Upgrade.BOMB_MID_4: 'MOAB Assassin'>
BOMB_MID_5 = <Upgrade.BOMB_MID_5: 'MOAB Eliminator'>
BOMB_BTM_1 = <Upgrade.BOMB_BTM_1: 'Extra Range'>
BOMB_BTM_2 = <Upgrade.BOMB_BTM_2: 'Frag Bombs'>
BOMB_BTM_3 = <Upgrade.BOMB_BTM_3: 'Cluster Bombs'>
BOMB_BTM_4 = <Upgrade.BOMB_BTM_4: 'Recursive Cluster'>
BOMB_BTM_5 = <Upgrade.BOMB_BTM_5: 'Bomb Blitz'>
BOMB_PARAGON = <Upgrade.BOMB_PARAGON: None>
TACK_TOP_1 = <Upgrade.TACK_TOP_1: 'Faster Shooting'>
TACK_TOP_2 = <Upgrade.TACK_TOP_2: 'Even Faster Shooting'>
TACK_TOP_3 = <Upgrade.TACK_TOP_3: 'Hot Shots'>
TACK_TOP_4 = <Upgrade.TACK_TOP_4: 'Ring of Fire'>
TACK_TOP_5 = <Upgrade.TACK_TOP_5: 'Inferno Ring'>
TACK_MID_1 = <Upgrade.TACK_MID_1: 'Long Range Tacks'>
TACK_MID_2 = <Upgrade.TACK_MID_2: 'Super Range Tacks'>
TACK_MID_3 = <Upgrade.TACK_MID_3: 'Blade Shooter'>
TACK_MID_4 = <Upgrade.TACK_MID_4: 'Blade Maelstrom'>
TACK_MID_5 = <Upgrade.TACK_MID_5: 'Super Maelstrom'>
TACK_BTM_1 = <Upgrade.TACK_BTM_1: 'More Tacks'>
TACK_BTM_2 = <Upgrade.TACK_BTM_2: 'Even More Tacks'>
TACK_BTM_3 = <Upgrade.TACK_BTM_3: 'Tack Sprayer'>
TACK_BTM_4 = <Upgrade.TACK_BTM_4: 'Overdrive'>
TACK_BTM_5 = <Upgrade.TACK_BTM_5: 'The Tack Zone'>
GLUE_TOP_1 = <Upgrade.GLUE_TOP_1: 'Glue Soak'>
GLUE_TOP_2 = <Upgrade.GLUE_TOP_2: 'Corrosive Glue'>
GLUE_TOP_3 = <Upgrade.GLUE_TOP_3: 'Bloon Dissolver'>
GLUE_TOP_4 = <Upgrade.GLUE_TOP_4: 'Bloon Liquefier'>
GLUE_TOP_5 = <Upgrade.GLUE_TOP_5: 'The Bloon Solver'>
GLUE_MID_1 = <Upgrade.GLUE_MID_1: 'Bigger Globs'>
GLUE_MID_2 = <Upgrade.GLUE_MID_2: 'Glue Splatter'>
GLUE_MID_3 = <Upgrade.GLUE_MID_3: 'Glue Hose'>
GLUE_MID_4 = <Upgrade.GLUE_MID_4: 'Glue Strike'>
GLUE_MID_5 = <Upgrade.GLUE_MID_5: 'Glue Storm'>
GLUE_BTM_1 = <Upgrade.GLUE_BTM_1: 'Stickier Glue'>
GLUE_BTM_2 = <Upgrade.GLUE_BTM_2: 'Stronger Glue'>
GLUE_BTM_3 = <Upgrade.GLUE_BTM_3: 'MOAB Glue'>
GLUE_BTM_4 = <Upgrade.GLUE_BTM_4: 'Relentless Glue'>
GLUE_BTM_5 = <Upgrade.GLUE_BTM_5: 'Super Glue'>
ENGINEER_TOP_1 = <Upgrade.ENGINEER_TOP_1: 'Sentry Gun'>
ENGINEER_TOP_2 = <Upgrade.ENGINEER_TOP_2: 'Faster Engineering'>
ENGINEER_TOP_3 = <Upgrade.ENGINEER_TOP_3: 'Sprockets'>
ENGINEER_TOP_4 = <Upgrade.ENGINEER_TOP_4: 'Sentry Expert'>
ENGINEER_TOP_5 = <Upgrade.ENGINEER_TOP_5: 'Sentry Champion'>
ENGINEER_MID_1 = <Upgrade.ENGINEER_MID_1: 'Larger Service Area'>
ENGINEER_MID_2 = <Upgrade.ENGINEER_MID_2: 'Deconstruction'>
ENGINEER_MID_3 = <Upgrade.ENGINEER_MID_3: 'Cleansing Foam'>
ENGINEER_MID_4 = <Upgrade.ENGINEER_MID_4: 'Overclock'>
ENGINEER_MID_5 = <Upgrade.ENGINEER_MID_5: 'Ultraboost'>
ENGINEER_BTM_1 = <Upgrade.ENGINEER_BTM_1: 'Oversize Nails'>
ENGINEER_BTM_2 = <Upgrade.ENGINEER_BTM_2: 'Pin'>
ENGINEER_BTM_3 = <Upgrade.ENGINEER_BTM_3: 'Double Gun'>
ENGINEER_BTM_4 = <Upgrade.ENGINEER_BTM_4: 'Bloon Trap'>
ENGINEER_BTM_5 = <Upgrade.ENGINEER_BTM_5: 'XXXL Trap'>
ENGINEER_PARAGON = <Upgrade.ENGINEER_PARAGON: 'Master Builder'>
DARTLING_TOP_1 = <Upgrade.DARTLING_TOP_1: 'Focused Firing'>
DARTLING_TOP_2 = <Upgrade.DARTLING_TOP_2: 'Laser Shock'>
DARTLING_TOP_3 = <Upgrade.DARTLING_TOP_3: 'Laser Cannon'>
DARTLING_TOP_4 = <Upgrade.DARTLING_TOP_4: 'Plasma Accelerator'>
DARTLING_TOP_5 = <Upgrade.DARTLING_TOP_5: 'Ray of Doom'>
DARTLING_MID_1 = <Upgrade.DARTLING_MID_1: 'Advanced Targeting'>
DARTLING_MID_2 = <Upgrade.DARTLING_MID_2: 'Faster Swivel'>
DARTLING_MID_3 = <Upgrade.DARTLING_MID_3: 'Hydra Rocket Pods'>
DARTLING_MID_4 = <Upgrade.DARTLING_MID_4: 'Rocket Storm'>
DARTLING_MID_5 = <Upgrade.DARTLING_MID_5: 'M.A.D'>
DARTLING_BTM_1 = <Upgrade.DARTLING_BTM_1: 'Faster Barrel Spin'>
DARTLING_BTM_2 = <Upgrade.DARTLING_BTM_2: 'Powerful Darts'>
DARTLING_BTM_3 = <Upgrade.DARTLING_BTM_3: 'Buckshot'>
DARTLING_BTM_4 = <Upgrade.DARTLING_BTM_4: 'Bloon Area Denial System'>
DARTLING_BTM_5 = <Upgrade.DARTLING_BTM_5: 'Bloon Exclusion Zone'>
BEAST_TOP_1 = <Upgrade.BEAST_TOP_1: 'Piranha'>
BEAST_TOP_2 = <Upgrade.BEAST_TOP_2: 'Barracuda'>
BEAST_TOP_3 = <Upgrade.BEAST_TOP_3: 'Great White'>
BEAST_TOP_4 = <Upgrade.BEAST_TOP_4: 'Orca'>
BEAST_TOP_5 = <Upgrade.BEAST_TOP_5: 'Megalodon'>
BEAST_MID_1 = <Upgrade.BEAST_MID_1: 'Microraptor'>
BEAST_MID_2 = <Upgrade.BEAST_MID_2: 'Adasaurus'>
BEAST_MID_3 = <Upgrade.BEAST_MID_3: 'Velociraptor'>
BEAST_MID_4 = <Upgrade.BEAST_MID_4: 'Tyrannosaurus Rex'>
BEAST_MID_5 = <Upgrade.BEAST_MID_5: 'Giganotosaurus'>
BEAST_BTM_1 = <Upgrade.BEAST_BTM_1: 'Gyrfalcon'>
BEAST_BTM_2 = <Upgrade.BEAST_BTM_2: 'Horned Owl'>
BEAST_BTM_3 = <Upgrade.BEAST_BTM_3: 'Golden Eagle'>
BEAST_BTM_4 = <Upgrade.BEAST_BTM_4: 'Giant Condor'>
BEAST_BTM_5 = <Upgrade.BEAST_BTM_5: 'Pouakai'>
SUPER_TOP_1 = <Upgrade.SUPER_TOP_1: 'Laser Blasts'>
SUPER_TOP_2 = <Upgrade.SUPER_TOP_2: 'Plasma Blasts'>
SUPER_TOP_3 = <Upgrade.SUPER_TOP_3: 'Sun Avatar'>
SUPER_TOP_4 = <Upgrade.SUPER_TOP_4: 'Sun Temple'>
SUPER_TOP_5 = <Upgrade.SUPER_TOP_5: 'True Sun God'>
SUPER_MID_1 = <Upgrade.SUPER_MID_1: 'Super Range'>
SUPER_MID_2 = <Upgrade.SUPER_MID_2: 'Epic Range'>
SUPER_MID_3 = <Upgrade.SUPER_MID_3: 'Robo Monkey'>
SUPER_MID_4 = <Upgrade.SUPER_MID_4: 'Tech Terror'>
SUPER_MID_5 = <Upgrade.SUPER_MID_5: 'The Anti-Bloon'>
SUPER_BTM_1 = <Upgrade.SUPER_BTM_1: 'Knockback'>
SUPER_BTM_2 = <Upgrade.SUPER_BTM_2: 'Ultravision'>
SUPER_BTM_3 = <Upgrade.SUPER_BTM_3: 'Dark Knight'>
SUPER_BTM_4 = <Upgrade.SUPER_BTM_4: 'Dark Champion'>
SUPER_BTM_5 = <Upgrade.SUPER_BTM_5: 'Legend of the Night'>
FARM_TOP_1 = <Upgrade.FARM_TOP_1: 'Increased Production'>
FARM_TOP_2 = <Upgrade.FARM_TOP_2: 'Greater Production'>
FARM_TOP_3 = <Upgrade.FARM_TOP_3: 'Banana Plantation'>
FARM_TOP_4 = <Upgrade.FARM_TOP_4: 'Banana Research Facility'>
FARM_TOP_5 = <Upgrade.FARM_TOP_5: 'Banana Central'>
FARM_MID_1 = <Upgrade.FARM_MID_1: 'Long Life Bananas'>
FARM_MID_2 = <Upgrade.FARM_MID_2: 'Valuable Bananas'>
FARM_MID_3 = <Upgrade.FARM_MID_3: 'Monkey Bank'>
FARM_MID_4 = <Upgrade.FARM_MID_4: 'IMF loan'>
FARM_MID_5 = <Upgrade.FARM_MID_5: 'Monkey-Nomics'>
FARM_BTM_1 = <Upgrade.FARM_BTM_1: 'EZ Collect'>
FARM_BTM_2 = <Upgrade.FARM_BTM_2: 'Banana Salvage'>
FARM_BTM_3 = <Upgrade.FARM_BTM_3: 'Marketplace'>
FARM_BTM_4 = <Upgrade.FARM_BTM_4: 'Central Market'>
FARM_BTM_5 = <Upgrade.FARM_BTM_5: 'Monkey Wall Street'>
DRUID_TOP_1 = <Upgrade.DRUID_TOP_1: 'Hard Thorns'>
DRUID_TOP_2 = <Upgrade.DRUID_TOP_2: 'Heart of Thunder'>
DRUID_TOP_3 = <Upgrade.DRUID_TOP_3: 'Druid of the Storm'>
DRUID_TOP_4 = <Upgrade.DRUID_TOP_4: 'Ball Lightning'>
DRUID_TOP_5 = <Upgrade.DRUID_TOP_5: 'Superstorm'>
DRUID_MID_1 = <Upgrade.DRUID_MID_1: 'Thorn Swarm'>
DRUID_MID_2 = <Upgrade.DRUID_MID_2: 'Heart of Oak'>
DRUID_MID_3 = <Upgrade.DRUID_MID_3: 'Druid of the Jungle'>
DRUID_MID_4 = <Upgrade.DRUID_MID_4: "Jungle's Bounty">
DRUID_MID_5 = <Upgrade.DRUID_MID_5: 'Spirit of the Forest'>
DRIOD_BTM_1 = <Upgrade.DRIOD_BTM_1: 'Druidic Reach'>
DRUID_BTM_2 = <Upgrade.DRUID_BTM_2: 'Heart of Vengeance'>
DRUID_BTM_3 = <Upgrade.DRUID_BTM_3: 'Druid of Wrath'>
DRUID_BTM_4 = <Upgrade.DRUID_BTM_4: 'Poplust'>
DRUID_BTM_5 = <Upgrade.DRUID_BTM_5: 'Avatar of Wrath'>
ACE_TOP_1 = <Upgrade.ACE_TOP_1: 'Rapid Fire'>
ACE_TOP_2 = <Upgrade.ACE_TOP_2: 'Lots More Darts'>
ACE_TOP_3 = <Upgrade.ACE_TOP_3: 'Fighter Plane'>
ACE_TOP_4 = <Upgrade.ACE_TOP_4: 'Operation: Dart Storm'>
ACE_TOP_5 = <Upgrade.ACE_TOP_5: 'Sky Shredder'>
ACE_MID_1 = <Upgrade.ACE_MID_1: 'Exploding Pineapple'>
ACE_MID_2 = <Upgrade.ACE_MID_2: 'Spy Plane'>
ACE_MID_3 = <Upgrade.ACE_MID_3: 'Bomber Ace'>
ACE_MID_4 = <Upgrade.ACE_MID_4: 'Ground Zero'>
ACE_MID_5 = <Upgrade.ACE_MID_5: 'Tsar Bomba'>
ACE_BTM_1 = <Upgrade.ACE_BTM_1: 'Sharper Darts'>
ACE_BTM_2 = <Upgrade.ACE_BTM_2: 'Centered Path'>
ACE_BTM_3 = <Upgrade.ACE_BTM_3: 'Neva-Miss Targeting'>
ACE_BTM_4 = <Upgrade.ACE_BTM_4: 'Spectre'>
ACE_BTM_5 = <Upgrade.ACE_BTM_5: 'Flying Fortress'>
ACE_PARAGON = <Upgrade.ACE_PARAGON: 'Goliath Doomship'>
HELI_TOP_1 = <Upgrade.HELI_TOP_1: 'Quad Darts'>
HELI_TOP_2 = <Upgrade.HELI_TOP_2: 'Pursuit'>
HELI_TOP_3 = <Upgrade.HELI_TOP_3: 'Razor Rotors'>
HELI_TOP_4 = <Upgrade.HELI_TOP_4: 'Apache Dartship'>
HELI_TOP_5 = <Upgrade.HELI_TOP_5: 'Apache Prime'>
HELI_MID_1 = <Upgrade.HELI_MID_1: 'Bigger Jets'>
HELI_MID_2 = <Upgrade.HELI_MID_2: 'IFR'>
HELI_MID_3 = <Upgrade.HELI_MID_3: 'Downdraft'>
HELI_MID_4 = <Upgrade.HELI_MID_4: 'Support Chinook'>
HELI_MID_5 = <Upgrade.HELI_MID_5: 'Special Poperations'>
HELI_BTM_1 = <Upgrade.HELI_BTM_1: 'Faster Darts'>
HELI_BTM_2 = <Upgrade.HELI_BTM_2: 'Faster Firing'>
HELI_BTM_3 = <Upgrade.HELI_BTM_3: 'MOAB Shove'>
HELI_BTM_4 = <Upgrade.HELI_BTM_4: 'Comanche Defense'>
HELI_BTM_5 = <Upgrade.HELI_BTM_5: 'Comanche Commander'>
BUCCANEER_TOP_2 = <Upgrade.BUCCANEER_TOP_2: 'Double Shot'>
BUCCANEER_TOP_3 = <Upgrade.BUCCANEER_TOP_3: 'Destroyer'>
BUCCANEER_TOP_4 = <Upgrade.BUCCANEER_TOP_4: 'Aircraft Carrier'>
BUCCANEER_TOP_5 = <Upgrade.BUCCANEER_TOP_5: 'Carrier Flagship'>
BUCCANEER_MID_1 = <Upgrade.BUCCANEER_MID_1: 'Grape Shot'>
BUCCANEER_MID_2 = <Upgrade.BUCCANEER_MID_2: 'Hot Shot'>
BUCCANEER_MID_3 = <Upgrade.BUCCANEER_MID_3: 'Cannon Ship'>
BUCCANEER_MID_4 = <Upgrade.BUCCANEER_MID_4: 'Monkey Pirates'>
BUCCANEER_MID_5 = <Upgrade.BUCCANEER_MID_5: 'Pirate Lord'>
BUCCANEER_BTM_1 = <Upgrade.BUCCANEER_BTM_1: 'Long Range'>
BUCCANEER_BTM_2 = <Upgrade.BUCCANEER_BTM_2: "Crow's Nest">
BUCCANEER_BTM_3 = <Upgrade.BUCCANEER_BTM_3: 'Merchantman'>
BUCCANEER_BTM_4 = <Upgrade.BUCCANEER_BTM_4: 'Favored Trades'>
BUCCANEER_BTM_5 = <Upgrade.BUCCANEER_BTM_5: 'Trade Empire'>
BUCCANEER_PARAGON = <Upgrade.BUCCANEER_PARAGON: 'Navarch of the Seas'>
BOOMERANG_TOP_1 = <Upgrade.BOOMERANG_TOP_1: 'Improved Rangs'>
BOOMERANG_TOP_2 = <Upgrade.BOOMERANG_TOP_2: 'Glaives'>
BOOMERANG_TOP_3 = <Upgrade.BOOMERANG_TOP_3: 'Glaive Ricochet'>
BOOMERANG_TOP_4 = <Upgrade.BOOMERANG_TOP_4: 'M.O.A.R Glaives'>
BOOMERANG_TOP_5 = <Upgrade.BOOMERANG_TOP_5: 'Glaive Lord'>
BOOMERANG_MID_1 = <Upgrade.BOOMERANG_MID_1: 'Faster Throwing'>
BOOMERANG_MID_2 = <Upgrade.BOOMERANG_MID_2: 'Faster Rangs'>
BOOMERANG_MID_3 = <Upgrade.BOOMERANG_MID_3: 'Bionic Boomerang'>
BOOMERANG_MID_4 = <Upgrade.BOOMERANG_MID_4: 'Turbo Charge'>
BOOMERANG_MID_5 = <Upgrade.BOOMERANG_MID_5: 'Perma Charge'>
BOOMERANG_BTM_1 = <Upgrade.BOOMERANG_BTM_1: 'Long Range Rangs'>
BOOMERANG_BTM_2 = <Upgrade.BOOMERANG_BTM_2: 'Red Hot Rangs'>
BOOMERANG_BTM_3 = <Upgrade.BOOMERANG_BTM_3: 'Kylie Boomerang'>
BOOMERANG_BTM_4 = <Upgrade.BOOMERANG_BTM_4: 'MOAB Press'>
BOOMERANG_BTM_5 = <Upgrade.BOOMERANG_BTM_5: 'MOAB Domination'>
BOOMERANG_PARAGON = <Upgrade.BOOMERANG_PARAGON: 'Glaive Dominus'>
WIZARD_TOP_1 = <Upgrade.WIZARD_TOP_1: 'Guided Magic'>
WIZARD_TOP_2 = <Upgrade.WIZARD_TOP_2: 'Arcane Blast'>
WIZARD_TOP_3 = <Upgrade.WIZARD_TOP_3: 'Arcane Mastery'>
WIZARD_TOP_4 = <Upgrade.WIZARD_TOP_4: 'Arcane Spike'>
WIZARD_TOP_5 = <Upgrade.WIZARD_TOP_5: 'Archmage'>
WIZARD_MID_1 = <Upgrade.WIZARD_MID_1: 'Fireball'>
WIZARD_MID_2 = <Upgrade.WIZARD_MID_2: 'Wall of Fire'>
WIZARD_MID_3 = <Upgrade.WIZARD_MID_3: "Dragon's Breath">
WIZARD_MID_4 = <Upgrade.WIZARD_MID_4: 'Summon Phoenix'>
WIZARD_MID_5 = <Upgrade.WIZARD_MID_5: 'Wizard Lord Phoenix'>
WIZARD_BTM_1 = <Upgrade.WIZARD_BTM_1: 'Intense Magic'>
WIZARD_BTM_2 = <Upgrade.WIZARD_BTM_2: 'Monkey Sense'>
WIZARD_BTM_3 = <Upgrade.WIZARD_BTM_3: 'Shimmer'>
WIZARD_BTM_4 = <Upgrade.WIZARD_BTM_4: 'Necromancer: Unpopped Army'>
WIZARD_BTM_5 = <Upgrade.WIZARD_BTM_5: 'Prince of Darkness'>
WIZARD_PARAGON = <Upgrade.WIZARD_PARAGON: 'Magus Perfectus'>
NINJA_TOP_1 = <Upgrade.NINJA_TOP_1: 'Ninja Discipline'>
NINJA_TOP_2 = <Upgrade.NINJA_TOP_2: 'Sharp Shurikens'>
NINJA_TOP_4 = <Upgrade.NINJA_TOP_4: 'Bloonjitsu'>
NINJA_TOP_5 = <Upgrade.NINJA_TOP_5: 'Grandmaster Ninja'>
NINJA_MID_1 = <Upgrade.NINJA_MID_1: 'Distraction'>
NINJA_MID_2 = <Upgrade.NINJA_MID_2: 'Counter-Espionage'>
NINJA_MID_3 = <Upgrade.NINJA_MID_3: 'Shinobi Tactics'>
NINJA_MID_4 = <Upgrade.NINJA_MID_4: 'Bloon Sabotage'>
NINJA_MID_5 = <Upgrade.NINJA_MID_5: 'Grand Saboteur'>
NINJA_BTM_1 = <Upgrade.NINJA_BTM_1: 'Seeking Shuriken'>
NINJA_BTM_2 = <Upgrade.NINJA_BTM_2: 'Caltrops'>
NINJA_BTM_3 = <Upgrade.NINJA_BTM_3: 'Flash Bomb'>
NINJA_BTM_4 = <Upgrade.NINJA_BTM_4: 'Sticky Bomb'>
NINJA_BTM_5 = <Upgrade.NINJA_BTM_5: 'Master Bomber'>
NINJA_PARAGON = <Upgrade.NINJA_PARAGON: 'Ascended Shadow'>
ICE_TOP_1 = <Upgrade.ICE_TOP_1: 'Permafrost'>
ICE_TOP_2 = <Upgrade.ICE_TOP_2: 'Cold Snap'>
ICE_TOP_3 = <Upgrade.ICE_TOP_3: 'Ice Shards'>
ICE_TOP_4 = <Upgrade.ICE_TOP_4: 'Embrittlement'>
ICE_TOP_5 = <Upgrade.ICE_TOP_5: 'Super Brittle'>
ICE_MID_1 = <Upgrade.ICE_MID_1: 'Enhanced Freeze'>
ICE_MID_2 = <Upgrade.ICE_MID_2: 'Deep Freeze'>
ICE_MID_3 = <Upgrade.ICE_MID_3: 'Arctic Wind'>
ICE_MID_4 = <Upgrade.ICE_MID_4: 'Snowstorm'>
ICE_MID_5 = <Upgrade.ICE_MID_5: 'Absolute Zero'>
ICE_BTM_1 = <Upgrade.ICE_BTM_1: 'Larger Radius'>
ICE_BTM_2 = <Upgrade.ICE_BTM_2: 'Re-Freeze'>
ICE_BTM_3 = <Upgrade.ICE_BTM_3: 'Cryo Cannon'>
ICE_BTM_4 = <Upgrade.ICE_BTM_4: 'Icicles'>
ICE_BTM_5 = <Upgrade.ICE_BTM_5: 'Icicle Impale'>
VILLAGE_TOP_1 = <Upgrade.VILLAGE_TOP_1: 'Bigger Radius'>
VILLAGE_TOP_2 = <Upgrade.VILLAGE_TOP_2: 'Jungle Drums'>
VILLAGE_TOP_3 = <Upgrade.VILLAGE_TOP_3: 'Primary Training'>
VILLAGE_TOP_4 = <Upgrade.VILLAGE_TOP_4: 'Primary Mentoring'>
VILLAGE_TOP_5 = <Upgrade.VILLAGE_TOP_5: 'Primary Expertise'>
VILLAGE_MID_1 = <Upgrade.VILLAGE_MID_1: 'Grow Blocker'>
VILLAGE_MID_2 = <Upgrade.VILLAGE_MID_2: 'Radar Scanner'>
VILLAGE_MID_3 = <Upgrade.VILLAGE_MID_3: 'Monkey Intelligence Bureau'>
VILLAGE_MID_4 = <Upgrade.VILLAGE_MID_4: 'Call to Arms'>
VILLAGE_MID_5 = <Upgrade.VILLAGE_MID_5: 'Homeland Defense'>
VILLAGE_BTM_1 = <Upgrade.VILLAGE_BTM_1: 'Monkey Business'>
VILLAGE_BTM_2 = <Upgrade.VILLAGE_BTM_2: 'Monkey Commerce'>
VILLAGE_BTM_3 = <Upgrade.VILLAGE_BTM_3: 'Monkey City'>
VILLAGE_BTM_4 = <Upgrade.VILLAGE_BTM_4: 'Monkey Town'>
VILLAGE_BTM_5 = <Upgrade.VILLAGE_BTM_5: 'Monkeyopolis'>
ALCHEMIST_TOP_1 = <Upgrade.ALCHEMIST_TOP_1: 'Larger Potions'>
ALCHEMIST_TOP_2 = <Upgrade.ALCHEMIST_TOP_2: 'Acidic Mixture Dip'>
ALCHEMIST_TOP_3 = <Upgrade.ALCHEMIST_TOP_3: 'Berserker Brew'>
ALCHEMIST_TOP_4 = <Upgrade.ALCHEMIST_TOP_4: 'Stronger Stimulant'>
ALCHEMIST_TOP_5 = <Upgrade.ALCHEMIST_TOP_5: 'Permanent Brew'>
ALCHEMIST_MID_1 = <Upgrade.ALCHEMIST_MID_1: 'Stronger Acid'>
ALCHEMIST_MID_2 = <Upgrade.ALCHEMIST_MID_2: 'Perishing Potions'>
ALCHEMIST_MID_3 = <Upgrade.ALCHEMIST_MID_3: 'Unstable Concoction'>
ALCHEMIST_MID_4 = <Upgrade.ALCHEMIST_MID_4: 'Transforming Tonic'>
ALCHEMIST_MID_5 = <Upgrade.ALCHEMIST_MID_5: 'Total Transformation'>
ALCHEMIST_BTM_2 = <Upgrade.ALCHEMIST_BTM_2: 'Acid Pool'>
ALCHEMIST_BTM_3 = <Upgrade.ALCHEMIST_BTM_3: 'Lead to Gold'>
ALCHEMIST_BTM_4 = <Upgrade.ALCHEMIST_BTM_4: 'Rubber to Gold'>
ALCHEMIST_BTM_5 = <Upgrade.ALCHEMIST_BTM_5: 'Bloon Master Alchemist'>
SUB_TOP_1 = <Upgrade.SUB_TOP_1: 'Longer Range'>
SUB_TOP_2 = <Upgrade.SUB_TOP_2: 'Advanced Intel'>
SUB_TOP_3 = <Upgrade.SUB_TOP_3: 'Submerge and Support'>
SUB_TOP_4 = <Upgrade.SUB_TOP_4: 'Bloontonium Reactor'>
SUB_TOP_5 = <Upgrade.SUB_TOP_5: 'Energizer'>
SUB_MID_1 = <Upgrade.SUB_MID_1: 'Barbed Darts'>
SUB_MID_2 = <Upgrade.SUB_MID_2: 'Heat-tipped Darts'>
SUB_MID_3 = <Upgrade.SUB_MID_3: 'Ballistic Missile'>
SUB_MID_4 = <Upgrade.SUB_MID_4: 'First Strike Capability'>
SUB_MID_5 = <Upgrade.SUB_MID_5: 'Pre-emptive Strike'>
SUB_BTM_1 = <Upgrade.SUB_BTM_1: 'Twin Guns'>
SUB_BTM_2 = <Upgrade.SUB_BTM_2: 'Airburst Darts'>
SUB_BTM_3 = <Upgrade.SUB_BTM_3: 'Triple Guns'>
SUB_BTM_4 = <Upgrade.SUB_BTM_4: 'Armor Piercing Darts'>
SUB_BTM_5 = <Upgrade.SUB_BTM_5: 'Sub Commander'>
MORTAR_TOP_1 = <Upgrade.MORTAR_TOP_1: 'Bigger Blast'>
MORTAR_TOP_2 = <Upgrade.MORTAR_TOP_2: 'Bloon Buster'>
MORTAR_TOP_3 = <Upgrade.MORTAR_TOP_3: 'Shockwave'>
MORTAR_TOP_4 = <Upgrade.MORTAR_TOP_4: 'The Big One'>
MORTAR_TOP_5 = <Upgrade.MORTAR_TOP_5: 'The Biggest One'>
MORTAR_MID_2 = <Upgrade.MORTAR_MID_2: 'Rapid Reload'>
MORTAR_MID_3 = <Upgrade.MORTAR_MID_3: 'Heavy Shells'>
MORTAR_MID_4 = <Upgrade.MORTAR_MID_4: 'Artillery Battery'>
MORTAR_MID_5 = <Upgrade.MORTAR_MID_5: 'Pop and Awe'>
MORTAR_BTM_1 = <Upgrade.MORTAR_BTM_1: 'Increased Accuracy'>
MORTAR_BTM_2 = <Upgrade.MORTAR_BTM_2: 'Burny Stuff'>
MORTAR_BTM_3 = <Upgrade.MORTAR_BTM_3: 'Signal Flare'>
MORTAR_BTM_4 = <Upgrade.MORTAR_BTM_4: 'Shattering Shells'>
MORTAR_BTM_5 = <Upgrade.MORTAR_BTM_5: 'Blooncineration'>
SNIPER_TOP_1 = <Upgrade.SNIPER_TOP_1: 'Full Metal Jacket'>
SNIPER_TOP_2 = <Upgrade.SNIPER_TOP_2: 'Large Calibre'>
SNIPER_TOP_3 = <Upgrade.SNIPER_TOP_3: 'Deadly Precision'>
SNIPER_TOP_4 = <Upgrade.SNIPER_TOP_4: 'Maim MOAB'>
SNIPER_TOP_5 = <Upgrade.SNIPER_TOP_5: 'Cripple MOAB'>
SNIPER_MID_1 = <Upgrade.SNIPER_MID_1: 'Night Vision Goggles'>
SNIPER_MID_2 = <Upgrade.SNIPER_MID_2: 'Shrapnel Shot'>
SNIPER_MID_3 = <Upgrade.SNIPER_MID_3: 'Bouncing Bullet'>
SNIPER_MID_4 = <Upgrade.SNIPER_MID_4: 'Supply Drop'>
SNIPER_MID_5 = <Upgrade.SNIPER_MID_5: 'Elite Sniper'>
SNIPER_BTM_1 = <Upgrade.SNIPER_BTM_1: 'Fast Firing'>
SNIPER_BTM_2 = <Upgrade.SNIPER_BTM_2: 'Even Faster Firing'>
SNIPER_BTM_3 = <Upgrade.SNIPER_BTM_3: 'Semi-Automatic'>
SNIPER_BTM_4 = <Upgrade.SNIPER_BTM_4: 'Full Auto Rifle'>
SNIPER_BTM_5 = <Upgrade.SNIPER_BTM_5: 'Elite Defender'>
SPIKE_TOP_1 = <Upgrade.SPIKE_TOP_1: 'Bigger Stacks'>
SPIKE_TOP_2 = <Upgrade.SPIKE_TOP_2: 'White Hot Spikes'>
SPIKE_MID_1 = <Upgrade.SPIKE_MID_1: 'Faster Production'>
SPIKE_MID_2 = <Upgrade.SPIKE_MID_2: 'Even Faster Production'>
SPIKE_TOP_3 = <Upgrade.SPIKE_TOP_3: 'Spiked Balls'>
SPIKE_TOP_4 = <Upgrade.SPIKE_TOP_4: 'Spiked Mines'>
SPIKE_TOP_5 = <Upgrade.SPIKE_TOP_5: 'Super Mines'>
SPIKE_MID_3 = <Upgrade.SPIKE_MID_3: 'MOAB SHREDR'>
SPIKE_MID_4 = <Upgrade.SPIKE_MID_4: 'Spike Storm'>
SPIKE_MID_5 = <Upgrade.SPIKE_MID_5: 'Carpet of Spikes'>
SPIKE_BTM_1 = <Upgrade.SPIKE_BTM_1: 'Long Reach'>
SPIKE_BTM_2 = <Upgrade.SPIKE_BTM_2: 'Smart Spikes'>
SPIKE_BTM_3 = <Upgrade.SPIKE_BTM_3: 'Long Life Spikes'>
SPIKE_BTM_4 = <Upgrade.SPIKE_BTM_4: 'Deadly Spikes'>
SPIKE_BTM_5 = <Upgrade.SPIKE_BTM_5: 'Perma-Spike'>

Achievement

enum bloonspy.model.btd6.Achievement(value)

New in 0.5.0

Every achievement present in the game.

Valid values are as follows:

FIRST_WIN = <Achievement.FIRST_WIN: 'First Win'>
HERO_TIME = <Achievement.HERO_TIME: 'Hero Time'>
HERO_POWERS_ACTIVATE = <Achievement.HERO_POWERS_ACTIVATE: 'Hero Powers Activate'>
BIGGER_BADDER = <Achievement.BIGGER_BADDER: 'Bigger, Badder'>
BIG_MONKEY = <Achievement.BIG_MONKEY: 'Big Monkey'>
CHALLENGER = <Achievement.CHALLENGER: 'Challenger'>
STUDENT = <Achievement.STUDENT: 'Student'>
MEGA_MONKEY = <Achievement.MEGA_MONKEY: 'Mega Monkey'>
ROLE_REVERSER = <Achievement.ROLE_REVERSER: 'Role Reverser'>
MONKEY_AVENGER_LEAGUE = <Achievement.MONKEY_AVENGER_LEAGUE: 'Monkey Avenger League'>
SCHOLAR = <Achievement.SCHOLAR: 'Scholar'>
NEXT_LEVEL = <Achievement.NEXT_LEVEL: 'Next Level'>
GRASSHOPPER = <Achievement.GRASSHOPPER: 'Grasshopper'>
FIRST_MONKEYS_FIRST = <Achievement.FIRST_MONKEYS_FIRST: 'First Monkeys First'>
INFRARED = <Achievement.INFRARED: 'Infrared'>
WAR_MONKEYS = <Achievement.WAR_MONKEYS: 'War Monkeys'>
YOUVE_GOT_THE_POWER = <Achievement.YOUVE_GOT_THE_POWER: "You've Got the Power">
CHALLENGE_APPRENTICE = <Achievement.CHALLENGE_APPRENTICE: 'Challenge Apprentice'>
EPIC_HERO = <Achievement.EPIC_HERO: 'Epic Hero'>
SURVIVOR = <Achievement.SURVIVOR: 'Survivor'>
ACOLYTE = <Achievement.ACOLYTE: 'Acolyte'>
ABRACADABMONKEY = <Achievement.ABRACADABMONKEY: 'Abracadabmonkey'>
MOAB_ASSASSIN = <Achievement.MOAB_ASSASSIN: 'MOAB Assassin'>
MEDAL_WINNER = <Achievement.MEDAL_WINNER: 'Medal Winner'>
OUR_POWERS_COMBINED = <Achievement.OUR_POWERS_COMBINED: 'Our Powers Combined'>
CLICKER = <Achievement.CLICKER: 'Clicker'>
KNOWLEDGABLE_PRIMATE = <Achievement.KNOWLEDGABLE_PRIMATE: 'Knowledgable Primate'>
DECORATED_HERO = <Achievement.DECORATED_HERO: 'Decorated Hero'>
BFB_BRAWLER = <Achievement.BFB_BRAWLER: 'BFB Brawler'>
ADVANCED_PLAYER = <Achievement.ADVANCED_PLAYER: 'Advanced Player'>
SUPERIOR_CLICKER = <Achievement.SUPERIOR_CLICKER: 'Superior Clicker'>
POWER_USER = <Achievement.POWER_USER: 'Power User'>
PERFECT_WEEK = <Achievement.PERFECT_WEEK: 'Perfect Week'>
BIG_BLOONS = <Achievement.BIG_BLOONS: 'Big Bloons'>
RED_AND_BLUE_MAKES = <Achievement.RED_AND_BLUE_MAKES: 'Red and Blue Makes...'>
ROOKIE_OF_THE_YEAR = <Achievement.ROOKIE_OF_THE_YEAR: 'Rookie of the year'>
THRIFTY = <Achievement.THRIFTY: 'Thrifty'>
COOPERATION = <Achievement.COOPERATION: 'Co-operation'>
TRIPLE_THREAT = <Achievement.TRIPLE_THREAT: 'Triple Threat'>
KIND_BENEFACTOR = <Achievement.KIND_BENEFACTOR: 'Kind Benefactor'>
GENEROUS_BENEFACTOR = <Achievement.GENEROUS_BENEFACTOR: 'Generous Benefactor'>
MONKEY_CONTRIBUTOR = <Achievement.MONKEY_CONTRIBUTOR: 'Monkey Contributor'>
FOUR_TIMES_THE_FUN = <Achievement.FOUR_TIMES_THE_FUN: 'Four times the fun'>
COLLABORATE = <Achievement.COLLABORATE: 'Collaborate!'>
ME_DID_A_JOB_ON_DDT = <Achievement.ME_DID_A_JOB_ON_DDT: 'Me Did A Job on DDT'>
POWERSHARE = <Achievement.POWERSHARE: 'Powershare'>
EMPOWERED = <Achievement.EMPOWERED: 'Empowered'>
ALL_FOR_ONE_AND_ONE_FOR_ONE = <Achievement.ALL_FOR_ONE_AND_ONE_FOR_ONE: 'All for one and one for one'>
TETRIMINO = <Achievement.TETRIMINO: 'Tetrimino'>
RAINBOW_IS_MAGIC = <Achievement.RAINBOW_IS_MAGIC: 'Rainbow is Magic'>
RISING_STAR = <Achievement.RISING_STAR: 'Rising star'>
ULTIMATE_CLICKER = <Achievement.ULTIMATE_CLICKER: 'Ultimate Clicker'>
SMALL_BLOONS = <Achievement.SMALL_BLOONS: 'Small Bloons'>
ZOMGINATOR = <Achievement.ZOMGINATOR: 'ZOMGinator'>
MASTER_OF_LIFE = <Achievement.MASTER_OF_LIFE: 'Master of Life'>
LOOKING_FAB = <Achievement.LOOKING_FAB: 'Looking fab'>
WHEN_THE_GOING_GETS_TOUGH = <Achievement.WHEN_THE_GOING_GETS_TOUGH: 'When the going gets tough...'>
TOWER_KEEPER = <Achievement.TOWER_KEEPER: 'Tower Keeper'>
DR_MONKEY = <Achievement.DR_MONKEY: 'Dr. Monkey'>
THERPOPYLAE = <Achievement.THERPOPYLAE: 'Therpopylae'>
MONKEY_PHILANTHROPIST = <Achievement.MONKEY_PHILANTHROPIST: 'Monkey Philanthropist'>
I_SEE_YOU = <Achievement.I_SEE_YOU: 'I see you'>
INDIE = <Achievement.INDIE: 'Indie'>
IMPOPPABLE = <Achievement.IMPOPPABLE: 'Impoppable'>
POPPABLE = <Achievement.POPPABLE: 'Poppable'>
UNSUNG_MONKEYS = <Achievement.UNSUNG_MONKEYS: 'Unsung Monkeys'>
A_CRATE_TIME = <Achievement.A_CRATE_TIME: 'A Crate Time'>
BLOONZILLA = <Achievement.BLOONZILLA: 'Bloonzilla!'>
GOLDEN_TICKET = <Achievement.GOLDEN_TICKET: 'Golden Ticket'>
BILL_GREATES = <Achievement.BILL_GREATES: 'Bill Greates'>
CO_OP_POPPER = <Achievement.CO_OP_POPPER: 'Co-op Popper!'>
POWER_OVERWHELMING = <Achievement.POWER_OVERWHELMING: 'Power overwhelming!'>
STRANGELY_ADORABLE = <Achievement.STRANGELY_ADORABLE: 'Strangely Adorable'>
ADVENTURER = <Achievement.ADVENTURER: 'Adventurer'>
SEASONED_ADVENTURER = <Achievement.SEASONED_ADVENTURER: 'Seasoned Adventurer'>
ACHIEVEMENT_OF_ACHIEVEMENTS = <Achievement.ACHIEVEMENT_OF_ACHIEVEMENTS: 'Achievement Of Achievements'>
MONKEY_FAN_CLUB = <Achievement.MONKEY_FAN_CLUB: 'Monkey Fan Club'>
ALL_ABOUT_THAT_BLING = <Achievement.ALL_ABOUT_THAT_BLING: 'All About That Bling'>
APOTHEOSIS = <Achievement.APOTHEOSIS: 'Apotheosis'>
WHOS_THE_BOSS = <Achievement.WHOS_THE_BOSS: "Who's the Boss">
WHAT_IS_THIS_NEW_BLOONERY = <Achievement.WHAT_IS_THIS_NEW_BLOONERY: 'What is this new Bloonery'>
IM_THE_BOSS = <Achievement.IM_THE_BOSS: "I'm the Boss">
COUPON_CRAZY = <Achievement.COUPON_CRAZY: 'Coupon Crazy'>
MO_HEROES_MO_PROBLEMS = <Achievement.MO_HEROES_MO_PROBLEMS: 'Mo Heroes, Mo Problems'>
BIG_SPENDER = <Achievement.BIG_SPENDER: 'Big Spender'>
ILL_BE_BACK = <Achievement.ILL_BE_BACK: "I'll Be Back">
TWO_TOWER_CHIMPS = <Achievement.TWO_TOWER_CHIMPS: '2TC'>
WHAT_DID_IT_COST = <Achievement.WHAT_DID_IT_COST: 'What did it cost'>
REGIFTED = <Achievement.REGIFTED: 'Regifted'>
FULL_SPEED_AHEAD = <Achievement.FULL_SPEED_AHEAD: 'Full Speed Ahead!'>
NO_STONE_LEFT_UNTURNED = <Achievement.NO_STONE_LEFT_UNTURNED: 'No Stone Left Unturned'>
TOP_OF_YOUR_GAME = <Achievement.TOP_OF_YOUR_GAME: 'Top of your game'>
SO_SPIIICEY_NINJA_KIWI = <Achievement.SO_SPIIICEY_NINJA_KIWI: 'So Spiiicey Ninj aKiwi'>
SNAP_OF_YOUR_FINGERS = <Achievement.SNAP_OF_YOUR_FINGERS: 'Snap of your fingers'>
SO_SHINY = <Achievement.SO_SHINY: 'So Shiny'>
LIVING_ON_THE_EDGE = <Achievement.LIVING_ON_THE_EDGE: 'Living on the Edge'>
MAGICAL_GOLD = <Achievement.MAGICAL_GOLD: 'Magical Gold'>
HOOK_LINE_AND_SINKER = <Achievement.HOOK_LINE_AND_SINKER: 'Hook Line And Sinker'>
SUPER_BAD = <Achievement.SUPER_BAD: 'Super BAD'>
LIKE_A_BOSS = <Achievement.LIKE_A_BOSS: 'Like a Boss'>
DAVIDS_VS_GOLIATH = <Achievement.DAVIDS_VS_GOLIATH: 'Davids Vs Goliath'>
TOOLS_TO_DARWIN = <Achievement.TOOLS_TO_DARWIN: 'Tools To Darwin'>
CHUNKY_MONKEYS = <Achievement.CHUNKY_MONKEYS: 'Chunky Monkeys'>
NOT_LACKING_CRITICAL_INFORMATION = <Achievement.NOT_LACKING_CRITICAL_INFORMATION: 'Not Lacking Critical Information'>
SOCIAL_BUTTERFLY = <Achievement.SOCIAL_BUTTERFLY: 'Social Butterfly'>
PERFECT_PARAGON = <Achievement.PERFECT_PARAGON: 'Perfect Paragon'>
TERRITORY_SAMPLER = <Achievement.TERRITORY_SAMPLER: 'Territory Sampler'>
CONQUESTED_TERRITORY = <Achievement.CONQUESTED_TERRITORY: 'Conquested Territory'>
INFLATED = <Achievement.INFLATED: 'Inflated'>
OATHBREAKERS = <Achievement.OATHBREAKERS: 'Oathbreakers'>
CHALLENGE_MASTER = <Achievement.CHALLENGE_MASTER: 'Challenge Master'>
NO_HARVEST = <Achievement.NO_HARVEST: 'No Harvest'>
STUBBORN_STRATEGY = <Achievement.STUBBORN_STRATEGY: 'Stubborn Strategy'>
STAGE_OF_EMPIRES = <Achievement.STAGE_OF_EMPIRES: 'Stage of Empires'>
A_LA_CODE = <Achievement.A_LA_CODE: 'A La Code'>
AXIS_OF_HAVOK = <Achievement.AXIS_OF_HAVOK: 'Axis of Havok'>
BLOON_MASTER_POPULOUS = <Achievement.BLOON_MASTER_POPULOUS: 'Bloon Master Populous'>
READY_PLAYER_ONE = <Achievement.READY_PLAYER_ONE: 'Ready Player One'>
THE_GREATEST_CHALLENGE = <Achievement.THE_GREATEST_CHALLENGE: 'The greatest challenge'>
LIMITE_DRUN = <Achievement.LIMITE_DRUN: 'Limited Run'>
TWELVE_TASKS_OF_MONKULES = <Achievement.TWELVE_TASKS_OF_MONKULES: '12 Tasks of Monk-ules'>
INVIGORATION = <Achievement.INVIGORATION: 'Invigoration'>
STICKY_SITUATION = <Achievement.STICKY_SITUATION: 'Sticky Situation'>
BLOONTONA_500 = <Achievement.BLOONTONA_500: 'Bloontona 500'>
SIDE_QUEST = <Achievement.SIDE_QUEST: 'Side Quest'>
A_YEAR_IN_THE_MAKING = <Achievement.A_YEAR_IN_THE_MAKING: 'A year in the making'>
WORLD_LEAGUE_TRAINING = <Achievement.WORLD_LEAGUE_TRAINING: 'World League Training'>

MapBorder

enum bloonspy.model.btd6.MapBorder(value)

New in 0.5.0

Colors of the border of a map, to symbolize progression.

Valid values are as follows:

NONE = <MapBorder.NONE: 'None'>
BRONZE = <MapBorder.BRONZE: 'Bronze'>
SILVER = <MapBorder.SILVER: 'Silver'>
GOLD = <MapBorder.GOLD: 'Gold'>
BLACK = <MapBorder.BLACK: 'Black'>

Map

enum bloonspy.model.btd6.Map(value)

New in 0.5.0

All maps present in the game.

Valid values are as follows:

MONKEY_MEADOW = <Map.MONKEY_MEADOW: 'Monkey Meadow'>
TREE_STUMP = <Map.TREE_STUMP: 'Tree Stump'>
TOWN_CENTRE = <Map.TOWN_CENTRE: 'Town Centre'>
PARK_PATH = <Map.PARK_PATH: 'Park Path'>
ALPINE_RUN = <Map.ALPINE_RUN: 'Alpine Run'>
FROZEN_OVER = <Map.FROZEN_OVER: 'Frozen Over'>
IN_THE_LOOP = <Map.IN_THE_LOOP: 'In The Loop'>
CUBISM = <Map.CUBISM: 'Cubism'>
FOUR_CIRCLES = <Map.FOUR_CIRCLES: 'Four Circles'>
HEDGE = <Map.HEDGE: 'Hedge'>
END_OF_THE_ROAD = <Map.END_OF_THE_ROAD: 'End Of The Road'>
LOGS = <Map.LOGS: 'Logs'>
SPRING_SPRING = <Map.SPRING_SPRING: 'Spring Spring'>
KARTSNDARTS = <Map.KARTSNDARTS: 'Karts N Darts'>
MOON_LANDING = <Map.MOON_LANDING: 'Moon Landing'>
HAUNTED = <Map.HAUNTED: 'Haunted'>
DOWNSTREAM = <Map.DOWNSTREAM: 'Downstream'>
FIRING_RANGE = <Map.FIRING_RANGE: 'Firing Range'>
CRACKED = <Map.CRACKED: 'Cracked'>
STREAMBED = <Map.STREAMBED: 'Streambed'>
CHUTES = <Map.CHUTES: 'Chutes'>
RAKE = <Map.RAKE: 'Rake'>
SPICE_ISLANDS = <Map.SPICE_ISLANDS: 'Spice Islands'>
CARGO = <Map.CARGO: 'Cargo'>
PATS_POND = <Map.PATS_POND: "Pat's Pond">
PENINSULA = <Map.PENINSULA: 'Peninsula'>
HIGH_FINANCE = <Map.HIGH_FINANCE: 'High Finance'>
ANOTHER_BRICK = <Map.ANOTHER_BRICK: 'Another Brick'>
OFF_THE_COAST = <Map.OFF_THE_COAST: 'Off The Coast'>
CORNFIELD = <Map.CORNFIELD: 'Cornfield'>
UNDERGROUND = <Map.UNDERGROUND: 'Underground'>
QUAD = <Map.QUAD: 'Quad'>
DARK_CASTLE = <Map.DARK_CASTLE: 'Dark Castle'>
MUDDY_PUDDLES = <Map.MUDDY_PUDDLES: 'Muddy Puddles'>
OUCH = <Map.OUCH: '#ouch'>
SPILLWAY = <Map.SPILLWAY: 'Spillway'>
WORKSHOP = <Map.WORKSHOP: 'Workshop'>
CARVED = <Map.CARVED: 'Carved'>
BLOODY_PUDDLES = <Map.BLOODY_PUDDLES: 'Bloody Puddles'>
WINTER_PARK = <Map.WINTER_PARK: 'Winter Park'>
ADORAS_TEMPLE = <Map.ADORAS_TEMPLE: "Adora's Temple">
INFERNAL = <Map.INFERNAL: 'Infernal'>
GEARED = <Map.GEARED: 'Geared'>
CANDY_FALLS = <Map.CANDY_FALLS: 'Candy Falls'>
BAZAAR = <Map.BAZAAR: 'Bazaar'>
FLOODED_VALLEY = <Map.FLOODED_VALLEY: 'Flooded Valley'>
LOTUS_ISLAND = <Map.LOTUS_ISLAND: 'Lotus Island'>
RESORT = <Map.RESORT: 'Resort'>
SKATES = <Map.SKATES: 'Skates'>
BLOONARIUS_PRIME = <Map.BLOONARIUS_PRIME: 'Bloonarius Prime'>
BALANCE = <Map.BALANCE: 'Balance'>
ENCRYPTED = <Map.ENCRYPTED: 'Encrypted'>
X_FACTOR = <Map.X_FACTOR: 'X Factor'>
MESA = <Map.MESA: 'Mesa'>
SANCTUARY = <Map.SANCTUARY: 'Sanctuary'>
RAVINE = <Map.RAVINE: 'Ravine'>
SCRAPYARD = <Map.SCRAPYARD: 'Scrapyard'>
THE_CABIN = <Map.THE_CABIN: 'The Cabin'>
QUARRY = <Map.QUARRY: 'Quarry'>
QUIET_STREET = <Map.QUIET_STREET: 'Quiet Street'>
SUNKEN_COLUMNS = <Map.SUNKEN_COLUMNS: 'Sunken Columns'>
COVERED_GARDEN = <Map.COVERED_GARDEN: 'Covered Garden'>
MIDNIGHT_MANSION = <Map.MIDNIGHT_MANSION: 'Midnight Mansion'>
ONE_TWO_TREE = <Map.ONE_TWO_TREE: 'One Two Tree'>
MIDDLE_OF_THE_ROAD = <Map.MIDDLE_OF_THE_ROAD: 'Middle Of The Road'>
POLYPHEMUS = <Map.POLYPHEMUS: 'Polyphemus'>
WATER_PARK = <Map.WATER_PARK: 'Water Park'>
DARK_PATH = <Map.DARK_PATH: 'Dark Path'>
CUSTOM_MAP = <Map.CUSTOM_MAP: 'Custom Map'>

Relic

enum bloonspy.model.btd6.Relic(value)

New in 0.6.0.

Represents Relic Knowledge.

Valid values are as follows:

ABILITIZED = <Relic.ABILITIZED: 'Abilitized'>
AIR_AND_SEA = <Relic.AIR_AND_SEA: 'Air And Sea'>
ALCHEMIST_TOUCH = <Relic.ALCHEMIST_TOUCH: 'Alchemist Touch'>
BIGGER_BLOON_SABOTAGE = <Relic.BIGGER_BLOON_SABOTAGE: 'Bigger Bloon Sabotage'>
BOX_OF_CHOCOLATES = <Relic.BOX_OF_CHOCOLATES: 'Box Of Chocolates'>
BOX_OF_MONKEY = <Relic.BOX_OF_MONKEY: 'Box Of Monkey'>
BROKEN_HEART = <Relic.BROKEN_HEART: 'Broken Heart'>
CAMO_FLOGGED = <Relic.CAMO_FLOGGED: 'Camo Flogged'>
CAMO_TRAP = <Relic.CAMO_TRAP: 'Camo Trap'>
DEEP_HEAT = <Relic.DEEP_HEAT: 'Deep Heat'>
DURABLE_SHOTS = <Relic.DURABLE_SHOTS: 'Durable Shots'>
EL_DORADO = <Relic.EL_DORADO: 'El Dorado'>
EXTRA_EMPOWERED = <Relic.EXTRA_EMPOWERED: 'Extra Empowered'>
FLINT_TIPS = <Relic.FLINT_TIPS: 'Flint Tips'>
FORTIFRIED = <Relic.FORTIFRIED: 'Fortifried'>
GLUE_TRAP = <Relic.GLUE_TRAP: 'Glue Trap'>
GOING_THE_DISTANCE = <Relic.GOING_THE_DISTANCE: 'Going The Distance'>
HARD_BAKED = <Relic.HARD_BAKED: 'Hard Baked'>
HEARTLESS = <Relic.HEARTLESS: 'Heartless'>
HERO_BOOST = <Relic.HERO_BOOST: 'Hero Boost'>
MAGIC_MONKEYS = <Relic.MAGIC_MONKEYS: 'Magic Monkeys'>
MANA_BULWARK = <Relic.MANA_BULWARK: 'Mana Bulwark'>
MARCHING_BOOTS = <Relic.MARCHING_BOOTS: 'Marching Boots'>
MILITARY_MONKEYS = <Relic.MILITARY_MONKEYS: 'Military Monkeys'>
MOAB_CLASH = <Relic.MOAB_CLASH: 'MOAB Clash'>
MOAB_MINE = <Relic.MOAB_MINE: 'MOAB Mine'>
MONKEY_BOOST = <Relic.MONKEY_BOOST: 'Monkey Boost'>
MONKEY_SHIELD = <Relic.MONKEY_SHIELD: 'Monkey Shield'>
MONKEY_SHIELD_MARK2 = <Relic.MONKEY_SHIELD_MARK2: 'Monkey Shield MKII'>
MONKEY_SHIELD_MARK3 = <Relic.MONKEY_SHIELD_MARK3: 'Monkey Shield MKIII'>
MONKEY_TYCOON = <Relic.MONKEY_TYCOON: 'Monkey Tycoon'>
OPEN_SEASON = <Relic.OPEN_SEASON: 'Open Season'>
PRIMARY_PRIMATES = <Relic.PRIMARY_PRIMATES: 'Primary Primates'>
PSI_VISION = <Relic.PSI_VISION: 'Psi Vision'>
REGENERATION = <Relic.REGENERATION: 'Regeneration'>
RESTORATION = <Relic.RESTORATION: 'Restoration'>
ROAD_SPIKES = <Relic.ROAD_SPIKES: 'Road Spikes'>
ROUNDING_UP = <Relic.ROUNDING_UP: 'Rounding Up'>
ROYAL_TREATMENT = <Relic.ROYAL_TREATMENT: 'Royal Treatment'>
SHARPSPLOSION = <Relic.SHARPSPLOSION: 'Sharpsplosion'>
STARTING_STASH = <Relic.STARTING_STASH: 'Starting Stash'>
SMS = <Relic.SMS: 'Super Monkey Storm'>
SUPPORT_SIMIANS = <Relic.SUPPORT_SIMIANS: 'Support Simians'>
TECHBOT = <Relic.TECHBOT: 'Techbot'>
THRIVE = <Relic.THRIVE: 'Thrive'>

CtTileType

enum bloonspy.model.btd6.CtTileType(value)

New in 0.6.0.

Represents a CT tile’s type, or what’s on top of it.

Valid values are as follows:

TEAM_START = <CtTileType.TEAM_START: 'Team Start'>
REGULAR = <CtTileType.REGULAR: 'Regular'>
RELIC = <CtTileType.RELIC: 'Relic'>
BANNER = <CtTileType.BANNER: 'Banner'>

GameType

enum bloonspy.model.btd6.GameType(value)

New in 0.6.0.

Represents a CT tile’s challenge type.

Valid values are as follows:

LEAST_TIERS = <GameType.LEAST_TIERS: 'Least Tiers'>
LEAST_CASH = <GameType.LEAST_CASH: 'Least Cash'>
BOSS = <GameType.BOSS: 'Boss'>
RACE = <GameType.RACE: 'Race'>

GameType

enum bloonspy.model.btd6.CustomMapFilter(value)

An enumeration.

Valid values are as follows:

NEWEST = <CustomMapFilter.NEWEST: 'newest'>
TRENDING = <CustomMapFilter.TRENDING: 'trending'>
MOST_LIKED = <CustomMapFilter.MOST_LIKED: 'mostLiked'>

Exceptions

BloonsException

class bloonspy.exceptions.BloonsException

Superclass for all Bloons exceptions. Can be used as a catch-all.

NotFound

class bloonspy.exceptions.NotFound

The requested resource or event doesn’t exist or has expired.

UnderMaintenance

class bloonspy.exceptions.UnderMaintenance

The Ninja Kiwi server is under maintenance.

BadTeamSize

class bloonspy.exceptions.BadTeamSize

You specified a bad team size.

InvalidTowerPath

class bloonspy.exceptions.InvalidTowerPath(tp: int, mp: int, bp: int)

New in 0.5.0

You specified a bad path (for example: 522).

Forbidden

class bloonspy.exceptions.Forbidden

New in 0.5.0

You are not allowed to use this method.