mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-20 14:28:18 -07:00
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* Update Rom.py
* convert KDL3 to APPP
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* initial base for local items, need to finish
* coo not clean
* handle local items for real, appp cleanup
* actually make bosses send their locations
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
* add prefill items
* fix kine fill error
* Update Rom.py
* Update Files.py
* mypy and softlock fix
* Update Gifting.py
* mypy phase 1
* fix rare async client bug
* Update __init__.py
* typing cleanup
* fix stone softlock
because of the way Kine's Stone works, you can't clear the stone blocks before clearing the burning blocks, so we have to bring Burning from outside
* Update Rom.py
* Add option groups
* Rename to lowercase
* finish rename
* whoops broke the world
* fix animal duplication bug
* overhaul filler generation
* add Miku flavor
* Update gifting.py
* fix issues related to max_hs increase
* Update test_locations.py
* fix boss shuffle not working if level shuffle is disabled
* fix bleeding default levels
* Update options.py
* thought this would print seed
* yay bad merges
* forgot options too
* yeah lets just break generation while at it
* this is probably a problem
* cap required heart stars
* Revert "cap required heart stars"
This reverts commit 759efd3e2b.
* fix duplication removal placement, deprecated test option
* forgot that we need to account for what we place
* move location ids
* rewrite trap handling
* further stage renumber fixes
* forgot one more
* basic UT support
* fix local heart star checks
* fix pattern
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
106 lines
2.7 KiB
Python
106 lines
2.7 KiB
Python
from BaseClasses import Item
|
|
import typing
|
|
|
|
|
|
class ItemData(typing.NamedTuple):
|
|
code: typing.Optional[int]
|
|
progression: bool
|
|
skip_balancing: bool = False
|
|
trap: bool = False
|
|
|
|
|
|
class KDL3Item(Item):
|
|
game = "Kirby's Dream Land 3"
|
|
|
|
|
|
copy_ability_table = {
|
|
"Burning": ItemData(0x770001, True),
|
|
"Stone": ItemData(0x770002, True),
|
|
"Ice": ItemData(0x770003, True),
|
|
"Needle": ItemData(0x770004, True),
|
|
"Clean": ItemData(0x770005, True),
|
|
"Parasol": ItemData(0x770006, True),
|
|
"Spark": ItemData(0x770007, True),
|
|
"Cutter": ItemData(0x770008, True)
|
|
}
|
|
|
|
animal_friend_table = {
|
|
"Rick": ItemData(0x770010, True),
|
|
"Kine": ItemData(0x770011, True),
|
|
"Coo": ItemData(0x770012, True),
|
|
"Nago": ItemData(0x770013, True),
|
|
"ChuChu": ItemData(0x770014, True),
|
|
"Pitch": ItemData(0x770015, True)
|
|
}
|
|
|
|
animal_friend_spawn_table = {
|
|
"Rick Spawn": ItemData(None, True),
|
|
"Kine Spawn": ItemData(None, True),
|
|
"Coo Spawn": ItemData(None, True),
|
|
"Nago Spawn": ItemData(None, True),
|
|
"ChuChu Spawn": ItemData(None, True),
|
|
"Pitch Spawn": ItemData(None, True)
|
|
}
|
|
|
|
copy_ability_access_table = {
|
|
"No Ability": ItemData(None, False),
|
|
"Burning Ability": ItemData(None, True),
|
|
"Stone Ability": ItemData(None, True),
|
|
"Ice Ability": ItemData(None, True),
|
|
"Needle Ability": ItemData(None, True),
|
|
"Clean Ability": ItemData(None, True),
|
|
"Parasol Ability": ItemData(None, True),
|
|
"Spark Ability": ItemData(None, True),
|
|
"Cutter Ability": ItemData(None, True),
|
|
}
|
|
|
|
misc_item_table = {
|
|
"Heart Star": ItemData(0x770020, True, True),
|
|
"1-Up": ItemData(0x770021, False),
|
|
"Maxim Tomato": ItemData(0x770022, False),
|
|
"Invincible Candy": ItemData(0x770023, False),
|
|
"Little Star": ItemData(0x770024, False),
|
|
"Medium Star": ItemData(0x770025, False),
|
|
"Big Star": ItemData(0x770026, False),
|
|
}
|
|
|
|
trap_item_table = {
|
|
"Gooey Bag": ItemData(0x770040, False, False, True),
|
|
"Slowness": ItemData(0x770041, False, False, True),
|
|
"Eject Ability": ItemData(0x770042, False, False, True)
|
|
}
|
|
|
|
filler_item_weights = {
|
|
"1-Up": 4,
|
|
"Maxim Tomato": 2,
|
|
"Invincible Candy": 2
|
|
}
|
|
|
|
star_item_weights = {
|
|
"Little Star": 16,
|
|
"Medium Star": 8,
|
|
"Big Star": 4
|
|
}
|
|
|
|
total_filler_weights = {
|
|
**filler_item_weights,
|
|
**star_item_weights
|
|
}
|
|
|
|
|
|
item_table = {
|
|
**copy_ability_table,
|
|
**copy_ability_access_table,
|
|
**animal_friend_table,
|
|
**animal_friend_spawn_table,
|
|
**misc_item_table,
|
|
**trap_item_table
|
|
}
|
|
|
|
item_names = {
|
|
"Copy Ability": set(copy_ability_table),
|
|
"Animal Friend": set(animal_friend_table),
|
|
}
|
|
|
|
lookup_item_to_id: typing.Dict[str, int] = {item_name: data.code for item_name, data in item_table.items() if data.code}
|