mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-07 15:13:52 -08:00
* Add the world * doc update * docs * Fix Blast/Missile not clearing Reflect * Update worlds/earthbound/__init__.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/__init__.py remove unused import Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/__init__.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/modules/dungeon_er.py make bool optional Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/modules/boss_shuffle.py typing update Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/modules/boss_shuffle.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Filter events out of item name to id * we call it a glorp * Update worlds/earthbound/Regions.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/__init__.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/Items.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Update worlds/earthbound/Regions.py Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> * Fix missing optional import * hint stuff * -Fix Apple Kid text being wrong -Fix Slimy Pile text being wrong * -Fix some sprite corruption if PSI was used when an enemy loaded another enemy -Fixed a visible artifact tile during some cutscenes * Update ver * Update docs * Fix some money scripting issues * Add argument to PSI fakeout attack * Updated monkey caves shop description * Remove closing markdown from doc * Add new flavors * Make flavors actually work * Update platforms * Fix common gear getting duplicated * Split region initialization * Condense checks for start inventory + some other junk * Fix some item groups - change receiver phone to warp pad * wow that one was really bad :glorp: * blah * Fix cutoff option text * switch start inventory concatenation to itertools * Fix sky runner scripting bug - added some new comm suggestions * Fix crash when generating with spoiler_only * Fix happy-happy teleport not unlocking after beating carpainter * Hint man hints can now use CreateHint packets to create hints in other games * Adjust some filler rarity * Update world to use CreateHints and deprecate old method * Fix epilogue skip being offset * Rearrange a couple regions * Fix tendapants getting deleted in battle * update doc * i got scared and forgot i had multiple none checks and am worried about this triggering but tested and it works * Fix mostly typing errors from silvris * More type checks * More typing * Typema * Type * Fix enemy levels overwriting music * Fix gihugic blunder * Fix Lumine Hall enabling OSS * del world * Rel 4.2.7 * Remove some debug logs * Fix vanilla bug with weird ambush detection * Fix Starman Junior having an unscaled Freeze * Change shop scaling * Fix shops using the wrong thankful script * Update some bosses in boss shuffle * Loc group adjustment * Update some boss shuffle stuff | Fix Enemizer attacks getting overwritten by Shuffle data | Fix flunkies not updating and still being used with enemizer * Get rid of some debug stuff * Get boss shuffle running, dont merge * Fix json and get boss shuffle no plando back up * Fix Magicant Boost not initializing to Ness if party count = 4 * Fix belch shop using wrong logic * Don't re-send goal status * EBitem * remove : * idk if this is whatvi wanted * All client messagesnow only send when relevant instead of constantly * Patch up the rest of boss plando * Fix Giygas being not excluded from enemizer * Fix epilogue again * adjust the sphere scaling name * add the things * Fix Ness being placed onto monotoli when monotoli was in sea of eden * Fix prefill properly * Fix boss shuffle on vanilla slots. * rename this, apparently * Update archipelago.json --------- Co-authored-by: Duck <31627079+duckboycool@users.noreply.github.com> Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
1321 lines
77 KiB
Python
1321 lines
77 KiB
Python
from typing import Dict
|
|
from collections import Counter
|
|
import struct
|
|
import math
|
|
from typing import TYPE_CHECKING
|
|
from logging import warning
|
|
if TYPE_CHECKING:
|
|
from .. import EarthBoundWorld
|
|
from ..Rom import LocalRom
|
|
|
|
|
|
|
|
class EarthBoundEnemy:
|
|
def __init__(self, name: str, address: int, hp: int, pp: int, exp: int, money: int, speed: int, offense: int,
|
|
defense: int, level: int, guts: int, luck: int, is_scaled: bool, shield: str | None = None,
|
|
attack_extensions: int = 0):
|
|
self.name = name
|
|
self.address = address
|
|
self.hp = hp
|
|
self.pp = pp
|
|
self.exp = exp
|
|
self.money = money
|
|
self.speed = speed
|
|
self.offense = offense
|
|
self.defense = defense
|
|
self.level = level
|
|
self.guts = guts
|
|
self.luck = luck
|
|
self.is_scaled = is_scaled
|
|
self.shield = shield
|
|
self.attack_extensions = attack_extensions
|
|
|
|
|
|
def initialize_enemies(world: "EarthBoundWorld") -> None:
|
|
world.enemy_psi = {
|
|
"Dept. Store Spook": ["freeze", "fire", "lifeup", "null"],
|
|
"Dept. Store Spook (2)": ["null", "null", "freeze", "null"],
|
|
"Black Antoid": ["null", "null", "null", "lifeup"],
|
|
"Struttin' Evil Mushroom": ["null", "null", "null", "scatter_spores"],
|
|
"Mobile Sprout": ["null", "null", "null", "lifeup"],
|
|
"Tough Mobile Sprout": ["null", "null", "null", "lifeup"],
|
|
"Mystical Record": ["null", "null", "lifeup", "null"],
|
|
"Guardian Hieroglyph": ["hacking_cough", "thunder_minus", "flash", "thunder"],
|
|
"Electro Swoosh": ["null", "electrical_shock", "electrical_shock", "null"],
|
|
"Conducting Menace": ["flash_minus", "flash", "thunder_minus", "thunder"],
|
|
"Conducting Spirit": ["flash_minus", "flash", "thunder_minus", "thunder"],
|
|
"Ness's Nightmare": ["null", "special", "glorious_light", "null"],
|
|
"Mr. Carpainter": ["crashing_boom_bang", "lifeup", "null", "null"],
|
|
"Carbon Dog": ["flaming_fireball", "null", "null", "null"],
|
|
"Thunder Mite": ["thunder_minus", "thunder_minus", "thunder", "thunder"],
|
|
"Chomposaur": ["fire", "fire", "null", "null"],
|
|
"Gigantic Ant": ["null", "poison_stinger", "null", "null"],
|
|
"Shrooom!": ["null", "lifeup", "scatter_spores", "null"],
|
|
"Plague Rat of Doom": ["poisonous_fangs", "null", "null", "null"],
|
|
"Mondo Mole": ["lifeup", "null", "null", "null"],
|
|
"Scalding Coffee Cup": ["scalding_espresso", "scalding_espresso", "scalding_espresso", "scalding_espresso"],
|
|
"Arachnid!": ["null", "null", "null", "poison_stinger"],
|
|
"Arachnid!!!": ["poison_stinger", "null", "null", "null"],
|
|
"Slimy Little Pile": ["hacking_cough", "null", "null", "null"],
|
|
"Even Slimier Little Pile": ["null", "null", "null", "hacking_cough"],
|
|
"Kraken": ["breathe_fire", "null", "crashing_boom_bang", "null"],
|
|
"Bionic Kraken": ["null", "crashing_boom_bang", "breathe_fire", "null"], # Generate tornado?
|
|
"Spinning Robo": ["null", "null", "stuffiness_beam", "null"],
|
|
"Whirling Robo": ["null", "stuffiness_beam", "null", "null"],
|
|
"Thirsty Coil Snake": ["poisonous_fangs", "null", "null", "null"],
|
|
"Crazed Sign": ["null", "null", "paralysis", "null"],
|
|
"Wooly Shambler": ["null", "null", "null", "flash"],
|
|
"Wild 'n Wooly Shambler": ["null", "null", "null", "flash"],
|
|
"Skelpion": ["null", "poison_stinger", "null", "thunder"],
|
|
"Dread Skelpion": ["poison_stinger", "null", "thunder", "thunder"],
|
|
"Ghost of Starman": ["starstorm_minus", "null", "null", "null"],
|
|
"Smilin' Sphere": ["null", "fire", "null", "null"],
|
|
"Uncontrollable Sphere": ["null", "fire", "fire", "null"],
|
|
"Starman Deluxe": ["null", "null", "starstorm", "null"],
|
|
"Final Starman": ["null", "null", "starstorm", "null"],
|
|
"Urban Zombie": ["null", "null", "nauseous_breath", "null"],
|
|
"Zombie Dog": ["null", "null", "null", "poisonous_fangs"],
|
|
"Diamond Dog": ["null", "null", "null", "glorious_light"],
|
|
"Trillionage Sprout": ["null", "null", "flash", "paralysis"],
|
|
"Musica": ["electrical_shock", "null", "null", "electrical_shock"],
|
|
"Desert Wolf": ["null", "null", "null", "poisonous_fangs"],
|
|
"Master Belch": ["nauseous_breath", "nauseous_breath", "null", "null"],
|
|
"Big Pile of Puke": ["null", "hacking_cough", "null", "nauseous_breath"],
|
|
"Master Barf": ["nauseous_breath", "null", "null", "null"],
|
|
"Kiss of Death": ["null", "null", "kiss_of_death", "null"],
|
|
"French Kiss of Death": ["kiss_of_death", "kiss_of_death", "kiss_of_death", "kiss_of_death"],
|
|
"Zap Eel": ["electrical_shock", "electrical_shock", "electrical_shock", "electrical_shock"],
|
|
"Tangoo": ["null", "null", "poison_flute", "null"],
|
|
"Squatter Demon": ["poisonous_fangs", "diamond_bite", "null", "null"],
|
|
"Lesser Mook": ["freeze", "freeze", "null", "diamond_eyes"],
|
|
"Mook Senior": ["freeze", "fire", "lifeup", "diamond_eyes"],
|
|
"Smelly Ghost": ["null", "null", "lifeup", "null"],
|
|
"Deadly Mouse": ["poisonous_fangs", "null", "null", "null"],
|
|
"Care Free Bomb": ["throw_bomb_minus", "throw_bomb_minus", "throw_bomb_minus", "throw_bomb"],
|
|
"Electro Specter": ["electrical_shock", "null", "electrical_shock", "null"],
|
|
"Smilin' Sam": ["null", "null", "null", "lifeup"],
|
|
"Manly Fish's Brother": ["null", "paralysis", "freeze", "healing"],
|
|
"Thunder and Storm": ["crashing_boom_bang", "null", "null", "null"],
|
|
"Cute Li'l UFO": ["null", "null", "null", "lifeup"],
|
|
"Beautiful UFO": ["null", "null", "null", "lifeup"],
|
|
"Evil Mani-Mani": ["null", "paralysis", "null", "null"],
|
|
"Mr. Molecule": ["thunder", "flash", "fire", "freeze"],
|
|
"Sentry Robot": ["null", "null", "null", "shoot_rocket"],
|
|
"Psychic Psycho": ["fire", "fire", "fire", "fire"],
|
|
"Major Psychic Psycho": ["fire", "null", "paralysis", "fire"],
|
|
"Soul Consuming Flame": ["null", "breathe_fire", "flaming_fireball", "spray_fire"],
|
|
"Demonic Petunia": ["null", "extinguishing_blast", "null", "paralyzing_pollen"],
|
|
"Li'l UFO": ["null", "null", "stuffiness_beam", "null"],
|
|
"Robo-Pump (2)": ["throw_bomb", "null", "null", "null"],
|
|
"Ness's Nightmare (2)": ["special", "lifeup", "special", "null"],
|
|
"Mr. Carpainter (2)": ["crashing_boom_bang", "null", "null", "null"],
|
|
"Carbon Dog (2)": ["spray_fire", "null", "null", "null"],
|
|
"Gigantic Ant (2)": ["paralysis", "null", "null", "null"],
|
|
"Chomposaur (2)": ["null", "null", "fire", "fire"],
|
|
"Guardian Digger (2)": ["null", "null", "null", "lifeup"],
|
|
"Kraken (2)": ["flash", "breathe_fire", "null", "null"], # tornado?
|
|
"Starman Super (2)": ["null", "healing", "null", "null"],
|
|
"Ghost of Starman (2)": ["null", "null", "starstorm", "null"],
|
|
"Final Starman (2)": ["starstorm", "null", "healing", "null"],
|
|
"Diamond Dog (2)": ["null", "null", "null", "diamond_bite"],
|
|
"Trillionage Sprout (2)": ["null", "null", "diamond_eyes", "null"],
|
|
"Master Belch (2)": ["nauseous_breath", "null", "null", "null"],
|
|
"Master Barf (2)": ["null", "null", "nauseous_breath", "null"],
|
|
"Boogey Tent (2)": ["null", "null", "flash", "null"],
|
|
"Electro Specter (2)": ["null", "null", "electrical_shock", "null"],
|
|
"Thunder and Storm (2)": ["summon_storm", "null", "crashing_boom_bang", "null"],
|
|
"Evil Mani-Mani (2)": ["null", "null", "glorious_light", "null"],
|
|
"Black Antoid (2)": ["lifeup", "lifeup", "lifeup", "lifeup"],
|
|
"Giygas (2)": ["special", "special", "special", "special"],
|
|
"Farm Zombie": ["null", "null", "nauseous_breath", "null"],
|
|
"Criminal Caterpillar": ["fire", "fire", "fire", "fire"],
|
|
"Evil Eye": ["null", "diamond_eyes", "paralysis", "null"],
|
|
"Master Criminal Worm": ["fire", "fire", "fire", "fire"],
|
|
"Giygas": ["giygas_phase2_thunder", "giygas_phase2_freeze", "giygas_phase2_flash", "null"],
|
|
"Giygas (5)": ["giygas_phase3_thunder", "giygas_phase3_freeze", "giygas_phase3_flash", "null"],
|
|
"Giygas (6)": ["giygas_phase4_thunder", "giygas_phase4_freeze", "giygas_phase4_flash", "null"],
|
|
"Starman Junior": ["fire", "null", "freeze", "fire"],
|
|
"Ultimate Octobot": ["null", "stuffiness_beam", "null", "stuffiness_beam"],
|
|
"Mechanical Octobot": ["null", "null", "null", "stuffiness_beam"]
|
|
}
|
|
|
|
world.enemy_sprites = {
|
|
"Insane Cultist": 0x0065,
|
|
"Armored Frog": 0x0118,
|
|
"Bad Buffalo": 0x0137,
|
|
"Black Antoid": 0x013C,
|
|
"Black Antoid (2)": 0x013C,
|
|
"Red Antoid": 0x013C,
|
|
"Ramblin' Evil Mushroom": 0x0123,
|
|
"Struttin' Evil Mushroom": 0x0123,
|
|
"Mobile Sprout": 0x013D,
|
|
"Tough Mobile Sprout": 0x013D,
|
|
"Enraged Fire Plug": 0x0117,
|
|
"Mystical Record": 0x00C3,
|
|
"Atomic Power Robot": 0x0132,
|
|
"Nuclear Reactor Robot": 0x0132,
|
|
"Guardian Hieroglyph": 0x0145,
|
|
"Lethal Asp Hieroglyph": 0x0140,
|
|
"Electro Swoosh": 0x0114,
|
|
"Conducting Menace": 0x0144,
|
|
"Conducting Spirit": 0x0144,
|
|
"Evil Elemental": 0x0117,
|
|
"Annoying Old Party Man": 0x0187,
|
|
"Annoying Reveler": 0x0187,
|
|
"Unassuming Local Guy": 0x0045,
|
|
"New Age Retro Hippie": 0x0169,
|
|
"Mighty Bear": 0x014B,
|
|
"Mighty Bear Seven": 0x014B,
|
|
"Putrid Moldyman": 0x011D,
|
|
"Thunder Mite": 0x0144,
|
|
"Cranky Lady": 0x0188,
|
|
"Extra Cranky Lady": 0x0188,
|
|
"Wetnosaur": 0x012A,
|
|
"Chomposaur": 0x0138,
|
|
"Gigantic Ant": 0x0139,
|
|
"Scalding Coffee Cup": 0x00C3,
|
|
"Loaded Dice": 0x00C3,
|
|
"Slimy Little Pile": 0x013B,
|
|
"Even Slimier Little Pile": 0x013B,
|
|
"Arachnid!": 0x013A,
|
|
"Arachnid!!!": 0x013A,
|
|
"Bionic Kraken": 0x0132,
|
|
"Spinning Robo": 0x0132,
|
|
"Whirling Robo": 0x0132,
|
|
"Hyper Spinning Robo": 0x0132,
|
|
"Cop": 0x004A,
|
|
"Coil Snake": 0x011B,
|
|
"Thirsty Coil Snake": 0x011B,
|
|
"Mr. Batty": 0x0112,
|
|
"Elder Batty": 0x0112,
|
|
"Violent Roach": 0x013A,
|
|
"Filthy Attack Roach": 0x013A,
|
|
"Crazed Sign": 0x0135,
|
|
"Wooly Shambler": 0x0132,
|
|
"Wild 'n Wooly Shambler": 0x0132,
|
|
"Skate Punk": 0x011C,
|
|
"Skelpion": 0x013F,
|
|
"Dread Skelpion": 0x013F,
|
|
"Starman": 0x012F,
|
|
"Starman Super": 0x012F,
|
|
"Ghost of Starman": 0x0132,
|
|
"Smilin' Sphere": 0x012E,
|
|
"Uncontrollable Sphere": 0x012E,
|
|
"Petrified Royal Guard": 0x0142,
|
|
"Final Starman": 0x0132,
|
|
"Urban Zombie": 0x0134,
|
|
"Zombie Possessor": 0x0131,
|
|
"Zombie Dog": 0x016C,
|
|
"Over Zealous Cop": 0x0182,
|
|
"Territorial Oak": 0x0129,
|
|
"Hostile Elder Oak": 0x0129,
|
|
"Marauder Octobot": 0x0132,
|
|
"Military Octobot": 0x0132,
|
|
"Mechanical Octobot": 0x0132,
|
|
"Ultimate Octobot": 0x0132,
|
|
"Mad Duck": 0x011F,
|
|
"Dali's Clock": 0x0146,
|
|
"Musica": 0x00C3,
|
|
"Desert Wolf": 0x014A,
|
|
"Big Pile of Puke": 0x0148,
|
|
"Kiss of Death": 0x0144,
|
|
"French Kiss of Death": 0x0115,
|
|
"Foppy": 0x0116,
|
|
"Fobby": 0x0116,
|
|
"Zap Eel": 0x012D,
|
|
"Tangoo": 0x0144,
|
|
"Squatter Demon": 0x0132,
|
|
"Crested Booka": 0x0128,
|
|
"Great Crested Booka": 0x0128,
|
|
"Lesser Mook": 0x0132,
|
|
"Mook Senior": 0x0132,
|
|
"Smelly Ghost": 0x011D,
|
|
"Stinky Ghost": 0x011D,
|
|
"Attack Slug": 0x013C,
|
|
"Pit Bull Slug": 0x013C,
|
|
"Rowdy Mouse": 0x01A0,
|
|
"Deadly Mouse": 0x01A0,
|
|
"Care Free Bomb": 0x0115,
|
|
"Handsome Tom": 0x011E,
|
|
"Smilin' Sam": 0x011E,
|
|
"Manly Fish": 0x0120,
|
|
"Manly Fish's Brother": 0x0120,
|
|
"Runaway Dog": 0x014A,
|
|
"Trick or Trick Kid": 0x01BC,
|
|
"Cave Boy": 0x0149,
|
|
"Abstract Art": 0x012C,
|
|
"Shattered Man": 0x0142,
|
|
"Fierce Shattered Man": 0x0133,
|
|
"Ego Orb": 0x0147,
|
|
"Yes Man Junior": 0x011C,
|
|
"Cute Li'l UFO": 0x0130,
|
|
"Beautiful UFO": 0x0130,
|
|
"Pogo Punk": 0x011C,
|
|
"Tough Guy": 0x0186,
|
|
"Mad Taxi": 0x0121,
|
|
"Mr. Molecule": 0x0115,
|
|
"Worthless Protoplasm": 0x00C3,
|
|
"Sentry Robot": 0x0136,
|
|
"Psychic Psycho": 0x0117,
|
|
"Major Psychic Psycho": 0x0117,
|
|
"Mole Playing Rough": 0x019F,
|
|
"Gruff Goat": 0x0126,
|
|
"Soul Consuming Flame": 0x0117,
|
|
"Demonic Petunia": 0x0122,
|
|
"Ranboob": 0x0124,
|
|
"Li'l UFO": 0x0130,
|
|
"High-class UFO": 0x0130,
|
|
"Noose Man": 0x0143,
|
|
"Robo-pump": 0x0117,
|
|
"Plain Crocodile": 0x014C,
|
|
"Strong Crocodile": 0x014C,
|
|
"Hard Crocodile": 0x014C,
|
|
"No Good Fly": 0x013E,
|
|
"Mostly Bad Fly": 0x013E,
|
|
"Spiteful Crow": 0x011A,
|
|
"Farm Zombie": 0x0134,
|
|
"Criminal Caterpillar": 0x01A1,
|
|
"Evil Eye": 0x0132,
|
|
"Master Criminal Worm": 0x01CD,
|
|
"Loaded Dice 2": 0x00C3,
|
|
}
|
|
|
|
world.enemies = {
|
|
"Insane Cultist": EarthBoundEnemy("Insane Cultist", 0x1595e7, 94, 0, 353, 33, 8, 19, 25, 13, 20, 64, False),
|
|
"Dept. Store Spook": EarthBoundEnemy("Dept. Store Spook", 0x159645, 610, 290, 24291, 1648, 19, 82, 135, 42, 24, 62, False, None, 2),
|
|
"Armored Frog": EarthBoundEnemy("Armored Frog", 0x1596a3, 202, 0, 1566, 77, 7, 37, 108, 22, 5, 8, False),
|
|
"Bad Buffalo": EarthBoundEnemy("Bad Buffalo", 0x159701, 341, 0, 4108, 172, 11, 64, 104, 34, 5, 5, False),
|
|
"Black Antoid": EarthBoundEnemy("Black Antoid", 0x15975f, 34, 25, 37, 7, 4, 14, 13, 7, 3, 0, False),
|
|
"Red Antoid": EarthBoundEnemy("Red Antoid", 0x1597bd, 112, 30, 1175, 35, 10, 29, 27, 20, 4, 0, False),
|
|
"Ramblin' Evil Mushroom": EarthBoundEnemy("Ramblin' Evil Mushroom", 0x15981b, 60, 0, 95, 15, 5, 15, 10, 7, 5, 1, False),
|
|
"Struttin' Evil Mushroom": EarthBoundEnemy("Struttin' Evil Mushroom", 0x159879, 157, 0, 1492, 95, 28, 29, 22, 17, 7, 1, False),
|
|
"Mobile Sprout": EarthBoundEnemy("Mobile Sprout", 0x1598d7, 79, 9, 133, 13, 6, 17, 12, 10, 5, 1, False),
|
|
"Tough Mobile Sprout": EarthBoundEnemy("Tough Mobile Sprout", 0x159935, 179, 13, 1865, 119, 18, 33, 27, 21, 6, 1, False),
|
|
"Enraged Fire Plug": EarthBoundEnemy("Enraged Fire Plug", 0x159993, 309, 0, 4321, 346, 14, 60, 81, 32, 5, 4, False),
|
|
"Mystical Record": EarthBoundEnemy("Mystical Record", 0x1599f1, 263, 35, 2736, 310, 20, 63, 78, 33, 12, 7, False),
|
|
"Atomic Power Robot": EarthBoundEnemy("Atomic Power Robot", 0x159a4f, 594, 0, 26937, 730, 25, 119, 133, 56, 8, 12, False),
|
|
"Nuclear Reactor Robot": EarthBoundEnemy("Nuclear Reactor Robot", 0x159aad, 798, 0, 53142, 820, 46, 142, 185, 64, 8, 12, False),
|
|
"Guardian Hieroglyph": EarthBoundEnemy("Guardian Hieroglyph", 0x159b0b, 470, 126, 13064, 470, 20, 94, 106, 48, 20, 38, False),
|
|
"Lethal Asp Hieroglyph": EarthBoundEnemy("Lethal Asp Hieroglyph", 0x159b69, 458, 0, 11321, 625, 21, 89, 94, 46, 5, 36, False),
|
|
"Electro Swoosh": EarthBoundEnemy("Electro Swoosh", 0x159bc7, 543, 338, 17075, 791, 40, 140, 156, 62, 5, 10, False),
|
|
"Conducting Menace": EarthBoundEnemy("Conducting Menace", 0x159c25, 445, 238, 14792, 574, 20, 107, 107, 52, 5, 8, False),
|
|
"Conducting Spirit": EarthBoundEnemy("Conducting Spirit", 0x159c83, 587, 329, 30390, 804, 26, 130, 139, 59, 5, 8, False),
|
|
"Evil Elemental": EarthBoundEnemy("Evil Elemental", 0x159ce1, 564, 0, 35737, 853, 30, 121, 136, 57, 7, 16, False),
|
|
"Ness's Nightmare": EarthBoundEnemy("Ness's Nightmare", 0x159d3f, 1654, 882, 89004, 4442, 31, 172, 253, 71, 1, 80, False, "psi_1", 2),
|
|
"Annoying Old Party Man": EarthBoundEnemy("Annoying Old Party Man", 0x159d9d, 99, 0, 130, 32, 6, 20, 25, 13, 50, 15, False),
|
|
"Annoying Reveler": EarthBoundEnemy("Annoying Reveler", 0x159dfb, 288, 0, 2373, 268, 17, 58, 77, 31, 50, 15, False),
|
|
"Unassuming Local Guy": EarthBoundEnemy("Unassuming Local Guy", 0x159e59, 73, 0, 146, 19, 5, 18, 13, 9, 1, 14, False),
|
|
"New Age Retro Hippie": EarthBoundEnemy("New Age Retro Hippie", 0x159eb7, 87, 0, 160, 23, 5, 19, 14, 11, 10, 16, False),
|
|
"Mr. Carpainter": EarthBoundEnemy("Mr. Carpainter", 0x159f15, 262, 70, 1412, 195, 8, 33, 45, 21, 13, 72, False, None, 2),
|
|
"Carbon Dog": EarthBoundEnemy("Carbon Dog", 0x159f73, 1672, 0, 0, 0, 31, 159, 174, 70, 52, 53, False, None, 2),
|
|
"Mighty Bear": EarthBoundEnemy("Mighty Bear", 0x159fd1, 167, 0, 609, 49, 7, 29, 31, 16, 1, 5, False),
|
|
"Mighty Bear Seven": EarthBoundEnemy("Mighty Bear Seven", 0x15a02f, 367, 0, 8884, 440, 11, 85, 76, 42, 1, 4, False),
|
|
"Putrid Moldyman": EarthBoundEnemy("Putrid Moldyman", 0x15a08d, 203, 0, 830, 53, 9, 36, 41, 21, 5, 17, False),
|
|
"Thunder Mite": EarthBoundEnemy("Thunder Mite", 0x15a0eb, 293, 200, 10798, 430, 20, 85, 83, 43, 13, 8, False),
|
|
"Cranky Lady": EarthBoundEnemy("Cranky Lady", 0x15a149, 95, 0, 200, 17, 6, 16, 18, 8, 3, 32, False),
|
|
"Extra Cranky Lady": EarthBoundEnemy("Extra Cranky Lady", 0x15a1a7, 277, 0, 3651, 134, 17, 48, 70, 27, 5, 32, False),
|
|
"Wetnosaur": EarthBoundEnemy("Wetnosaur", 0x15a263, 1030, 0, 33098, 745, 17, 126, 172, 59, 2, 16, False),
|
|
"Chomposaur": EarthBoundEnemy("Chomposaur", 0x15a2c1, 1288, 320, 44378, 896, 17, 139, 183, 62, 3, 16, False, "phys_2", 2),
|
|
"Titanic Ant": EarthBoundEnemy("Titanic Ant", 0x15a31f, 235, 102, 685, 150, 6, 19, 23, 13, 9, 72, False, None, 2),
|
|
"Gigantic Ant": EarthBoundEnemy("Gigantic Ant", 0x15a37d, 308, 81, 3980, 304, 17, 54, 112, 30, 5, 6, False, None, 2),
|
|
"Shrooom!": EarthBoundEnemy("Shrooom!", 0x15a3db, 1700, 112, 96323, 4086, 18, 95, 154, 48, 32, 72, False, None, 2),
|
|
"Plague Rat of Doom": EarthBoundEnemy("Plague Rat of Doom", 0x15a439, 1827, 60, 115272, 4464, 19, 71, 180, 47, 250, 45, False, None, 2),
|
|
"Mondo Mole": EarthBoundEnemy("Mondo Mole", 0x15a497, 498, 161, 5791, 400, 9, 37, 50, 23, 15, 36, False, None, 2),
|
|
"Guardian Digger": EarthBoundEnemy("Guardian Digger", 0x15a4f5, 386, 110, 17301, 1467, 17, 59, 129, 32, 21, 55, False, "phys_2", 2),
|
|
"Scalding Coffee Cup": EarthBoundEnemy("Scalding Coffee Cup", 0x15a553, 190, 0, 2462, 280, 23, 55, 20, 30, 5, 1, False),
|
|
"Loaded Dice": EarthBoundEnemy("Loaded Dice", 0x15a5b1, 307, 0, 10672, 703, 77, 146, 113, 59, 75, 6, False, None),
|
|
"Slimy Little Pile": EarthBoundEnemy("Slimy Little Pile", 0x15a60f, 224, 0, 1978, 124, 15, 42, 61, 24, 7, 38, False),
|
|
"Even Slimier Little Pile": EarthBoundEnemy("Even Slimier Little Pile", 0x15a66d, 326, 0, 15075, 579, 22, 103, 101, 49, 9, 38, False),
|
|
"Arachnid!": EarthBoundEnemy("Arachnid!", 0x15a6cb, 216, 0, 4933, 296, 23, 61, 30, 32, 3, 0, False),
|
|
"Arachnid!!!": EarthBoundEnemy("Arachnid!!!", 0x15a729, 344, 0, 10449, 412, 20, 87, 86, 45, 4, 0, False),
|
|
"Kraken": EarthBoundEnemy("Kraken", 0x15a787, 1097, 176, 79267, 3049, 21, 105, 166, 54, 1, 32, False, None, 2),
|
|
"Bionic Kraken": EarthBoundEnemy("Bionic Kraken", 0x15a7e5, 900, 60, 50308, 960, 42, 155, 195, 70, 1, 32, False),
|
|
"Spinning Robo": EarthBoundEnemy("Spinning Robo", 0x15a843, 113, 17, 297, 21, 7, 21, 22, 14, 5, 12, False),
|
|
"Whirling Robo": EarthBoundEnemy("Whirling Robo", 0x15a8a1, 374, 36, 5782, 256, 18, 78, 90, 39, 5, 12, False),
|
|
"Hyper Spinning Robo": EarthBoundEnemy("Hyper Spinning Robo", 0x15a8ff, 553, 83, 28866, 756, 28, 122, 130, 56, 5, 12, False),
|
|
"Cop": EarthBoundEnemy("Cop", 0x15a95d, 75, 0, 86, 18, 5, 15, 18, 7, 7, 16, False),
|
|
"Coil Snake": EarthBoundEnemy("Coil Snake", 0x15a9bb, 18, 0, 1, 4, 2, 3, 4, 1, 0, 6, False),
|
|
"Thirsty Coil Snake": EarthBoundEnemy("Thirsty Coil Snake", 0x15aa19, 270, 0, 2786, 276, 18, 52, 80, 28, 5, 7, False),
|
|
"Mr. Batty": EarthBoundEnemy("Mr. Batty", 0x15aa77, 86, 0, 304, 30, 29, 25, 5, 15, 4, 3, False),
|
|
"Elder Batty": EarthBoundEnemy("Elder Batty", 0x15aad5, 294, 0, 4177, 371, 33, 66, 72, 35, 8, 4, False),
|
|
"Violent Roach": EarthBoundEnemy("Violent Roach", 0x15ab33, 209, 0, 1757, 80, 35, 30, 26, 18, 9, 24, False),
|
|
"Filthy Attack Roach": EarthBoundEnemy("Filthy Attack Roach", 0x15ab91, 399, 0, 10543, 432, 77, 84, 33, 42, 9, 24, False),
|
|
"Crazed Sign": EarthBoundEnemy("Crazed Sign", 0x15abef, 295, 98, 3618, 244, 17, 64, 96, 34, 5, 11, False),
|
|
"Wooly Shambler": EarthBoundEnemy("Wooly Shambler", 0x15ac4d, 391, 140, 5397, 458, 18, 81, 91, 40, 5, 63, False),
|
|
"Wild 'n Wooly Shambler": EarthBoundEnemy("Wild 'n Wooly Shambler", 0x15acab, 722, 212, 33818, 906, 38, 144, 171, 65, 5, 63, False),
|
|
"Skate Punk": EarthBoundEnemy("Skate Punk", 0x15ad09, 31, 0, 12, 17, 5, 7, 8, 3, 0, 13, False),
|
|
"Skelpion": EarthBoundEnemy("Skelpion", 0x15ad67, 137, 21, 1823, 140, 37, 41, 23, 24, 80, 7, False),
|
|
"Dread Skelpion": EarthBoundEnemy("Dread Skelpion", 0x15adc5, 214, 125, 9908, 609, 40, 82, 57, 41, 88, 8, False),
|
|
"Starman": EarthBoundEnemy("Starman", 0x15ae23, 545, 155, 23396, 720, 24, 103, 126, 55, 25, 16, False, None, 2),
|
|
"Starman Super": EarthBoundEnemy("Starman Super", 0x15ae81, 568, 310, 30145, 735, 24, 112, 129, 56, 25, 16, False, "psi_2", 1),
|
|
"Ghost of Starman": EarthBoundEnemy("Ghost of Starman", 0x15aedf, 750, 462, 48695, 807, 46, 152, 170, 68, 43, 16, False, None, 2),
|
|
"Smilin' Sphere": EarthBoundEnemy("Smilin' Sphere", 0x15af3d, 233, 60, 2218, 191, 17, 50, 65, 27, 5, 13, False),
|
|
"Uncontrollable Sphere": EarthBoundEnemy("Uncontrollable Sphere", 0x15af9b, 577, 180, 20389, 796, 27, 116, 134, 56, 5, 15, False, "psi_1"),
|
|
"Petrified Royal Guard": EarthBoundEnemy("Petrified Royal Guard", 0x15aff9, 573, 0, 19163, 628, 12, 106, 173, 53, 5, 5, False),
|
|
"Guardian General": EarthBoundEnemy("Guardian General", 0x15b057, 831, 6, 95390, 3235, 21, 109, 214, 55, 1, 7, False, None, 2),
|
|
"Starman Deluxe": EarthBoundEnemy("Starman Deluxe", 0x15b0b5, 1400, 418, 160524, 3827, 27, 143, 186, 65, 43, 21, False, "psi_2", 2),
|
|
"Final Starman": EarthBoundEnemy("Final Starman", 0x15b113, 840, 860, 61929, 915, 47, 178, 187, 71, 25, 24, False, "psi_2", 2),
|
|
"Urban Zombie": EarthBoundEnemy("Urban Zombie", 0x15b171, 171, 0, 700, 58, 10, 31, 24, 19, 15, 24, False),
|
|
"Zombie Possessor": EarthBoundEnemy("Zombie Possessor", 0x15b1cf, 176, 0, 950, 81, 30, 28, 19, 17, 9, 6, False),
|
|
"Zombie Dog": EarthBoundEnemy("Zombie Dog", 0x15b22d, 210, 0, 1354, 54, 30, 39, 51, 22, 10, 11, False),
|
|
"Over Zealous Cop": EarthBoundEnemy("Over Zealous Cop", 0x15b2e9, 325, 0, 7448, 420, 18, 69, 75, 36, 7, 16, False),
|
|
"Territorial Oak": EarthBoundEnemy("Territorial Oak", 0x15b347, 145, 41, 356, 29, 5, 26, 30, 15, 9, 4, False),
|
|
"Hostile Elder Oak": EarthBoundEnemy("Hostile Elder Oak", 0x15b3a5, 609, 76, 17567, 690, 14, 134, 146, 59, 11, 5, False),
|
|
"Diamond Dog": EarthBoundEnemy("Diamond Dog", 0x15b403, 3344, 154, 337738, 6968, 31, 167, 230, 70, 10, 47, False, "phys_2", 2),
|
|
"Marauder Octobot": EarthBoundEnemy("Marauder Octobot", 0x15b461, 482, 0, 14475, 499, 23, 99, 121, 49, 8, 24, False),
|
|
"Military Octobot": EarthBoundEnemy("Military Octobot", 0x15b4bf, 604, 0, 25607, 637, 26, 138, 147, 61, 8, 18, False),
|
|
"Mechanical Octobot": EarthBoundEnemy("Mechanical Octobot", 0x15b51d, 768, 0, 41738, 744, 43, 147, 176, 66, 8, 24, False),
|
|
"Ultimate Octobot": EarthBoundEnemy("Ultimate Octobot", 0x15b57b, 792, 0, 47876, 815, 44, 163, 181, 70, 8, 24, False),
|
|
"Mad Duck": EarthBoundEnemy("Mad Duck", 0x15b5d9, 51, 0, 41, 12, 30, 12, 24, 8, 5, 1, False),
|
|
"Dali's Clock": EarthBoundEnemy("Dali's Clock", 0x15b637, 296, 0, 2503, 314, 4, 65, 66, 34, 5, 4, False),
|
|
"Trillionage Sprout": EarthBoundEnemy("Trillionage Sprout", 0x15b695, 1048, 240, 30303, 1358, 16, 54, 88, 29, 21, 71, False, None, 2),
|
|
"Musica": EarthBoundEnemy("Musica", 0x15b6f3, 292, 0, 3748, 341, 21, 69, 85, 35, 20, 8, False),
|
|
"Desert Wolf": EarthBoundEnemy("Desert Wolf", 0x15b751, 247, 0, 3740, 114, 33, 57, 67, 30, 2, 11, False),
|
|
"Master Belch": EarthBoundEnemy("Master Belch", 0x15b7af, 650, 0, 12509, 664, 16, 50, 88, 27, 20, 61, False, None, 2), # Real one
|
|
"Big Pile of Puke": EarthBoundEnemy("Big Pile of Puke", 0x15b80d, 631, 0, 19659, 728, 16, 120, 158, 57, 26, 32, False),
|
|
"Master Barf": EarthBoundEnemy("Master Barf", 0x15b86b, 1319, 0, 125056, 3536, 24, 136, 177, 60, 39, 64, False, None, 2),
|
|
"Kiss of Death": EarthBoundEnemy("Kiss of Death", 0x15b8c9, 333, 0, 10354, 528, 19, 91, 100, 46, 7, 16, False),
|
|
"French Kiss of Death": EarthBoundEnemy("French Kiss of Death", 0x15b927, 588, 0, 19210, 879, 30, 160, 160, 70, 7, 16, False),
|
|
"Foppy": EarthBoundEnemy("Foppy", 0x15b985, 120, 10, 1311, 93, 1, 29, 9, 16, 5, 3, False),
|
|
"Fobby": EarthBoundEnemy("Fobby", 0x15b9e3, 240, 19, 18348, 620, 5, 98, 84, 48, 5, 3, False),
|
|
"Zap Eel": EarthBoundEnemy("Zap Eel", 0x15ba41, 370, 0, 12170, 611, 29, 97, 93, 48, 5, 8, False),
|
|
"Tangoo": EarthBoundEnemy("Tangoo", 0x15ba9f, 371, 5, 14718, 572, 19, 96, 99, 48, 20, 16, False),
|
|
"Boogey Tent": EarthBoundEnemy("Boogey Tent", 0x15bafd, 579, 56, 5500, 407, 10, 43, 69, 25, 16, 32, False, None, 2),
|
|
"Squatter Demon": EarthBoundEnemy("Squatter Demon", 0x15bb5b, 774, 60, 48311, 897, 45, 158, 192, 69, 25, 32, False),
|
|
"Crested Booka": EarthBoundEnemy("Crested Booka", 0x15bbb9, 265, 0, 3011, 130, 17, 53, 73, 28, 24, 37, False),
|
|
"Great Crested Booka": EarthBoundEnemy("Great Crested Booka", 0x15bc17, 452, 0, 16365, 604, 20, 100, 110, 49, 28, 40, False),
|
|
"Lesser Mook": EarthBoundEnemy("Lesser Mook", 0x15bc75, 401, 190, 7640, 467, 17, 76, 102, 39, 7, 16, False),
|
|
"Mook Senior": EarthBoundEnemy("Mook Senior", 0x15bcd3, 501, 700, 21056, 715, 25, 108, 122, 54, 7, 16, False),
|
|
"Smelly Ghost": EarthBoundEnemy("Smelly Ghost", 0x15bd31, 194, 50, 606, 71, 10, 35, 89, 21, 2, 9, False),
|
|
"Stinky Ghost": EarthBoundEnemy("Stinky Ghost", 0x15bd8f, 444, 0, 13179, 541, 18, 90, 179, 46, 4, 7, False),
|
|
"Everdred": EarthBoundEnemy("Everdred", 0x15bded, 182, 0, 986, 171, 6, 25, 35, 15, 10, 40, False, None, 2),
|
|
"Attack Slug": EarthBoundEnemy("Attack Slug", 0x15be4b, 30, 6, 27, 6, 1, 9, 2, 5, 0, 3, False),
|
|
"Pit Bull Slug": EarthBoundEnemy("Pit Bull Slug", 0x15bea9, 217, 11, 9994, 543, 2, 79, 77, 39, 5, 7, False),
|
|
"Rowdy Mouse": EarthBoundEnemy("Rowdy Mouse", 0x15bf07, 36, 0, 34, 9, 5, 7, 20, 6, 225, 2, False),
|
|
"Deadly Mouse": EarthBoundEnemy("Deadly Mouse", 0x15bf65, 416, 0, 9225, 406, 18, 63, 98, 38, 225, 13, False),
|
|
"Care Free Bomb": EarthBoundEnemy("Care Free Bomb", 0x15bfc3, 504, 0, 14941, 641, 31, 135, 215, 60, 15, 8, False),
|
|
"Electro Specter": EarthBoundEnemy("Electro Specter", 0x15c021, 3092, 80, 261637, 6564, 29, 148, 203, 67, 47, 56, False, "psi_2", 2),
|
|
"Handsome Tom": EarthBoundEnemy("Handsome Tom", 0x15c07f, 133, 16, 520, 45, 11, 27, 25, 16, 5, 8, False),
|
|
"Smilin' Sam": EarthBoundEnemy("Smilin' Sam", 0x15c0dd, 161, 55, 712, 48, 17, 34, 44, 20, 16, 16, False),
|
|
"Manly Fish": EarthBoundEnemy("Manly Fish", 0x15c13b, 500, 0, 15826, 624, 22, 83, 114, 42, 9, 20, False),
|
|
"Manly Fish's Brother": EarthBoundEnemy("Manly Fish's Brother", 0x15c199, 526, 210, 15970, 686, 24, 114, 123, 56, 11, 24, False),
|
|
"Runaway Dog": EarthBoundEnemy("Runaway Dog", 0x15c1f7, 21, 0, 4, 3, 26, 4, 5, 2, 0, 1, False),
|
|
"Trick or Trick Kid": EarthBoundEnemy("Trick or Trick Kid", 0x15c255, 142, 0, 570, 47, 7, 30, 37, 18, 12, 12, False),
|
|
"Cave Boy": EarthBoundEnemy("Cave Boy", 0x15c2b3, 314, 0, 618, 17, 79, 21, 33, 14, 0, 80, False),
|
|
"Abstract Art": EarthBoundEnemy("Abstract Art", 0x15c311, 301, 60, 4361, 255, 19, 67, 79, 35, 7, 7, False),
|
|
"Shattered Man": EarthBoundEnemy("Shattered Man", 0x15c36f, 694, 0, 44690, 2630, 18, 104, 138, 51, 25, 38, False),
|
|
"Fierce Shattered Man": EarthBoundEnemy("Fierce Shattered Man", 0x15c3cd, 516, 0, 17423, 577, 12, 101, 116, 50, 5, 4, False),
|
|
"Ego Orb": EarthBoundEnemy("Ego Orb", 0x15c42b, 592, 0, 24180, 836, 17, 125, 140, 58, 1, 8, False),
|
|
"Thunder and Storm": EarthBoundEnemy("Thunder and Storm", 0x15c489, 2065, 70, 129026, 4736, 21, 111, 178, 56, 35, 55, False, None, 2),
|
|
"Yes Man Junior": EarthBoundEnemy("Yes Man Junior", 0x15c4e7, 33, 0, 13, 18, 4, 8, 9, 4, 0, 14, False),
|
|
"Frankystein Mark II": EarthBoundEnemy("Frankystein Mark II", 0x15c545, 91, 0, 76, 31, 4, 15, 18, 7, 0, 40, False, None, 2),
|
|
"Frank": EarthBoundEnemy("Frank", 0x15c5a3, 63, 0, 50, 48, 7, 12, 17, 6, 5, 32, False),
|
|
"Cute Li'l UFO": EarthBoundEnemy("Cute Li'l UFO", 0x15c601, 162, 25, 1519, 110, 58, 49, 32, 27, 1, 70, False),
|
|
"Beautiful UFO": EarthBoundEnemy("Beautiful UFO", 0x15c65f, 339, 15, 8257, 426, 59, 86, 87, 44, 1, 71, False),
|
|
"Pogo Punk": EarthBoundEnemy("Pogo Punk", 0x15c6bd, 35, 0, 15, 18, 3, 8, 10, 4, 0, 15, False),
|
|
"Tough Guy": EarthBoundEnemy("Tough Guy", 0x15c71b, 342, 0, 9310, 525, 18, 72, 92, 37, 20, 16, False),
|
|
"Mad Taxi": EarthBoundEnemy("Mad Taxi", 0x15c779, 253, 0, 2336, 216, 38, 53, 68, 28, 5, 8, False),
|
|
"Evil Mani-Mani": EarthBoundEnemy("Evil Mani-Mani", 0x15c7d7, 860, 88, 28139, 1852, 15, 86, 145, 45, 1, 80, False, None, 2),
|
|
"Mr. Molecule": EarthBoundEnemy("Mr. Molecule", 0x15c835, 280, 21, 8708, 659, 18, 118, 97, 56, 5, 4, False),
|
|
"Worthless Protoplasm": EarthBoundEnemy("Worthless Protoplasm", 0x15c893, 38, 0, 17, 11, 27, 11, 21, 7, 0, 1, False),
|
|
"Sentry Robot": EarthBoundEnemy("Sentry Robot", 0x15c8f1, 372, 0, 5034, 392, 17, 77, 105, 39, 10, 4, False),
|
|
# "Heavily Armed Pokey ": EarthBoundEnemy("Heavily Armed Pokey", 0x15c94f, 1746, 999, 0, 0, 51, 150, 274, 72, False), Unused
|
|
"Psychic Psycho": EarthBoundEnemy("Psychic Psycho", 0x15c9ad, 591, 252, 30094, 682, 30, 124, 144, 58, 1, 24, False),
|
|
"Major Psychic Psycho": EarthBoundEnemy("Major Psychic Psycho", 0x15ca0b, 618, 574, 39247, 862, 31, 145, 152, 65, 1, 24, False),
|
|
"Mole Playing Rough": EarthBoundEnemy("Mole Playing Rough", 0x15ca69, 103, 0, 456, 36, 9, 22, 28, 14, 2, 8, False),
|
|
"Gruff Goat": EarthBoundEnemy("Gruff Goat", 0x15cac7, 45, 0, 20, 9, 12, 8, 23, 7, 0, 16, False),
|
|
"Clumsy Robot": EarthBoundEnemy("Clumsy Robot", 0x15cb25, 962, 0, 32378, 2081, 83, 88, 137, 46, 30, 49, False, "psi_1", 3),
|
|
"Soul Consuming Flame": EarthBoundEnemy("Soul Consuming Flame", 0x15cb83, 602, 0, 37618, 768, 30, 131, 262, 59, 14, 8, False),
|
|
"Demonic Petunia": EarthBoundEnemy("Demonic Petunia", 0x15cbe1, 478, 0, 15171, 724, 26, 102, 111, 50, 5, 9, False),
|
|
"Ranboob": EarthBoundEnemy("Ranboob", 0x15cc3f, 232, 42, 2486, 158, 20, 41, 63, 24, 1, 9, False),
|
|
"Li'l UFO": EarthBoundEnemy("Li'l UFO", 0x15cc9d, 82, 0, 223, 14, 53, 18, 17, 12, 13, 8, False),
|
|
"High-class UFO": EarthBoundEnemy("High-class UFO", 0x15ccfb, 433, 72, 12385, 456, 60, 93, 103, 47, 15, 24, False, "phys_1"),
|
|
"Noose Man": EarthBoundEnemy("Noose Man", 0x15cd59, 231, 0, 1990, 220, 18, 47, 52, 26, 5, 4, False),
|
|
"Robo-pump": EarthBoundEnemy("Robo-pump", 0x15cdb7, 431, 0, 4797, 349, 19, 70, 113, 36, 5, 4, False, None, 2),
|
|
"Plain Crocodile": EarthBoundEnemy("Plain Crocodile", 0x15ce15, 234, 0, 1928, 62, 10, 40, 55, 24, 1, 5, False),
|
|
"Strong Crocodile": EarthBoundEnemy("Strong Crocodile", 0x15ce73, 417, 0, 10122, 495, 17, 85, 131, 43, 5, 6, False),
|
|
"Hard Crocodile": EarthBoundEnemy("Hard Crocodile", 0x15ced1, 522, 0, 19484, 692, 23, 110, 128, 55, 10, 4, False),
|
|
"No Good Fly": EarthBoundEnemy("No Good Fly", 0x15cf2f, 100, 0, 415, 26, 10, 23, 13, 15, 3, 0, False),
|
|
"Mostly Bad Fly": EarthBoundEnemy("Mostly Bad Fly", 0x15cf8d, 141, 0, 1116, 84, 15, 32, 16, 19, 4, 0, False),
|
|
"Spiteful Crow": EarthBoundEnemy("Spiteful Crow", 0x15cfeb, 24, 0, 3, 5, 77, 5, 3, 3, 0, 1, False),
|
|
# "Master Belch": EarthBoundEnemy("Master Belch", 0x15d397, 650, 0, 12509, 664, 16, 50, 88, 27, False), Unused
|
|
# "Insane Cultist (2)": EarthBoundEnemy("Insane Cultist", 0x15d3f5, 94, 0, 353, 33, 8, 19, 25, 13, False),
|
|
"Dept. Store Spook (2)": EarthBoundEnemy("Dept. Store Spook (2)", 0x15d453, 610, 290, 24291, 1648, 19, 82, 135, 42, 24, 62, False),
|
|
"Ness's Nightmare (2)": EarthBoundEnemy("Ness's Nightmare (2)", 0x15d4b1, 1654, 882, 89004, 4442, 31, 172, 253, 71, 1, 80, False),
|
|
"Mr. Carpainter (2)": EarthBoundEnemy("Mr. Carpainter (2)", 0x15d50f, 262, 70, 1412, 195, 8, 33, 45, 21, 13, 72, False),
|
|
"Carbon Dog (2)": EarthBoundEnemy("Carbon Dog (2)", 0x15d56d, 1672, 0, 0, 0, 31, 159, 174, 70, 52, 53, False),
|
|
"Chomposaur (2)": EarthBoundEnemy("Chomposaur (2)", 0x15d5cb, 1288, 320, 44378, 896, 17, 139, 183, 62, 3, 16, False),
|
|
"Titanic Ant (2)": EarthBoundEnemy("Titanic Ant (2)", 0x15d629, 235, 102, 685, 150, 6, 19, 23, 13, 9, 72, False),
|
|
"Gigantic Ant (2)": EarthBoundEnemy("Gigantic Ant (2)", 0x15d687, 308, 81, 3980, 304, 17, 54, 112, 30, 5, 6, False),
|
|
"Shrooom! (2)": EarthBoundEnemy("Shrooom! (2)", 0x15d6e5, 1700, 112, 96323, 4086, 18, 95, 154, 48, 32, 72, False),
|
|
"Plague Rat of Doom (2)": EarthBoundEnemy("Plague Rat of Doom (2)", 0x15d743, 1827, 60, 115272, 4464, 19, 71, 180, 47, 250, 45, False),
|
|
"Mondo Mole (2)": EarthBoundEnemy("Mondo Mole (2)", 0x15d7a1, 498, 161, 5791, 400, 9, 37, 50, 23, 15, 36, False),
|
|
"Guardian Digger (2)": EarthBoundEnemy("Guardian Digger (2)", 0x15d7ff, 386, 110, 17301, 1467, 17, 59, 129, 32, 21, 55, False),
|
|
"Kraken (2)": EarthBoundEnemy("Kraken (2)", 0x15d85d, 1097, 176, 79267, 3049, 21, 105, 166, 54, 1, 32, False),
|
|
# "Bionic Kraken (2)": EarthBoundEnemy("Bionic Kraken", 0x15d8bb, 900, 60, 50308, 960, 42, 155, 195, 70, False),
|
|
"Starman (2)": EarthBoundEnemy("Starman (2)", 0x15d919, 545, 155, 23396, 720, 24, 103, 126, 55, 25, 16, False),
|
|
"Starman Super (2)": EarthBoundEnemy("Starman Super (2)", 0x15d977, 568, 310, 30145, 735, 24, 112, 129, 56, 25, 16, False),
|
|
"Ghost of Starman (2)": EarthBoundEnemy("Ghost of Starman (2)", 0x15d9d5, 750, 462, 48695, 807, 46, 152, 170, 68, 43, 16, False),
|
|
"Starman Deluxe (2)": EarthBoundEnemy("Starman Deluxe (2)", 0x15da33, 1400, 418, 160524, 3827, 27, 143, 186, 65, 43, 21, False),
|
|
"Final Starman (2)": EarthBoundEnemy("Final Starman (2)", 0x15da91, 840, 860, 61929, 915, 47, 178, 187, 71, 25, 24, False),
|
|
"Diamond Dog (2)": EarthBoundEnemy("Diamond Dog (2)", 0x15db4d, 3344, 154, 337738, 6968, 31, 167, 230, 70, 15, 24, False),
|
|
"Trillionage Sprout (2)": EarthBoundEnemy("Trillionage Sprout (2)", 0x15dbab, 1048, 240, 30303, 1358, 16, 54, 88, 29, 21, 71, False),
|
|
"Master Belch (2)": EarthBoundEnemy("Master Belch (2)", 0x15dc09, 650, 0, 12509, 664, 16, 50, 88, 27, 20, 61, False),
|
|
"Master Barf (2)": EarthBoundEnemy("Master Barf (2)", 0x15dcc5, 1319, 0, 125056, 3536, 24, 136, 177, 60, 39, 64, False),
|
|
"Loaded Dice 2": EarthBoundEnemy("Loaded Dice 2", 0x15dd23, 307, 0, 10672, 703, 77, 146, 113, 59, 75, 6, False),
|
|
"Boogey Tent (2)": EarthBoundEnemy("Boogey Tent (2)", 0x15dddf, 579, 56, 5500, 407, 10, 43, 69, 25, 16, 32, False),
|
|
"Everdred (2)": EarthBoundEnemy("Everdred (2)", 0x15de9b, 182, 0, 986, 171, 6, 25, 35, 15, 10, 40, False),
|
|
"Electro Specter (2)": EarthBoundEnemy("Electro Specter (2)", 0x15def9, 3092, 80, 261637, 6564, 29, 148, 203, 67, 47, 56, False),
|
|
"Thunder and Storm (2)": EarthBoundEnemy("Thunder and Storm (2)", 0x15df57, 2065, 70, 129026, 4736, 21, 111, 178, 56, 35, 55, False),
|
|
"Frankystein Mark II (2)": EarthBoundEnemy("Frankystein Mark II (2)", 0x15dfb5, 91, 0, 76, 31, 4, 15, 18, 7, 0, 40, False),
|
|
"Evil Mani-Mani (2)": EarthBoundEnemy("Evil Mani-Mani (2)", 0x15e013, 860, 88, 28139, 1852, 15, 86, 145, 45, 1, 80, False),
|
|
# "Heavily Armed Pokey": EarthBoundEnemy("Heavily Armed Pokey", 0x15e071, 1746, 999, 0, 0, 51, 150, 274, 72, False),
|
|
"Clumsy Robot (2)": EarthBoundEnemy("Clumsy Robot (2)", 0x15e0cf, 962, 0, 32378, 2081, 83, 88, 137, 46, 30, 49, False),
|
|
"Robo-pump (2)": EarthBoundEnemy("Robo-pump (2)", 0x15e12d, 431, 0, 4797, 349, 19, 70, 113, 36, 5, 4, False),
|
|
"Guardian General (2)": EarthBoundEnemy("Guardian General (2)", 0x15e1e9, 831, 6, 95390, 3235, 21, 109, 214, 55, 1, 7, False),
|
|
"Black Antoid (2)": EarthBoundEnemy("Black Antoid (2)", 0x15e247, 34, 25, 37, 7, 4, 14, 13, 7, 3, 0, False), # Separate enemy used in the titanic ant fight
|
|
"Runaway Dog (2)": EarthBoundEnemy("Runaway Dog", 0x15e303, 21, 0, 4, 3, 26, 4, 5, 73, 0, 1, False),
|
|
# "Cave Boy (2)": EarthBoundEnemy("Cave Boy (2)", 0x15e361, 314, 0, 618, 17, 5, 21, 33, 11, False),
|
|
"Tiny Li'l Ghost": EarthBoundEnemy("Tiny Li'l Ghost", 0x15e3bf, 90, 0, 1, 162, 100, 19, 7, 18, 25, 24, False),
|
|
"Starman Junior": EarthBoundEnemy("Starman Junior", 0x15e41d, 200, 999, 16, 20, 1, 11, 10, 6, 0, 80, False),
|
|
"Buzz Buzz": EarthBoundEnemy("Buzz Buzz", 0x15e47b, 2000, 999, 0, 0, 100, 40, 92, 20, 1, 80, False),
|
|
"Heavily Armed Pokey": EarthBoundEnemy("Heavily Armed Pokey", 0x15e4d9, 2000, 999, 70000, 0, 60, 145, 255, 80, 5, 255, False),
|
|
# "Heavily Armed Pokey": EarthBoundEnemy("Heavily Armed Pokey", 0x15e537, 1746, 999, 0, 0, 51, 150, 274, 72, False), Cutscene?
|
|
"Giygas (2)": EarthBoundEnemy("Giygas (2)", 0x15e595, 9999, 999, 70000, 0, 80, 255, 255, 80, 5, 255, False),
|
|
"Giygas (3)": EarthBoundEnemy("Giygas (3)", 0x15e5f3, 9999, 0, 0, 0, 80, 255, 255, 80, 5, 255, False),
|
|
"Giygas": EarthBoundEnemy("Giygas", 0x15e651, 2000, 0, 0, 0, 80, 255, 255, 80, 5, 255, False),
|
|
"Giygas (5)": EarthBoundEnemy("Giygas (5)", 0x15e6af, 9999, 0, 0, 0, 80, 255, 255, 80, 5, 255, False),
|
|
"Farm Zombie": EarthBoundEnemy("Farm Zombie", 0x15e70d, 171, 0, 700, 58, 10, 31, 24, 19, 15, 24, False),
|
|
"Criminal Caterpillar": EarthBoundEnemy("Criminal Caterpillar", 0x15e76b, 250, 168, 30384, 0, 134, 37, 16, 23, 0, 0, False),
|
|
"Evil Eye": EarthBoundEnemy("Evil Eye", 0x15e7c9, 720, 400, 46376, 896, 38, 141, 162, 63, 25, 16, False),
|
|
"Mini Barf": EarthBoundEnemy("Mini Barf", 0x15e885, 616, 0, 7521, 460, 10, 45, 71, 26, 19, 30, False),
|
|
"Master Criminal Worm": EarthBoundEnemy("Master Criminal Worm", 0x15e8e3, 377, 300, 82570, 0, 136, 73, 40, 37, 0, 0, False),
|
|
"Captain Strong": EarthBoundEnemy("Captain Strong", 0x15e941, 140, 0, 492, 159, 15, 20, 24, 13, 8, 18, False),
|
|
"Giygas (6)": EarthBoundEnemy("Giygas (6)", 0x15e99f, 9999, 0, 0, 0, 80, 255, 127, 80, 5, 255, False),
|
|
"Clumsy Robot (3)": EarthBoundEnemy("Clumsy Robot (3)", 0x15e9fd, 962, 0, 32378, 2081, 83, 88, 137, 46, 30, 49, False)
|
|
}
|
|
|
|
shuffled_enemies = {}
|
|
for enemy in world.acting_enemy_list:
|
|
shuffled_enemies[enemy] = world.enemies[world.acting_enemy_list[enemy]]
|
|
|
|
flunkies = {
|
|
"Titanic Ant": shuffled_enemies["Black Antoid (2)"],
|
|
"Master Belch": shuffled_enemies["Slimy Little Pile"],
|
|
"Trillionage Sprout": shuffled_enemies["Tough Mobile Sprout"],
|
|
"Master Barf": shuffled_enemies["Even Slimier Little Pile"],
|
|
"Starman Deluxe": [shuffled_enemies["Starman"], shuffled_enemies["Starman Super"]],
|
|
"Carbon Dog": world.enemies[world.boss_list[27]], # This should be the enemy that gets shuffled WITH carbon dog, right? Fix???
|
|
"Skate Punk": [shuffled_enemies["Pogo Punk"], shuffled_enemies["Yes Man Junior"]],
|
|
"Loaded Dice": [shuffled_enemies["Care Free Bomb"], shuffled_enemies["Beautiful UFO"], shuffled_enemies["High-class UFO"]],
|
|
"Loaded Dice 2": [shuffled_enemies["Electro Swoosh"], shuffled_enemies["Fobby"], shuffled_enemies["Uncontrollable Sphere"]],
|
|
"Starman Super": [shuffled_enemies["Starman"]]
|
|
}
|
|
|
|
world.regional_enemies = {"Northern Onett": {shuffled_enemies["Spiteful Crow"], shuffled_enemies["Runaway Dog"], shuffled_enemies["Coil Snake"]},
|
|
"Onett": {shuffled_enemies["Pogo Punk"], shuffled_enemies["Skate Punk"], shuffled_enemies["Yes Man Junior"], world.enemies[world.boss_list[0]], world.enemies[world.boss_list[1]]},
|
|
"Arcade": {shuffled_enemies["Pogo Punk"], shuffled_enemies["Skate Punk"], shuffled_enemies["Yes Man Junior"]},
|
|
"Giant Step": {shuffled_enemies["Attack Slug"], shuffled_enemies["Black Antoid"], shuffled_enemies["Rowdy Mouse"], world.enemies[world.boss_list[2]]},
|
|
"Twoson": {shuffled_enemies["Black Antoid"], shuffled_enemies["Cop"], world.enemies[world.boss_list[3]], shuffled_enemies["Ramblin' Evil Mushroom"],
|
|
shuffled_enemies["Annoying Old Party Man"], shuffled_enemies["Cranky Lady"], shuffled_enemies["Mobile Sprout"], shuffled_enemies["New Age Retro Hippie"], shuffled_enemies["Unassuming Local Guy"],
|
|
shuffled_enemies["Runaway Dog"]},
|
|
"Everdred's House": {world.enemies[world.boss_list[4]]},
|
|
"Peaceful Rest Valley": {shuffled_enemies["Li'l UFO"], shuffled_enemies["Mobile Sprout"], shuffled_enemies["Spinning Robo"], shuffled_enemies["Territorial Oak"]},
|
|
"Happy-Happy Village": {shuffled_enemies["Coil Snake"], shuffled_enemies["Insane Cultist"], shuffled_enemies["Spiteful Crow"], shuffled_enemies["Unassuming Local Guy"]},
|
|
"Happy-Happy HQ": {shuffled_enemies["Insane Cultist"], world.enemies[world.boss_list[5]]},
|
|
"Lilliput Steps": {shuffled_enemies["Mighty Bear"], shuffled_enemies["Mole Playing Rough"], shuffled_enemies["Mr. Batty"], world.enemies[world.boss_list[6]]},
|
|
"Threed": {shuffled_enemies["Coil Snake"], shuffled_enemies["Handsome Tom"], shuffled_enemies["Smilin' Sam"], shuffled_enemies["Trick or Trick Kid"],
|
|
shuffled_enemies["Zombie Dog"], shuffled_enemies["Putrid Moldyman"], shuffled_enemies["Smelly Ghost"]},
|
|
"Threed Underground": {shuffled_enemies["No Good Fly"], shuffled_enemies["Urban Zombie"], shuffled_enemies["Zombie Possessor"], world.enemies[world.boss_list[8]], shuffled_enemies["Zombie Dog"]},
|
|
"Grapefruit Falls": {shuffled_enemies["Armored Frog"], shuffled_enemies["Black Antoid"], shuffled_enemies["Coil Snake"], shuffled_enemies["Farm Zombie"],
|
|
shuffled_enemies["Plain Crocodile"], shuffled_enemies["Red Antoid"], shuffled_enemies["Violent Roach"], shuffled_enemies["Mad Duck"], shuffled_enemies["Black Antoid (2)"]},
|
|
"Belch's Factory": {shuffled_enemies["Farm Zombie"], shuffled_enemies["Foppy"], shuffled_enemies["Mostly Bad Fly"], shuffled_enemies["Slimy Little Pile"], world.enemies[world.boss_list[9]]},
|
|
"Milky Well": {shuffled_enemies["Mad Duck"], shuffled_enemies["Ranboob"], shuffled_enemies["Struttin' Evil Mushroom"], shuffled_enemies["Tough Mobile Sprout"], world.enemies[world.boss_list[10]]},
|
|
"Dusty Dunes Desert": {shuffled_enemies["Bad Buffalo"], shuffled_enemies["Crested Booka"], shuffled_enemies["Criminal Caterpillar"], shuffled_enemies["Cute Li'l UFO"], shuffled_enemies["Desert Wolf"], shuffled_enemies["Mole Playing Rough"],
|
|
shuffled_enemies["Skelpion"], shuffled_enemies["Smilin' Sphere"]},
|
|
"Fourside": {shuffled_enemies["Annoying Reveler"], shuffled_enemies["Crazed Sign"], shuffled_enemies["Extra Cranky Lady"], shuffled_enemies["Mad Taxi"]},
|
|
"Moonside": {shuffled_enemies["Abstract Art"], shuffled_enemies["Dali's Clock"], shuffled_enemies["Enraged Fire Plug"], shuffled_enemies["Robo-pump"], world.enemies[world.boss_list[13]]},
|
|
"Gold Mine": {shuffled_enemies["Gigantic Ant"], shuffled_enemies["Mad Duck"], shuffled_enemies["Noose Man"], shuffled_enemies["Thirsty Coil Snake"], world.enemies[world.boss_list[11]]},
|
|
"Fourside Dept. Store": {shuffled_enemies["Musica"], shuffled_enemies["Mystical Record"], shuffled_enemies["Scalding Coffee Cup"], world.enemies[world.boss_list[12]]},
|
|
"Monkey Caves": {shuffled_enemies["Struttin' Evil Mushroom"], shuffled_enemies["Tough Mobile Sprout"]},
|
|
"Monotoli Building": {shuffled_enemies["Sentry Robot"], world.enemies[world.boss_list[14]]},
|
|
"Rainy Circle": {shuffled_enemies["Arachnid!"], shuffled_enemies["Elder Batty"], shuffled_enemies["Strong Crocodile"], world.enemies[world.boss_list[15]]},
|
|
"Andonuts Lab Area": {shuffled_enemies["Cave Boy"], shuffled_enemies["Mighty Bear Seven"]},
|
|
"Summers": {shuffled_enemies["Crazed Sign"], shuffled_enemies["Mad Taxi"], shuffled_enemies["Mole Playing Rough"], shuffled_enemies["Over Zealous Cop"], shuffled_enemies["Tough Guy"], world.enemies[world.boss_list[18]]},
|
|
"Summers Museum": {shuffled_enemies["Shattered Man"]},
|
|
"Magnet Hill": {shuffled_enemies["Deadly Mouse"], shuffled_enemies["Filthy Attack Roach"], shuffled_enemies["Stinky Ghost"], world.enemies[world.boss_list[16]]},
|
|
"Pink Cloud": {shuffled_enemies["Conducting Menace"], shuffled_enemies["Kiss of Death"], shuffled_enemies["Tangoo"], shuffled_enemies["Thunder Mite"], world.enemies[world.boss_list[17]]},
|
|
"Scaraba": {shuffled_enemies["Beautiful UFO"], shuffled_enemies["Dread Skelpion"], shuffled_enemies["Great Crested Booka"], shuffled_enemies["High-class UFO"], shuffled_enemies["Master Criminal Worm"]},
|
|
"Pyramid": {shuffled_enemies["Arachnid!!!"], shuffled_enemies["Fierce Shattered Man"], shuffled_enemies["Guardian Hieroglyph"], shuffled_enemies["Lethal Asp Hieroglyph"], shuffled_enemies["Petrified Royal Guard"],
|
|
world.enemies[world.boss_list[19]]},
|
|
"Southern Scaraba": {shuffled_enemies["Beautiful UFO"], shuffled_enemies["High-class UFO"], shuffled_enemies["Marauder Octobot"]},
|
|
"Dungeon Man": {shuffled_enemies["Dali's Clock"], shuffled_enemies["Mystical Record"], shuffled_enemies["Lesser Mook"], shuffled_enemies["Mystical Record"], shuffled_enemies["Scalding Coffee Cup"], shuffled_enemies["Worthless Protoplasm"], shuffled_enemies["Cute Li'l UFO"]},
|
|
"Deep Darkness": {shuffled_enemies["Mole Playing Rough"]},
|
|
"Winters": {shuffled_enemies["Lesser Mook"], shuffled_enemies["Whirling Robo"], shuffled_enemies["Wooly Shambler"]},
|
|
"Deep Darkness Darkness": {shuffled_enemies["Big Pile of Puke"], shuffled_enemies["Demonic Petunia"], shuffled_enemies["Even Slimier Little Pile"], shuffled_enemies["Hard Crocodile"], shuffled_enemies["Hostile Elder Oak"],
|
|
shuffled_enemies["Manly Fish"], shuffled_enemies["Manly Fish's Brother"], shuffled_enemies["Pit Bull Slug"], shuffled_enemies["Zap Eel"], world.enemies[world.boss_list[20]]},
|
|
"Boogey Tent": {world.enemies[world.boss_list[7]]},
|
|
"Southern Winters": {shuffled_enemies["Lesser Mook"], shuffled_enemies["Whirling Robo"], shuffled_enemies["Wooly Shambler"]},
|
|
"Brickroad Maze": {shuffled_enemies["Rowdy Mouse"], shuffled_enemies["Worthless Protoplasm"], shuffled_enemies["Mad Duck"]},
|
|
"Stonehenge Base": {shuffled_enemies["Atomic Power Robot"], shuffled_enemies["Military Octobot"], shuffled_enemies["Mook Senior"], shuffled_enemies["Starman"], shuffled_enemies["Starman Super"], world.enemies[world.boss_list[21]]},
|
|
"Lumine Hall": {shuffled_enemies["Conducting Spirit"], shuffled_enemies["Fobby"], shuffled_enemies["Hyper Spinning Robo"], shuffled_enemies["Uncontrollable Sphere"], world.enemies[world.boss_list[22]]},
|
|
"Lost Underworld": {shuffled_enemies["Chomposaur"], shuffled_enemies["Ego Orb"], shuffled_enemies["Wetnosaur"]},
|
|
"Fire Spring": {shuffled_enemies["Evil Elemental"], shuffled_enemies["Major Psychic Psycho"], shuffled_enemies["Psychic Psycho"], shuffled_enemies["Soul Consuming Flame"], world.enemies[world.boss_list[23]]},
|
|
"Magicant": {shuffled_enemies["Care Free Bomb"], shuffled_enemies["Electro Swoosh"], shuffled_enemies["French Kiss of Death"], shuffled_enemies["Loaded Dice"], shuffled_enemies["Mr. Molecule"], shuffled_enemies["Loaded Dice 2"]},
|
|
"Sea of Eden": {world.enemies[world.boss_list[18]], world.enemies[world.boss_list[24]]},
|
|
"Cave of the Past": {shuffled_enemies["Bionic Kraken"], shuffled_enemies["Final Starman"], shuffled_enemies["Ghost of Starman"], shuffled_enemies["Nuclear Reactor Robot"], shuffled_enemies["Squatter Demon"],
|
|
shuffled_enemies["Ultimate Octobot"], shuffled_enemies["Wild 'n Wooly Shambler"]},
|
|
"Endgame": {world.enemies[world.boss_list[25]], world.enemies["Giygas (2)"], world.enemies[world.boss_list[28]], world.enemies["Giygas (3)"], world.enemies["Giygas (5)"], world.enemies["Giygas (6)"]},
|
|
|
|
}
|
|
|
|
if world.options.randomize_enemy_attacks:
|
|
del flunkies["Loaded Dice 2"]
|
|
del flunkies["Skate Punk"]
|
|
del flunkies["Loaded Dice"]
|
|
del flunkies["Starman Super"]
|
|
|
|
for region in world.regional_enemies:
|
|
enemy_list = world.regional_enemies[region]
|
|
updated_list = set(enemy_list)
|
|
for enemy in enemy_list:
|
|
if enemy.name == "Carbon Dog":
|
|
updated_list.add(world.enemies[world.boss_list[27]])
|
|
for i in range(1, world.enemies[world.boss_list[27]].attack_extensions):
|
|
updated_list.add(world.enemies[f"{world.enemies[world.boss_list[27]].name} ({i + 1})"])
|
|
# todo; option to not have in Giygas/Mine
|
|
|
|
if enemy.name in flunkies:
|
|
# Can I just always update instead of doing an add? Would probably need to make singulars a list of one item...
|
|
if enemy.name in ["Starman Deluxe", "Skate Punk", "Loaded Dice", "Loaded Dice 2", "Starman Super"]:
|
|
updated_list.update(flunkies[enemy.name])
|
|
else:
|
|
updated_list.add(flunkies[enemy.name])
|
|
|
|
if enemy.attack_extensions > 1:
|
|
for i in range(1, enemy.attack_extensions):
|
|
updated_list.add(world.enemies[f"{enemy.name} ({i + 1})"])
|
|
world.regional_enemies[region] = updated_list
|
|
|
|
|
|
combat_regions = [
|
|
"Northern Onett",
|
|
"Onett",
|
|
"Arcade",
|
|
"Giant Step",
|
|
"Twoson",
|
|
"Happy-Happy Village",
|
|
"Happy-Happy HQ"
|
|
"Lilliput Steps",
|
|
"Winters",
|
|
"Threed",
|
|
"Milky Well",
|
|
"Dusty Dunes Desert",
|
|
"Fourside",
|
|
"Moonside",
|
|
"Gold Mine",
|
|
"Monkey Caves",
|
|
"Monotoli Building",
|
|
"Rainy Circle",
|
|
"Summers",
|
|
"Magnet Hill",
|
|
"Pink Cloud",
|
|
"Scaraba",
|
|
"Pyramid",
|
|
"Southern Scaraba",
|
|
"Dungeon Man",
|
|
"Deep Darkness",
|
|
"Deep Darkness Darkness",
|
|
"Stonehenge Base",
|
|
"Lumine Hall",
|
|
"Lost Underworld",
|
|
"Fire Spring",
|
|
"Magicant",
|
|
"Cave of the Past",
|
|
"Endgame",
|
|
"Grapefruit Falls",
|
|
"Peaceful Rest Valley",
|
|
"Everdred's House",
|
|
"Belch's Factory",
|
|
"Southern Winters",
|
|
"Brickroad Maze"
|
|
"Summers Museum",
|
|
"Fourside Dept. Store",
|
|
"Threed Underground",
|
|
"Boogey Tent"
|
|
]
|
|
|
|
|
|
levels = [
|
|
1, # north onett
|
|
2, # south onett
|
|
3, # giant step
|
|
5, # twoson
|
|
7, # everdred
|
|
9, # peaceful rest
|
|
10, # happy happy
|
|
12, # lilliput steps
|
|
13, # threed
|
|
14, # threed caverns
|
|
15, # grapefruit falls
|
|
17, # belch base
|
|
18, # milky well
|
|
19, # duty dunes
|
|
21, # fourside
|
|
23, # gold mine
|
|
24, # dept store
|
|
25, # monkey cabves
|
|
26, # monotoli building
|
|
28, # winters
|
|
29, # southern winters
|
|
31, # rainy circle
|
|
32, # summers
|
|
33, # museum
|
|
35, # Moonside
|
|
36, # magnet hill
|
|
38, # pink cloud
|
|
39, # scaraba
|
|
42, # pyramid
|
|
43, # scaraba south
|
|
45, # dungeon man
|
|
47, # deep darkness
|
|
49, # deep darkness swamp
|
|
51, # Happy-Happy HQ
|
|
52, # stonehenge
|
|
54, # Arcade
|
|
56, # lumine hall
|
|
59, # lost underworld
|
|
61, # fire spring
|
|
63, # magicant
|
|
65, # cave of the past
|
|
68, # Sea of Eden
|
|
70,
|
|
73,
|
|
74,
|
|
75] # gigyas
|
|
|
|
spell_breaks: dict[str, dict[int, str]] = {
|
|
"freeze": {8: "zeta", 12: "epsilon", 20: "delta", 25: "lambda", 40: "alpha", 65: "beta", 70: "gamma", 100: "omega"},
|
|
"fire": {5: "zeta", 10: "epsilon", 20: "alpha", 50: "beta", 70: "gamma", 100: "omega"}, # zeta needs to do less damage
|
|
"lifeup": {20: "alpha", 100: "beta"},
|
|
"thunder": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 45: "beta", 60: "gamma", 100: "omega"},
|
|
"flash": {25: "alpha", 60: "beta", 70: "gamma", 100: "omega"},
|
|
"special": {5: "zeta", 10: "epsilon", 30: "alpha", 65: "beta", 80: "gamma", 100: "omega"},
|
|
"healing": {20: "alpha", 40: "beta", 60: "gamma", 100: "omega"},
|
|
"starstorm": {5: "zeta", 12: "epsilon", 20: "delta", 45: "lambda", 70: "alpha", 100: "beta"},
|
|
"diamond_eyes": {35: "alpha", 40: "beta", 100: "gamma"},
|
|
"nauseous_breath": {25: "alpha", 100: "beta"},
|
|
"poison_stinger": {25: "alpha", 100: "beta"},
|
|
"kiss_of_death": {25: "alpha", 100: "beta"},
|
|
"summon_storm": {25: "alpha", 45: "beta", 60: "gamma", 100: "omega"},
|
|
"scalding_espresso": {5: "zeta", 10: "epsilon", 20: "alpha", 30: "beta", 40: "gamma", 100: "omega"},
|
|
"extinguishing_blast": {5: "zeta", 10: "epsilon", 20: "alpha", 30: "beta", 40: "gamma", 100: "omega"},
|
|
"spray_fire": {5: "zeta", 10: "epsilon", 20: "alpha", 30: "beta", 40: "gamma", 100: "omega"},
|
|
"breathe_fire": {5: "zeta", 10: "epsilon", 20: "alpha", 30: "beta", 40: "gamma", 100: "omega"},
|
|
"poisonous_fangs": {25: "alpha", 100: "beta"},
|
|
"flaming_fireball": {5: "zeta", 10: "epsilon", 20: "alpha", 30: "beta", 40: "gamma", 100: "omega"},
|
|
"glorious_light": {25: "alpha", 45: "beta", 60: "gamma", 100: "omega"},
|
|
"poison_flute": {25: "alpha", 100: "beta"},
|
|
"diamond_bite": {35: "alpha", 40: "beta", 100: "gamma"},
|
|
"scatter_spores": {25: "alpha", 100: "beta"},
|
|
"hacking_cough": {25: "alpha", 100: "beta"},
|
|
"stuffiness_beam": {25: "alpha", 100: "beta"},
|
|
"crashing_boom_bang": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 45: "beta", 60: "gamma", 100: "omega"},
|
|
"paralysis": {30: "lambda", 60: "alpha", 100: "omega"},
|
|
"electrical_shock": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 45: "beta", 60: "gamma", 100: "omega"},
|
|
"giygas_phase2_thunder": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 100: "beta"},
|
|
"giygas_phase3_thunder": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 100: "beta"},
|
|
"giygas_phase4_thunder": {5: "zeta", 10: "epsilon", 15: "delta", 20: "lambda", 35: "alpha", 100: "beta"},
|
|
"giygas_phase2_freeze": {8: "zeta", 12: "epsilon", 20: "delta", 25: "lambda", 100: "alpha"},
|
|
"giygas_phase3_freeze": {8: "zeta", 12: "epsilon", 20: "delta", 25: "lambda", 100: "alpha"},
|
|
"giygas_phase4_freeze": {8: "zeta", 12: "epsilon", 20: "delta", 25: "lambda", 100: "alpha"},
|
|
"giygas_phase2_flash": {25: "alpha", 60: "beta", 100: "gamma"},
|
|
"giygas_phase3_flash": {25: "alpha", 60: "beta", 100: "gamma"},
|
|
"giygas_phase4_flash": {25: "alpha", 60: "beta", 100: "gamma"},
|
|
"thunder_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 45: "alpha", 60: "beta", 100: "gamma", 200: "omega"},
|
|
"starstorm_minus": {12: "zeta", 20: "epsilon", 45: "delta", 70: "lambda", 100: "alpha", 200: "beta"},
|
|
"flash_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"blast": {10: "zeta", 20: "epsilon", 30: "alpha", 40: "beta", 50: "gamma", 100: "omega"},
|
|
"missile": {5: "zeta", 12: "epsilon", 20: "alpha", 50: "beta", 73: "gamma", 100: "omega"},
|
|
"throw_bomb": {10: "zeta", 20: "epsilon", 30: "alpha", 40: "beta", 50: "gamma", 100: "omega"},
|
|
"throw_bomb_minus": {20: "zeta", 30: "epsilon", 40: "alpha", 50: "beta", 100: "gamma", 200: "omega"},
|
|
"shoot_rocket": {5: "zeta", 12: "epsilon", 20: "alpha", 50: "beta", 73: "gamma", 100: "omega"},
|
|
"paralyzing_pollen": {30: "lambda", 60: "alpha", 100: "omega"},
|
|
|
|
"electrical_shock_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 45: "alpha", 60: "beta", 100: "gamma", 200: "omega"},
|
|
"crashing_boom_bang_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 45: "alpha", 60: "beta", 100: "gamma", 200: "omega"},
|
|
"giygas_phase2_thunder_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 100: "alpha", 200: "beta"},
|
|
"giygas_phase3_thunder_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 100: "alpha", 200: "beta"},
|
|
"giygas_phase4_thunder_minus": {10: "zeta", 15: "epsilon", 20: "delta", 35: "lambda", 100: "alpha", 200: "beta"},
|
|
"thunder_minus_minus": {15: "zeta", 20: "epsilon", 35: "delta", 45: "lambda", 60: "alpha", 100: "beta", 200: "gamma", 300: "omega"},
|
|
|
|
"starstorm_minus_minus": {20: "zeta", 45: "epsilon", 70: "delta", 100: "lambda", 200: "alpha", 300: "beta"},
|
|
|
|
"giygas_phase2_flash_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"giygas_phase3_flash_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"giygas_phase4_flash_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"summon_storm_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"glorious_light_minus": {60: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"flash_minus_minus": {70: "alpha", 100: "beta", 200: "gamma", 300: "omega"},
|
|
|
|
"fire_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"spray_fire_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"breathe_fire_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"scalding_espresso_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"flaming_fireball_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"extinguishing_blast_minus": {10: "zeta", 20: "epsilon", 50: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
|
|
"throw_bomb_minus_minus": {30: "zeta", 40: "epsilon", 50: "alpha", 100: "beta", 200: "gamma", 300: "omega"},
|
|
|
|
"shoot_rocket_minus": {12: "zeta", 20: "epsilon", 50: "alpha", 73: "beta", 100: "gamma", 200: "omega"},
|
|
|
|
"freeze_minus": {12: "zeta", 20: "epsilon", 25: "delta", 40: "lambda", 65: "alpha", 70: "beta", 100: "gamma", 200: "omega"},
|
|
"giygas_phase2_freeze_minus": {12: "zeta", 20: "epsilon", 25: "delta", 100: "lambda", 200: "alpha"},
|
|
"giygas_phase3_freeze_minus": {12: "zeta", 20: "epsilon", 25: "delta", 100: "lambda", 200: "alpha"},
|
|
"giygas_phase4_freeze_minus": {12: "zeta", 20: "epsilon", 25: "delta", 100: "lambda", 200: "alpha"},
|
|
|
|
"special_minus": {10: "zeta", 30: "epsilon", 65: "alpha", 80: "beta", 100: "gamma", 200: "omega"},
|
|
"blast_minus": {20: "zeta", 30: "epsilon", 40: "alpha", 50: "beta", 100: "gamma", 200: "omega"},
|
|
|
|
}
|
|
|
|
|
|
def get_psi_levels(level: int, breaks: dict[str, dict[int, str]]):
|
|
for top_level, psi_val in breaks.items():
|
|
if level <= top_level:
|
|
return psi_val
|
|
return breaks[max(breaks)]
|
|
|
|
|
|
spell_elements = {
|
|
"thunder": "thunder",
|
|
"giygas_phase2_thunder": "thunder",
|
|
"giygas_phase3_thunder": "thunder",
|
|
"giygas_phase4_thunder": "thunder",
|
|
"crashing_boom_bang": "thunder",
|
|
"electrical_shock": "thunder",
|
|
"thunder_minus": "thunder",
|
|
|
|
"freeze": "freeze",
|
|
"giygas_phase2_freeze": "freeze",
|
|
"giygas_phase3_freeze": "freeze",
|
|
"giygas_phase4_freeze": "freeze",
|
|
|
|
"fire": "fire",
|
|
"scalding_espresson": "fire",
|
|
"extinguishing_blast": "fire",
|
|
"spray_fire": "fire",
|
|
"breathe_fire": "fire",
|
|
"flaming_fireball": "fire",
|
|
|
|
"flash": "flash",
|
|
"summon_storm": "flash",
|
|
"glorious_light": "flash",
|
|
"giygas_phase2_flash": "flash",
|
|
"giygas_phase3_flash": "flash",
|
|
"giygas_phase4_flash": "flash",
|
|
"flash_minus": "flash",
|
|
|
|
"starstorm": "starstorm",
|
|
"starstorm_minus": "starstorm",
|
|
|
|
"special": "special",
|
|
|
|
"blast": "explosive",
|
|
"throw_bomb": "explosive",
|
|
"throw_bomb_minus": "explosive"
|
|
}
|
|
|
|
spell_data = {
|
|
"freeze": {
|
|
"zeta": [0x62, 0x01, 0x37],
|
|
"epsilon": [0x63, 0x01, 0x38],
|
|
"delta": [0x64, 0x01, 0x39],
|
|
"lambda": [0x65, 0x01, 0x3A],
|
|
"alpha": [0x12, 0x00, 0x09],
|
|
"beta": [0x13, 0x00, 0x0A],
|
|
"gamma": [0x14, 0x00, 0x0B],
|
|
"omega": [0x15, 0x00, 0x0C]
|
|
},
|
|
"fire": {
|
|
"zeta": [0x60, 0x01, 0x35],
|
|
"epsilon": [0x61, 0x01, 0x36],
|
|
"alpha": [0x0E, 0x00, 0x05],
|
|
"beta": [0x0F, 0x00, 0x06],
|
|
"gamma": [0x10, 0x00, 0x07],
|
|
"omega": [0x11, 0x00, 0x08]
|
|
},
|
|
"lifeup": {
|
|
"alpha": [0x20, 0x00, 0x17],
|
|
"beta": [0x21, 0x00, 0x18]
|
|
},
|
|
"flash": {
|
|
"alpha": [0x1A, 0x00, 0x11],
|
|
"beta": [0x1B, 0x00, 0x12],
|
|
"gamma": [0x1C, 0x00, 0x13],
|
|
"omega": [0x1D, 0x00, 0x14]
|
|
},
|
|
"thunder": {
|
|
"zeta": [0x69, 0x01, 0x3E],
|
|
"epsilon": [0x6A, 0x01, 0x3F],
|
|
"delta": [0x6B, 0x01, 0x40],
|
|
"lambda": [0x6C, 0x01, 0x41],
|
|
"alpha": [0x16, 0x00, 0x0D],
|
|
"beta": [0x17, 0x00, 0x0E],
|
|
"gamma": [0x18, 0x00, 0x0F],
|
|
"omega": [0x19, 0x00, 0x10]
|
|
},
|
|
"special": {
|
|
"zeta": [0x66, 0x01, 0x3B],
|
|
"epsilon": [0x67, 0x01, 0x3C],
|
|
"alpha": [0x0A, 0x00, 0x01],
|
|
"beta": [0x0B, 0x00, 0x02],
|
|
"gamma": [0x0C, 0x00, 0x03],
|
|
"omega": [0x0D, 0x00, 0x04]
|
|
},
|
|
"healing": {
|
|
"alpha": [0x24, 0x00, 0x1B],
|
|
"beta": [0x25, 0x00, 0x1C],
|
|
"gamma": [0x26, 0x00, 0x1D],
|
|
"omega": [0x27, 0x00, 0x1E]
|
|
},
|
|
"starstorm": {
|
|
"zeta": [0x6D, 0x01, 0x42],
|
|
"epsilon": [0x6E, 0x01, 0x43],
|
|
"delta": [0x6F, 0x01, 0x44],
|
|
"lambda": [0x70, 0x01, 0x45],
|
|
"alpha": [0x1E, 0x00, 0x15],
|
|
"beta": [0x1F, 0x00, 0x16]
|
|
},
|
|
"scatter_spores": {
|
|
"alpha": [0x3F, 0x01, 0x00],
|
|
"beta": [0xED, 0x00, 0x00],
|
|
},
|
|
"nauseous_breath": {
|
|
"alpha": [0x4A, 0x00, 0x00],
|
|
"beta": [0x47, 0x00, 0x00]
|
|
},
|
|
"diamond_eyes": {
|
|
"alpha": [0x40, 0x01, 0x00],
|
|
"beta": [0x41, 0x01, 0x00],
|
|
"gamma": [0x44, 0x00, 0x00]
|
|
},
|
|
"glorious_light": {
|
|
"alpha": [0x42, 0x01, 0x00],
|
|
"beta": [0x43, 0x01, 0x00],
|
|
"gamma": [0xC9, 0x00, 0x00],
|
|
"omega": [0x44, 0x01, 0x00],
|
|
},
|
|
"flaming_fireball": {
|
|
"zeta": [0x73, 0x01, 0x00],
|
|
"epsilon": [0x74, 0x01, 0x00],
|
|
"alpha": [0x47, 0x01, 0x00],
|
|
"beta": [0x46, 0x01, 0x00],
|
|
"gamma": [0x45, 0x01, 0x00],
|
|
"omega": [0x68, 0x00, 0x00],
|
|
},
|
|
"breathe_fire": {
|
|
"zeta": [0x71, 0x01, 0x00],
|
|
"epsilon": [0x72, 0x01, 0x00],
|
|
"alpha": [0x48, 0x01, 0x00],
|
|
"beta": [0x49, 0x01, 0x00],
|
|
"gamma": [0x5E, 0x00, 0x00],
|
|
"omega": [0x4A, 0x01, 0x00],
|
|
},
|
|
"spray_fire": {
|
|
"zeta": [0x75, 0x01, 0x00],
|
|
"epsilon": [0x76, 0x01, 0x00],
|
|
"alpha": [0x4B, 0x01, 0x00],
|
|
"beta": [0x4C, 0x01, 0x00],
|
|
"gamma": [0x4D, 0x01, 0x00],
|
|
"omega": [0x5D, 0x00, 0x00],
|
|
},
|
|
"paralysis": {
|
|
"lambda": [0x68, 0x01, 0x3D],
|
|
"alpha": [0x38, 0x00, 0x2F],
|
|
"omega": [0x39, 0x00, 0x30]
|
|
},
|
|
"poisonous_fangs": {
|
|
"alpha": [0x4E, 0x01, 0x00],
|
|
"beta": [0x64, 0x00, 0x00]
|
|
},
|
|
"poison_stinger": {
|
|
"alpha": [0x4F, 0x01, 0x00],
|
|
"beta": [0x48, 0x00, 0x00]
|
|
},
|
|
"crashing_boom_bang": {
|
|
"zeta": [0x7D, 0x01, 0x00],
|
|
"epsilon": [0x7E, 0x01, 0x00],
|
|
"delta": [0x7F, 0x01, 0x00],
|
|
"lambda": [0x80, 0x01, 0x00],
|
|
"alpha": [0x50, 0x01, 0x00],
|
|
"beta": [0x5C, 0x00, 0x00],
|
|
"gamma": [0x51, 0x01, 0x00],
|
|
"omega": [0x52, 0x01, 0x00]
|
|
},
|
|
|
|
"electrical_shock": {
|
|
"zeta": [0x79, 0x01, 0x00],
|
|
"epsilon": [0x7A, 0x01, 0x00],
|
|
"delta": [0x7C, 0x01, 0x00],
|
|
"lambda": [0x7B, 0x01, 0x00],
|
|
"alpha": [0x53, 0x01, 0x00],
|
|
"beta": [0xCA, 0x00, 0x00],
|
|
"gamma": [0x54, 0x01, 0x00],
|
|
"omega": [0x55, 0x01, 0x00]
|
|
},
|
|
|
|
"scalding_espresso": {
|
|
"zeta": [0x77, 0x01, 0x00],
|
|
"epsilon": [0x78, 0x01, 0x00],
|
|
"alpha": [0x59, 0x00, 0x00],
|
|
"beta": [0x56, 0x01, 0x00],
|
|
"gamma": [0x57, 0x01, 0x00],
|
|
"omega": [0x58, 0x01, 0x00]
|
|
},
|
|
"extinguishing_blast": {
|
|
"zeta": [0x81, 0x01, 0x00],
|
|
"epsilon": [0x82, 0x01, 0x00],
|
|
"alpha": [0x59, 0x01, 0x00],
|
|
"beta": [0x5A, 0x01, 0x00],
|
|
"gamma": [0x5B, 0x00, 0x00],
|
|
"omega": [0x5B, 0x01, 0x00]
|
|
},
|
|
|
|
"diamond_bite": {
|
|
"alpha": [0x5C, 0x01, 0x00],
|
|
"beta": [0x5D, 0x01, 0x00],
|
|
"gamma": [0xE4, 0x00, 0x00]
|
|
},
|
|
"poison_flute": {
|
|
"alpha": [0x5E, 0x01, 0x00],
|
|
"beta": [0xCD, 0x00, 0x00]
|
|
},
|
|
"kiss_of_death": {
|
|
"alpha": [0x5F, 0x01, 0x00],
|
|
"beta": [0x49, 0x00, 0x00]
|
|
},
|
|
"stuffiness_beam": {
|
|
"alpha": [0xF1, 0x00, 0x00],
|
|
"beta": [0x45, 0x00, 0x00]
|
|
},
|
|
"hacking_cough": {
|
|
"alpha": [0xD5, 0x00, 0x00],
|
|
"beta": [0x57, 0x00, 0x00]
|
|
},
|
|
"giygas_phase2_thunder": {
|
|
"zeta": [0x87, 0x01, 0x00],
|
|
"epsilon": [0x86, 0x01, 0x00],
|
|
"delta": [0x85, 0x01, 0x00],
|
|
"lambda": [0x84, 0x01, 0x00],
|
|
"alpha": [0x83, 0x01, 0x00],
|
|
"beta": [0x12, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase3_thunder": {
|
|
"zeta": [0x8C, 0x01, 0x00],
|
|
"epsilon": [0x8B, 0x01, 0x00],
|
|
"delta": [0x8A, 0x01, 0x00],
|
|
"lambda": [0x89, 0x01, 0x00],
|
|
"alpha": [0x88, 0x01, 0x00],
|
|
"beta": [0x2E, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase4_thunder": {
|
|
"zeta": [0x91, 0x01, 0x00],
|
|
"epsilon": [0x90, 0x01, 0x00],
|
|
"delta": [0x8F, 0x01, 0x00],
|
|
"lambda": [0x8E, 0x01, 0x00],
|
|
"alpha": [0x8D, 0x01, 0x00],
|
|
"beta": [0x31, 0x01, 0x00]
|
|
},
|
|
|
|
|
|
"giygas_phase2_freeze": {
|
|
"zeta": [0x92, 0x01, 0x00],
|
|
"epsilon": [0x93, 0x01, 0x00],
|
|
"delta": [0x94, 0x01, 0x00],
|
|
"lambda": [0x95, 0x01, 0x00],
|
|
"alpha": [0x2C, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase3_freeze": {
|
|
"zeta": [0x96, 0x01, 0x00],
|
|
"epsilon": [0x97, 0x01, 0x00],
|
|
"delta": [0x98, 0x01, 0x00],
|
|
"lambda": [0x99, 0x01, 0x00],
|
|
"alpha": [0x2F, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase4_freeze": {
|
|
"zeta": [0x9A, 0x01, 0x00],
|
|
"epsilon": [0x9B, 0x01, 0x00],
|
|
"delta": [0x9C, 0x01, 0x00],
|
|
"lambda": [0x9D, 0x01, 0x00],
|
|
"alpha": [0x32, 0x01, 0x00]
|
|
},
|
|
|
|
|
|
"giygas_phase2_flash": {
|
|
"alpha": [0x9E, 0x01, 0x00],
|
|
"beta": [0x9F, 0x01, 0x00],
|
|
"gamma": [0x2D, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase3_flash": {
|
|
"alpha": [0xA0, 0x01, 0x00],
|
|
"beta": [0xA1, 0x01, 0x00],
|
|
"gamma": [0x30, 0x01, 0x00]
|
|
},
|
|
|
|
"giygas_phase4_flash": {
|
|
"alpha": [0xA2, 0x01, 0x00],
|
|
"beta": [0xA3, 0x01, 0x00],
|
|
"gamma": [0x33, 0x01, 0x00]
|
|
},
|
|
|
|
"explosion_damage": {
|
|
"alpha": [0xA7, 0x00, 0x00],
|
|
"beta": [0xA3, 0x01, 0x00],
|
|
"gamma": [0x33, 0x01, 0x00]
|
|
},
|
|
"thunder_minus": {
|
|
"zeta": [0x69, 0x01, 0x3E],
|
|
"epsilon": [0x6A, 0x01, 0x3F],
|
|
"delta": [0x6B, 0x01, 0x40],
|
|
"lambda": [0x6C, 0x01, 0x41],
|
|
"alpha": [0x16, 0x00, 0x0D],
|
|
"beta": [0x17, 0x00, 0x0E],
|
|
"gamma": [0x18, 0x00, 0x0F],
|
|
"omega": [0x19, 0x00, 0x10]
|
|
},
|
|
|
|
"flash_minus": {
|
|
"alpha": [0x1A, 0x00, 0x11],
|
|
"beta": [0x1B, 0x00, 0x12],
|
|
"gamma": [0x1C, 0x00, 0x13],
|
|
"omega": [0x1D, 0x00, 0x14]
|
|
},
|
|
|
|
"starstorm_minus": {
|
|
"zeta": [0x6D, 0x01, 0x42],
|
|
"epsilon": [0x6E, 0x01, 0x43],
|
|
"delta": [0x6F, 0x01, 0x44],
|
|
"lambda": [0x70, 0x01, 0x45],
|
|
"alpha": [0x1E, 0x00, 0x15],
|
|
"beta": [0x1F, 0x00, 0x16]
|
|
},
|
|
"blast": {
|
|
"zeta": [0xF7, 0x01, 0x58],
|
|
"epsilon": [0xF8, 0x01, 0x59],
|
|
"alpha": [0xA4, 0x01, 0x46],
|
|
"beta": [0xA5, 0x01, 0x47],
|
|
"gamma": [0xA6, 0x01, 0x48],
|
|
"omega": [0xA7, 0x01, 0x48]
|
|
},
|
|
"missile": {
|
|
"zeta": [0xF9, 0x01, 0x5A],
|
|
"epsilon": [0xFA, 0x01, 0x5B],
|
|
"alpha": [0xA8, 0x01, 0x4A],
|
|
"beta": [0xA9, 0x01, 0x4B],
|
|
"gamma": [0xAA, 0x01, 0x4C],
|
|
"omega": [0xAB, 0x01, 0x4D]
|
|
},
|
|
"summon_storm": {
|
|
"alpha": [0xF4, 0x01, 0x00],
|
|
"beta": [0xF5, 0x01, 0x00],
|
|
"gamma": [0x58, 0x00, 0x00],
|
|
"omega": [0xF6, 0x01, 0x00]
|
|
},
|
|
"throw_bomb": {
|
|
"zeta": [0xFC, 0x01, 0x00],
|
|
"epsilon": [0xFB, 0x01, 0x00],
|
|
"alpha": [0xFD, 0x01, 0x00],
|
|
"beta": [0xFE, 0x01, 0x00],
|
|
"gamma": [0xFF, 0x01, 0x00],
|
|
"omega": [0x00, 0x02, 0x00]
|
|
},
|
|
|
|
"throw_bomb_minus": {
|
|
"zeta": [0xFC, 0x01, 0x00],
|
|
"epsilon": [0xFB, 0x01, 0x00],
|
|
"alpha": [0xFD, 0x01, 0x00],
|
|
"beta": [0xFE, 0x01, 0x00],
|
|
"gamma": [0xFF, 0x01, 0x00],
|
|
"omega": [0x00, 0x02, 0x00]
|
|
},
|
|
"shoot_rocket": {
|
|
"zeta": [0x01, 0x02, 0x00],
|
|
"epsilon": [0x02, 0x02, 0x00],
|
|
"alpha": [0x03, 0x02, 0x00],
|
|
"beta": [0x04, 0x02, 0x00],
|
|
"gamma": [0x05, 0x02, 0x00],
|
|
"omega": [0x06, 0x02, 0x00]
|
|
},
|
|
|
|
"paralyzing_pollen": {
|
|
"lambda": [0x07, 0x02, 0x00],
|
|
"alpha": [0xCB, 0x00, 0x00],
|
|
"omega": [0x08, 0x02, 0x00]
|
|
},
|
|
|
|
|
|
}
|
|
|
|
shield_table = {
|
|
"disabled": 0x00,
|
|
"phys_1": 0x03,
|
|
"phys_2": 0x04,
|
|
"psi_1": 0x01,
|
|
"psi_2": 0x02
|
|
}
|
|
|
|
|
|
def assumed_player_speed_for_level(level: int) -> int:
|
|
return 2 + 58 * (level - 1) / 80
|
|
|
|
|
|
def scale_enemy_speed(enemy: EarthBoundEnemy, new_level: int) -> int:
|
|
normal_dodge_chance = (2 * enemy.speed - assumed_player_speed_for_level(enemy.level)) / 500
|
|
|
|
enemy_scaled_speed = (normal_dodge_chance * 500 + assumed_player_speed_for_level(new_level)) / 2
|
|
return enemy_scaled_speed
|
|
|
|
|
|
def scale_exp_2(base_exp: int, base_level: int, new_level: int, world: "EarthBoundWorld") -> int:
|
|
base_scaled_exp = calculate_exp(base_level)
|
|
scaled_exp = calculate_exp(new_level)
|
|
new_exp = base_exp * scaled_exp / base_scaled_exp
|
|
new_exp = max(new_exp, scaled_exp) # maybe remove? if early scaled
|
|
new_exp = math.ceil(new_exp * world.options.experience_modifier / 100)
|
|
return new_exp
|
|
|
|
|
|
def calculate_exp(level: int) -> float:
|
|
if level > 30:
|
|
return 1000 * math.exp(0.05 * level)
|
|
else:
|
|
return 50 * math.exp(0.15 * level)
|
|
# return 10 * math.exp(0.2 * level) if not boosted
|
|
|
|
|
|
def scale_shield(level: int, shield: str | None) -> str:
|
|
if shield is not None:
|
|
if level < 10:
|
|
enemy_shield = "disabled"
|
|
elif shield in ["phys_1", "phys_2"]:
|
|
if level < 25:
|
|
enemy_shield = "phys_1"
|
|
else:
|
|
enemy_shield = "phys_2"
|
|
elif shield in ["psi_1", "psi_2"]:
|
|
if level < 25:
|
|
enemy_shield = "psi_1"
|
|
else:
|
|
enemy_shield = "psi_2"
|
|
else:
|
|
warning(f"Could not scale shield, found initial value of {shield}, this is probably a typo")
|
|
enemy_shield = "disabled"
|
|
return enemy_shield
|
|
|
|
|
|
guardian_text = [
|
|
0xEEFAA0,
|
|
0xEEFAA6,
|
|
0xEEFAAD,
|
|
0xEEFAB3,
|
|
0xEEFABA,
|
|
0xEEFAC0,
|
|
0xEEFAC6,
|
|
0xEEFACE
|
|
]
|
|
|
|
guardian_intro = {
|
|
"Giant Step": 0x066699,
|
|
"Lilliput Steps": 0x2F97CB,
|
|
"Milky Well": 0x2F67C3,
|
|
"Rainy Circle": 0x2EFAD6,
|
|
"Magnet Hill": 0x083D4D,
|
|
"Pink Cloud": 0x09D2E3,
|
|
"Lumine Hall": 0x09E2A4,
|
|
"Fire Spring": 0x2EFADF
|
|
}
|
|
|
|
|
|
def scale_enemies(world: "EarthBoundWorld", rom: "LocalRom") -> None:
|
|
additional_party_members = 0
|
|
if world.options.auto_scale_party_members:
|
|
if world.starting_character != "Ness":
|
|
rom.write_bytes(0x15F5FB, bytearray([max(levels[world.scaled_area_order.index(world.Ness_region)] + world.random.randint(-3, 3), 1)]))
|
|
|
|
if world.starting_character != "Paula":
|
|
rom.write_bytes(0x15F60F, bytearray([max(levels[world.scaled_area_order.index(world.Paula_region)] + world.random.randint(-3, 3), 1)])) # Paula starting level
|
|
|
|
if world.starting_character != "Jeff":
|
|
rom.write_bytes(0x15F623, bytearray([max(levels[world.scaled_area_order.index(world.Jeff_region)] + world.random.randint(-3, 3), 1)])) # Jeff starting level
|
|
|
|
if world.starting_character != "Poo":
|
|
rom.write_bytes(0x15F637, bytearray([max(levels[world.scaled_area_order.index(world.Poo_region)] + world.random.randint(-3, 3), 1)])) # Poo starting level
|
|
|
|
melody_number = 1
|
|
has_badge = False
|
|
c = Counter([world.Ness_region, world.Paula_region, world.Jeff_region, world.Poo_region])
|
|
# for region, level in zip(world.scaled_area_order, levels):
|
|
for region in world.scaled_area_order:
|
|
level = world.area_levels[region]
|
|
if world.options.easy_combat:
|
|
level = max(1, int(level / 2))
|
|
if region in ["Giant Step", "Lilliput Steps", "Milky Well",
|
|
"Rainy Circle", "Magnet Hill", "Pink Cloud",
|
|
"Lumine Hall", "Fire Spring"]:
|
|
rom.write_bytes(guardian_intro[region], struct.pack("I", guardian_text[melody_number - 1]))
|
|
melody_number += 1
|
|
|
|
if region == world.Badge_region:
|
|
has_badge = True
|
|
|
|
additional_party_members += c[region]
|
|
for enemy in world.regional_enemies[region]:
|
|
if enemy.is_scaled is False:
|
|
enemy_hp = int(enemy.hp * level / enemy.level)
|
|
if not world.options.easy_combat:
|
|
enemy_hp = int(enemy_hp + (enemy_hp * (0.10 * (additional_party_members - 1))))
|
|
enemy_pp = int(enemy.pp * level / enemy.level)
|
|
enemy_exp = int(scale_exp_2(enemy.exp, enemy.level, level, world))
|
|
enemy_money = min(65535, int((enemy.money * level / enemy.level) * world.options.money_drop_multiplier))
|
|
enemy_speed = max(2, int(scale_enemy_speed(enemy, level)))
|
|
enemy_offense = int(enemy.offense * level / enemy.level)
|
|
enemy_defense = int(enemy.defense * level / enemy.level)
|
|
enemy_level = int(enemy.level * level / enemy.level)
|
|
enemy_shield = scale_shield(level, enemy.shield)
|
|
rom.write_bytes(enemy.address + 33, enemy_hp.to_bytes(2, "little"))
|
|
rom.write_bytes(enemy.address + 35, enemy_pp.to_bytes(2, "little"))
|
|
rom.write_bytes(enemy.address + 37, enemy_exp.to_bytes(4, "little"))
|
|
rom.write_bytes(enemy.address + 41, enemy_money.to_bytes(2, "little"))
|
|
rom.write_bytes(enemy.address + 60, enemy_speed.to_bytes(1, "little"))
|
|
rom.write_bytes(enemy.address + 56, enemy_offense.to_bytes(2, "little"))
|
|
rom.write_bytes(enemy.address + 58, enemy_defense.to_bytes(2, "little"))
|
|
rom.write_bytes(enemy.address + 54, enemy_level.to_bytes(1, "little"))
|
|
if enemy.shield is not None:
|
|
rom.write_bytes(enemy.address + 89, shield_table[enemy_shield].to_bytes(1, "little"))
|
|
|
|
if enemy.name in world.enemy_psi:
|
|
for index, spell in [(i, s) for i, s in enumerate(world.enemy_psi[enemy.name]) if s != "null"]:
|
|
if spell == "special":
|
|
spell = world.offensive_psi_slots[0].lower()
|
|
|
|
if spell in spell_elements:
|
|
element = spell_elements[spell]
|
|
else:
|
|
element = "None"
|
|
|
|
if element == world.franklin_protection and not has_badge:
|
|
spell = f"{spell}_minus"
|
|
psi_level = get_psi_levels(level, spell_breaks[spell])
|
|
filtered_spell = spell.replace("_minus", "")
|
|
rom.write_bytes(enemy.address + 70 + (index * 2), bytearray(spell_data[filtered_spell][psi_level][0:2]))
|
|
rom.write_bytes(enemy.address + 80 + index, bytearray([spell_data[filtered_spell][psi_level][2]]))
|
|
if world.options.shuffle_enemy_drops:
|
|
rom.write_bytes(enemy.address + 88, bytearray([world.random.choice(world.filler_drops)]))
|
|
enemy.is_scaled = True
|