return ItemClassification.useful
if kind == 'progression_skip_balancing':
return ItemClassification.progression_skip_balancing
+ if kind == 'trap':
+ return ItemClassification.trap
return ItemClassification.filler
with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'items.yml'), 'r') as input:
else:
self.multiworld.itempool.append(item)
- # FIXME: need six traps later
- self.multiworld.itempool.append(self.create_item("junk"))
- self.multiworld.itempool.append(self.create_item("junk"))
- self.multiworld.itempool.append(self.create_item("junk"))
- self.multiworld.itempool.append(self.create_item("junk"))
- self.multiworld.itempool.append(self.create_item("junk"))
- self.multiworld.itempool.append(self.create_item("junk"))
-
all_macguffins = [str(x) for x in all_items.values() if x.id() < 32]
self.multiworld.completion_condition[self.player] = lambda state: state.has_all(all_macguffins, self.player)
if __name__ == "__main__":
Utils.init_logging("SICPelago", exception_logger="Client")
-from NetUtils import ClientStatus
+from BaseClasses import ItemClassification
from CommonClient import CommonContext, logger, get_base_parser, ClientCommandProcessor, server_loop
from MultiServer import mark_raw
+from NetUtils import ClientStatus
from . import all_items
from .game import game
items_by_id = {v.id(): v for v in all_items.values()}
macguffins = [game.MacGuffin(x) for x in game.MacGuffins]
+traps_seen = set()
async def send_locations(ctx: Context, problem: game.Problem):
def id(problem):
continue
macguffins[item.id() - 1] = None
game.receive_reward(next_mg)
+ elif item.kind() == ItemClassification.trap:
+ if item.id() in traps_seen:
+ continue
+ traps_seen.add(item.id())
+ game.receive_reward(game.Trap())
elif not game.receive_reward(str(item)):
continue
ctx.watcher_event.clear()
id: 0x7
kind: progression_skip_balancing
+- name: Trap 1
+ id: 0x100
+ kind: trap
+- name: Trap 2
+ id: 0x200
+ kind: trap
+- name: Trap 3
+ id: 0x300
+ kind: trap
+- name: Trap 4
+ id: 0x400
+ kind: trap
+- name: Trap 5
+ id: 0x500
+ kind: trap
+- name: Trap 6
+ id: 0x600
+ kind: trap
+
- name: "*"
id: 0x2a
kind: useful_progression
if macguffinsCollected == len(MacGuffins):
victory()
return reward
+ if isinstance(reward, Trap):
+ print("\033[7mYou've activated my trap card!")
+ return reward
problem_solved_hook = lambda problem: False
macguffinsCollected = 0
+class Trap:
+ def __str__(self):
+ return "Trap"
+ def __repr__(self):
+ return "Trap()"
+
class Problem:
def __init__(self, data: dict[str, Any]):
self.data = data
for reward in MacGuffins:
rewards[next(positions)].append(MacGuffin(reward))
- for name in frame_of_locks.bindings:
+ for name in itertools.chain(frame_of_locks.bindings, itertools.repeat(Trap(), 6)):
if name not in exceptions:
rewards[next(positions)].insert(0, name)
for reward in itertools.chain.from_iterable(ProblemRewards.values()):
if isinstance(reward, MacGuffin):
item_id = MacGuffins.index(reward.name) + 1
+ elif isinstance(reward, Trap):
+ item_id = 0
else:
# The last six characters of our operations happen to be unique
# and 48 bits is within the allowed ID range for Archipelago.