mirror of
https://github.com/ArchipelagoMW/Archipelago.git
synced 2026-03-22 07:35:37 -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>
286 lines
6.7 KiB
Python
286 lines
6.7 KiB
Python
# Small subfile to handle gifting info such as desired traits and giftbox management
|
|
import typing
|
|
|
|
if typing.TYPE_CHECKING:
|
|
from SNIClient import SNIContext
|
|
|
|
|
|
async def update_object(ctx: "SNIContext", key: str, value: typing.Dict[str, typing.Any]) -> None:
|
|
await ctx.send_msgs([
|
|
{
|
|
"cmd": "Set",
|
|
"key": key,
|
|
"default": {},
|
|
"want_reply": False,
|
|
"operations": [
|
|
{"operation": "update", "value": value}
|
|
]
|
|
}
|
|
])
|
|
|
|
|
|
async def pop_object(ctx: "SNIContext", key: str, value: str) -> None:
|
|
await ctx.send_msgs([
|
|
{
|
|
"cmd": "Set",
|
|
"key": key,
|
|
"default": {},
|
|
"want_reply": False,
|
|
"operations": [
|
|
{"operation": "pop", "value": value}
|
|
]
|
|
}
|
|
])
|
|
|
|
|
|
async def initialize_giftboxes(ctx: "SNIContext", giftbox_key: str, motherbox_key: str, is_open: bool) -> None:
|
|
ctx.set_notify(motherbox_key, giftbox_key)
|
|
await update_object(ctx, f"Giftboxes;{ctx.team}", {f"{ctx.slot}":
|
|
{
|
|
"IsOpen": is_open,
|
|
**kdl3_gifting_options
|
|
}})
|
|
ctx.client_handler.gifting = is_open
|
|
|
|
|
|
kdl3_gifting_options = {
|
|
"AcceptsAnyGift": True,
|
|
"DesiredTraits": [
|
|
"Consumable", "Food", "Drink", "Candy", "Tomato",
|
|
"Invincible", "Life", "Heal", "Health", "Trap",
|
|
"Goo", "Gel", "Slow", "Slowness", "Eject", "Removal"
|
|
],
|
|
"MinimumGiftVersion": 2,
|
|
}
|
|
|
|
kdl3_gifts = {
|
|
1: {
|
|
"ItemName": "1-Up",
|
|
"Amount": 1,
|
|
"ItemValue": 400000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Consumable",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Life",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
2: {
|
|
"ItemName": "Maxim Tomato",
|
|
"Amount": 1,
|
|
"ItemValue": 500000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Consumable",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Heal",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Food",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Tomato",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Vegetable",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
}
|
|
]
|
|
},
|
|
3: {
|
|
"ItemName": "Energy Drink",
|
|
"Amount": 1,
|
|
"ItemValue": 100000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Consumable",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Heal",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Drink",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
]
|
|
},
|
|
5: {
|
|
"ItemName": "Small Star Piece",
|
|
"Amount": 1,
|
|
"ItemValue": 10000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Currency",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Money",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Star",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
6: {
|
|
"ItemName": "Medium Star Piece",
|
|
"Amount": 1,
|
|
"ItemValue": 30000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Currency",
|
|
"Quality": 3,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Money",
|
|
"Quality": 3,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Star",
|
|
"Quality": 3,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
7: {
|
|
"ItemName": "Large Star Piece",
|
|
"Amount": 1,
|
|
"ItemValue": 50000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Currency",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Money",
|
|
"Quality": 5,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Star",
|
|
"Quality": 5,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
}
|
|
|
|
kdl3_trap_gifts = {
|
|
0: {
|
|
"ItemName": "Gooey Bag",
|
|
"Amount": 1,
|
|
"ItemValue": 10000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Trap",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Goo",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Gel",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
1: {
|
|
"ItemName": "Slowness",
|
|
"Amount": 1,
|
|
"ItemValue": 10000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Trap",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Slow",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Slowness",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
2: {
|
|
"ItemName": "Eject Ability",
|
|
"Amount": 1,
|
|
"ItemValue": 10000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Trap",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Eject",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Removal",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
3: {
|
|
"ItemName": "Bad Meal",
|
|
"Amount": 1,
|
|
"ItemValue": 10000,
|
|
"Traits": [
|
|
{
|
|
"Trait": "Trap",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Damage",
|
|
"Quality": 1,
|
|
"Duration": 1,
|
|
},
|
|
{
|
|
"Trait": "Food",
|
|
"Quality": 1,
|
|
"Duration": 1
|
|
}
|
|
]
|
|
},
|
|
}
|