Files
dockipelago/worlds/duke3d/items/__init__.py
Jonathan Tinney 7971961166
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

740 lines
18 KiB
Python

from typing import Dict
from ..base_classes import ItemDef
from ..id import net_id
from ..levels import all_levels
automap_base_id = 1600
unlock_base_id = 1700
key_card_base_id = 1800
# Filled step by step below for readability
item_groups = {}
dynamic_level_items = {}
for level in all_levels:
# automap
automap = ItemDef(
f"{level.prefix} Automap",
net_id(automap_base_id),
"automap",
{"levelnum": level.levelnum, "volumenum": level.volumenum},
persistent=True,
unique=True,
)
automap_base_id += 1
dynamic_level_items[automap.name] = automap
# unlock
unlock = ItemDef(
f"{level.prefix} Unlock",
net_id(unlock_base_id),
"map",
{},
persistent=True,
unique=True,
progression=True,
)
unlock_base_id += 1
dynamic_level_items[unlock.name] = unlock
# key cards
for color in level.keys:
if color == "Blue":
flags = 1
elif color == "Red":
flags = 2
elif color == "Yellow":
flags = 4
else:
continue
key_card = ItemDef(
f"{level.prefix} {color} Key Card",
net_id(key_card_base_id),
"key",
{"flags": flags, "levelnum": level.levelnum, "volumenum": level.volumenum},
persistent=True,
unique=True,
progression=True,
)
key_card_base_id += 1
dynamic_level_items[key_card.name] = key_card
goal_items = {
"Exit": ItemDef(
"Exit", net_id(100), "goal", {}, silent=True, persistent=True, progression=True
),
"Secret": ItemDef(
"Secret",
net_id(101),
"goal",
{},
silent=True,
persistent=True,
progression=True,
),
"Boss": ItemDef(
"Boss",
net_id(102),
"goal",
{},
silent=True,
persistent=True,
progression=True,
),
}
junk_items = {
"Nothing": ItemDef("Nothing", net_id(0), "filler", {}, silent=True),
"Pity Heal": ItemDef(
"Pity Heal",
net_id(403),
"health",
{"heal": 1, "overheal": True},
),
}
weapons = {
"Pistol Capacity": ItemDef(
"Pistol Capacity",
net_id(221),
"ammo",
{"weaponnum": 1, "capacity": 20, "ammo": 10},
persistent=True,
),
# This just exists for consistent code, it doesn't do anything special right now
"Progressive Pistol": ItemDef(
"Progressive Pistol",
net_id(241),
"progressive",
{"items": [221]},
silent=True,
persistent=True,
),
"Pistol Ammo": ItemDef(
"Pistol Ammo",
net_id(261),
"ammo",
{"weaponnum": 1, "ammo": 30},
),
"Shotgun": ItemDef(
"Shotgun",
net_id(202),
"weapon",
{"weaponnum": 2, "ammo": 15},
persistent=True,
unique=True,
),
"Shotgun Capacity": ItemDef(
"Shotgun Capacity",
net_id(222),
"ammo",
{"weaponnum": 2, "capacity": 10, "ammo": 5},
persistent=True,
),
"Progressive Shotgun": ItemDef(
"Progressive Shotgun",
net_id(242),
"progressive",
{"items": [202, 222]},
silent=True,
persistent=True,
),
"Shotgun Ammo": ItemDef(
"Shotgun Ammo",
net_id(262),
"ammo",
{"weaponnum": 2, "ammo": 15},
),
"Chaingun": ItemDef(
"Chaingun",
net_id(203),
"weapon",
{"weaponnum": 3, "ammo": 75},
persistent=True,
unique=True,
),
"Chaingun Capacity": ItemDef(
"Chaingun Capacity",
net_id(223),
"ammo",
{"weaponnum": 3, "capacity": 50, "ammo": 25},
persistent=True,
),
"Progressive Chaingun": ItemDef(
"Progressive Chaingun",
net_id(243),
"progressive",
{"items": [203, 223]},
silent=True,
persistent=True,
),
"Chaingun Ammo": ItemDef(
"Chaingun Ammo",
net_id(263),
"ammo",
{"weaponnum": 3, "ammo": 150},
),
"RPG": ItemDef(
"RPG",
net_id(204),
"weapon",
{"weaponnum": 4, "ammo": 5},
persistent=True,
unique=True,
progression=True,
),
"RPG Capacity": ItemDef(
"RPG Capacity",
net_id(224),
"ammo",
{"weaponnum": 4, "capacity": 5, "ammo": 2},
persistent=True,
),
"Progressive RPG": ItemDef(
"Progressive RPG",
net_id(244),
"progressive",
{"items": [204, 224]},
silent=True,
persistent=True,
progression=True,
),
"RPG Ammo": ItemDef(
"RPG Ammo",
net_id(264),
"ammo",
{"weaponnum": 4, "ammo": 10},
),
"Pipebomb": ItemDef(
"Pipebomb",
net_id(205),
"weapon",
{"weaponnum": 5, "ammo": 4},
persistent=True,
unique=True,
progression=True,
),
"Pipebomb Capacity": ItemDef(
"Pipebomb Capacity",
net_id(225),
"ammo",
{"weaponnum": 5, "capacity": 3, "ammo": 1},
persistent=True,
),
"Progressive Pipebomb": ItemDef(
"Progressive Pipebomb",
net_id(245),
"progressive",
{"items": [205, 225]},
silent=True,
persistent=True,
progression=True,
),
"Pipebomb Ammo": ItemDef(
"Pipebomb Ammo",
net_id(265),
"ammo",
{"weaponnum": 5, "ammo": 10},
),
"Shrinker": ItemDef(
"Shrinker",
net_id(206),
"weapon",
{"weaponnum": 6, "ammo": 3},
persistent=True,
unique=True,
),
"Shrinker Capacity": ItemDef(
"Shrinker Capacity",
net_id(226),
"ammo",
{"weaponnum": 6, "capacity": 3, "ammo": 1},
persistent=True,
),
"Progressive Shrinker": ItemDef(
"Progressive Shrinker",
net_id(246),
"progressive",
{"items": [206, 226]},
silent=True,
persistent=True,
),
"Shrinker Ammo": ItemDef(
"Shrinker Ammo",
net_id(266),
"ammo",
{"weaponnum": 6, "ammo": 10},
),
"Devastator": ItemDef(
"Devastator",
net_id(207),
"weapon",
{"weaponnum": 7, "ammo": 15},
persistent=True,
unique=True,
progression=True,
),
"Devastator Capacity": ItemDef(
"Devastator Capacity",
net_id(227),
"ammo",
{"weaponnum": 7, "capacity": 20, "ammo": 10},
persistent=True,
),
"Progressive Devastator": ItemDef(
"Progressive Devastator",
net_id(247),
"progressive",
{"items": [207, 227]},
silent=True,
persistent=True,
progression=True,
),
"Devastator Ammo": ItemDef(
"Devastator Ammo",
net_id(267),
"ammo",
{"weaponnum": 7, "ammo": 50},
),
"Tripmine": ItemDef(
"Tripmine",
net_id(208),
"weapon",
{"weaponnum": 8, "ammo": 2},
persistent=True,
unique=True,
progression=True,
),
"Tripmine Capacity": ItemDef(
"Tripmine Capacity",
net_id(228),
"ammo",
{"weaponnum": 8, "capacity": 1, "ammo": 1},
persistent=True,
),
"Progressive Tripmine": ItemDef(
"Progressive Tripmine",
net_id(248),
"progressive",
{"items": [208, 228]},
silent=True,
persistent=True,
progression=True,
),
"Tripmines": ItemDef(
"Tripmines",
net_id(268),
"ammo",
{"weaponnum": 8, "ammo": 5},
),
"Freezethrower": ItemDef(
"Freezethrower",
net_id(209),
"weapon",
{"weaponnum": 9, "ammo": 25},
persistent=True,
unique=True,
),
"Freezethrower Capacity": ItemDef(
"Freezethrower Capacity",
net_id(229),
"ammo",
{"weaponnum": 9, "capacity": 40, "ammo": 20},
persistent=True,
),
"Progressive Freezethrower": ItemDef(
"Progressive Freezethrower",
net_id(249),
"progressive",
{"items": [209, 229]},
silent=True,
persistent=True,
),
"Freezethrower Ammo": ItemDef(
"Freezethrower Ammo",
net_id(269),
"ammo",
{"weaponnum": 9, "ammo": 50},
),
"Expander": ItemDef(
"Expander",
net_id(211),
"weapon",
{"weaponnum": 11, "ammo": 15},
persistent=True,
unique=True,
),
"Expander Capacity": ItemDef(
"Expander Capacity",
net_id(231),
"ammo",
{"weaponnum": 11, "capacity": 3, "ammo": 2},
persistent=True,
),
"Progressive Expander": ItemDef(
"Progressive Expander",
net_id(251),
"progressive",
{"items": [211, 231]},
silent=True,
persistent=True,
),
"Expander Ammo": ItemDef(
"Expander Ammo",
net_id(271),
"ammo",
{"weaponnum": 11, "ammo": 35},
),
}
item_groups["RPG"] = {"RPG", "Progressive RPG"}
item_groups["Pipebomb"] = {"Pipebomb", "Progressive Pipebomb"}
item_groups["Devastator"] = {"Devastator", "Progressive Devastator"}
item_groups["Tripmine"] = {"Tripmine", "Progressive Tripmine"}
item_groups["Explosives"] = {
"RPG",
"Pipebomb",
"Devastator",
"Tripmine",
"Progressive RPG",
"Progressive Pipebomb",
"Progressive Devastator",
"Progressive Tripmine",
}
inventory_items = {
"Steroids": ItemDef(
"Steroids",
net_id(300),
"inventory",
{
"invnum": 0,
"capacity": 40,
}, # use capacity from slot data if configured
persistent=True,
unique=True,
progression=True,
),
"Steroids Capacity": ItemDef(
"Steroids Capacity",
net_id(320),
"invcapacity",
{
"invnum": 0,
"capacity": 40,
}, # use capacity from slot data if configured
persistent=True,
),
"Progressive Steroids": ItemDef(
"Progressive Steroids",
net_id(340),
"progressive",
{"items": [300, 320]},
persistent=True,
progression=True,
silent=True,
),
"Armor": ItemDef(
"Armor",
net_id(301),
"armor",
{"capacity": 40},
),
"Sturdy Armor": ItemDef(
"Sturdy Armor",
net_id(321),
"armor",
{"capacity": 2, "maxcapacity": 2},
persistent=True,
),
"Heavy Armor": ItemDef(
"Heavy Armor",
net_id(341),
"armor",
{"capacity": 5, "maxcapacity": 5},
persistent=True,
),
"Scuba Gear": ItemDef(
"Scuba Gear",
net_id(302),
"inventory",
{
"invnum": 2,
"capacity": 400,
}, # use capacity from slot data if configured
persistent=True,
unique=True,
progression=True,
),
"Scuba Gear Capacity": ItemDef(
"Scuba Gear Capacity",
net_id(322),
"invcapacity",
{
"invnum": 2,
"capacity": 400,
}, # use capacity from slot data if configured
persistent=True,
progression=True,
),
"Progressive Scuba Gear": ItemDef(
"Progressive Scuba Gear",
net_id(342),
"progressive",
{"items": [302, 322]},
persistent=True,
progression=True,
silent=True,
),
"Holo Duke": ItemDef(
"Holo Duke",
net_id(303),
"inventory",
{"invnum": 3, "capacity": 600},
),
"Jetpack": ItemDef(
"Jetpack",
net_id(304),
"inventory",
{
"invnum": 4,
"capacity": 100,
}, # use capacity from slot data if configured
persistent=True,
unique=True,
progression=True,
),
"Jetpack Capacity": ItemDef(
"Jetpack Capacity",
net_id(324),
"invcapacity",
{
"invnum": 4,
"capacity": 100,
}, # use capacity from slot data if configured
persistent=True,
progression=True,
),
"Progressive Jetpack": ItemDef(
"Progressive Jetpack",
net_id(344),
"progressive",
{"items": [304, 324]},
persistent=True,
progression=True,
silent=True,
),
"Night Vision Goggles": ItemDef(
"Night Vision Goggles",
net_id(307),
"inventory",
{"invnum": 7, "capacity": 400, "max_capacity": 1600},
),
"First Aid Kit": ItemDef(
"First Aid Kit",
net_id(309),
"inventory",
{"invnum": 9, "capacity": 35, "max_capacity": 100},
),
"Protective Boots": ItemDef(
"Protective Boots",
net_id(310),
"inventory",
{"invnum": 10, "capacity": 100, "max_capacity": 300},
),
}
item_groups["Jetpack"] = {"Jetpack", "Progressive Jetpack"}
item_groups["Jetpack Capacity"] = {"Jetpack", "Jetpack Capacity", "Progressive Jetpack"}
item_groups["Steroids"] = {"Steroids", "Progressive Steroids"}
item_groups["Steroids Capacity"] = {
"Steroids",
"Steroids Capacity",
"Progressive Steroids",
}
item_groups["Scuba Gear"] = {"Scuba Gear", "Progressive Scuba Gear"}
item_groups["Scuba Gear Capacity"] = {
"Scuba Gear",
"Scuba Gear Capacity",
"Progressive Scuba Gear",
}
abilities = {
"Jump": ItemDef(
"Jump",
net_id(350),
"ability",
{"enables": "jump"},
persistent=True,
unique=True,
progression=True,
),
"Dive": ItemDef(
"Dive",
net_id(351),
"ability",
{"enables": "dive"},
persistent=True,
unique=True,
progression=True,
),
"Crouch": ItemDef(
"Crouch",
net_id(352),
"ability",
{"enables": "crouch"},
persistent=True,
unique=True,
progression=True,
),
"Sprint": ItemDef(
"Sprint",
net_id(353),
"ability",
{"enables": "run"},
persistent=True,
unique=True,
progression=True,
),
"Open": ItemDef(
"Open",
net_id(354),
"ability",
{"enables": "open"},
persistent=True,
unique=True,
progression=True,
),
"Use": ItemDef(
"Use",
net_id(355),
"ability",
{"enables": "use"},
persistent=True,
unique=True,
progression=True,
),
}
healing_items = {
"Atomic Health": ItemDef(
"Atomic Health", net_id(400), "health", {"heal": 50, "overheal": True}
),
"Medpak": ItemDef("Medpak", net_id(401), "health", {"heal": 30}),
"Bandage": ItemDef("Bandage", net_id(402), "health", {"heal": 10}),
"Ego Boost": ItemDef(
"Ego Boost", net_id(404), "health", {"heal": 2, "capacity": 2}, persistent=True
),
"Buff Up": ItemDef(
"Buff Up", net_id(405), "health", {"heal": 5, "capacity": 5}, persistent=True
),
"Plutonium Health": ItemDef(
"Plutonium Health", net_id(406), "health", {"heal": 125, "overheal": True}
),
"Uranium Health": ItemDef(
"Uranium Health", net_id(407), "health", {"heal": 250, "overheal": True}
),
}
traps = {
"Celebration Trap": ItemDef(
"Celebration Trap",
net_id(500),
"trap",
{"trap": "celebrate", "duration": 450, "grace": 1500},
silent=True,
),
"Shrink Trap": ItemDef(
"Shrink Trap",
net_id(501),
"trap",
{"trap": "shrink", "duration": 250, "grace": 2000},
silent=True,
),
"Death Trap": ItemDef(
"Death Trap",
net_id(502),
"trap",
{"trap": "death", "duration": 1, "grace": 5000},
silent=True,
),
"Appreciation Trap": ItemDef(
"Appreciation Trap",
net_id(503),
"trap",
{"trap": "credits", "duration": 600, "grace": 2000},
silent=True,
),
"Paranoia Trap": ItemDef(
"Paranoia Trap",
net_id(504),
"trap",
{"trap": "nothing", "duration": 1, "grace": 1700},
silent=True,
),
"Battlelord Trap": ItemDef(
"Battlelord Trap",
net_id(505),
"trap",
{"trap": "spawn", "sprite": 2630, "amount": 1, "duration": 1, "grace": 200},
silent=True,
),
"Caffeine Trap": ItemDef(
"Caffeine Trap",
net_id(506),
"trap",
{"trap": "hyperspeed", "duration": 300, "grace": 2000},
silent=True,
),
"Octabrain Trap": ItemDef(
"Octabrain Trap",
net_id(507),
"trap",
{"trap": "spawn", "sprite": 1820, "amount": 2, "duration": 1, "grace": 200},
silent=True,
),
"Lizard Trap": ItemDef(
"Lizard Trap",
net_id(508),
"trap",
{"trap": "spawn", "sprite": 1725, "amount": 8, "duration": 1, "grace": 200},
silent=True,
),
"Busted!": ItemDef(
"Busted!",
net_id(509),
"trap",
{"trap": "spawn", "sprite": 2000, "amount": 3, "duration": 1, "grace": 200},
silent=True,
),
"Ooze Trap": ItemDef(
"Ooze Trap",
net_id(510),
"trap",
{"trap": "spawn", "sprite": 2370, "amount": 14, "duration": 1, "grace": 200},
silent=True,
),
}
# These don't have defined values and exist solely to be replaced by unique, seed specifically generated items
dynamic_items = {
f"Dynamic{i +1}": ItemDef(
f"Dynamic{i + 1}", net_id(600 + i), "filler", {}, silent=True
)
for i in range(16)
}
all_items: Dict[str, ItemDef] = {
**junk_items,
**goal_items,
**weapons,
**inventory_items,
**abilities,
**dynamic_level_items,
**healing_items,
**traps,
**dynamic_items,
}