mettagrid 0.0.0__cp311-cp311-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mettagrid might be problematic. Click here for more details.
- mettagrid/__init__.py +70 -0
- mettagrid/builder/__init__.py +7 -0
- mettagrid/builder/building.py +176 -0
- mettagrid/builder/empty_converters.py +85 -0
- mettagrid/builder/envs.py +261 -0
- mettagrid/config/__init__.py +35 -0
- mettagrid/config/config.py +106 -0
- mettagrid/config/mettagrid_c_config.py +414 -0
- mettagrid/config/mettagrid_config.py +228 -0
- mettagrid/core.py +297 -0
- mettagrid/demo.py +35 -0
- mettagrid/envs/__init__.py +13 -0
- mettagrid/envs/gym_env.py +127 -0
- mettagrid/envs/gym_wrapper.py +63 -0
- mettagrid/envs/mettagrid_env.py +310 -0
- mettagrid/envs/pettingzoo_env.py +213 -0
- mettagrid/envs/puffer_base.py +143 -0
- mettagrid/map_builder/__init__.py +10 -0
- mettagrid/map_builder/ascii.py +38 -0
- mettagrid/map_builder/map_builder.py +147 -0
- mettagrid/map_builder/maze.py +122 -0
- mettagrid/map_builder/perimeter_incontext.py +330 -0
- mettagrid/map_builder/random.py +95 -0
- mettagrid/map_builder/utils.py +94 -0
- mettagrid/mapgen/__init__.py +0 -0
- mettagrid/mapgen/load.py +35 -0
- mettagrid/mapgen/mapgen.py +322 -0
- mettagrid/mapgen/mapgen_ascii.py +51 -0
- mettagrid/mapgen/random/float.py +99 -0
- mettagrid/mapgen/random/int.py +50 -0
- mettagrid/mapgen/scene.py +323 -0
- mettagrid/mapgen/scenes/ascii.py +41 -0
- mettagrid/mapgen/scenes/auto.py +149 -0
- mettagrid/mapgen/scenes/bsp.py +417 -0
- mettagrid/mapgen/scenes/convchain.py +180 -0
- mettagrid/mapgen/scenes/copy_grid.py +36 -0
- mettagrid/mapgen/scenes/dcss/README.md +7 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_choice.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_double_pillar.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_feature_with_door.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_flooded_fountain.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_single_pillar.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/amcnicky_arrival_underground_garden.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_concentric_rings.yaml +38 -0
- mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_pentagon.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/angelslayer_arrival_single_sparkle.yaml +38 -0
- mettagrid/mapgen/scenes/dcss/convchain/co_arrival_square_in_a_square_in_a_square.yaml +42 -0
- mettagrid/mapgen/scenes/dcss/convchain/co_arrival_two_rings.yaml +40 -0
- mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_hothouse.yaml +42 -0
- mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_planthouse.yaml +40 -0
- mettagrid/mapgen/scenes/dcss/convchain/denvon_arrival_waterhouse.yaml +44 -0
- mettagrid/mapgen/scenes/dcss/convchain/doesnt_arrival_eight_statues.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_boxes_within_box.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_boxorama.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_line_fractal.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_long_road.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_radiant.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_rooms_a.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_rooms_with_view.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_shelter.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_snail.yaml +42 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_ternary.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_three_bigger_balls.yaml +48 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_three_smaller_balls.yaml +40 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_a.yaml +6 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_b.yaml +10 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_c.yaml +12 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_d.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_e.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_f.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_g.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_h.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_i.yaml +10 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_j.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_tiny_k.yaml +10 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_triangle_fractal.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_arrival_windows_large_door.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/dpeg_chamrin_arrival_tetris.yaml +44 -0
- mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_angles.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_boulevard.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/dysonsfear_arrival_nine_rooms.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/ebering_hopf_link.yaml +28 -0
- mettagrid/mapgen/scenes/dcss/convchain/ebering_trefoil_3fold.yaml +28 -0
- mettagrid/mapgen/scenes/dcss/convchain/ebering_trefoil_twist.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_druids_welcome.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_tree_alley.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_water_cross.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/eino_arrival_water_star.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_blinker_ship.yaml +42 -0
- mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_huge.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_large.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_medium.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/erik_arrival_triangle_small.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/giann_bridges.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/giann_forest_graveyard.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/giann_horns.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/giann_wishing_wells.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/grunt_arrival_crossed_arrows.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/grunt_arrival_lava_bath.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/ldierk_walled_garden.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/ldierk_walled_garden_2.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_cross.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_funnel.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/lemuel_arrival_lava_pool.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_chessboard.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_flooded_house.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_lavapool.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_maybe_door_vault.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_arrival_statue_moat.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_iron_boxes.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/lightli_molten_gateway.yaml +36 -0
- mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_grand_opening.yaml +38 -0
- mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_los_fun.yaml +50 -0
- mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_refuge.yaml +38 -0
- mettagrid/mapgen/scenes/dcss/convchain/matt_arrival_spirals.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_diagonal_passages.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_doors.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_four_houses.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_open_corners.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_plants_in_alcoves.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_pointy.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_radiant_lines.yaml +46 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_three_doors.yaml +12 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_up_and_down.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/minmay_arrival_wavy_path.yaml +28 -0
- mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_arrow.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue_2.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/mrwooster_arrival_statue_3.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_large.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_med.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_door_cone_small.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/ms813_arrival_square_statues.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/mushboom_english_gardens.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/ncdulo_halloftheorcs.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/ncdulo_lavacross.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/ncdulo_smallfort.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/ncdulo_watergridlock.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/ncdulo_wetmaze.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_crosshair.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_depleted_hourglass.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/nzn_arrival_water_spiral.yaml +40 -0
- mettagrid/mapgen/scenes/dcss/convchain/onia_arrival_mini_spirals.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/onia_arrival_pyramid.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/pf_arrival_petrified_forest.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_basics.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_conway.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_dodecagon.yaml +54 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_heroes.yaml +42 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_radial01.yaml +38 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_radial02.yaml +46 -0
- mettagrid/mapgen/scenes/dcss/convchain/psy_arrival_whirlpool.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/reono_arrival_forest_river.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/reono_arrival_mine.yaml +30 -0
- mettagrid/mapgen/scenes/dcss/convchain/roderic_chinese_lattice_arrival.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/roderic_crossed_star.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/roderic_dead_forest.yaml +40 -0
- mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_a.yaml +10 -0
- mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_b.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_c.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_d.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/saegor_arrival_simple_e.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_checkerplants.yaml +28 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_forest.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_gate.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_hexagon.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_simple_crosswalls.yaml +26 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_simple_fountains.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/scummos_arrival_star.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/spicycebolla_green_bress_n_ham.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/spicycebolla_green_bress_n_ham_2.yaml +32 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_a.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_b.yaml +34 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_c.yaml +20 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_d.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_e.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/tarquinn_simple_flora_water_f.yaml +16 -0
- mettagrid/mapgen/scenes/dcss/convchain/wander_arrival_chamber.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/wander_arrival_desolate.yaml +22 -0
- mettagrid/mapgen/scenes/dcss/convchain/wheals_arrival_linesprint.yaml +18 -0
- mettagrid/mapgen/scenes/dcss/convchain/wheals_arrival_shading.yaml +14 -0
- mettagrid/mapgen/scenes/dcss/convchain/zelgadis_glass_arrival_small.yaml +24 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_choice.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_double_pillar.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_feature_with_door.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_flooded_fountain.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_single_pillar.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/amcnicky_arrival_underground_garden.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/angelslayer_arrival_concentric_rings.yaml +35 -0
- mettagrid/mapgen/scenes/dcss/wfc/angelslayer_arrival_single_sparkle.yaml +35 -0
- mettagrid/mapgen/scenes/dcss/wfc/co_arrival_square_in_a_square_in_a_square.yaml +39 -0
- mettagrid/mapgen/scenes/dcss/wfc/co_arrival_two_rings.yaml +37 -0
- mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_hothouse.yaml +39 -0
- mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_planthouse.yaml +37 -0
- mettagrid/mapgen/scenes/dcss/wfc/denvon_arrival_waterhouse.yaml +41 -0
- mettagrid/mapgen/scenes/dcss/wfc/doesnt_arrival_eight_statues.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_boxes_within_box.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_boxorama.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_line_fractal.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_long_road.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_radiant.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_rooms_a.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_rooms_with_view.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_shelter.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_snail.yaml +39 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_ternary.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_three_bigger_balls.yaml +45 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_three_smaller_balls.yaml +37 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_a.yaml +3 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_b.yaml +7 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_c.yaml +9 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_d.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_e.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_f.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_g.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_h.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_i.yaml +7 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_j.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_tiny_k.yaml +7 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_triangle_fractal.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_arrival_windows_large_door.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/dpeg_chamrin_arrival_tetris.yaml +41 -0
- mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_angles.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_boulevard.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/dysonsfear_arrival_nine_rooms.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/ebering_hopf_link.yaml +25 -0
- mettagrid/mapgen/scenes/dcss/wfc/ebering_trefoil_3fold.yaml +25 -0
- mettagrid/mapgen/scenes/dcss/wfc/ebering_trefoil_twist.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_druids_welcome.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_tree_alley.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_water_cross.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/eino_arrival_water_star.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_blinker_ship.yaml +39 -0
- mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_huge.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_large.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_medium.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/erik_arrival_triangle_small.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/giann_bridges.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/giann_forest_graveyard.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/giann_horns.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/giann_wishing_wells.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/grunt_arrival_crossed_arrows.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/grunt_arrival_lava_bath.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/ldierk_walled_garden.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/ldierk_walled_garden_2.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_cross.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_funnel.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/lemuel_arrival_lava_pool.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_chessboard.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_flooded_house.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_lavapool.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_maybe_door_vault.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_arrival_statue_moat.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_iron_boxes.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/lightli_molten_gateway.yaml +33 -0
- mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_grand_opening.yaml +35 -0
- mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_los_fun.yaml +47 -0
- mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_refuge.yaml +35 -0
- mettagrid/mapgen/scenes/dcss/wfc/matt_arrival_spirals.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_diagonal_passages.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_doors.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_four_houses.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_open_corners.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_plants_in_alcoves.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_pointy.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_radiant_lines.yaml +43 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_three_doors.yaml +9 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_up_and_down.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/minmay_arrival_wavy_path.yaml +25 -0
- mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_arrow.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue_2.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/mrwooster_arrival_statue_3.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_large.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_med.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_door_cone_small.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/ms813_arrival_square_statues.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/mushboom_english_gardens.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/ncdulo_halloftheorcs.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/ncdulo_lavacross.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/ncdulo_smallfort.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/ncdulo_watergridlock.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/ncdulo_wetmaze.yaml +21 -0
- mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_crosshair.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_depleted_hourglass.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/nzn_arrival_water_spiral.yaml +37 -0
- mettagrid/mapgen/scenes/dcss/wfc/onia_arrival_mini_spirals.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/onia_arrival_pyramid.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/pf_arrival_petrified_forest.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_basics.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_conway.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_dodecagon.yaml +51 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_heroes.yaml +39 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_radial01.yaml +35 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_radial02.yaml +43 -0
- mettagrid/mapgen/scenes/dcss/wfc/psy_arrival_whirlpool.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/reono_arrival_forest_river.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/reono_arrival_mine.yaml +27 -0
- mettagrid/mapgen/scenes/dcss/wfc/roderic_chinese_lattice_arrival.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/roderic_crossed_star.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/roderic_dead_forest.yaml +37 -0
- mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_a.yaml +7 -0
- mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_b.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_c.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_d.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/saegor_arrival_simple_e.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_checkerplants.yaml +25 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_forest.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_gate.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_hexagon.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_simple_crosswalls.yaml +23 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_simple_fountains.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/scummos_arrival_star.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/spicycebolla_green_bress_n_ham.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/spicycebolla_green_bress_n_ham_2.yaml +29 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_a.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_b.yaml +31 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_c.yaml +17 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_d.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_e.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/tarquinn_simple_flora_water_f.yaml +13 -0
- mettagrid/mapgen/scenes/dcss/wfc/wander_arrival_chamber.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/wander_arrival_desolate.yaml +19 -0
- mettagrid/mapgen/scenes/dcss/wfc/wheals_arrival_linesprint.yaml +15 -0
- mettagrid/mapgen/scenes/dcss/wfc/wheals_arrival_shading.yaml +11 -0
- mettagrid/mapgen/scenes/dcss/wfc/zelgadis_glass_arrival_small.yaml +21 -0
- mettagrid/mapgen/scenes/grid_altars.py +118 -0
- mettagrid/mapgen/scenes/inline_ascii.py +42 -0
- mettagrid/mapgen/scenes/layout.py +31 -0
- mettagrid/mapgen/scenes/make_connected.py +163 -0
- mettagrid/mapgen/scenes/maze.py +212 -0
- mettagrid/mapgen/scenes/mean_distance.py +48 -0
- mettagrid/mapgen/scenes/mirror.py +120 -0
- mettagrid/mapgen/scenes/multi_left_and_right.py +117 -0
- mettagrid/mapgen/scenes/nop.py +15 -0
- mettagrid/mapgen/scenes/radial_maze.py +50 -0
- mettagrid/mapgen/scenes/random.py +65 -0
- mettagrid/mapgen/scenes/random_dcss_scene.py +48 -0
- mettagrid/mapgen/scenes/random_objects.py +35 -0
- mettagrid/mapgen/scenes/random_scene.py +31 -0
- mettagrid/mapgen/scenes/random_yaml_scene.py +32 -0
- mettagrid/mapgen/scenes/remove_agents.py +26 -0
- mettagrid/mapgen/scenes/room_grid.py +77 -0
- mettagrid/mapgen/scenes/spiral.py +104 -0
- mettagrid/mapgen/scenes/transplant_scene.py +42 -0
- mettagrid/mapgen/scenes/varied_terrain.py +376 -0
- mettagrid/mapgen/scenes/wfc.py +269 -0
- mettagrid/mapgen/scenes/yaml.py +22 -0
- mettagrid/mapgen/tools/dcss_import.py +123 -0
- mettagrid/mapgen/tools/gen.py +94 -0
- mettagrid/mapgen/tools/gen_scene.py +51 -0
- mettagrid/mapgen/tools/view.py +25 -0
- mettagrid/mapgen/types.py +81 -0
- mettagrid/mapgen/utils/ascii_grid.py +55 -0
- mettagrid/mapgen/utils/draw.py +32 -0
- mettagrid/mapgen/utils/make_scene_config.py +36 -0
- mettagrid/mapgen/utils/pattern.py +181 -0
- mettagrid/mapgen/utils/s3utils.py +44 -0
- mettagrid/mapgen/utils/show.py +21 -0
- mettagrid/mapgen/utils/storable_map.py +117 -0
- mettagrid/mapgen/utils/storable_map_index.py +92 -0
- mettagrid/mapgen/utils/thumbnail.py +360 -0
- mettagrid/mettagrid_c.pyi +224 -0
- mettagrid/mettagrid_c.so +0 -0
- mettagrid/mettascope.py +40 -0
- mettagrid/profiling/__init__.py +1 -0
- mettagrid/profiling/memory_monitor.py +242 -0
- mettagrid/profiling/stopwatch.py +711 -0
- mettagrid/profiling/system_monitor.py +355 -0
- mettagrid/py.typed +0 -0
- mettagrid/renderer/assets/Inter-Regular.ttf +0 -0
- mettagrid/renderer/assets/altar.png +0 -0
- mettagrid/renderer/assets/atlas.json +920 -0
- mettagrid/renderer/assets/atlas.png +0 -0
- mettagrid/renderer/assets/converter.png +0 -0
- mettagrid/renderer/assets/generator.png +0 -0
- mettagrid/renderer/assets/items.png +0 -0
- mettagrid/renderer/assets/monsters.png +0 -0
- mettagrid/renderer/assets/ore-0.png +0 -0
- mettagrid/renderer/assets/ore-1.png +0 -0
- mettagrid/renderer/assets/ore-2.png +0 -0
- mettagrid/renderer/assets/ore-3.png +0 -0
- mettagrid/renderer/assets/ore-4.png +0 -0
- mettagrid/renderer/assets/ore-5.png +0 -0
- mettagrid/renderer/assets/ore-6.png +0 -0
- mettagrid/renderer/assets/puffer_chars.png +0 -0
- mettagrid/renderer/assets/wall.png +0 -0
- mettagrid/renderer/miniscope.py +138 -0
- mettagrid/renderer/nethack.py +101 -0
- mettagrid/test_support/__init__.py +7 -0
- mettagrid/test_support/actions.py +426 -0
- mettagrid/test_support/mapgen.py +77 -0
- mettagrid/test_support/observation_helper.py +50 -0
- mettagrid/test_support/orientation.py +100 -0
- mettagrid/test_support/token_types.py +18 -0
- mettagrid/util/__init__.py +0 -0
- mettagrid/util/char_encoder.py +55 -0
- mettagrid/util/debug.py +501 -0
- mettagrid/util/dict_utils.py +10 -0
- mettagrid/util/diversity.py +71 -0
- mettagrid/util/episode_stats_db.py +157 -0
- mettagrid/util/file.py +503 -0
- mettagrid/util/grid_object_formatter.py +95 -0
- mettagrid/util/module.py +12 -0
- mettagrid/util/replay_writer.py +136 -0
- mettagrid/util/stats_writer.py +55 -0
- mettagrid/util/uri.py +162 -0
- mettagrid-0.0.0.dist-info/METADATA +256 -0
- mettagrid-0.0.0.dist-info/RECORD +413 -0
- mettagrid-0.0.0.dist-info/WHEEL +5 -0
- mettagrid-0.0.0.dist-info/entry_points.txt +2 -0
- mettagrid-0.0.0.dist-info/licenses/LICENSE +21 -0
- mettagrid-0.0.0.dist-info/top_level.txt +1 -0
mettagrid/__init__.py
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
MettaGrid - Multi-agent reinforcement learning grid environments.
|
|
3
|
+
|
|
4
|
+
This module provides various environment adapters for different RL frameworks:
|
|
5
|
+
- MettaGridCore: Core C++ wrapper (no training features)
|
|
6
|
+
- MettaGridEnv: Training environment (PufferLib-based with stats/replay)
|
|
7
|
+
- MettaGridGymEnv: Gymnasium adapter
|
|
8
|
+
- MettaGridPettingZooEnv: PettingZoo adapter
|
|
9
|
+
|
|
10
|
+
All adapters inherit from MettaGridCore and provide framework-specific interfaces.
|
|
11
|
+
For PufferLib integration, use PufferLib's MettaPuff wrapper directly.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from mettagrid.config.mettagrid_config import MettaGridConfig
|
|
17
|
+
|
|
18
|
+
# Import environment classes
|
|
19
|
+
from mettagrid.core import MettaGridCore
|
|
20
|
+
|
|
21
|
+
# Import other commonly used classes
|
|
22
|
+
from mettagrid.envs.gym_env import MettaGridGymEnv
|
|
23
|
+
from mettagrid.envs.mettagrid_env import MettaGridEnv
|
|
24
|
+
from mettagrid.envs.pettingzoo_env import MettaGridPettingZooEnv
|
|
25
|
+
from mettagrid.map_builder.map_builder import GameMap
|
|
26
|
+
|
|
27
|
+
# Import data types from C++ module (source of truth)
|
|
28
|
+
from mettagrid.mettagrid_c import (
|
|
29
|
+
dtype_actions,
|
|
30
|
+
dtype_masks,
|
|
31
|
+
dtype_observations,
|
|
32
|
+
dtype_rewards,
|
|
33
|
+
dtype_success,
|
|
34
|
+
dtype_terminals,
|
|
35
|
+
dtype_truncations,
|
|
36
|
+
)
|
|
37
|
+
from mettagrid.util.replay_writer import ReplayWriter
|
|
38
|
+
from mettagrid.util.stats_writer import StatsWriter
|
|
39
|
+
|
|
40
|
+
# Import mettascope submodule (optional, for visualization)
|
|
41
|
+
try:
|
|
42
|
+
from mettagrid import mettascope
|
|
43
|
+
except ImportError:
|
|
44
|
+
mettascope = None
|
|
45
|
+
|
|
46
|
+
__all__ = [
|
|
47
|
+
# Config
|
|
48
|
+
"MettaGridConfig",
|
|
49
|
+
# Core classes
|
|
50
|
+
"MettaGridCore",
|
|
51
|
+
# Main environment (backward compatible)
|
|
52
|
+
"MettaGridEnv",
|
|
53
|
+
# Environment adapters
|
|
54
|
+
"MettaGridGymEnv",
|
|
55
|
+
"MettaGridPettingZooEnv",
|
|
56
|
+
# Data types
|
|
57
|
+
"dtype_actions",
|
|
58
|
+
"dtype_observations",
|
|
59
|
+
"dtype_rewards",
|
|
60
|
+
"dtype_terminals",
|
|
61
|
+
"dtype_truncations",
|
|
62
|
+
"dtype_masks",
|
|
63
|
+
"dtype_success",
|
|
64
|
+
# Supporting classes
|
|
65
|
+
"GameMap",
|
|
66
|
+
"ReplayWriter",
|
|
67
|
+
"StatsWriter",
|
|
68
|
+
# Optional visualization module
|
|
69
|
+
"mettascope",
|
|
70
|
+
]
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
from mettagrid.config.mettagrid_config import AssemblerConfig, ChestConfig, ConverterConfig, RecipeConfig, WallConfig
|
|
4
|
+
|
|
5
|
+
wall = WallConfig(type_id=1)
|
|
6
|
+
block = WallConfig(type_id=14, swappable=True)
|
|
7
|
+
|
|
8
|
+
altar = ConverterConfig(
|
|
9
|
+
type_id=8,
|
|
10
|
+
input_resources={"battery_red": 3},
|
|
11
|
+
output_resources={"heart": 1},
|
|
12
|
+
cooldown=10,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def make_mine(color: str, type_id: int) -> ConverterConfig:
|
|
17
|
+
return ConverterConfig(
|
|
18
|
+
type_id=type_id,
|
|
19
|
+
output_resources={f"ore_{color}": 1},
|
|
20
|
+
cooldown=50,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
mine_red = make_mine("red", 2)
|
|
25
|
+
mine_blue = make_mine("blue", 3)
|
|
26
|
+
mine_green = make_mine("green", 4)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def make_generator(color: str, type_id: int) -> ConverterConfig:
|
|
30
|
+
return ConverterConfig(
|
|
31
|
+
type_id=type_id,
|
|
32
|
+
input_resources={f"ore_{color}": 1},
|
|
33
|
+
output_resources={f"battery_{color}": 1},
|
|
34
|
+
cooldown=25,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
generator_red = make_generator("red", 5)
|
|
39
|
+
generator_blue = make_generator("blue", 6)
|
|
40
|
+
generator_green = make_generator("green", 7)
|
|
41
|
+
|
|
42
|
+
lasery = ConverterConfig(
|
|
43
|
+
type_id=15,
|
|
44
|
+
input_resources={"battery_red": 1, "ore_red": 2},
|
|
45
|
+
output_resources={"laser": 1},
|
|
46
|
+
cooldown=10,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
armory = ConverterConfig(
|
|
50
|
+
type_id=16,
|
|
51
|
+
input_resources={"ore_red": 3},
|
|
52
|
+
output_resources={"armor": 1},
|
|
53
|
+
cooldown=10,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Assembler building definitions
|
|
57
|
+
assembler_altar = AssemblerConfig(
|
|
58
|
+
type_id=8,
|
|
59
|
+
recipes=[
|
|
60
|
+
(
|
|
61
|
+
["Any"],
|
|
62
|
+
RecipeConfig(
|
|
63
|
+
input_resources={"battery_red": 3},
|
|
64
|
+
output_resources={"heart": 1},
|
|
65
|
+
cooldown=10,
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
],
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def make_assembler_mine(color: str, type_id: int) -> AssemblerConfig:
|
|
73
|
+
return AssemblerConfig(
|
|
74
|
+
type_id=type_id,
|
|
75
|
+
recipes=[
|
|
76
|
+
(
|
|
77
|
+
["Any"],
|
|
78
|
+
RecipeConfig(
|
|
79
|
+
output_resources={f"ore_{color}": 1},
|
|
80
|
+
cooldown=50,
|
|
81
|
+
),
|
|
82
|
+
)
|
|
83
|
+
],
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
assembler_mine_red = make_assembler_mine("red", 2)
|
|
88
|
+
assembler_mine_blue = make_assembler_mine("blue", 3)
|
|
89
|
+
assembler_mine_green = make_assembler_mine("green", 4)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def make_assembler_generator(color: str, type_id: int) -> AssemblerConfig:
|
|
93
|
+
return AssemblerConfig(
|
|
94
|
+
type_id=type_id,
|
|
95
|
+
recipes=[
|
|
96
|
+
(
|
|
97
|
+
["Any"],
|
|
98
|
+
RecipeConfig(
|
|
99
|
+
input_resources={f"ore_{color}": 1},
|
|
100
|
+
output_resources={f"battery_{color}": 1},
|
|
101
|
+
cooldown=25,
|
|
102
|
+
),
|
|
103
|
+
)
|
|
104
|
+
],
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
assembler_generator_red = make_assembler_generator("red", 5)
|
|
109
|
+
assembler_generator_blue = make_assembler_generator("blue", 6)
|
|
110
|
+
assembler_generator_green = make_assembler_generator("green", 7)
|
|
111
|
+
|
|
112
|
+
assembler_lasery = AssemblerConfig(
|
|
113
|
+
type_id=15,
|
|
114
|
+
recipes=[
|
|
115
|
+
(
|
|
116
|
+
["Any"],
|
|
117
|
+
RecipeConfig(
|
|
118
|
+
input_resources={"battery_red": 1, "ore_red": 2},
|
|
119
|
+
output_resources={"laser": 1},
|
|
120
|
+
cooldown=10,
|
|
121
|
+
),
|
|
122
|
+
)
|
|
123
|
+
],
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
assembler_armory = AssemblerConfig(
|
|
127
|
+
type_id=16,
|
|
128
|
+
recipes=[
|
|
129
|
+
(
|
|
130
|
+
["Any"],
|
|
131
|
+
RecipeConfig(
|
|
132
|
+
input_resources={"ore_red": 3},
|
|
133
|
+
output_resources={"armor": 1},
|
|
134
|
+
cooldown=10,
|
|
135
|
+
),
|
|
136
|
+
)
|
|
137
|
+
],
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# Chest building definitions
|
|
142
|
+
def make_chest(
|
|
143
|
+
resource_type: str,
|
|
144
|
+
type_id: int,
|
|
145
|
+
deposit_positions: list[Literal["NW", "N", "NE", "W", "E", "SW", "S", "SE"]] | None = None,
|
|
146
|
+
withdrawal_positions: list[Literal["NW", "N", "NE", "W", "E", "SW", "S", "SE"]] | None = None,
|
|
147
|
+
) -> ChestConfig:
|
|
148
|
+
"""Create a chest configuration for a specific resource type."""
|
|
149
|
+
if deposit_positions is None:
|
|
150
|
+
deposit_positions = ["N", "S", "E", "W"] # Default to cardinal directions
|
|
151
|
+
if withdrawal_positions is None:
|
|
152
|
+
withdrawal_positions = ["N", "S", "E", "W"] # Default to cardinal directions
|
|
153
|
+
|
|
154
|
+
return ChestConfig(
|
|
155
|
+
type_id=type_id,
|
|
156
|
+
resource_type=resource_type,
|
|
157
|
+
deposit_positions=deposit_positions,
|
|
158
|
+
withdrawal_positions=withdrawal_positions,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# Example chest configurations
|
|
163
|
+
chest_ore_red = make_chest("ore_red", 20)
|
|
164
|
+
chest_ore_blue = make_chest("ore_blue", 21)
|
|
165
|
+
chest_ore_green = make_chest("ore_green", 22)
|
|
166
|
+
chest_battery_red = make_chest("battery_red", 23)
|
|
167
|
+
chest_battery_blue = make_chest("battery_blue", 24)
|
|
168
|
+
chest_battery_green = make_chest("battery_green", 25)
|
|
169
|
+
|
|
170
|
+
# Special chest that only allows deposits from North and withdrawals from South
|
|
171
|
+
chest_depot = ChestConfig(
|
|
172
|
+
type_id=26,
|
|
173
|
+
resource_type="ore_red",
|
|
174
|
+
deposit_positions=["N"],
|
|
175
|
+
withdrawal_positions=["S"],
|
|
176
|
+
)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from mettagrid.config.mettagrid_config import ConverterConfig, WallConfig
|
|
2
|
+
|
|
3
|
+
wall = WallConfig(type_id=1)
|
|
4
|
+
block = WallConfig(type_id=14, swappable=True)
|
|
5
|
+
|
|
6
|
+
mine_red = ConverterConfig(
|
|
7
|
+
type_id=2,
|
|
8
|
+
input_resources={},
|
|
9
|
+
output_resources={},
|
|
10
|
+
cooldown=5,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
mine_blue = ConverterConfig(
|
|
14
|
+
type_id=3,
|
|
15
|
+
input_resources={},
|
|
16
|
+
output_resources={},
|
|
17
|
+
cooldown=5,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
mine_green = ConverterConfig(
|
|
21
|
+
type_id=4,
|
|
22
|
+
input_resources={},
|
|
23
|
+
output_resources={},
|
|
24
|
+
cooldown=5,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
generator_red = ConverterConfig(
|
|
28
|
+
type_id=5,
|
|
29
|
+
input_resources={},
|
|
30
|
+
output_resources={},
|
|
31
|
+
cooldown=5,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
generator_blue = ConverterConfig(
|
|
35
|
+
type_id=6,
|
|
36
|
+
input_resources={},
|
|
37
|
+
output_resources={},
|
|
38
|
+
cooldown=5,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
generator_green = ConverterConfig(
|
|
42
|
+
type_id=7,
|
|
43
|
+
input_resources={},
|
|
44
|
+
output_resources={},
|
|
45
|
+
cooldown=5,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
altar = ConverterConfig(
|
|
49
|
+
type_id=8,
|
|
50
|
+
input_resources={},
|
|
51
|
+
output_resources={},
|
|
52
|
+
cooldown=5,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
lasery = ConverterConfig(
|
|
57
|
+
type_id=15,
|
|
58
|
+
input_resources={},
|
|
59
|
+
output_resources={},
|
|
60
|
+
cooldown=5,
|
|
61
|
+
)
|
|
62
|
+
armory = ConverterConfig(
|
|
63
|
+
type_id=16,
|
|
64
|
+
input_resources={},
|
|
65
|
+
output_resources={},
|
|
66
|
+
cooldown=5,
|
|
67
|
+
)
|
|
68
|
+
lab = ConverterConfig(
|
|
69
|
+
type_id=17,
|
|
70
|
+
input_resources={},
|
|
71
|
+
output_resources={},
|
|
72
|
+
cooldown=5,
|
|
73
|
+
)
|
|
74
|
+
factory = ConverterConfig(
|
|
75
|
+
type_id=18,
|
|
76
|
+
input_resources={},
|
|
77
|
+
output_resources={},
|
|
78
|
+
cooldown=5,
|
|
79
|
+
)
|
|
80
|
+
temple = ConverterConfig(
|
|
81
|
+
type_id=19,
|
|
82
|
+
input_resources={},
|
|
83
|
+
output_resources={},
|
|
84
|
+
cooldown=5,
|
|
85
|
+
)
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
import mettagrid.mapgen.scenes.random
|
|
4
|
+
|
|
5
|
+
# Local import moved to factory usage to avoid forbidden cross-package dependency at import time
|
|
6
|
+
from mettagrid.config.mettagrid_config import (
|
|
7
|
+
ActionConfig,
|
|
8
|
+
ActionsConfig,
|
|
9
|
+
AgentConfig,
|
|
10
|
+
AgentRewards,
|
|
11
|
+
AttackActionConfig,
|
|
12
|
+
GameConfig,
|
|
13
|
+
MettaGridConfig,
|
|
14
|
+
)
|
|
15
|
+
from mettagrid.map_builder.map_builder import MapBuilderConfig
|
|
16
|
+
from mettagrid.map_builder.perimeter_incontext import PerimeterInContextMapBuilder
|
|
17
|
+
from mettagrid.map_builder.random import RandomMapBuilder
|
|
18
|
+
from mettagrid.mapgen.mapgen import MapGen
|
|
19
|
+
|
|
20
|
+
from . import building, empty_converters
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def make_arena(
|
|
24
|
+
num_agents: int,
|
|
25
|
+
combat: bool = True,
|
|
26
|
+
map_builder: MapBuilderConfig | None = None, # custom map builder; must match num_agents
|
|
27
|
+
) -> MettaGridConfig:
|
|
28
|
+
objects = {
|
|
29
|
+
"wall": building.wall,
|
|
30
|
+
"altar": building.altar,
|
|
31
|
+
"mine_red": building.mine_red,
|
|
32
|
+
"generator_red": building.generator_red,
|
|
33
|
+
"lasery": building.lasery,
|
|
34
|
+
"armory": building.armory,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
actions = ActionsConfig(
|
|
38
|
+
noop=ActionConfig(),
|
|
39
|
+
move=ActionConfig(),
|
|
40
|
+
rotate=ActionConfig(enabled=False), # Disabled for unified movement system
|
|
41
|
+
put_items=ActionConfig(),
|
|
42
|
+
get_items=ActionConfig(),
|
|
43
|
+
attack=AttackActionConfig(
|
|
44
|
+
consumed_resources={
|
|
45
|
+
"laser": 1,
|
|
46
|
+
},
|
|
47
|
+
defense_resources={
|
|
48
|
+
"armor": 1,
|
|
49
|
+
},
|
|
50
|
+
),
|
|
51
|
+
swap=ActionConfig(enabled=False),
|
|
52
|
+
change_color=ActionConfig(enabled=False),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
if not combat:
|
|
56
|
+
actions.attack.consumed_resources = {"laser": 100}
|
|
57
|
+
|
|
58
|
+
if map_builder is None:
|
|
59
|
+
map_builder = MapGen.Config(
|
|
60
|
+
num_agents=num_agents,
|
|
61
|
+
width=25,
|
|
62
|
+
height=25,
|
|
63
|
+
border_width=6,
|
|
64
|
+
instance_border_width=0,
|
|
65
|
+
root=mettagrid.mapgen.scenes.random.Random.factory(
|
|
66
|
+
params=mettagrid.mapgen.scenes.random.Random.Params(
|
|
67
|
+
agents=6,
|
|
68
|
+
objects={
|
|
69
|
+
"wall": 10,
|
|
70
|
+
"altar": 5,
|
|
71
|
+
"mine_red": 10,
|
|
72
|
+
"generator_red": 5,
|
|
73
|
+
"lasery": 1,
|
|
74
|
+
"armory": 1,
|
|
75
|
+
},
|
|
76
|
+
),
|
|
77
|
+
),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return MettaGridConfig(
|
|
81
|
+
label="arena" + (".combat" if combat else ""),
|
|
82
|
+
game=GameConfig(
|
|
83
|
+
num_agents=num_agents,
|
|
84
|
+
actions=actions,
|
|
85
|
+
objects=objects,
|
|
86
|
+
agent=AgentConfig(
|
|
87
|
+
default_resource_limit=50,
|
|
88
|
+
resource_limits={
|
|
89
|
+
"heart": 255,
|
|
90
|
+
},
|
|
91
|
+
rewards=AgentRewards(
|
|
92
|
+
inventory={
|
|
93
|
+
"heart": 1,
|
|
94
|
+
},
|
|
95
|
+
),
|
|
96
|
+
),
|
|
97
|
+
map_builder=map_builder,
|
|
98
|
+
),
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def make_navigation(num_agents: int) -> MettaGridConfig:
|
|
103
|
+
altar = empty_converters.altar.model_copy()
|
|
104
|
+
altar.cooldown = 255 # Maximum cooldown
|
|
105
|
+
altar.initial_resource_count = 1
|
|
106
|
+
altar.max_conversions = 0
|
|
107
|
+
altar.input_resources = {}
|
|
108
|
+
altar.output_resources = {"heart": 1}
|
|
109
|
+
cfg = MettaGridConfig(
|
|
110
|
+
game=GameConfig(
|
|
111
|
+
num_agents=num_agents,
|
|
112
|
+
objects={
|
|
113
|
+
"altar": altar,
|
|
114
|
+
"wall": building.wall,
|
|
115
|
+
},
|
|
116
|
+
resource_names=["heart"],
|
|
117
|
+
actions=ActionsConfig(
|
|
118
|
+
move=ActionConfig(),
|
|
119
|
+
rotate=ActionConfig(enabled=False),
|
|
120
|
+
get_items=ActionConfig(),
|
|
121
|
+
),
|
|
122
|
+
agent=AgentConfig(
|
|
123
|
+
rewards=AgentRewards(
|
|
124
|
+
inventory={
|
|
125
|
+
"heart": 1,
|
|
126
|
+
},
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
# Always provide a concrete map builder config so tests can set width/height
|
|
130
|
+
map_builder=RandomMapBuilder.Config(agents=num_agents),
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
return cfg
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def make_navigation_sequence(num_agents: int) -> MettaGridConfig:
|
|
137
|
+
altar = building.altar.model_copy()
|
|
138
|
+
altar.input_resources = {"battery_red": 1}
|
|
139
|
+
altar.cooldown = 15
|
|
140
|
+
mine = building.mine_red.model_copy()
|
|
141
|
+
mine.cooldown = 15
|
|
142
|
+
generator = building.generator_red.model_copy()
|
|
143
|
+
generator.cooldown = 15
|
|
144
|
+
cfg = MettaGridConfig(
|
|
145
|
+
game=GameConfig(
|
|
146
|
+
num_agents=num_agents,
|
|
147
|
+
objects={
|
|
148
|
+
"altar": altar,
|
|
149
|
+
"wall": building.wall,
|
|
150
|
+
"mine_red": mine,
|
|
151
|
+
"generator_red": generator,
|
|
152
|
+
},
|
|
153
|
+
resource_names=["heart", "ore_red", "battery_red"],
|
|
154
|
+
actions=ActionsConfig(
|
|
155
|
+
move=ActionConfig(),
|
|
156
|
+
rotate=ActionConfig(enabled=False),
|
|
157
|
+
get_items=ActionConfig(),
|
|
158
|
+
),
|
|
159
|
+
agent=AgentConfig(
|
|
160
|
+
rewards=AgentRewards(
|
|
161
|
+
inventory={
|
|
162
|
+
"heart": 1,
|
|
163
|
+
"ore_red": 0.001,
|
|
164
|
+
"battery_red": 0.01,
|
|
165
|
+
},
|
|
166
|
+
),
|
|
167
|
+
default_resource_limit=1,
|
|
168
|
+
resource_limits={
|
|
169
|
+
"heart": 100,
|
|
170
|
+
},
|
|
171
|
+
),
|
|
172
|
+
# Always provide a concrete map builder config so tests can set width/height
|
|
173
|
+
map_builder=RandomMapBuilder.Config(agents=num_agents),
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
return cfg
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def make_in_context_chains(
|
|
180
|
+
num_agents: int,
|
|
181
|
+
max_steps,
|
|
182
|
+
game_objects: dict,
|
|
183
|
+
map_builder_objects: dict,
|
|
184
|
+
width: int = 6,
|
|
185
|
+
height: int = 6,
|
|
186
|
+
obstacle_type: Optional[str] = None,
|
|
187
|
+
density: Optional[str] = None,
|
|
188
|
+
) -> MettaGridConfig:
|
|
189
|
+
game_objects["wall"] = empty_converters.wall
|
|
190
|
+
cfg = MettaGridConfig(
|
|
191
|
+
game=GameConfig(
|
|
192
|
+
max_steps=max_steps,
|
|
193
|
+
num_agents=num_agents,
|
|
194
|
+
objects=game_objects,
|
|
195
|
+
map_builder=MapGen.Config(
|
|
196
|
+
instances=num_agents,
|
|
197
|
+
instance_map=PerimeterInContextMapBuilder.Config(
|
|
198
|
+
agents=1,
|
|
199
|
+
width=width,
|
|
200
|
+
height=height,
|
|
201
|
+
objects=map_builder_objects,
|
|
202
|
+
obstacle_type=obstacle_type,
|
|
203
|
+
density=density,
|
|
204
|
+
),
|
|
205
|
+
),
|
|
206
|
+
actions=ActionsConfig(
|
|
207
|
+
move=ActionConfig(),
|
|
208
|
+
rotate=ActionConfig(enabled=False), # Disabled for unified movement system
|
|
209
|
+
get_items=ActionConfig(),
|
|
210
|
+
put_items=ActionConfig(),
|
|
211
|
+
),
|
|
212
|
+
agent=AgentConfig(
|
|
213
|
+
rewards=AgentRewards(
|
|
214
|
+
inventory={
|
|
215
|
+
"heart": 1,
|
|
216
|
+
},
|
|
217
|
+
),
|
|
218
|
+
default_resource_limit=1,
|
|
219
|
+
resource_limits={"heart": 15},
|
|
220
|
+
),
|
|
221
|
+
)
|
|
222
|
+
)
|
|
223
|
+
return cfg
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def make_icl_with_numpy(
|
|
227
|
+
num_agents: int,
|
|
228
|
+
num_instances: int,
|
|
229
|
+
max_steps,
|
|
230
|
+
game_objects: dict,
|
|
231
|
+
instance_map: MapBuilderConfig,
|
|
232
|
+
) -> MettaGridConfig:
|
|
233
|
+
game_objects["wall"] = empty_converters.wall
|
|
234
|
+
cfg = MettaGridConfig(
|
|
235
|
+
game=GameConfig(
|
|
236
|
+
max_steps=max_steps,
|
|
237
|
+
num_agents=num_agents * num_instances,
|
|
238
|
+
objects=game_objects,
|
|
239
|
+
map_builder=MapGen.Config(
|
|
240
|
+
instances=num_instances,
|
|
241
|
+
instance_map=instance_map,
|
|
242
|
+
),
|
|
243
|
+
actions=ActionsConfig(
|
|
244
|
+
move=ActionConfig(),
|
|
245
|
+
rotate=ActionConfig(enabled=False), # Disabled for unified movement system
|
|
246
|
+
get_items=ActionConfig(),
|
|
247
|
+
put_items=ActionConfig(),
|
|
248
|
+
),
|
|
249
|
+
agent=AgentConfig(
|
|
250
|
+
rewards=AgentRewards(
|
|
251
|
+
inventory={
|
|
252
|
+
"heart": 1,
|
|
253
|
+
},
|
|
254
|
+
),
|
|
255
|
+
default_resource_limit=1,
|
|
256
|
+
resource_limits={"heart": 15},
|
|
257
|
+
),
|
|
258
|
+
)
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
return cfg
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from .config import Config
|
|
2
|
+
from .mettagrid_c_config import from_mettagrid_config
|
|
3
|
+
from .mettagrid_config import (
|
|
4
|
+
ActionConfig,
|
|
5
|
+
ActionsConfig,
|
|
6
|
+
AgentConfig,
|
|
7
|
+
AgentRewards,
|
|
8
|
+
AssemblerConfig,
|
|
9
|
+
AttackActionConfig,
|
|
10
|
+
ChangeGlyphActionConfig,
|
|
11
|
+
ConverterConfig,
|
|
12
|
+
GameConfig,
|
|
13
|
+
GlobalObsConfig,
|
|
14
|
+
MettaGridConfig,
|
|
15
|
+
RecipeConfig,
|
|
16
|
+
WallConfig,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"ActionConfig",
|
|
21
|
+
"ActionsConfig",
|
|
22
|
+
"AgentConfig",
|
|
23
|
+
"AgentRewards",
|
|
24
|
+
"AssemblerConfig",
|
|
25
|
+
"AttackActionConfig",
|
|
26
|
+
"ChangeGlyphActionConfig",
|
|
27
|
+
"Config",
|
|
28
|
+
"ConverterConfig",
|
|
29
|
+
"from_mettagrid_config",
|
|
30
|
+
"GameConfig",
|
|
31
|
+
"GlobalObsConfig",
|
|
32
|
+
"MettaGridConfig",
|
|
33
|
+
"RecipeConfig",
|
|
34
|
+
"WallConfig",
|
|
35
|
+
]
|