aboutsummaryrefslogtreecommitdiff
path: root/client/map
diff options
context:
space:
mode:
Diffstat (limited to 'client/map')
-rw-r--r--client/map/auto_setup/environment_setup.gd8
-rw-r--r--client/map/auto_setup/light_setup.gd4
-rw-r--r--client/map/auto_setup/sky_light_setup.gd2
-rw-r--r--client/map/effects/angry/angry.gd26
-rw-r--r--client/map/effects/angry/angry.gd.uid1
-rw-r--r--client/map/effects/angry/angry.tscn63
-rw-r--r--client/map/effects/angry/angry.webpbin0 -> 5022 bytes
-rw-r--r--client/map/effects/angry/angry.webp.import40
-rw-r--r--client/map/effects/effect.gd (renamed from client/map/tiles/bun_crate.gd)13
-rw-r--r--client/map/effects/effect.gd.uid1
-rw-r--r--client/map/effects/effect_factory.gd34
-rw-r--r--client/map/effects/effect_factory.gd.uid1
-rw-r--r--client/map/effects/points/points.gd30
-rw-r--r--client/map/effects/points/points.gd.uid1
-rw-r--r--client/map/effects/points/points.tscn90
-rw-r--r--client/map/effects/satisfied/satisfied.gd (renamed from client/map/tiles/book.gd)15
-rw-r--r--client/map/effects/satisfied/satisfied.gd.uid1
-rw-r--r--client/map/effects/satisfied/satisfied.tscn50
-rw-r--r--client/map/effects/satisfied/star.webpbin0 -> 5818 bytes
-rw-r--r--client/map/effects/satisfied/star.webp.import40
-rw-r--r--client/map/environment/environment.tscn12
-rw-r--r--client/map/environment/world_environment.tscn4
-rw-r--r--client/map/item_factory.gd20
-rw-r--r--client/map/items/basket.gd6
-rw-r--r--client/map/items/basket.tscn6
-rw-r--r--client/map/items/bun.gd2
-rw-r--r--client/map/items/bun.resbin17039 -> 27248 bytes
-rw-r--r--client/map/items/bun.tscn7
-rw-r--r--client/map/items/burned.gd2
-rw-r--r--client/map/items/burned.resbin6920 -> 12546 bytes
-rw-r--r--client/map/items/burned.tscn7
-rw-r--r--client/map/items/cheese.resbin10033 -> 16062 bytes
-rw-r--r--client/map/items/cheese.tscn7
-rw-r--r--client/map/items/cheese_bit.resbin0 -> 4783 bytes
-rw-r--r--client/map/items/coconut.resbin4211 -> 7411 bytes
-rw-r--r--client/map/items/coconut.tscn14
-rw-r--r--client/map/items/cooked_cheese_pizza.tscn33
-rw-r--r--client/map/items/cooked_noodles.resbin28921 -> 40060 bytes
-rw-r--r--client/map/items/cooked_noodles.tscn7
-rw-r--r--client/map/items/cooked_rice_fill.tscn10
-rw-r--r--client/map/items/cut.tscn4
-rw-r--r--client/map/items/cuttable.gd2
-rw-r--r--client/map/items/deep_fryer_basket.resbin14274 -> 35671 bytes
-rw-r--r--client/map/items/deep_frying.tscn4
-rw-r--r--client/map/items/dirt.resbin4343 -> 7436 bytes
-rw-r--r--client/map/items/dirt.tscn7
-rw-r--r--client/map/items/donut/donut-dough.resbin0 -> 25677 bytes
-rw-r--r--client/map/items/donut/donut-glaze.resbin0 -> 41617 bytes
-rw-r--r--client/map/items/donut/donut.tscn11
-rw-r--r--client/map/items/donut/glazed-donut.tscn14
-rw-r--r--client/map/items/dough.resbin11602 -> 17066 bytes
-rw-r--r--client/map/items/dough.tscn7
-rw-r--r--client/map/items/fish.resbin28432 -> 61492 bytes
-rw-r--r--client/map/items/fish.tscn7
-rw-r--r--client/map/items/flour.resbin2775 -> 6127 bytes
-rw-r--r--client/map/items/flour.tscn7
-rw-r--r--client/map/items/food_processor.gd25
-rw-r--r--client/map/items/food_processor.resbin23958 -> 60923 bytes
-rw-r--r--client/map/items/food_processor.tscn7
-rw-r--r--client/map/items/food_processor_fill.gd2
-rw-r--r--client/map/items/food_processor_fill.resbin3141 -> 7569 bytes
-rw-r--r--client/map/items/food_processor_fill.tscn5
-rw-r--r--client/map/items/french_fries.resbin12400 -> 21661 bytes
-rw-r--r--client/map/items/french_fries_basket.tscn7
-rw-r--r--client/map/items/french_fries_fill.resbin12383 -> 21633 bytes
-rw-r--r--client/map/items/french_fries_fill.tscn7
-rw-r--r--client/map/items/generic_item.gd2
-rw-r--r--client/map/items/glass.gd2
-rw-r--r--client/map/items/glass.resbin12738 -> 21809 bytes
-rw-r--r--client/map/items/glass.tscn7
-rw-r--r--client/map/items/glass_fill.gd2
-rw-r--r--client/map/items/glass_fill.resbin7770 -> 13735 bytes
-rw-r--r--client/map/items/glass_fill.tscn5
-rw-r--r--client/map/items/glass_items.gd2
-rw-r--r--client/map/items/icecream.gd2
-rw-r--r--client/map/items/icecream.resbin4046 -> 7163 bytes
-rw-r--r--client/map/items/icecream.tscn5
-rw-r--r--client/map/items/item.gd27
-rw-r--r--client/map/items/leek.resbin11736 -> 28503 bytes
-rw-r--r--client/map/items/leek.tscn7
-rw-r--r--client/map/items/lettuce.resbin17892 -> 26213 bytes
-rw-r--r--client/map/items/lettuce.tscn7
-rw-r--r--client/map/items/lettuce_crate.gd.uid1
-rw-r--r--client/map/items/mochi.gd2
-rw-r--r--client/map/items/mochi.resbin2674 -> 4337 bytes
-rw-r--r--client/map/items/mochi.tscn5
-rw-r--r--client/map/items/mushroom.resbin16149 -> 25398 bytes
-rw-r--r--client/map/items/mushroom.tscn9
-rw-r--r--client/map/items/mushroom_plate_fill.tscn17
-rw-r--r--client/map/items/nigiri.resbin23842 -> 35052 bytes
-rw-r--r--client/map/items/nigiri.tscn7
-rw-r--r--client/map/items/noodles.resbin28873 -> 40028 bytes
-rw-r--r--client/map/items/noodles.tscn7
-rw-r--r--client/map/items/noodles_cheese_fill.tscn25
-rw-r--r--client/map/items/noodles_tomato_sauce_fill.resbin0 -> 12528 bytes
-rw-r--r--client/map/items/noodles_tomato_sauce_fill.tscn9
-rw-r--r--client/map/items/pan.gd9
-rw-r--r--client/map/items/pan.resbin12348 -> 24164 bytes
-rw-r--r--client/map/items/pan.tscn7
-rw-r--r--client/map/items/patty.resbin7807 -> 14324 bytes
-rw-r--r--client/map/items/patty.tscn7
-rw-r--r--client/map/items/pizza.gd29
-rw-r--r--client/map/items/pizza.gd.uid1
-rw-r--r--client/map/items/pizza.resbin0 -> 20609 bytes
-rw-r--r--client/map/items/pizza/cheese_pizza_topping.tscn25
-rw-r--r--client/map/items/pizza/mushroom_pizza_topping.tscn17
-rw-r--r--client/map/items/pizza/mushroom_slice.resbin0 -> 12501 bytes
-rw-r--r--client/map/items/pizza/mushroom_slice.tscn9
-rw-r--r--client/map/items/plate.gd31
-rw-r--r--client/map/items/plate.resbin6227 -> 12240 bytes
-rw-r--r--client/map/items/plate.tscn7
-rw-r--r--client/map/items/plate_fill.gd2
-rw-r--r--client/map/items/plate_fill.resbin714 -> 1704 bytes
-rw-r--r--client/map/items/plate_fill.tscn5
-rw-r--r--client/map/items/pot.gd13
-rw-r--r--client/map/items/pot.resbin11500 -> 20878 bytes
-rw-r--r--client/map/items/pot.tscn7
-rw-r--r--client/map/items/pot_fill.gd2
-rw-r--r--client/map/items/pot_fill.resbin704 -> 1696 bytes
-rw-r--r--client/map/items/pot_fill.tscn5
-rw-r--r--client/map/items/pot_fill_transparent.gd22
-rw-r--r--client/map/items/pot_fill_transparent.gd.uid1
-rw-r--r--client/map/items/potato.resbin6490 -> 11495 bytes
-rw-r--r--client/map/items/potato.tscn7
-rw-r--r--client/map/items/processing.tscn5
-rw-r--r--client/map/items/raw_pizza.tscn11
-rw-r--r--client/map/items/rice.resbin32358 -> 62610 bytes
-rw-r--r--client/map/items/rice.tscn7
-rw-r--r--client/map/items/rice_content.resbin5424 -> 10535 bytes
-rw-r--r--client/map/items/rice_content.tscn5
-rw-r--r--client/map/items/rolled_dough.gd18
-rw-r--r--client/map/items/rolled_dough.resbin8737 -> 13152 bytes
-rw-r--r--client/map/items/rolled_dough.tscn7
-rw-r--r--client/map/items/seared_patty.resbin6314 -> 11879 bytes
-rw-r--r--client/map/items/seared_patty.tscn7
-rw-r--r--client/map/items/seared_steak.resbin13772 -> 20966 bytes
-rw-r--r--client/map/items/seared_steak.tscn7
-rw-r--r--client/map/items/sliced_bun.tscn10
-rw-r--r--client/map/items/sliced_bun_bottom.resbin6662 -> 12029 bytes
-rw-r--r--client/map/items/sliced_bun_bottom.tscn7
-rw-r--r--client/map/items/sliced_bun_top.resbin11225 -> 18422 bytes
-rw-r--r--client/map/items/sliced_bun_top.tscn7
-rw-r--r--client/map/items/sliced_cheese.resbin3862 -> 8337 bytes
-rw-r--r--client/map/items/sliced_cheese.tscn7
-rw-r--r--client/map/items/sliced_fish.resbin5903 -> 11142 bytes
-rw-r--r--client/map/items/sliced_fish.tscn7
-rw-r--r--client/map/items/sliced_leek/leek_ring.resbin0 -> 9074 bytes
-rw-r--r--client/map/items/sliced_leek/leek_ring.tscn9
-rw-r--r--client/map/items/sliced_leek/leek_ring_fill.tscn14
-rw-r--r--client/map/items/sliced_leek/sliced_leek.tscn21
-rw-r--r--client/map/items/sliced_leek/sliced_leek_1.resbin3739 -> 7722 bytes
-rw-r--r--client/map/items/sliced_leek/sliced_leek_2.resbin3513 -> 7454 bytes
-rw-r--r--client/map/items/sliced_leek/sliced_leek_3.resbin4136 -> 8334 bytes
-rw-r--r--client/map/items/sliced_leek/sliced_leek_4.resbin3397 -> 7454 bytes
-rw-r--r--client/map/items/sliced_leek/sliced_leek_5.resbin3411 -> 7454 bytes
-rw-r--r--client/map/items/sliced_leek/sliced_leek_6.resbin3479 -> 7466 bytes
-rw-r--r--client/map/items/sliced_lettuce.resbin5186 -> 8609 bytes
-rw-r--r--client/map/items/sliced_lettuce.tscn7
-rw-r--r--client/map/items/sliced_mushroom.resbin0 -> 44149 bytes
-rw-r--r--client/map/items/sliced_mushroom.tscn9
-rw-r--r--client/map/items/sliced_potato.tscn7
-rw-r--r--client/map/items/sliced_tomato.resbin8155 -> 18185 bytes
-rw-r--r--client/map/items/sliced_tomato.tscn7
-rw-r--r--client/map/items/sliced_tomato_sliced_lettuce_fill.tscn18
-rw-r--r--client/map/items/steak.resbin14012 -> 21408 bytes
-rw-r--r--client/map/items/steak.tscn7
-rw-r--r--client/map/items/steam.tscn4
-rw-r--r--client/map/items/strawberry.resbin11074 -> 27093 bytes
-rw-r--r--client/map/items/strawberry.tscn7
-rw-r--r--client/map/items/tomato.resbin18793 -> 34164 bytes
-rw-r--r--client/map/items/tomato.tscn7
-rw-r--r--client/map/items/unknown_item.gd2
-rw-r--r--client/map/items/unknown_item.tscn6
-rw-r--r--client/map/items/unknown_order.tscn6
-rw-r--r--client/map/kitchen_background.gd27
-rw-r--r--client/map/kitchen_background.tscn12
-rw-r--r--client/map/map.gd99
-rw-r--r--client/map/map.tscn6
-rw-r--r--client/map/particles/checkmark/checkmark.gd (renamed from client/map/tiles/leek_crate.gd)10
-rw-r--r--client/map/particles/checkmark/checkmark.gd.uid1
-rw-r--r--client/map/particles/checkmark/checkmark.svg1
-rw-r--r--client/map/particles/checkmark/checkmark.svg.import45
-rw-r--r--client/map/particles/checkmark/checkmark.tscn45
-rw-r--r--client/map/progress/progress.gd2
-rw-r--r--client/map/progress/progress.gdshader2
-rw-r--r--client/map/progress/progress.tscn4
-rw-r--r--client/map/tile_factory.gd127
-rw-r--r--client/map/tiles/active_interact_counter.gd61
-rw-r--r--client/map/tiles/active_interact_counter.gd.uid1
-rw-r--r--client/map/tiles/book.gd.uid1
-rw-r--r--client/map/tiles/book.resbin2847 -> 6798 bytes
-rw-r--r--client/map/tiles/book.tscn7
-rw-r--r--client/map/tiles/bun_crate.gd.uid1
-rw-r--r--client/map/tiles/bun_crate.tscn18
-rw-r--r--client/map/tiles/button/accept.svg4
-rw-r--r--client/map/tiles/button/accept.svg.import45
-rw-r--r--client/map/tiles/button/button.gd (renamed from client/map/items/lettuce_crate.gd)11
-rw-r--r--client/map/tiles/button/button.gd.uid1
-rw-r--r--client/map/tiles/button/button.tscn36
-rw-r--r--client/map/tiles/button/button_dynamic_accept.resbin0 -> 8442 bytes
-rw-r--r--client/map/tiles/button/button_dynamic_cancel.resbin0 -> 8439 bytes
-rw-r--r--client/map/tiles/button/button_model.gd28
-rw-r--r--client/map/tiles/button/button_model.gd.uid1
-rw-r--r--client/map/tiles/button/button_static.resbin0 -> 4629 bytes
-rw-r--r--client/map/tiles/button/cancel.svg4
-rw-r--r--client/map/tiles/button/cancel.svg.import45
-rw-r--r--client/map/tiles/button/map.svg4
-rw-r--r--client/map/tiles/button/map.svg.import45
-rw-r--r--client/map/tiles/button_base.gd (renamed from client/map/tiles/flour_crate.gd)11
-rw-r--r--client/map/tiles/button_base.gd.uid1
-rw-r--r--client/map/tiles/button_base.resbin0 -> 2646 bytes
-rw-r--r--client/map/tiles/button_base.tscn9
-rw-r--r--client/map/tiles/ceiling_lamp.gd.uid1
-rw-r--r--client/map/tiles/ceiling_lamp.resbin7229 -> 15054 bytes
-rw-r--r--client/map/tiles/ceiling_lamp.tscn9
-rw-r--r--client/map/tiles/chair.gd11
-rw-r--r--client/map/tiles/chair.resbin19899 -> 42642 bytes
-rw-r--r--client/map/tiles/chair.tscn7
-rw-r--r--client/map/tiles/chandelier.gd21
-rw-r--r--client/map/tiles/chandelier.gd.uid1
-rw-r--r--client/map/tiles/chandelier.resbin25437 -> 42121 bytes
-rw-r--r--client/map/tiles/chandelier.tscn9
-rw-r--r--client/map/tiles/cheese_crate.gd21
-rw-r--r--client/map/tiles/cheese_crate.gd.uid1
-rw-r--r--client/map/tiles/cheese_crate.tscn16
-rw-r--r--client/map/tiles/coconut_crate.gd21
-rw-r--r--client/map/tiles/coconut_crate.gd.uid1
-rw-r--r--client/map/tiles/coconut_crate.tscn12
-rw-r--r--client/map/tiles/conveyor.gd6
-rw-r--r--client/map/tiles/conveyor.resbin6513 -> 17742 bytes
-rw-r--r--client/map/tiles/conveyor.tscn13
-rw-r--r--client/map/tiles/conveyor_direction.gdshader2
-rw-r--r--client/map/tiles/conveyor_direction.tscn4
-rw-r--r--client/map/tiles/conveyor_model.gd4
-rw-r--r--client/map/tiles/counter.gd73
-rw-r--r--client/map/tiles/counter.gd.uid2
-rw-r--r--client/map/tiles/counter_base.gd.uid1
-rw-r--r--client/map/tiles/counter_like.gd80
-rw-r--r--client/map/tiles/counter_like.gd.uid1
-rw-r--r--client/map/tiles/counter_outer_corner.resbin2492 -> 6610 bytes
-rw-r--r--client/map/tiles/counter_outer_corner.tscn7
-rw-r--r--client/map/tiles/counter_straight.resbin6697 -> 17247 bytes
-rw-r--r--client/map/tiles/counter_straight.tscn7
-rw-r--r--client/map/tiles/counter_straight_backsplash.resbin7249 -> 18133 bytes
-rw-r--r--client/map/tiles/counter_straight_backsplash.tscn7
-rw-r--r--client/map/tiles/counter_window.gd4
-rw-r--r--client/map/tiles/counter_window.resbin5279 -> 14020 bytes
-rw-r--r--client/map/tiles/counter_window.tscn7
-rw-r--r--client/map/tiles/counter_window_conveyor.gd (renamed from client/map/tiles/counter_base.gd)27
-rw-r--r--client/map/tiles/counter_window_conveyor.gd.uid1
-rw-r--r--client/map/tiles/counter_window_conveyor.resbin0 -> 17920 bytes
-rw-r--r--client/map/tiles/counter_window_conveyor.tscn31
-rw-r--r--client/map/tiles/crate.gd53
-rw-r--r--client/map/tiles/crate.resbin4840 -> 13626 bytes
-rw-r--r--client/map/tiles/crate.tscn7
-rw-r--r--client/map/tiles/cutting_board.gd41
-rw-r--r--client/map/tiles/cutting_board.resbin2421 -> 6421 bytes
-rw-r--r--client/map/tiles/cutting_board.tscn17
-rw-r--r--client/map/tiles/deep_fryer.gd10
-rw-r--r--client/map/tiles/deep_fryer.gd.uid2
-rw-r--r--client/map/tiles/deep_fryer.tscn11
-rw-r--r--client/map/tiles/deep_fryer_base.resbin8029 -> 18452 bytes
-rw-r--r--client/map/tiles/deep_fryer_fill.resbin1566 -> 4146 bytes
-rw-r--r--client/map/tiles/door.gd4
-rw-r--r--client/map/tiles/door.resbin3444 -> 8880 bytes
-rw-r--r--client/map/tiles/door.tscn7
-rw-r--r--client/map/tiles/exterior_tree.gd46
-rw-r--r--client/map/tiles/fence.gd13
-rw-r--r--client/map/tiles/fence_corner.resbin4533 -> 12328 bytes
-rw-r--r--client/map/tiles/fence_corner.tscn7
-rw-r--r--client/map/tiles/fence_end.resbin0 -> 11803 bytes
-rw-r--r--client/map/tiles/fence_end.tscn9
-rw-r--r--client/map/tiles/fence_straight.resbin4243 -> 11618 bytes
-rw-r--r--client/map/tiles/fence_straight.tscn7
-rw-r--r--client/map/tiles/fence_t.resbin4858 -> 14332 bytes
-rw-r--r--client/map/tiles/fence_t.tscn7
-rw-r--r--client/map/tiles/fish_crate.gd21
-rw-r--r--client/map/tiles/fish_crate.gd.uid1
-rw-r--r--client/map/tiles/fish_crate.tscn14
-rw-r--r--client/map/tiles/floor.gd2
-rw-r--r--client/map/tiles/floor.gdshader2
-rw-r--r--client/map/tiles/floor.resbin2184 -> 7086 bytes
-rw-r--r--client/map/tiles/floor.tscn7
-rw-r--r--client/map/tiles/floor_like.gd2
-rw-r--r--client/map/tiles/floor_material.tres2
-rw-r--r--client/map/tiles/floor_mesher.gd2
-rw-r--r--client/map/tiles/flour_crate.gd.uid1
-rw-r--r--client/map/tiles/flour_crate.tscn16
-rw-r--r--client/map/tiles/freezer.gd4
-rw-r--r--client/map/tiles/freezer.tscn22
-rw-r--r--client/map/tiles/freezer_base.resbin8305 -> 22044 bytes
-rw-r--r--client/map/tiles/freezer_door.resbin9112 -> 18516 bytes
-rw-r--r--client/map/tiles/freezer_model.gd2
-rw-r--r--client/map/tiles/generic_tile.gd14
-rw-r--r--client/map/tiles/generic_tile.gd.uid2
-rw-r--r--client/map/tiles/grass.gd9
-rw-r--r--client/map/tiles/grass.resbin2140 -> 6951 bytes
-rw-r--r--client/map/tiles/grass.tscn7
-rw-r--r--client/map/tiles/grass_mesher.gd17
-rw-r--r--client/map/tiles/grass_side.tres2
-rw-r--r--client/map/tiles/house/balcony.resbin13786 -> 45698 bytes
-rw-r--r--client/map/tiles/house/balcony.tscn7
-rw-r--r--client/map/tiles/house/chimney.resbin3317 -> 9851 bytes
-rw-r--r--client/map/tiles/house/chimney.tscn7
-rw-r--r--client/map/tiles/house/corner.resbin11505 -> 36553 bytes
-rw-r--r--client/map/tiles/house/corner.tscn7
-rw-r--r--client/map/tiles/house/door.resbin14207 -> 42932 bytes
-rw-r--r--client/map/tiles/house/door.tscn7
-rw-r--r--client/map/tiles/house/oriel.resbin12695 -> 40680 bytes
-rw-r--r--client/map/tiles/house/oriel.tscn7
-rw-r--r--client/map/tiles/house/roof.resbin1378 -> 4041 bytes
-rw-r--r--client/map/tiles/house/roof.tscn7
-rw-r--r--client/map/tiles/house/side.resbin1716 -> 4920 bytes
-rw-r--r--client/map/tiles/house/side.tscn7
-rw-r--r--client/map/tiles/house/wall.resbin11677 -> 37023 bytes
-rw-r--r--client/map/tiles/house/wall.tscn7
-rw-r--r--client/map/tiles/house_balcony.gd2
-rw-r--r--client/map/tiles/house_door.gd2
-rw-r--r--client/map/tiles/house_oriel.gd2
-rw-r--r--client/map/tiles/house_roof.gd2
-rw-r--r--client/map/tiles/house_roof_chimney.gd2
-rw-r--r--client/map/tiles/house_side.gd2
-rw-r--r--client/map/tiles/house_tile.gd2
-rw-r--r--client/map/tiles/house_wall.gd2
-rw-r--r--client/map/tiles/item_portal.gd10
-rw-r--r--client/map/tiles/knife.resbin5546 -> 10298 bytes
-rw-r--r--client/map/tiles/knife.tscn7
-rw-r--r--client/map/tiles/lamp.gd2
-rw-r--r--client/map/tiles/lamp.resbin72760 -> 218504 bytes
-rw-r--r--client/map/tiles/lamp.tscn8
-rw-r--r--client/map/tiles/leek_crate.gd.uid1
-rw-r--r--client/map/tiles/leek_crate.tscn16
-rw-r--r--client/map/tiles/lettuce_crate.tscn12
-rw-r--r--client/map/tiles/light_tile.gd2
-rw-r--r--client/map/tiles/map_selector.resbin0 -> 2788 bytes
-rw-r--r--client/map/tiles/map_selector.tscn9
-rw-r--r--client/map/tiles/mushroom_crate.gd21
-rw-r--r--client/map/tiles/mushroom_crate.gd.uid1
-rw-r--r--client/map/tiles/mushroom_crate.tscn14
-rw-r--r--client/map/tiles/noodles_crate.tscn30
-rw-r--r--client/map/tiles/oven.gd4
-rw-r--r--client/map/tiles/oven.tscn18
-rw-r--r--client/map/tiles/oven_base.resbin12342 -> 36433 bytes
-rw-r--r--client/map/tiles/oven_door.resbin3424 -> 9565 bytes
-rw-r--r--client/map/tiles/oven_model.gd2
-rw-r--r--client/map/tiles/path.gd2
-rw-r--r--client/map/tiles/path.resbin1907 -> 5291 bytes
-rw-r--r--client/map/tiles/path.tscn7
-rw-r--r--client/map/tiles/player_portal.gd14
-rw-r--r--client/map/tiles/portal.gd23
-rw-r--r--client/map/tiles/portal.gdshader33
-rw-r--r--client/map/tiles/portal.tscn13
-rw-r--r--client/map/tiles/potato_crate.gd21
-rw-r--r--client/map/tiles/potato_crate.gd.uid1
-rw-r--r--client/map/tiles/potato_crate.tscn20
-rw-r--r--client/map/tiles/rice_crate.gd21
-rw-r--r--client/map/tiles/rice_crate.gd.uid1
-rw-r--r--client/map/tiles/rice_crate.tscn6
-rw-r--r--client/map/tiles/rolling_board.gd42
-rw-r--r--client/map/tiles/rolling_board.tscn9
-rw-r--r--client/map/tiles/rolling_pin.resbin28783 -> 48508 bytes
-rw-r--r--client/map/tiles/rolling_pin.tscn7
-rw-r--r--client/map/tiles/screen/screen.gd24
-rw-r--r--client/map/tiles/screen/screen.gd.uid1
-rw-r--r--client/map/tiles/screen/screen.res.deprenbin0 -> 7450 bytes
-rw-r--r--client/map/tiles/screen/screen.tscn36
-rw-r--r--client/map/tiles/screen/screen_base.resbin0 -> 14767 bytes
-rw-r--r--client/map/tiles/screen/screen_display.resbin0 -> 5761 bytes
-rw-r--r--client/map/tiles/screen/screen_model.gd25
-rw-r--r--client/map/tiles/screen/screen_model.gd.uid1
-rw-r--r--client/map/tiles/sink.gd4
-rw-r--r--client/map/tiles/sink.resbin24079 -> 49179 bytes
-rw-r--r--client/map/tiles/sink.tscn7
-rw-r--r--client/map/tiles/sink_backsplash.resbin24526 -> 50283 bytes
-rw-r--r--client/map/tiles/sink_backsplash.tscn7
-rw-r--r--client/map/tiles/sink_particles.gd2
-rw-r--r--client/map/tiles/sink_particles.tscn8
-rw-r--r--client/map/tiles/steak_crate.gd21
-rw-r--r--client/map/tiles/steak_crate.gd.uid1
-rw-r--r--client/map/tiles/steak_crate.resbin50290 -> 89808 bytes
-rw-r--r--client/map/tiles/steak_crate.tscn7
-rw-r--r--client/map/tiles/stove.gd6
-rw-r--r--client/map/tiles/stove.resbin25618 -> 58179 bytes
-rw-r--r--client/map/tiles/stove.tscn7
-rw-r--r--client/map/tiles/strawberry_crate.gd21
-rw-r--r--client/map/tiles/strawberry_crate.gd.uid1
-rw-r--r--client/map/tiles/strawberry_crate.tscn14
-rw-r--r--client/map/tiles/street.gd2
-rw-r--r--client/map/tiles/street.resbin1914 -> 5293 bytes
-rw-r--r--client/map/tiles/street.tscn7
-rw-r--r--client/map/tiles/table.gd6
-rw-r--r--client/map/tiles/table.resbin10832 -> 24238 bytes
-rw-r--r--client/map/tiles/table.tscn7
-rw-r--r--client/map/tiles/tile.gd28
-rw-r--r--client/map/tiles/tomato_crate.gd21
-rw-r--r--client/map/tiles/tomato_crate.gd.uid1
-rw-r--r--client/map/tiles/tomato_crate.resbin86505 -> 142716 bytes
-rw-r--r--client/map/tiles/tomato_crate.tscn7
-rw-r--r--client/map/tiles/trash.gd4
-rw-r--r--client/map/tiles/trash.resbin4874 -> 13650 bytes
-rw-r--r--client/map/tiles/trash.tscn7
-rw-r--r--client/map/tiles/tree/bark.tres2
-rw-r--r--client/map/tiles/tree/leaves.tres6
-rw-r--r--client/map/tiles/tree/leaves_1_hq.resbin181369 -> 224911 bytes
-rw-r--r--client/map/tiles/tree/leaves_1_lq.resbin20745 -> 35100 bytes
-rw-r--r--client/map/tiles/tree/leaves_2_hq.resbin133320 -> 165631 bytes
-rw-r--r--client/map/tiles/tree/leaves_2_lq.resbin29092 -> 49148 bytes
-rw-r--r--client/map/tiles/tree/leaves_3_hq.resbin105688 -> 131311 bytes
-rw-r--r--client/map/tiles/tree/leaves_3_lq.resbin28661 -> 48836 bytes
-rw-r--r--client/map/tiles/tree/leaves_4_hq.resbin136841 -> 169831 bytes
-rw-r--r--client/map/tiles/tree/leaves_4_lq.resbin16915 -> 28708 bytes
-rw-r--r--client/map/tiles/tree/leaves_5_hq.resbin40691 -> 50551 bytes
-rw-r--r--client/map/tiles/tree/leaves_5_lq.resbin28905 -> 48764 bytes
-rw-r--r--client/map/tiles/tree/leaves_lq.resbin1034 -> 2933 bytes
-rw-r--r--client/map/tiles/tree/trunk_1.resbin152953 -> 195642 bytes
-rw-r--r--client/map/tiles/tree/trunk_2.resbin169549 -> 216026 bytes
-rw-r--r--client/map/tiles/tree/trunk_3.resbin155114 -> 198778 bytes
-rw-r--r--client/map/tiles/tree/trunk_4.resbin110556 -> 141278 bytes
-rw-r--r--client/map/tiles/tree/trunk_5.resbin43147 -> 56650 bytes
-rw-r--r--client/map/tiles/unknown_tile.gd (renamed from client/map/tiles/ceiling_lamp.gd)12
-rw-r--r--client/map/tiles/unknown_tile.gd.uid1
-rw-r--r--client/map/tiles/wall.gd2
-rw-r--r--client/map/tiles/wall_corner.resbin2936 -> 8252 bytes
-rw-r--r--client/map/tiles/wall_corner.tscn7
-rw-r--r--client/map/tiles/wall_cross.resbin3181 -> 9658 bytes
-rw-r--r--client/map/tiles/wall_cross.tscn7
-rw-r--r--client/map/tiles/wall_straight.resbin2427 -> 6512 bytes
-rw-r--r--client/map/tiles/wall_straight.tscn7
-rw-r--r--client/map/tiles/wall_t.resbin3046 -> 8866 bytes
-rw-r--r--client/map/tiles/wall_t.tscn7
-rw-r--r--client/map/tiles/wall_tile.gd16
-rw-r--r--client/map/tiles/window.gd4
-rw-r--r--client/map/tiles/window.resbin5758 -> 14816 bytes
-rw-r--r--client/map/tiles/window.tscn7
434 files changed, 2363 insertions, 1225 deletions
diff --git a/client/map/auto_setup/environment_setup.gd b/client/map/auto_setup/environment_setup.gd
index 7b6c5c8a..25d75b35 100644
--- a/client/map/auto_setup/environment_setup.gd
+++ b/client/map/auto_setup/environment_setup.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -22,9 +22,9 @@ func set_sky(sky_name: String):
environment.sky.sky_material = load("res://map/environment/presets/%s_sky.tres" % sky_name)
func _ready():
- Settings.hook_changed_init("graphics.ssao", "main", func (x): environment.ssao_enabled = x)
- Settings.hook_changed_init("graphics.gi", "main", func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi)
- Settings.hook_changed_init("graphics.glow", "main", func (x): environment.glow_enabled = x)
+ Settings.hook_changed_init("graphics.ssao", self, func (x): environment.ssao_enabled = x)
+ Settings.hook_changed_init("graphics.gi", self, func (x): environment.sdfgi_enabled = x == "sdfgi" and allow_sdfgi)
+ Settings.hook_changed_init("graphics.glow", self, func (x): environment.glow_enabled = x)
if !Global.on_vulkan():
environment.environment.tonemap_exposure = 0.5
diff --git a/client/map/auto_setup/light_setup.gd b/client/map/auto_setup/light_setup.gd
index 0d71f54b..3056998e 100644
--- a/client/map/auto_setup/light_setup.gd
+++ b/client/map/auto_setup/light_setup.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -20,7 +20,7 @@ class_name LightSetup
var shadows_enabled: bool
func _ready():
- Settings.hook_changed_init("graphics.shadows", "main", apply_settings)
+ Settings.hook_changed_init("graphics.shadows", self, apply_settings)
func set_visible_(val: bool):
if completely_disable_light_if_shadows_disabled and not shadows_enabled:
diff --git a/client/map/auto_setup/sky_light_setup.gd b/client/map/auto_setup/sky_light_setup.gd
index cb59fbf1..f888f79d 100644
--- a/client/map/auto_setup/sky_light_setup.gd
+++ b/client/map/auto_setup/sky_light_setup.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/effects/angry/angry.gd b/client/map/effects/angry/angry.gd
new file mode 100644
index 00000000..151507cd
--- /dev/null
+++ b/client/map/effects/angry/angry.gd
@@ -0,0 +1,26 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+extends Effect
+
+@onready var failure = $Failure
+@onready var angry_grunt: PlayRandom = $AngryGrunt
+@onready var particles = $Particles
+
+func _ready() -> void:
+ delete_timer(5)
+ particles.emitting = true
+ angry_grunt.play_random()
+ failure.play()
diff --git a/client/map/effects/angry/angry.gd.uid b/client/map/effects/angry/angry.gd.uid
new file mode 100644
index 00000000..642ef1f2
--- /dev/null
+++ b/client/map/effects/angry/angry.gd.uid
@@ -0,0 +1 @@
+uid://dxiq14ilf5bk
diff --git a/client/map/effects/angry/angry.tscn b/client/map/effects/angry/angry.tscn
new file mode 100644
index 00000000..94c6473d
--- /dev/null
+++ b/client/map/effects/angry/angry.tscn
@@ -0,0 +1,63 @@
+[gd_scene format=3 uid="uid://cvty1rwt52anq"]
+
+[ext_resource type="Texture2D" uid="uid://unjbxplj845n" path="res://map/effects/angry/angry.webp" id="1_5op6v"]
+[ext_resource type="Script" uid="uid://dxiq14ilf5bk" path="res://map/effects/angry/angry.gd" id="1_m21dl"]
+[ext_resource type="AudioStream" uid="uid://cv4isy6po6pqd" path="res://gui/resources/sounds/failure.ogg" id="2_vlpct"]
+[ext_resource type="Script" uid="uid://n4jwod1jfuiv" path="res://audio/play_random.gd" id="3_o0kjt"]
+[ext_resource type="AudioStream" uid="uid://c3gatgrsb0npf" path="res://player/sounds/angry1.ogg" id="4_wfdot"]
+[ext_resource type="AudioStream" uid="uid://cty282m6ckt62" path="res://player/sounds/angry2.ogg" id="5_ym83o"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ysmnk"]
+transparency = 1
+no_depth_test = true
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_texture = ExtResource("1_5op6v")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_5nim7"]
+material = SubResource("StandardMaterial3D_ysmnk")
+
+[sub_resource type="Curve" id="Curve_0rju1"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.51927, 1), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_lmymu"]
+offsets = PackedFloat32Array(0, 0.711828, 1)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[node name="Angry" type="Node3D" unique_id=1448163105]
+script = ExtResource("1_m21dl")
+
+[node name="Particles" type="CPUParticles3D" parent="." unique_id=691382738]
+emitting = false
+amount = 5
+lifetime = 2.0
+one_shot = true
+explosiveness = 1.0
+mesh = SubResource("QuadMesh_5nim7")
+direction = Vector3(0, 1, 0)
+spread = 30.0
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 1.0
+initial_velocity_max = 1.5
+scale_amount_curve = SubResource("Curve_0rju1")
+color_ramp = SubResource("Gradient_lmymu")
+
+[node name="Failure" type="AudioStreamPlayer" parent="." unique_id=1310258100]
+stream = ExtResource("2_vlpct")
+volume_db = -8.0
+
+[node name="AngryGrunt" type="Node3D" parent="." unique_id=681036661]
+script = ExtResource("3_o0kjt")
+volume_db = -8.0
+
+[node name="Angry1" type="AudioStreamPlayer3D" parent="AngryGrunt" unique_id=278427723]
+stream = ExtResource("4_wfdot")
+
+[node name="Angry2" type="AudioStreamPlayer3D" parent="AngryGrunt" unique_id=1539145236]
+stream = ExtResource("5_ym83o")
diff --git a/client/map/effects/angry/angry.webp b/client/map/effects/angry/angry.webp
new file mode 100644
index 00000000..866ba92c
--- /dev/null
+++ b/client/map/effects/angry/angry.webp
Binary files differ
diff --git a/client/map/effects/angry/angry.webp.import b/client/map/effects/angry/angry.webp.import
new file mode 100644
index 00000000..eac70392
--- /dev/null
+++ b/client/map/effects/angry/angry.webp.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://unjbxplj845n"
+path="res://.godot/imported/angry.webp-fd51236e60c2d6e246b04296d67f5f19.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://map/effects/angry/angry.webp"
+dest_files=["res://.godot/imported/angry.webp-fd51236e60c2d6e246b04296d67f5f19.ctex"]
+
+[params]
+
+compress/mode=1
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/map/tiles/bun_crate.gd b/client/map/effects/effect.gd
index 10a69aa8..a7b08bae 100644
--- a/client/map/tiles/bun_crate.gd
+++ b/client/map/effects/effect.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,10 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name BunCrate
-extends Crate
+class_name Effect
+extends Node3D
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/bun_crate.tscn").instantiate())
+var data: Variant
+func delete_timer(delay: float):
+ await get_tree().create_timer(delay).timeout
+ queue_free()
diff --git a/client/map/effects/effect.gd.uid b/client/map/effects/effect.gd.uid
new file mode 100644
index 00000000..b9ddd1ee
--- /dev/null
+++ b/client/map/effects/effect.gd.uid
@@ -0,0 +1 @@
+uid://ecsoi03822i5
diff --git a/client/map/effects/effect_factory.gd b/client/map/effects/effect_factory.gd
new file mode 100644
index 00000000..246aca1f
--- /dev/null
+++ b/client/map/effects/effect_factory.gd
@@ -0,0 +1,34 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name EffectFactory
+extends Object
+
+const ANGRY = preload("res://map/effects/angry/angry.tscn")
+const SATISFIED = preload("res://map/effects/satisfied/satisfied.tscn")
+const POINTS = preload("res://map/effects/points/points.tscn")
+
+static func create_effect(p: Dictionary):
+ match p["effect"]:
+ "angry": return ANGRY.instantiate()
+ "satisfied": return SATISFIED.instantiate()
+ "points":
+ var points = POINTS.instantiate()
+ points.amount = p["amount"]
+ return points
+ _: push_error("unknown effect " + p["effect"])
+
+static func play_effect(target: Node3D, p: Dictionary):
+ target.add_child(create_effect(p))
diff --git a/client/map/effects/effect_factory.gd.uid b/client/map/effects/effect_factory.gd.uid
new file mode 100644
index 00000000..8a154ad0
--- /dev/null
+++ b/client/map/effects/effect_factory.gd.uid
@@ -0,0 +1 @@
+uid://w2l71qjjoshv
diff --git a/client/map/effects/points/points.gd b/client/map/effects/points/points.gd
new file mode 100644
index 00000000..35894902
--- /dev/null
+++ b/client/map/effects/points/points.gd
@@ -0,0 +1,30 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+extends Effect
+
+var amount: int
+
+@onready var points: CPUParticles3D = $Points
+@onready var amount_label: Label = $SubViewport/Control/AmountLabel
+
+func _ready():
+ delete_timer(5)
+ var num_string: String = str(amount)
+ if amount >= 0:
+ num_string = "+" + num_string
+ points.color = Color(.1,.6,.1) if amount >= 0 else Color(.6,.1,.1)
+ amount_label.text = num_string
+ points.emitting = true
diff --git a/client/map/effects/points/points.gd.uid b/client/map/effects/points/points.gd.uid
new file mode 100644
index 00000000..2bf5b594
--- /dev/null
+++ b/client/map/effects/points/points.gd.uid
@@ -0,0 +1 @@
+uid://528xphnsg62u
diff --git a/client/map/effects/points/points.tscn b/client/map/effects/points/points.tscn
new file mode 100644
index 00000000..57e11ddf
--- /dev/null
+++ b/client/map/effects/points/points.tscn
@@ -0,0 +1,90 @@
+[gd_scene format=3 uid="uid://x00adyx4umft"]
+
+[ext_resource type="Script" uid="uid://528xphnsg62u" path="res://map/effects/points/points.gd" id="1_wveft"]
+[ext_resource type="AudioStream" uid="uid://camy77x26mmpv" path="res://gui/resources/sounds/success.ogg" id="2_ixmsm"]
+[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://gui/resources/fonts/font-sansita-swashed.woff2" id="3_op1cb"]
+
+[sub_resource type="FontVariation" id="FontVariation_u8wnh"]
+base_font = ExtResource("3_op1cb")
+variation_opentype = {
+2003265652: 600
+}
+
+[sub_resource type="ViewportTexture" id="ViewportTexture_7hygc"]
+viewport_path = NodePath("SubViewport")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uepl5"]
+resource_local_to_scene = true
+render_priority = 1
+transparency = 1
+no_depth_test = true
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_texture = SubResource("ViewportTexture_7hygc")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_u8wnh"]
+resource_local_to_scene = true
+material = SubResource("StandardMaterial3D_uepl5")
+
+[sub_resource type="Curve" id="Curve_0rju1"]
+_data = [Vector2(0, 0), 0.0, 5.0, 0, 0, Vector2(0.49840245, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -5.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="Gradient" id="Gradient_uepl5"]
+offsets = PackedFloat32Array(0, 0.26672226, 0.4904026, 1)
+colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[node name="Points" type="Node3D" unique_id=1800089616]
+script = ExtResource("1_wveft")
+
+[node name="Success" type="AudioStreamPlayer" parent="." unique_id=710129954]
+stream = ExtResource("2_ixmsm")
+
+[node name="SubViewport" type="SubViewport" parent="." unique_id=2117836549]
+transparent_bg = true
+size = Vector2i(256, 256)
+
+[node name="Control" type="Control" parent="SubViewport" unique_id=1691084866]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="AmountLabel" type="Label" parent="SubViewport/Control" unique_id=358131106]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_outline_color = Color(0.1254902, 0.1254902, 0.1254902, 1)
+theme_override_constants/outline_size = 48
+theme_override_fonts/font = SubResource("FontVariation_u8wnh")
+theme_override_font_sizes/font_size = 165
+text = "+5"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="Points" type="CPUParticles3D" parent="." unique_id=1697923795]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
+emitting = false
+amount = 1
+one_shot = true
+explosiveness = 1.0
+mesh = SubResource("QuadMesh_u8wnh")
+direction = Vector3(0, -1, 0)
+spread = 0.0
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 0.01
+initial_velocity_max = 0.01
+scale_amount_min = 0.65
+scale_amount_max = 0.65
+scale_amount_curve = SubResource("Curve_0rju1")
+color_ramp = SubResource("Gradient_uepl5")
diff --git a/client/map/tiles/book.gd b/client/map/effects/satisfied/satisfied.gd
index 6a48752a..67cbb4d2 100644
--- a/client/map/tiles/book.gd
+++ b/client/map/effects/satisfied/satisfied.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name Book
-extends CounterBase
+extends Effect
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/book.tscn").instantiate())
+@onready var success = $Success
+@onready var stars = $Stars
+
+func _ready():
+ delete_timer(5)
+ stars.emitting = true
+ success.play()
diff --git a/client/map/effects/satisfied/satisfied.gd.uid b/client/map/effects/satisfied/satisfied.gd.uid
new file mode 100644
index 00000000..904996ad
--- /dev/null
+++ b/client/map/effects/satisfied/satisfied.gd.uid
@@ -0,0 +1 @@
+uid://dsepgasa5ki43
diff --git a/client/map/effects/satisfied/satisfied.tscn b/client/map/effects/satisfied/satisfied.tscn
new file mode 100644
index 00000000..bbd337c4
--- /dev/null
+++ b/client/map/effects/satisfied/satisfied.tscn
@@ -0,0 +1,50 @@
+[gd_scene format=3 uid="uid://yaed1vnhd0aa"]
+
+[ext_resource type="AudioStream" uid="uid://camy77x26mmpv" path="res://gui/resources/sounds/success.ogg" id="1_rxp1p"]
+[ext_resource type="Script" uid="uid://dsepgasa5ki43" path="res://map/effects/satisfied/satisfied.gd" id="1_sujye"]
+[ext_resource type="Texture2D" uid="uid://b10goh4dsa3b0" path="res://map/effects/satisfied/star.webp" id="1_v8q3r"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d8uy0"]
+transparency = 1
+no_depth_test = true
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_texture = ExtResource("1_v8q3r")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_d0lru"]
+material = SubResource("StandardMaterial3D_d8uy0")
+
+[sub_resource type="Curve" id="Curve_0rju1"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.51927, 1), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_lmymu"]
+offsets = PackedFloat32Array(0, 0.711828, 1)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[node name="Satisfied" type="Node3D" unique_id=1800089616]
+script = ExtResource("1_sujye")
+
+[node name="Success" type="AudioStreamPlayer" parent="." unique_id=710129954]
+stream = ExtResource("1_rxp1p")
+
+[node name="Stars" type="CPUParticles3D" parent="." unique_id=1697923795]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
+emitting = false
+amount = 5
+lifetime = 2.0
+one_shot = true
+explosiveness = 1.0
+mesh = SubResource("QuadMesh_d0lru")
+direction = Vector3(0, 1, 0)
+spread = 30.0
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 1.0
+initial_velocity_max = 1.5
+scale_amount_curve = SubResource("Curve_0rju1")
+color_ramp = SubResource("Gradient_lmymu")
diff --git a/client/map/effects/satisfied/star.webp b/client/map/effects/satisfied/star.webp
new file mode 100644
index 00000000..c1d2e8ff
--- /dev/null
+++ b/client/map/effects/satisfied/star.webp
Binary files differ
diff --git a/client/map/effects/satisfied/star.webp.import b/client/map/effects/satisfied/star.webp.import
new file mode 100644
index 00000000..2ac435b7
--- /dev/null
+++ b/client/map/effects/satisfied/star.webp.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b10goh4dsa3b0"
+path="res://.godot/imported/star.webp-74beadf67879cd7f7736819dd8ef7e05.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://map/effects/satisfied/star.webp"
+dest_files=["res://.godot/imported/star.webp-74beadf67879cd7f7736819dd8ef7e05.ctex"]
+
+[params]
+
+compress/mode=1
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
diff --git a/client/map/environment/environment.tscn b/client/map/environment/environment.tscn
index fe8bdcbc..aaa4ed55 100644
--- a/client/map/environment/environment.tscn
+++ b/client/map/environment/environment.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=12 format=3 uid="uid://nroo08m5og0"]
+[gd_scene format=3 uid="uid://nroo08m5og0"]
[ext_resource type="Script" uid="uid://drv5el01y7fr" path="res://map/environment/environment.gd" id="1_qy481"]
[ext_resource type="PackedScene" uid="uid://cb4ic3ssk4r8r" path="res://map/environment/world_environment.tscn" id="2_68o16"]
@@ -58,25 +58,25 @@ material = SubResource("StandardMaterial3D_ig8qu")
radius = 0.03
height = 0.06
-[node name="Environment" type="Node3D"]
+[node name="Environment" type="Node3D" unique_id=857364835]
script = ExtResource("1_qy481")
-[node name="Rain" type="GPUParticles3D" parent="."]
+[node name="Rain" type="GPUParticles3D" parent="." unique_id=1938136108]
emitting = false
amount = 500
process_material = SubResource("ParticleProcessMaterial_fyrr8")
draw_pass_1 = SubResource("CapsuleMesh_6kss1")
-[node name="Wind" type="GPUParticles3D" parent="."]
+[node name="Wind" type="GPUParticles3D" parent="." unique_id=1893429122]
emitting = false
amount = 150
lifetime = 5.0
process_material = SubResource("ParticleProcessMaterial_pyn6b")
draw_pass_1 = SubResource("SphereMesh_4trvf")
-[node name="WorldEnvironment" parent="." instance=ExtResource("2_68o16")]
+[node name="WorldEnvironment" parent="." unique_id=976396102 instance=ExtResource("2_68o16")]
-[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="." unique_id=1587208474]
transform = Transform3D(-0.413104, 0.834517, -0.364591, 0, 0.400349, 0.916363, 0.910684, 0.378553, -0.165386, 0, 0, 0)
shadow_enabled = true
script = ExtResource("3_fcjh2")
diff --git a/client/map/environment/world_environment.tscn b/client/map/environment/world_environment.tscn
index e3f6c0f7..dfa33585 100644
--- a/client/map/environment/world_environment.tscn
+++ b/client/map/environment/world_environment.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=3 uid="uid://cb4ic3ssk4r8r"]
+[gd_scene format=3 uid="uid://cb4ic3ssk4r8r"]
[ext_resource type="Script" uid="uid://cwg7wympevxs4" path="res://map/auto_setup/environment_setup.gd" id="1_iatcp"]
[ext_resource type="Material" uid="uid://617pq1rgdgbn" path="res://map/environment/presets/day_sky.tres" id="1_jk80v"]
@@ -14,6 +14,6 @@ ssao_enabled = true
sdfgi_use_occlusion = true
sdfgi_energy = 2.0
-[node name="WorldEnvironment" type="WorldEnvironment"]
+[node name="WorldEnvironment" type="WorldEnvironment" unique_id=1422427611]
environment = SubResource("Environment_8cwcp")
script = ExtResource("1_iatcp")
diff --git a/client/map/item_factory.gd b/client/map/item_factory.gd
index 56842a47..5fccb526 100644
--- a/client/map/item_factory.gd
+++ b/client/map/item_factory.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -23,15 +23,21 @@ class ItemName:
func _init(raw_name: String):
raw = raw_name
- var c = Array(raw_name.split(":"))
+ var c = Array(raw_name.split(":", false, 1))
name = c[0]
- contents = c[1].split(",") if c.size() > 1 else []
+ if c.size() == 1:
+ contents = []
+ elif not c[1].contains(":"):
+ contents = c[1].split(",")
+ else:
+ contents = [c[1]] # Don't parse it, handle it in the item instead
-static func produce(raw_name: String, owned_by: Node3D) -> Item:
+static func produce(raw_name: String, owned_by: Node3D, scale := 1.) -> Item:
var name = ItemName.new(raw_name)
var item: Item = produce_inner(name, owned_by)
item.add_contents(name.contents)
item.item_name = raw_name
+ item.scale = Vector3(scale, scale, scale)
return item
static func produce_inner(item: ItemName, owned_by: Node3D) -> Item:
@@ -46,12 +52,14 @@ static func produce_inner(item: ItemName, owned_by: Node3D) -> Item:
"burned": return Burned.new(owned_by)
"coconut": return GenericItem.new(owned_by, preload("res://map/items/coconut.tscn"))
"dough": return GenericItem.new(owned_by, preload("res://map/items/dough.tscn"))
+ "doughnut": return GenericItem.new(owned_by, preload("res://map/items/donut/glazed-donut.tscn"))
"fish": return GenericItem.new(owned_by, preload("res://map/items/fish.tscn"))
"flour": return GenericItem.new(owned_by, preload("res://map/items/flour.tscn"))
"leek": return GenericItem.new(owned_by, preload("res://map/items/leek.tscn"))
"mushroom": return GenericItem.new(owned_by, preload("res://map/items/mushroom.tscn"))
+ "sliced-mushroom": return GenericItem.new(owned_by, preload("res://map/items/sliced_mushroom.tscn"))
"noodles": return GenericItem.new(owned_by, preload("res://map/items/noodles.tscn"))
- "rolled-dough": return GenericItem.new(owned_by, preload("res://map/items/rolled_dough.tscn"))
+ "rolled-dough": return RolledDough.new(owned_by)
"strawberry-mochi": return Mochi.new(owned_by, Color(.98, .70, .75))
"nigiri": return GenericItem.new(owned_by, preload("res://map/items/nigiri.tscn"))
"steak": return Cuttable.new(owned_by, preload("res://map/items/steak.tscn"), Color(0.74, 0.192, 0.22))
@@ -73,10 +81,10 @@ static func produce_inner(item: ItemName, owned_by: Node3D) -> Item:
var plate = Plate.new(owned_by)
plate.add_contents(["dirt"])
return plate
-
"pot": return Pot.new(owned_by)
"basket": return Basket.new(owned_by)
"pan": return Pan.new(owned_by)
+ "pizza": return Pizza.new(owned_by)
"foodprocessor": return FoodProcessor.new(owned_by)
"glass": return Glass.new(owned_by)
"plate": return Plate.new(owned_by)
diff --git a/client/map/items/basket.gd b/client/map/items/basket.gd
index df37b5dd..4da74aca 100644
--- a/client/map/items/basket.gd
+++ b/client/map/items/basket.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -26,11 +26,15 @@ func _init(owned_by_: Node3D):
base.add_child(bubbles)
base.position.z = -.075
+func is_round(): return false
+
func add_contents(contents: Array[String]):
for i in contents:
match i:
"french-fries":
base.add_child(load("res://map/items/french_fries_basket.tscn").instantiate())
+ "dough":
+ base.add_child(load("res://map/items/donut/donut.tscn").instantiate())
_:
super([i])
diff --git a/client/map/items/basket.tscn b/client/map/items/basket.tscn
index 4a3e046d..628e4bd6 100644
--- a/client/map/items/basket.tscn
+++ b/client/map/items/basket.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bu0o7coy26rwx"]
+[gd_scene format=3 uid="uid://bu0o7coy26rwx"]
[ext_resource type="ArrayMesh" uid="uid://bqwi4qvtgjlk5" path="res://map/items/deep_fryer_basket.res" id="1_7yj46"]
-[node name="Basket" type="Node3D"]
+[node name="Basket" type="Node3D" unique_id=606292015]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1069269296]
transform = Transform3D(-0.75, 0, -6.556708e-08, 0, 0.75, 0, 6.556708e-08, 0, -0.75, 0, 0, 0)
mesh = ExtResource("1_7yj46")
diff --git a/client/map/items/bun.gd b/client/map/items/bun.gd
index 38fd582d..0423d7e6 100644
--- a/client/map/items/bun.gd
+++ b/client/map/items/bun.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/bun.res b/client/map/items/bun.res
index 3f1821df..ec6cbe4e 100644
--- a/client/map/items/bun.res
+++ b/client/map/items/bun.res
Binary files differ
diff --git a/client/map/items/bun.tscn b/client/map/items/bun.tscn
index 88483ee3..650a1efb 100644
--- a/client/map/items/bun.tscn
+++ b/client/map/items/bun.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dgifus08aktx0"]
+[gd_scene format=3 uid="uid://dgifus08aktx0"]
[ext_resource type="ArrayMesh" uid="uid://ke5s5itvrqce" path="res://map/items/bun.res" id="1_limvy"]
-[node name="Bun" type="Node3D"]
+[node name="Bun" type="Node3D" unique_id=1561269631]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=338156627]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_limvy")
-skeleton = NodePath("")
diff --git a/client/map/items/burned.gd b/client/map/items/burned.gd
index 2646a551..2ed456a6 100644
--- a/client/map/items/burned.gd
+++ b/client/map/items/burned.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/burned.res b/client/map/items/burned.res
index 8305ca6e..3cff4081 100644
--- a/client/map/items/burned.res
+++ b/client/map/items/burned.res
Binary files differ
diff --git a/client/map/items/burned.tscn b/client/map/items/burned.tscn
index 241bbf77..a37d45b8 100644
--- a/client/map/items/burned.tscn
+++ b/client/map/items/burned.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://b48ximtiqbwvo"]
+[gd_scene format=3 uid="uid://b48ximtiqbwvo"]
[ext_resource type="ArrayMesh" uid="uid://bpndpup4f6g6v" path="res://map/items/burned.res" id="1_wu5eo"]
-[node name="Burned" type="Node3D"]
+[node name="Burned" type="Node3D" unique_id=2043673784]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1570232437]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_wu5eo")
-skeleton = NodePath("")
diff --git a/client/map/items/cheese.res b/client/map/items/cheese.res
index eac705e5..1936b0c8 100644
--- a/client/map/items/cheese.res
+++ b/client/map/items/cheese.res
Binary files differ
diff --git a/client/map/items/cheese.tscn b/client/map/items/cheese.tscn
index 515262c8..9702b324 100644
--- a/client/map/items/cheese.tscn
+++ b/client/map/items/cheese.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://0lbjf2sie4rk"]
+[gd_scene format=3 uid="uid://0lbjf2sie4rk"]
[ext_resource type="ArrayMesh" uid="uid://cshqtme8isvmw" path="res://map/items/cheese.res" id="1_p24nf"]
-[node name="Cheese" type="Node3D"]
+[node name="Cheese" type="Node3D" unique_id=93481419]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=595142792]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_p24nf")
-skeleton = NodePath("")
diff --git a/client/map/items/cheese_bit.res b/client/map/items/cheese_bit.res
new file mode 100644
index 00000000..78c32494
--- /dev/null
+++ b/client/map/items/cheese_bit.res
Binary files differ
diff --git a/client/map/items/coconut.res b/client/map/items/coconut.res
index 63778607..0719fec4 100644
--- a/client/map/items/coconut.res
+++ b/client/map/items/coconut.res
Binary files differ
diff --git a/client/map/items/coconut.tscn b/client/map/items/coconut.tscn
index 679bf9b5..19fb7b80 100644
--- a/client/map/items/coconut.tscn
+++ b/client/map/items/coconut.tscn
@@ -1,10 +1,16 @@
-[gd_scene load_steps=2 format=3 uid="uid://cmsirxgv7iqnk"]
+[gd_scene format=3 uid="uid://cmsirxgv7iqnk"]
[ext_resource type="ArrayMesh" uid="uid://djenv8k2nnqyt" path="res://map/items/coconut.res" id="1_c4upd"]
+[ext_resource type="Texture2D" uid="uid://dgcs4wkxsxe6a" path="res://map/textures/palette.png" id="2_e3g14"]
-[node name="Coconut" type="Node3D"]
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qtcu3"]
+resource_name = "Material.001"
+cull_mode = 2
+albedo_texture = ExtResource("2_e3g14")
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Coconut" type="Node3D" unique_id=1082368642]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1732359079]
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0.2, 0)
mesh = ExtResource("1_c4upd")
-skeleton = NodePath("")
+surface_material_override/0 = SubResource("StandardMaterial3D_qtcu3")
diff --git a/client/map/items/cooked_cheese_pizza.tscn b/client/map/items/cooked_cheese_pizza.tscn
new file mode 100644
index 00000000..de677b2a
--- /dev/null
+++ b/client/map/items/cooked_cheese_pizza.tscn
@@ -0,0 +1,33 @@
+[gd_scene format=3 uid="uid://cl1etmr26p262"]
+
+[ext_resource type="ArrayMesh" uid="uid://cwstqugiw76tc" path="res://map/items/pizza.res" id="1_vnyro"]
+
+[sub_resource type="Gradient" id="Gradient_xogo6"]
+offsets = PackedFloat32Array(0, 0.14086306, 0.84237576, 1)
+colors = PackedColorArray(0.52, 0.104000024, 0, 1, 0.7294118, 0.23921569, 0.11764706, 1, 1, 0.7391868, 0.13702077, 1, 1, 0.88600004, 0.43, 1)
+
+[sub_resource type="FastNoiseLite" id="FastNoiseLite_7am5t"]
+frequency = 0.0139
+fractal_octaves = 3
+fractal_gain = 0.2
+
+[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_gf4r2"]
+width = 256
+height = 256
+noise = SubResource("FastNoiseLite_7am5t")
+color_ramp = SubResource("Gradient_xogo6")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vnyro"]
+resource_name = "Material.001"
+cull_mode = 2
+albedo_texture = SubResource("NoiseTexture2D_gf4r2")
+uv1_scale = Vector3(0.5, 0.5, 0.5)
+uv1_offset = Vector3(0.5, 0, 0.5)
+uv1_triplanar = true
+
+[node name="CookedCheesePizza" type="Node3D" unique_id=1618397990]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=2039708425]
+transform = Transform3D(0.3, 0, 0, 0, 0.05, 0, 0, 0, 0.3, 0, 0.05, 0)
+mesh = ExtResource("1_vnyro")
+surface_material_override/1 = SubResource("StandardMaterial3D_vnyro")
diff --git a/client/map/items/cooked_noodles.res b/client/map/items/cooked_noodles.res
index f98b4976..4ba4012c 100644
--- a/client/map/items/cooked_noodles.res
+++ b/client/map/items/cooked_noodles.res
Binary files differ
diff --git a/client/map/items/cooked_noodles.tscn b/client/map/items/cooked_noodles.tscn
index 419e5eaa..895e1edd 100644
--- a/client/map/items/cooked_noodles.tscn
+++ b/client/map/items/cooked_noodles.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://ct4f8jtnvfn56"]
+[gd_scene format=3 uid="uid://ct4f8jtnvfn56"]
[ext_resource type="ArrayMesh" uid="uid://cwhr8luqwpo7a" path="res://map/items/cooked_noodles.res" id="1_ahfxi"]
-[node name="CookedNoodles" type="Node3D"]
+[node name="CookedNoodles" type="Node3D" unique_id=663842765]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=675901793]
transform = Transform3D(0.378, 0, 0, 0, 0.378, 0, 0, 0, 0.378, -0.027, 0, 0.095)
mesh = ExtResource("1_ahfxi")
-skeleton = NodePath("")
diff --git a/client/map/items/cooked_rice_fill.tscn b/client/map/items/cooked_rice_fill.tscn
index 825e1f63..d55ee61e 100644
--- a/client/map/items/cooked_rice_fill.tscn
+++ b/client/map/items/cooked_rice_fill.tscn
@@ -1,14 +1,14 @@
-[gd_scene load_steps=3 format=3 uid="uid://c17tdqcs3a33i"]
+[gd_scene format=3 uid="uid://c17tdqcs3a33i"]
[ext_resource type="PackedScene" uid="uid://do4qxd1d1x7cc" path="res://map/items/rice_content.tscn" id="1_mteor"]
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vr3i3"]
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wuevv"]
resource_local_to_scene = true
albedo_color = Color(0.933333, 0.933333, 0.666667, 1)
-[node name="CookedRiceFIll" type="Node3D"]
+[node name="CookedRiceFIll" type="Node3D" unique_id=1097928494]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
-[node name="RiceContent" parent="." instance=ExtResource("1_mteor")]
+[node name="RiceContent" parent="." unique_id=1357077206 instance=ExtResource("1_mteor")]
transform = Transform3D(0.3, 0, 0, 0, 0.15, 0, 0, 0, 0.562, 0.194, 0.07, 0)
-surface_material_override/0 = SubResource("StandardMaterial3D_vr3i3")
+surface_material_override/0 = SubResource("StandardMaterial3D_wuevv")
diff --git a/client/map/items/cut.tscn b/client/map/items/cut.tscn
index d465d788..69fad628 100644
--- a/client/map/items/cut.tscn
+++ b/client/map/items/cut.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=3 uid="uid://bbjair4iw1841"]
+[gd_scene format=3 uid="uid://bbjair4iw1841"]
[sub_resource type="Curve" id="Curve_3m5vp"]
_data = [Vector2(0, 0), 0.0, 9.741706, 0, 0, Vector2(0.24820146, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -1.9750195, 0.0, 0, 0]
@@ -20,7 +20,7 @@ curve = SubResource("Curve_3m5vp")
_data = [Vector2(0.7027972, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
-[node name="Cut" type="CPUParticles3D"]
+[node name="Cut" type="CPUParticles3D" unique_id=1642709239]
cast_shadow = 0
emitting = false
amount = 15
diff --git a/client/map/items/cuttable.gd b/client/map/items/cuttable.gd
index e106a96d..4eb48e19 100644
--- a/client/map/items/cuttable.gd
+++ b/client/map/items/cuttable.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/deep_fryer_basket.res b/client/map/items/deep_fryer_basket.res
index 40f1c05d..f31999e7 100644
--- a/client/map/items/deep_fryer_basket.res
+++ b/client/map/items/deep_fryer_basket.res
Binary files differ
diff --git a/client/map/items/deep_frying.tscn b/client/map/items/deep_frying.tscn
index 81a4ccfb..1cf5de19 100644
--- a/client/map/items/deep_frying.tscn
+++ b/client/map/items/deep_frying.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://c2g5ncvn45263"]
+[gd_scene format=3 uid="uid://c2g5ncvn45263"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3xkdk"]
albedo_color = Color(0.9153118, 0.62961817, 0.44200557, 1)
@@ -9,7 +9,7 @@ material = SubResource("StandardMaterial3D_3xkdk")
radius = 0.1
height = 0.2
-[node name="DeepFrying" type="CPUParticles3D"]
+[node name="DeepFrying" type="CPUParticles3D" unique_id=1522889960]
emitting = false
mesh = SubResource("SphereMesh_iygiy")
emission_shape = 6
diff --git a/client/map/items/dirt.res b/client/map/items/dirt.res
index 3043f8d8..a9b64efe 100644
--- a/client/map/items/dirt.res
+++ b/client/map/items/dirt.res
Binary files differ
diff --git a/client/map/items/dirt.tscn b/client/map/items/dirt.tscn
index 18956b3d..e3d1cdc1 100644
--- a/client/map/items/dirt.tscn
+++ b/client/map/items/dirt.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cluraed43qoeb"]
+[gd_scene format=3 uid="uid://cluraed43qoeb"]
[ext_resource type="ArrayMesh" uid="uid://dla7bxb6byk48" path="res://map/items/dirt.res" id="1_xmsre"]
-[node name="Dirt" type="Node3D"]
+[node name="Dirt" type="Node3D" unique_id=913711020]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=114452767]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.015, 0)
mesh = ExtResource("1_xmsre")
-skeleton = NodePath("")
diff --git a/client/map/items/donut/donut-dough.res b/client/map/items/donut/donut-dough.res
new file mode 100644
index 00000000..cae6e975
--- /dev/null
+++ b/client/map/items/donut/donut-dough.res
Binary files differ
diff --git a/client/map/items/donut/donut-glaze.res b/client/map/items/donut/donut-glaze.res
new file mode 100644
index 00000000..6a8dac5b
--- /dev/null
+++ b/client/map/items/donut/donut-glaze.res
Binary files differ
diff --git a/client/map/items/donut/donut.tscn b/client/map/items/donut/donut.tscn
new file mode 100644
index 00000000..6815828c
--- /dev/null
+++ b/client/map/items/donut/donut.tscn
@@ -0,0 +1,11 @@
+[gd_scene format=3 uid="uid://cvnkxd1tslqvf"]
+
+[ext_resource type="ArrayMesh" uid="uid://cy1ifpobr21c0" path="res://map/items/donut/donut-dough.res" id="1_65l5f"]
+[ext_resource type="Material" uid="uid://cg7o7rn06bve1" path="res://map/items/dough_material.tres" id="2_65l5f"]
+
+[node name="Donut" type="Node3D" unique_id=517668687]
+
+[node name="Dough" type="MeshInstance3D" parent="." unique_id=697273469]
+transform = Transform3D(0.35, 0, 0, 0, 0.35, 0, 0, 0, 0.35, 0, 0, 0)
+mesh = ExtResource("1_65l5f")
+surface_material_override/0 = ExtResource("2_65l5f")
diff --git a/client/map/items/donut/glazed-donut.tscn b/client/map/items/donut/glazed-donut.tscn
new file mode 100644
index 00000000..913a9ab5
--- /dev/null
+++ b/client/map/items/donut/glazed-donut.tscn
@@ -0,0 +1,14 @@
+[gd_scene format=3 uid="uid://dglrxvp3126g4"]
+
+[ext_resource type="ArrayMesh" uid="uid://cy1ifpobr21c0" path="res://map/items/donut/donut-dough.res" id="1_1ef7l"]
+[ext_resource type="ArrayMesh" uid="uid://dauwp2akjkafa" path="res://map/items/donut/donut-glaze.res" id="2_1jama"]
+
+[node name="Donut" type="Node3D" unique_id=1096172423]
+
+[node name="Dough" type="MeshInstance3D" parent="." unique_id=218737516]
+transform = Transform3D(0.35, 0, 0, 0, 0.35, 0, 0, 0, 0.35, 0, 0, 0)
+mesh = ExtResource("1_1ef7l")
+
+[node name="Glaze" type="MeshInstance3D" parent="." unique_id=267596717]
+transform = Transform3D(0.35, 0, 0, 0, 0.35, 0, 0, 0, 0.35, 0, 0, 0)
+mesh = ExtResource("2_1jama")
diff --git a/client/map/items/dough.res b/client/map/items/dough.res
index 9ccb0c48..7df7ca56 100644
--- a/client/map/items/dough.res
+++ b/client/map/items/dough.res
Binary files differ
diff --git a/client/map/items/dough.tscn b/client/map/items/dough.tscn
index 73f8c494..6ffec7a5 100644
--- a/client/map/items/dough.tscn
+++ b/client/map/items/dough.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dw5gdtilcsdcc"]
+[gd_scene format=3 uid="uid://dw5gdtilcsdcc"]
[ext_resource type="ArrayMesh" uid="uid://duv7fs8jmwjn5" path="res://map/items/dough.res" id="1_fe02r"]
-[node name="Dough" type="Node3D"]
+[node name="Dough" type="Node3D" unique_id=1817119001]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1090567646]
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0, 0, 0)
mesh = ExtResource("1_fe02r")
-skeleton = NodePath("")
diff --git a/client/map/items/fish.res b/client/map/items/fish.res
index 65f099bb..e75acfb0 100644
--- a/client/map/items/fish.res
+++ b/client/map/items/fish.res
Binary files differ
diff --git a/client/map/items/fish.tscn b/client/map/items/fish.tscn
index 2ca59cf9..6ec64459 100644
--- a/client/map/items/fish.tscn
+++ b/client/map/items/fish.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dom5n7h7l7sr8"]
+[gd_scene format=3 uid="uid://dom5n7h7l7sr8"]
[ext_resource type="ArrayMesh" uid="uid://dgsvwyghdj0es" path="res://map/items/fish.res" id="1_ysgnj"]
-[node name="Fish" type="Node3D"]
+[node name="Fish" type="Node3D" unique_id=291512971]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=120424767]
transform = Transform3D(-4.37114e-10, 0.01, 0, -0.01, -4.37114e-10, 0, 0, 0, 0.01, 0, 0.0754571, 0)
mesh = ExtResource("1_ysgnj")
-skeleton = NodePath("")
diff --git a/client/map/items/flour.res b/client/map/items/flour.res
index 19f2db82..f04dd757 100644
--- a/client/map/items/flour.res
+++ b/client/map/items/flour.res
Binary files differ
diff --git a/client/map/items/flour.tscn b/client/map/items/flour.tscn
index c283eae5..6557cd24 100644
--- a/client/map/items/flour.tscn
+++ b/client/map/items/flour.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dgo8cknr1o6ml"]
+[gd_scene format=3 uid="uid://dgo8cknr1o6ml"]
[ext_resource type="ArrayMesh" uid="uid://b76c6o88lkei2" path="res://map/items/flour.res" id="1_55ndm"]
-[node name="Flour" type="Node3D"]
+[node name="Flour" type="Node3D" unique_id=540926944]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=191664914]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_55ndm")
-skeleton = NodePath("")
diff --git a/client/map/items/food_processor.gd b/client/map/items/food_processor.gd
index 0a78904f..fab8bd48 100644
--- a/client/map/items/food_processor.gd
+++ b/client/map/items/food_processor.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,7 +16,6 @@
class_name FoodProcessor
extends Item
-var time := 0.
var processing: CPUParticles3D = load("res://map/items/processing.tscn").instantiate()
func _init(owned_by_: Node3D):
@@ -25,6 +24,8 @@ func _init(owned_by_: Node3D):
add_child(load("res://map/items/food_processor.tscn").instantiate())
add_child(processing)
+func is_round(): return false
+
func add_contents(contents: Array[String]):
for i in contents:
match i:
@@ -34,36 +35,40 @@ func add_contents(contents: Array[String]):
add_child(FoodProcessorFill.new(self, Color(1.,1.,.8)))
"rice":
processing.color = Color(1.,1.,.8)
- base.add_child(load("res://map/items/rice.tscn").instantiate())
+ super([i])
"flour":
processing.color = Color(.9, .9, .9)
- base.add_child(load("res://map/items/flour.tscn").instantiate())
+ super([i])
+ "mushroom":
+ processing.color = Color(0.596, 0.341, 0.259)
+ super([i])
"dough":
add_child(FoodProcessorFill.new(self, Color8(200, 180, 160)))
"coconut":
add_child(FoodProcessorFill.new(self, Color(.8, .5, .4)))
- base.add_child(load("res://map/items/coconut.tscn").instantiate())
+ super([i])
"strawberry":
processing.color = Color(.9, .0, .0)
- base.add_child(load("res://map/items/strawberry.tscn").instantiate())
+ super([i])
"strawberry-shake":
add_child(FoodProcessorFill.new(self, Color8(250, 140, 180)))
"strawberry-icecream":
add_child(FoodProcessorFill.new(self, Color8(250, 180, 210)))
"strawberry-puree":
add_child(FoodProcessorFill.new(self, Color8(200, 80, 80)))
+ "processed-mushroom":
+ add_child(FoodProcessorFill.new(self, Color(0.596, 0.341, 0.259)))
"tomato":
processing.color = Color(1.,0.,0.)
- base.add_child(load("res://map/items/tomato.tscn").instantiate())
+ super([i])
"tomato-juice":
add_child(FoodProcessorFill.new(self, Color(1., .0, .0)))
_: super([i])
func _process(delta: float):
super(delta)
- time += delta
- processing.rotation.y += time * TAU
- base.rotation.y += time * TAU
+ processing.rotation.y += delta * TAU * 10
+ base.rotation.y += delta * TAU * 15
func progress(position_: float, speed: float, warn: bool):
super(position_, speed, warn)
diff --git a/client/map/items/food_processor.res b/client/map/items/food_processor.res
index 726a7868..3b85f78b 100644
--- a/client/map/items/food_processor.res
+++ b/client/map/items/food_processor.res
Binary files differ
diff --git a/client/map/items/food_processor.tscn b/client/map/items/food_processor.tscn
index bb95d580..8082930a 100644
--- a/client/map/items/food_processor.tscn
+++ b/client/map/items/food_processor.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://daxjpvycs85ec"]
+[gd_scene format=3 uid="uid://daxjpvycs85ec"]
[ext_resource type="ArrayMesh" uid="uid://bpjl5dlst6yg" path="res://map/items/food_processor.res" id="1_65ilg"]
-[node name="FoodProcessor" type="Node3D"]
+[node name="FoodProcessor" type="Node3D" unique_id=1181054569]
-[node name="FoodProcessor" type="MeshInstance3D" parent="."]
+[node name="FoodProcessor" type="MeshInstance3D" parent="." unique_id=68402722]
transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, 0, 0.3, 0)
mesh = ExtResource("1_65ilg")
-skeleton = NodePath("")
diff --git a/client/map/items/food_processor_fill.gd b/client/map/items/food_processor_fill.gd
index 25d634da..ed695a99 100644
--- a/client/map/items/food_processor_fill.gd
+++ b/client/map/items/food_processor_fill.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/food_processor_fill.res b/client/map/items/food_processor_fill.res
index 7511cc75..46dc32a0 100644
--- a/client/map/items/food_processor_fill.res
+++ b/client/map/items/food_processor_fill.res
Binary files differ
diff --git a/client/map/items/food_processor_fill.tscn b/client/map/items/food_processor_fill.tscn
index fa85e40a..21d74c57 100644
--- a/client/map/items/food_processor_fill.tscn
+++ b/client/map/items/food_processor_fill.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://di5nq2vgvostp"]
+[gd_scene format=3 uid="uid://di5nq2vgvostp"]
[ext_resource type="ArrayMesh" uid="uid://vkd0ty7khthl" path="res://map/items/food_processor_fill.res" id="1_tcr3k"]
@@ -6,8 +6,7 @@
resource_local_to_scene = true
cull_mode = 1
-[node name="FoodProcessorFill" type="MeshInstance3D"]
+[node name="FoodProcessorFill" type="MeshInstance3D" unique_id=2135483159]
transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.15, 0, 0.3, 0)
mesh = ExtResource("1_tcr3k")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_0xb6r")
diff --git a/client/map/items/french_fries.res b/client/map/items/french_fries.res
index 8019c006..2c312e36 100644
--- a/client/map/items/french_fries.res
+++ b/client/map/items/french_fries.res
Binary files differ
diff --git a/client/map/items/french_fries_basket.tscn b/client/map/items/french_fries_basket.tscn
index 516efe0a..71ce3676 100644
--- a/client/map/items/french_fries_basket.tscn
+++ b/client/map/items/french_fries_basket.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dfxksiofrs477"]
+[gd_scene format=3 uid="uid://dfxksiofrs477"]
[ext_resource type="ArrayMesh" uid="uid://b4ayvyhakbe7t" path="res://map/items/french_fries.res" id="1_skqej"]
-[node name="FrenchFriesBasket" type="Node3D"]
+[node name="FrenchFriesBasket" type="Node3D" unique_id=1793149830]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=972639015]
transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, -0.112)
mesh = ExtResource("1_skqej")
-skeleton = NodePath("")
diff --git a/client/map/items/french_fries_fill.res b/client/map/items/french_fries_fill.res
index f9bd5e0a..e7b78a46 100644
--- a/client/map/items/french_fries_fill.res
+++ b/client/map/items/french_fries_fill.res
Binary files differ
diff --git a/client/map/items/french_fries_fill.tscn b/client/map/items/french_fries_fill.tscn
index 10684f67..8c98cfe7 100644
--- a/client/map/items/french_fries_fill.tscn
+++ b/client/map/items/french_fries_fill.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://buxshcsyokc3y"]
+[gd_scene format=3 uid="uid://buxshcsyokc3y"]
[ext_resource type="ArrayMesh" uid="uid://cl5aobuv0duao" path="res://map/items/french_fries_fill.res" id="1_bt0td"]
-[node name="FrenchFriesFill" type="Node3D"]
+[node name="FrenchFriesFill" type="Node3D" unique_id=87677793]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=802219019]
transform = Transform3D(-0.64, 0, -5.5950576e-08, 0, 0.64, 0, 5.5950576e-08, 0, -0.64, 0.01, -0.031, 0.025)
mesh = ExtResource("1_bt0td")
-skeleton = NodePath("")
diff --git a/client/map/items/generic_item.gd b/client/map/items/generic_item.gd
index 5f101646..e20385ef 100644
--- a/client/map/items/generic_item.gd
+++ b/client/map/items/generic_item.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/glass.gd b/client/map/items/glass.gd
index b9582a3a..8b0208e1 100644
--- a/client/map/items/glass.gd
+++ b/client/map/items/glass.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/glass.res b/client/map/items/glass.res
index 8386865f..400ca1cd 100644
--- a/client/map/items/glass.res
+++ b/client/map/items/glass.res
Binary files differ
diff --git a/client/map/items/glass.tscn b/client/map/items/glass.tscn
index 29bdda8b..877946a2 100644
--- a/client/map/items/glass.tscn
+++ b/client/map/items/glass.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://c875kaj4v7nfv"]
+[gd_scene format=3 uid="uid://c875kaj4v7nfv"]
[ext_resource type="ArrayMesh" uid="uid://dywkxdkny1urs" path="res://map/items/glass.res" id="1_v2eeu"]
-[node name="Glass" type="Node3D"]
+[node name="Glass" type="Node3D" unique_id=1014845055]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1301902472]
transform = Transform3D(0.125, 0, 0, 0, 0.125, 0, 0, 0, 0.125, 0, 0.125, 0)
mesh = ExtResource("1_v2eeu")
-skeleton = NodePath("")
diff --git a/client/map/items/glass_fill.gd b/client/map/items/glass_fill.gd
index 27cceb1f..4331965d 100644
--- a/client/map/items/glass_fill.gd
+++ b/client/map/items/glass_fill.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/glass_fill.res b/client/map/items/glass_fill.res
index 8226fb04..4845b3da 100644
--- a/client/map/items/glass_fill.res
+++ b/client/map/items/glass_fill.res
Binary files differ
diff --git a/client/map/items/glass_fill.tscn b/client/map/items/glass_fill.tscn
index dbcc1a61..a33d77de 100644
--- a/client/map/items/glass_fill.tscn
+++ b/client/map/items/glass_fill.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://dvdwxct8qu2fm"]
+[gd_scene format=3 uid="uid://dvdwxct8qu2fm"]
[ext_resource type="ArrayMesh" uid="uid://byebq6oifi2jk" path="res://map/items/glass_fill.res" id="1_apxu2"]
@@ -8,9 +8,8 @@ resource_name = "Material.002"
cull_mode = 2
metallic_specular = 0.0
-[node name="GlassFill" type="MeshInstance3D"]
+[node name="GlassFill" type="MeshInstance3D" unique_id=652949023]
transform = Transform3D(0.125, 0, 0, 0, 0.125, 0, 0, 0, 0.125, 0, 0.125, 0)
lod_bias = 3.0
mesh = ExtResource("1_apxu2")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_g0wwk")
diff --git a/client/map/items/glass_items.gd b/client/map/items/glass_items.gd
index 970b25d1..b3a5542b 100644
--- a/client/map/items/glass_items.gd
+++ b/client/map/items/glass_items.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/icecream.gd b/client/map/items/icecream.gd
index 19e3c91d..c29f6ef3 100644
--- a/client/map/items/icecream.gd
+++ b/client/map/items/icecream.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/icecream.res b/client/map/items/icecream.res
index af888a45..1d867b07 100644
--- a/client/map/items/icecream.res
+++ b/client/map/items/icecream.res
Binary files differ
diff --git a/client/map/items/icecream.tscn b/client/map/items/icecream.tscn
index 97eb32cf..d727e0c7 100644
--- a/client/map/items/icecream.tscn
+++ b/client/map/items/icecream.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=4 uid="uid://c7peyvvr7rgko"]
+[gd_scene format=4 uid="uid://c7peyvvr7rgko"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fah5o"]
resource_name = "Sprinkles"
@@ -67,8 +67,7 @@ resource_name = "Ice"
cull_mode = 2
roughness = 0.690035
-[node name="IceCream" type="MeshInstance3D"]
+[node name="IceCream" type="MeshInstance3D" unique_id=1714074191]
transform = Transform3D(0.6, 0, 0, 0, 0.6, 0, 0, 0, 0.6, 0, 0.2, 0)
mesh = SubResource("ArrayMesh_vb1ms")
-skeleton = NodePath("")
surface_material_override/1 = SubResource("StandardMaterial3D_2ckef")
diff --git a/client/map/items/item.gd b/client/map/items/item.gd
index 39c7afc1..bad9c7cf 100644
--- a/client/map/items/item.gd
+++ b/client/map/items/item.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -58,30 +58,35 @@ func _init(owned_by_: Node3D):
add_child(base)
owned_by = owned_by_
+# is_round is used to determine if the cursor should be rotated to match the
+# item's rotation (rotate if it's not round)
+func is_round(): return true
+
func add_contents(contents: Array[String]):
for i in contents:
- match i:
- _:
- base.add_child(ItemFactory.produce(i, self))
+ base.add_child(ItemFactory.produce(i, self))
func animate_spawn():
creation_timer = 0.0
scale = Vector3.ONE * 0.001 # setting to zero breaks assertions somewhere in the engine
func _process(delta):
- if not is_instance_valid(owned_by): return
- if owned_by.get_parent() is Item or owned_by is Item: return
- var player_owned = owned_by.get_parent().get_parent() is Player
- player_owned_timer = player_owned_timer + delta if player_owned else 0.
- var anim_speed = 10.0 * exp(player_owned_timer * 3.0) # infinity is fine. G.interpolate can handle it
- position = G.interpolate(position, position_target, delta * anim_speed)
- rotation.y = G.interpolate_angle(rotation.y, rotation_target, delta * anim_speed)
+ # Update position
+ if is_instance_valid(owned_by):
+ if owned_by.get_parent() is Item or owned_by is Item: return
+ var player_owned = owned_by.get_parent().get_parent() is Player
+ player_owned_timer = player_owned_timer + delta if player_owned else 0.
+ var anim_speed = 10.0 * exp(player_owned_timer * 3.0) # infinity is fine. G.interpolate can handle it
+ position = G.interpolate(position, position_target, delta * anim_speed)
+ rotation.y = G.interpolate_angle(rotation.y, rotation_target, delta * anim_speed)
+ # Fade in
if creation_timer != null:
creation_timer += delta * 10.0
if creation_timer > 1:
scale = Vector3.ONE
creation_timer = null
else: scale = Vector3.ONE * creation_timer
+ # Fade out
if destroy_timeout != null:
destroy_timeout -= delta * 5.0
if is_instance_valid(progress_instance): progress_instance.hide()
diff --git a/client/map/items/leek.res b/client/map/items/leek.res
index 16c45f6f..3fcafcd2 100644
--- a/client/map/items/leek.res
+++ b/client/map/items/leek.res
Binary files differ
diff --git a/client/map/items/leek.tscn b/client/map/items/leek.tscn
index 4967246a..cd70ffa5 100644
--- a/client/map/items/leek.tscn
+++ b/client/map/items/leek.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cmpwfkdnrm6e6"]
+[gd_scene format=3 uid="uid://cmpwfkdnrm6e6"]
[ext_resource type="ArrayMesh" uid="uid://cix4ji823kitw" path="res://map/items/leek.res" id="1_sum7m"]
-[node name="Leek" type="Node3D"]
+[node name="Leek" type="Node3D" unique_id=490278594]
-[node name="leek" type="MeshInstance3D" parent="."]
+[node name="leek" type="MeshInstance3D" parent="." unique_id=1208900817]
transform = Transform3D(-4.371139e-08, 0.75, -4.371139e-08, 0, -3.278354e-08, -1, -1, -3.278354e-08, 1.9106855e-15, -0.25, 0.1, 0)
mesh = ExtResource("1_sum7m")
-skeleton = NodePath("")
diff --git a/client/map/items/lettuce.res b/client/map/items/lettuce.res
index 0ae1a660..066494fe 100644
--- a/client/map/items/lettuce.res
+++ b/client/map/items/lettuce.res
Binary files differ
diff --git a/client/map/items/lettuce.tscn b/client/map/items/lettuce.tscn
index c4ca7cb9..35f4aeb2 100644
--- a/client/map/items/lettuce.tscn
+++ b/client/map/items/lettuce.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cuf8vwqk6xujk"]
+[gd_scene format=3 uid="uid://cuf8vwqk6xujk"]
[ext_resource type="ArrayMesh" uid="uid://cyomlupimgm43" path="res://map/items/lettuce.res" id="1_axcdp"]
-[node name="Lettuce" type="Node3D"]
+[node name="Lettuce" type="Node3D" unique_id=337328089]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1106316228]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_axcdp")
-skeleton = NodePath("")
diff --git a/client/map/items/lettuce_crate.gd.uid b/client/map/items/lettuce_crate.gd.uid
deleted file mode 100644
index d206a1e3..00000000
--- a/client/map/items/lettuce_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://b3oxc5pyij02s
diff --git a/client/map/items/mochi.gd b/client/map/items/mochi.gd
index 9ec98658..dc3a860d 100644
--- a/client/map/items/mochi.gd
+++ b/client/map/items/mochi.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/mochi.res b/client/map/items/mochi.res
index d9a4a97b..63af04da 100644
--- a/client/map/items/mochi.res
+++ b/client/map/items/mochi.res
Binary files differ
diff --git a/client/map/items/mochi.tscn b/client/map/items/mochi.tscn
index aaf20af6..0d9ed7e7 100644
--- a/client/map/items/mochi.tscn
+++ b/client/map/items/mochi.tscn
@@ -1,11 +1,10 @@
-[gd_scene load_steps=3 format=3 uid="uid://2warur3hlxao"]
+[gd_scene format=3 uid="uid://2warur3hlxao"]
[ext_resource type="ArrayMesh" uid="uid://c3s71kxt7nhfb" path="res://map/items/mochi.res" id="1_ygb5f"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c143l"]
-[node name="Mochi" type="MeshInstance3D"]
+[node name="Mochi" type="MeshInstance3D" unique_id=1419288615]
transform = Transform3D(0.15, 0, 0, 0, 0.104, 0, 0, 0, 0.15, 0, 0.075, 0)
mesh = ExtResource("1_ygb5f")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_c143l")
diff --git a/client/map/items/mushroom.res b/client/map/items/mushroom.res
index ad8dbc46..d4ce1bc1 100644
--- a/client/map/items/mushroom.res
+++ b/client/map/items/mushroom.res
Binary files differ
diff --git a/client/map/items/mushroom.tscn b/client/map/items/mushroom.tscn
index 7c8ab942..ec3237bb 100644
--- a/client/map/items/mushroom.tscn
+++ b/client/map/items/mushroom.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cc0jqiiywrrc0"]
+[gd_scene format=3 uid="uid://cc0jqiiywrrc0"]
[ext_resource type="ArrayMesh" uid="uid://fmglxabrvyld" path="res://map/items/mushroom.res" id="1_3saxa"]
-[node name="Mushroom" type="Node3D"]
+[node name="Mushroom" type="Node3D" unique_id=513538861]
-[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(1.7207295, 5.5918704e-08, 2.4574564, 2.4574564, -1.07418835e-07, -1.7207295, 5.5918697e-08, 3.0000005, -1.0741883e-07, 0.125, 0.035, 0)
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1807329182]
+transform = Transform3D(1.2167394, -2.1213207, 1.7376841, 2.4574564, -1.07418835e-07, -1.7207295, 1.2167397, 2.1213207, 1.7376841, 0.125, 0.035, 0.125)
mesh = ExtResource("1_3saxa")
-skeleton = NodePath("")
diff --git a/client/map/items/mushroom_plate_fill.tscn b/client/map/items/mushroom_plate_fill.tscn
new file mode 100644
index 00000000..5c4f20bc
--- /dev/null
+++ b/client/map/items/mushroom_plate_fill.tscn
@@ -0,0 +1,17 @@
+[gd_scene format=3 uid="uid://dvh0w2l8ly53e"]
+
+[ext_resource type="PackedScene" uid="uid://da3d6rgfss3su" path="res://map/items/pizza/mushroom_slice.tscn" id="1_iihb3"]
+
+[node name="MushroomPlateTopping" type="Node3D" unique_id=764525280]
+
+[node name="CookedMushroomSlice" parent="." unique_id=397861394 instance=ExtResource("1_iihb3")]
+transform = Transform3D(-0.53290087, 0.09379602, 0.8409631, 0.111597665, 0.9929469, -0.040030282, -0.8387864, 0.07251734, -0.5396097, 0.083272, 0.020344693, -0.06993499)
+
+[node name="CookedMushroomSlice2" parent="." unique_id=913110476 instance=ExtResource("1_iihb3")]
+transform = Transform3D(0.8638758, -0.24161705, 0.44197255, 0.2151002, 0.97037166, 0.11004867, -0.45546728, 0, 0.89025253, -0.06327816, 0.024188552, -0.060519822)
+
+[node name="CookedMushroomSlice3" parent="." unique_id=653241564 instance=ExtResource("1_iihb3")]
+transform = Transform3D(-0.95794797, -0.20063338, 0.20513889, -0.19618548, 0.9796664, 0.04201196, -0.20939668, 0, -0.97783077, 0.08738138, 0.020179842, 0.036596574)
+
+[node name="CookedMushroomSlice4" parent="." unique_id=1676048566 instance=ExtResource("1_iihb3")]
+transform = Transform3D(0.8235921, 0, -0.5671827, -0.12658499, 0.9747768, -0.18381096, 0.5528766, 0.2231821, 0.8028185, -0.08654484, 0.023021702, 0.08201364)
diff --git a/client/map/items/nigiri.res b/client/map/items/nigiri.res
index ffe47e3e..bd64e3d1 100644
--- a/client/map/items/nigiri.res
+++ b/client/map/items/nigiri.res
Binary files differ
diff --git a/client/map/items/nigiri.tscn b/client/map/items/nigiri.tscn
index 0a616eed..25e0324c 100644
--- a/client/map/items/nigiri.tscn
+++ b/client/map/items/nigiri.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://d34n41tk304ey"]
+[gd_scene format=3 uid="uid://d34n41tk304ey"]
[ext_resource type="ArrayMesh" uid="uid://g2ko273otndc" path="res://map/items/nigiri.res" id="1_my3m1"]
-[node name="Nigiri" type="Node3D"]
+[node name="Nigiri" type="Node3D" unique_id=713001924]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=916811039]
transform = Transform3D(0.144, 0, 0, 0, -2.27299e-09, -0.073, 0, 0.052, -3.19093e-09, 0, 0.1, 0)
mesh = ExtResource("1_my3m1")
-skeleton = NodePath("")
diff --git a/client/map/items/noodles.res b/client/map/items/noodles.res
index 9f8d6347..1a5013bb 100644
--- a/client/map/items/noodles.res
+++ b/client/map/items/noodles.res
Binary files differ
diff --git a/client/map/items/noodles.tscn b/client/map/items/noodles.tscn
index cad0b17b..37d59dcd 100644
--- a/client/map/items/noodles.tscn
+++ b/client/map/items/noodles.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cfc4wyxsgtnuy"]
+[gd_scene format=3 uid="uid://cfc4wyxsgtnuy"]
[ext_resource type="ArrayMesh" uid="uid://c7nmboj44jn7a" path="res://map/items/noodles.res" id="1_7j6yk"]
-[node name="Noodles" type="Node3D"]
+[node name="Noodles" type="Node3D" unique_id=32514619]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1535551693]
transform = Transform3D(0.378, 0, 0, 0, 0.378, 0, 0, 0, 0.378, -0.027, 0, 0.095)
mesh = ExtResource("1_7j6yk")
-skeleton = NodePath("")
diff --git a/client/map/items/noodles_cheese_fill.tscn b/client/map/items/noodles_cheese_fill.tscn
new file mode 100644
index 00000000..fb5c10d9
--- /dev/null
+++ b/client/map/items/noodles_cheese_fill.tscn
@@ -0,0 +1,25 @@
+[gd_scene format=3 uid="uid://3l14rutbc6ma"]
+
+[ext_resource type="ArrayMesh" uid="uid://68yn4bguhuq3" path="res://map/items/cheese_bit.res" id="1_1dqn5"]
+
+[node name="NoodlesCheeseFill" type="Node3D" unique_id=1485282420]
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=73653329]
+transform = Transform3D(0.5177467, -0.21455958, -0.6909487, -0.07600415, 0.9169244, -0.38597953, 0.53727245, 0.33647275, 0.61123633, -0.125, 0.108, 0.096)
+mesh = ExtResource("1_1dqn5")
+
+[node name="MeshInstance3D5" type="MeshInstance3D" parent="." unique_id=1909498497]
+transform = Transform3D(0.74895734, 0.019033965, -0.049147546, -0.013184706, 0.9993994, 0.029855367, 0.037264794, -0.028949905, 0.9983451, -0.009, 0.165, -0.025)
+mesh = ExtResource("1_1dqn5")
+
+[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=833722459]
+transform = Transform3D(0.6929721, 0.34747887, 0.1598467, -0.22719976, 0.9199635, -0.24879485, -0.17512806, 0.18145435, 0.9552748, 0.071, 0.113, 0.078)
+mesh = ExtResource("1_1dqn5")
+
+[node name="MeshInstance3D3" type="MeshInstance3D" parent="." unique_id=1585980071]
+transform = Transform3D(0.47207838, 0.50925, -0.58691764, -0.11057563, 0.81986195, 0.5532535, 0.57220167, -0.26170707, 0.5911329, 0.105, 0.113, -0.09)
+mesh = ExtResource("1_1dqn5")
+
+[node name="MeshInstance3D4" type="MeshInstance3D" parent="." unique_id=665036024]
+transform = Transform3D(0.7185697, 0, -0.28645763, 0.057966992, 0.9629134, 0.2585037, 0.20687544, -0.26981068, 0.9225605, -0.082, 0.149, -0.128)
+mesh = ExtResource("1_1dqn5")
diff --git a/client/map/items/noodles_tomato_sauce_fill.res b/client/map/items/noodles_tomato_sauce_fill.res
new file mode 100644
index 00000000..2bf8fad6
--- /dev/null
+++ b/client/map/items/noodles_tomato_sauce_fill.res
Binary files differ
diff --git a/client/map/items/noodles_tomato_sauce_fill.tscn b/client/map/items/noodles_tomato_sauce_fill.tscn
new file mode 100644
index 00000000..aac0ccd4
--- /dev/null
+++ b/client/map/items/noodles_tomato_sauce_fill.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://cxwoxg732tgd8"]
+
+[ext_resource type="ArrayMesh" uid="uid://kwctvv8h54xj" path="res://map/items/noodles_tomato_sauce_fill.res" id="1_wu5sg"]
+
+[node name="NoodlesTomatoSauceFill" type="Node3D" unique_id=1260606454]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1027670850]
+transform = Transform3D(-0.60932875, -0.0051440885, -0.022176262, -0.014863605, 0.24028103, 0.038889483, 0.024445973, 0.017876228, -0.5291095, -0.007, 0.023, 0.011)
+mesh = ExtResource("1_wu5sg")
diff --git a/client/map/items/pan.gd b/client/map/items/pan.gd
index 497d8832..99be1805 100644
--- a/client/map/items/pan.gd
+++ b/client/map/items/pan.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -23,6 +23,13 @@ func _init(owned_by_: Node3D):
add_child(load("res://map/items/pan.tscn").instantiate())
base.add_child(steam)
+func add_contents(contents: Array[String]):
+ for i: String in contents:
+ if i == "steak" or i == "seared-steak":
+ base.add_child(ItemFactory.produce(i, self, .85))
+ else:
+ super([i])
+
func progress(position_: float, speed: float, warn: bool):
super(position_, speed, warn)
steam.emitting = true
diff --git a/client/map/items/pan.res b/client/map/items/pan.res
index 03dcf8f9..307df9ce 100644
--- a/client/map/items/pan.res
+++ b/client/map/items/pan.res
Binary files differ
diff --git a/client/map/items/pan.tscn b/client/map/items/pan.tscn
index 661814d9..908471f0 100644
--- a/client/map/items/pan.tscn
+++ b/client/map/items/pan.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://b1fuw04fcbko8"]
+[gd_scene format=3 uid="uid://b1fuw04fcbko8"]
[ext_resource type="ArrayMesh" uid="uid://be0d8a6no06na" path="res://map/items/pan.res" id="1_m08s2"]
-[node name="Pan" type="Node3D"]
+[node name="Pan" type="Node3D" unique_id=1343705456]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=2018580953]
transform = Transform3D(-2.18557e-08, 0, -0.5, 0, 0.5, 0, 0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_m08s2")
-skeleton = NodePath("")
diff --git a/client/map/items/patty.res b/client/map/items/patty.res
index 87880285..3ac0a9f1 100644
--- a/client/map/items/patty.res
+++ b/client/map/items/patty.res
Binary files differ
diff --git a/client/map/items/patty.tscn b/client/map/items/patty.tscn
index 2d1bdab6..494f623f 100644
--- a/client/map/items/patty.tscn
+++ b/client/map/items/patty.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://b1grk3gj58qbn"]
+[gd_scene format=3 uid="uid://b1grk3gj58qbn"]
[ext_resource type="ArrayMesh" uid="uid://wp3747kxnah1" path="res://map/items/patty.res" id="1_7tkah"]
-[node name="Patty" type="Node3D"]
+[node name="Patty" type="Node3D" unique_id=2110034130]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1300893752]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_7tkah")
-skeleton = NodePath("")
diff --git a/client/map/items/pizza.gd b/client/map/items/pizza.gd
new file mode 100644
index 00000000..a6c1a2ee
--- /dev/null
+++ b/client/map/items/pizza.gd
@@ -0,0 +1,29 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name Pizza
+extends Item
+
+func _init(owned_by_: Node3D):
+ super(owned_by_)
+
+func add_contents(contents: Array[String]):
+ base.add_child(load("res://map/items/cooked_cheese_pizza.tscn").instantiate())
+ for c: String in contents:
+ match c:
+ "sliced-cheese": continue
+ "tomato-juice": continue
+ "sliced-mushroom": base.add_child(load("res://map/items/pizza/mushroom_pizza_topping.tscn").instantiate())
+ _: base.add_child(UnknownItem.new(owned_by, c))
diff --git a/client/map/items/pizza.gd.uid b/client/map/items/pizza.gd.uid
new file mode 100644
index 00000000..0a7a85c5
--- /dev/null
+++ b/client/map/items/pizza.gd.uid
@@ -0,0 +1 @@
+uid://3ptl5whwr0s5
diff --git a/client/map/items/pizza.res b/client/map/items/pizza.res
new file mode 100644
index 00000000..ef8b7e68
--- /dev/null
+++ b/client/map/items/pizza.res
Binary files differ
diff --git a/client/map/items/pizza/cheese_pizza_topping.tscn b/client/map/items/pizza/cheese_pizza_topping.tscn
new file mode 100644
index 00000000..45f73056
--- /dev/null
+++ b/client/map/items/pizza/cheese_pizza_topping.tscn
@@ -0,0 +1,25 @@
+[gd_scene format=3 uid="uid://746ly6kg6fym"]
+
+[ext_resource type="ArrayMesh" uid="uid://68yn4bguhuq3" path="res://map/items/cheese_bit.res" id="1_tuxk6"]
+
+[node name="CheesePizzaTopping" type="Node3D" unique_id=1491104077]
+
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=571985640]
+transform = Transform3D(0.7090622, 0, 0.24439889, 0, 0.5, 0, -0.24439889, 0, 0.7090622, 0, 0.0901646, 0)
+mesh = ExtResource("1_tuxk6")
+
+[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=2125195768]
+transform = Transform3D(0.26293755, 0, -0.70239866, 0, 0.5, 0, 0.70239866, 0, 0.26293755, -0.13107976, 0.0901646, -0.08822491)
+mesh = ExtResource("1_tuxk6")
+
+[node name="MeshInstance3D3" type="MeshInstance3D" parent="." unique_id=2077733221]
+transform = Transform3D(0.59963775, 0, -0.4504826, 0, 0.5, 0, 0.4504826, 0, 0.59963775, -0.1088517, 0.0901646, 0.09697052)
+mesh = ExtResource("1_tuxk6")
+
+[node name="MeshInstance3D4" type="MeshInstance3D" parent="." unique_id=508222957]
+transform = Transform3D(-0.025716748, 0, 0.7495589, 0, 0.5, 0, -0.7495589, 0, -0.025716748, 0.09534076, 0.0901646, 0.10794736)
+mesh = ExtResource("1_tuxk6")
+
+[node name="MeshInstance3D5" type="MeshInstance3D" parent="." unique_id=348571710]
+transform = Transform3D(0.5133626, 0, 0.5467713, 0, 0.5, 0, -0.5467713, 0, 0.5133626, 0.09534076, 0.0901646, -0.14092311)
+mesh = ExtResource("1_tuxk6")
diff --git a/client/map/items/pizza/mushroom_pizza_topping.tscn b/client/map/items/pizza/mushroom_pizza_topping.tscn
new file mode 100644
index 00000000..2dbe8e3d
--- /dev/null
+++ b/client/map/items/pizza/mushroom_pizza_topping.tscn
@@ -0,0 +1,17 @@
+[gd_scene format=3 uid="uid://b8md64r8oddij"]
+
+[ext_resource type="PackedScene" uid="uid://da3d6rgfss3su" path="res://map/items/pizza/mushroom_slice.tscn" id="1_m4x3a"]
+
+[node name="MushroomPizzaTopping" type="Node3D" unique_id=1982303343]
+
+[node name="CookedMushroomSlice" parent="." unique_id=1762083109 instance=ExtResource("1_m4x3a")]
+transform = Transform3D(0.44027928, 0, 1.2274243, 0, 1.304, 0, -1.2274243, 0, 0.44027928, 0.09475949, 0.075, -0.090857096)
+
+[node name="CookedMushroomSlice2" parent="." unique_id=1383642696 instance=ExtResource("1_m4x3a")]
+transform = Transform3D(1.1608893, 0, 0.59392935, 0, 1.304, 0, -0.59392935, 0, 1.1608893, -0.088593446, 0.075, -0.07241271)
+
+[node name="CookedMushroomSlice3" parent="." unique_id=1087751451 instance=ExtResource("1_m4x3a")]
+transform = Transform3D(-1.2750913, 0, 0.27305326, 0, 1.304, 0, -0.27305326, 0, -1.2750913, 0.090249225, 0.075, 0.075857505)
+
+[node name="CookedMushroomSlice4" parent="." unique_id=298075280 instance=ExtResource("1_m4x3a")]
+transform = Transform3D(1.0739639, 0, -0.73960626, 0, 1.304, 0, 0.73960626, 0, 1.0739639, -0.11389688, 0.075, 0.098924026)
diff --git a/client/map/items/pizza/mushroom_slice.res b/client/map/items/pizza/mushroom_slice.res
new file mode 100644
index 00000000..e50c5a19
--- /dev/null
+++ b/client/map/items/pizza/mushroom_slice.res
Binary files differ
diff --git a/client/map/items/pizza/mushroom_slice.tscn b/client/map/items/pizza/mushroom_slice.tscn
new file mode 100644
index 00000000..fbe1379b
--- /dev/null
+++ b/client/map/items/pizza/mushroom_slice.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://da3d6rgfss3su"]
+
+[ext_resource type="ArrayMesh" uid="uid://b24bxvhik0ab2" path="res://map/items/pizza/mushroom_slice.res" id="1_6tyh4"]
+
+[node name="CookedMushroomSlice" type="Node3D" unique_id=1237055269]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=964430930]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.05)
+mesh = ExtResource("1_6tyh4")
diff --git a/client/map/items/plate.gd b/client/map/items/plate.gd
index e5b86df2..e71b7d0a 100644
--- a/client/map/items/plate.gd
+++ b/client/map/items/plate.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -39,33 +39,54 @@ func add_contents(contents: Array[String]):
contents.append("bun-small")
# Tomato + lettuce salad has a custom mesh
- if contents.has("sliced-tomato") and contents.has("sliced-lettuce") and contents.size() == 2:
+ if G.unordered_array_eq(contents, ["sliced-tomato", "sliced-lettuce"]):
contents.erase("sliced-tomato")
contents.erase("sliced-lettuce")
contents.append("tomato-lettuce-salad")
+ # Noodles + tomato soup has a custom tomato sauce mesh
+ if G.unordered_array_subset(["cooked-noodles", "tomato-soup"], contents):
+ contents.erase("tomato-soup")
+ contents.append("noodles-tomato-fill")
+
+ # Noodles + sliced cheese has a custom cheese mesh
+ if G.unordered_array_subset(["cooked-noodles", "sliced-cheese"], contents):
+ contents.erase("sliced-cheese")
+ contents.append("noodles-cheese-fill")
+
# Stack content items on top of each other
var height_sum := 0.
- for c in contents:
+ for c: String in contents:
var item: Item
match c:
"curry": add_child(PlateFill.new(self, Color(.75, .45, .1)))
- "cheese-leek-soup": add_child(PlateFill.new(self, Color(0.747, 0.77, 0.493)))
+ "cheese-leek-soup":
+ add_child(PlateFill.new(self, Color(0.747, 0.77, 0.493)))
+ add_child(load("res://map/items/sliced_leek/leek_ring_fill.tscn").instantiate())
+ "mushroom-soup":
+ add_child(PlateFill.new(self, Color(0.747, 0.454, 0.36)))
+ add_child(load("res://map/items/mushroom_plate_fill.tscn").instantiate())
"cooked-rice": add_child(load("res://map/items/cooked_rice_fill.tscn").instantiate())
"tomato-lettuce-salad": add_child(load("res://map/items/sliced_tomato_sliced_lettuce_fill.tscn").instantiate())
"tomato-soup": add_child(PlateFill.new(self, Color(1., .3, .2)))
+ "noodles-tomato-fill": add_child(load("res://map/items/noodles_tomato_sauce_fill.tscn").instantiate())
+ "noodles-cheese-fill": add_child(load("res://map/items/noodles_cheese_fill.tscn").instantiate())
"french-fries": base.add_child(load("res://map/items/french_fries_fill.tscn").instantiate())
"bun-small":
var bun = ItemFactory.produce("bun", base)
base.add_child(bun)
bun.scale *= 0.5
bun.position += Vector3(-.1, 0, -.1)
+ "seared-steak": base.add_child(ItemFactory.produce(c, base, .85))
"seared-steak-small":
var seared_steak = ItemFactory.produce("seared-steak", base)
base.add_child(seared_steak)
seared_steak.scale *= 0.5
seared_steak.position += Vector3(.1, 0, .1)
- _: item = ItemFactory.produce(c, base)
+ _:
+ item = ItemFactory.produce(c, base)
+ if c.contains("pizza"):
+ item.scale = Vector3(.7, .7, .7)
if item != null:
base.add_child(item)
item.position.y = height_sum
diff --git a/client/map/items/plate.res b/client/map/items/plate.res
index b57844c3..2890171a 100644
--- a/client/map/items/plate.res
+++ b/client/map/items/plate.res
Binary files differ
diff --git a/client/map/items/plate.tscn b/client/map/items/plate.tscn
index 8503fe81..ca4aac58 100644
--- a/client/map/items/plate.tscn
+++ b/client/map/items/plate.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://daxh3hgia7qyp"]
+[gd_scene format=3 uid="uid://daxh3hgia7qyp"]
[ext_resource type="ArrayMesh" uid="uid://bnku7g8g0ts81" path="res://map/items/plate.res" id="1_70hux"]
-[node name="Plate" type="Node3D"]
+[node name="Plate" type="Node3D" unique_id=351447493]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=279311129]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_70hux")
-skeleton = NodePath("")
diff --git a/client/map/items/plate_fill.gd b/client/map/items/plate_fill.gd
index 057fc11f..fc2a3310 100644
--- a/client/map/items/plate_fill.gd
+++ b/client/map/items/plate_fill.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/plate_fill.res b/client/map/items/plate_fill.res
index 8aad5797..fb198090 100644
--- a/client/map/items/plate_fill.res
+++ b/client/map/items/plate_fill.res
Binary files differ
diff --git a/client/map/items/plate_fill.tscn b/client/map/items/plate_fill.tscn
index 1ba34231..29264c86 100644
--- a/client/map/items/plate_fill.tscn
+++ b/client/map/items/plate_fill.tscn
@@ -1,12 +1,11 @@
-[gd_scene load_steps=3 format=3 uid="uid://btktb7yb1y0yq"]
+[gd_scene format=3 uid="uid://btktb7yb1y0yq"]
[ext_resource type="ArrayMesh" uid="uid://c8l6gbfjikyv3" path="res://map/items/plate_fill.res" id="1_dgygv"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_q0leg"]
resource_local_to_scene = true
-[node name="PlateFill" type="MeshInstance3D"]
+[node name="PlateFill" type="MeshInstance3D" unique_id=601792816]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_dgygv")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_q0leg")
diff --git a/client/map/items/pot.gd b/client/map/items/pot.gd
index 77c8ebd1..06b63f58 100644
--- a/client/map/items/pot.gd
+++ b/client/map/items/pot.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -26,6 +26,8 @@ func _init(owned_by_: Node3D):
func add_contents(contents: Array[String]):
for i in contents:
match i:
+ "cheese":
+ add_child(PotFill.new(self, Color(0.99, 0.75, 0.337, 1.0)))
"cheese-leek-soup":
add_child(PotFill.new(self, Color(0.747, 0.77, 0.493)))
"mochi-dough":
@@ -43,6 +45,15 @@ func add_contents(contents: Array[String]):
leek.rotation_degrees = Vector3(-75.5, 0, -25)
leek.position = Vector3(.03, .1, .25)
base.add_child(leek)
+ "cooked-noodles":
+ base.add_child(ItemFactory.produce(i, self, .85))
+ "noodles":
+ add_child(PotFillTransparent.new(self, Color(0.46, 0.68, 0.73, 0.392))) # water
+ base.add_child(ItemFactory.produce(i, self, .85))
+ "processed-mushroom":
+ add_child(PotFill.new(self, Color(0.596, 0.341, 0.259)))
+ "mushroom-soup":
+ add_child(PotFill.new(self, Color(0.747, 0.454, 0.36, 1.0)))
"cooked-rice":
add_child(PotFill.new(self, Color(1.,1.,1.)))
"curry":
diff --git a/client/map/items/pot.res b/client/map/items/pot.res
index df67fed3..827e6e28 100644
--- a/client/map/items/pot.res
+++ b/client/map/items/pot.res
Binary files differ
diff --git a/client/map/items/pot.tscn b/client/map/items/pot.tscn
index f823cae2..68a6f440 100644
--- a/client/map/items/pot.tscn
+++ b/client/map/items/pot.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://df0hhdcyubyid"]
+[gd_scene format=3 uid="uid://df0hhdcyubyid"]
[ext_resource type="ArrayMesh" uid="uid://dm14h4sasn2bm" path="res://map/items/pot.res" id="1_41enh"]
-[node name="Pot" type="Node3D"]
+[node name="Pot" type="Node3D" unique_id=1778291833]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=955140522]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_41enh")
-skeleton = NodePath("")
diff --git a/client/map/items/pot_fill.gd b/client/map/items/pot_fill.gd
index 0a59038d..e8dfaa1e 100644
--- a/client/map/items/pot_fill.gd
+++ b/client/map/items/pot_fill.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/pot_fill.res b/client/map/items/pot_fill.res
index 06c8590c..94942edb 100644
--- a/client/map/items/pot_fill.res
+++ b/client/map/items/pot_fill.res
Binary files differ
diff --git a/client/map/items/pot_fill.tscn b/client/map/items/pot_fill.tscn
index 2b3a1eda..674899ad 100644
--- a/client/map/items/pot_fill.tscn
+++ b/client/map/items/pot_fill.tscn
@@ -1,12 +1,11 @@
-[gd_scene load_steps=3 format=3 uid="uid://cwo8o5a6f5p4i"]
+[gd_scene format=3 uid="uid://cwo8o5a6f5p4i"]
[ext_resource type="ArrayMesh" uid="uid://bduftri3viodq" path="res://map/items/pot_fill.res" id="1_5suf6"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_djkvw"]
resource_local_to_scene = true
-[node name="PotFill" type="MeshInstance3D"]
+[node name="PotFill" type="MeshInstance3D" unique_id=1219055572]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_5suf6")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_djkvw")
diff --git a/client/map/items/pot_fill_transparent.gd b/client/map/items/pot_fill_transparent.gd
new file mode 100644
index 00000000..f8585733
--- /dev/null
+++ b/client/map/items/pot_fill_transparent.gd
@@ -0,0 +1,22 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name PotFillTransparent
+extends PotFill
+
+func _init(owned_by_: Node3D, c: Color):
+ super(owned_by_, c)
+ var mat: BaseMaterial3D = fill.get_active_material(0)
+ mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
diff --git a/client/map/items/pot_fill_transparent.gd.uid b/client/map/items/pot_fill_transparent.gd.uid
new file mode 100644
index 00000000..863ef626
--- /dev/null
+++ b/client/map/items/pot_fill_transparent.gd.uid
@@ -0,0 +1 @@
+uid://b7mtr0omy3nx4
diff --git a/client/map/items/potato.res b/client/map/items/potato.res
index 1a920e6f..3e54bece 100644
--- a/client/map/items/potato.res
+++ b/client/map/items/potato.res
Binary files differ
diff --git a/client/map/items/potato.tscn b/client/map/items/potato.tscn
index b57b2bbf..7d97b648 100644
--- a/client/map/items/potato.tscn
+++ b/client/map/items/potato.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dw24qu0oscohw"]
+[gd_scene format=3 uid="uid://dw24qu0oscohw"]
[ext_resource type="ArrayMesh" uid="uid://hj2dib0t8em3" path="res://map/items/potato.res" id="1_rg7i5"]
-[node name="Potato" type="Node3D"]
+[node name="Potato" type="Node3D" unique_id=1149637460]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=544200943]
transform = Transform3D(-0.07814168, -2.3085807e-08, -0.44316345, -0.44316345, -1.937129e-08, 0.07814168, -2.3085807e-08, 0.45, -1.937129e-08, 0, 0.1, 0)
mesh = ExtResource("1_rg7i5")
-skeleton = NodePath("")
diff --git a/client/map/items/processing.tscn b/client/map/items/processing.tscn
index f8deb6be..28f785fa 100644
--- a/client/map/items/processing.tscn
+++ b/client/map/items/processing.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://sk5i14bxi0qr"]
+[gd_scene format=3 uid="uid://sk5i14bxi0qr"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tqrr3"]
vertex_color_use_as_albedo = true
@@ -8,7 +8,7 @@ material = SubResource("StandardMaterial3D_tqrr3")
radius = 0.1
height = 0.2
-[node name="Processing" type="CPUParticles3D"]
+[node name="Processing" type="CPUParticles3D" unique_id=412007652]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
emitting = false
amount = 15
@@ -19,6 +19,7 @@ emission_ring_axis = Vector3(0, 1, 0)
emission_ring_height = 0.2
emission_ring_radius = 0.1
emission_ring_inner_radius = 0.0
+emission_ring_cone_angle = 90.0
direction = Vector3(0, 1, 0)
spread = 180.0
gravity = Vector3(0, 0, 0)
diff --git a/client/map/items/raw_pizza.tscn b/client/map/items/raw_pizza.tscn
new file mode 100644
index 00000000..5b7359cf
--- /dev/null
+++ b/client/map/items/raw_pizza.tscn
@@ -0,0 +1,11 @@
+[gd_scene format=3 uid="uid://d18w3kwuaehvv"]
+
+[ext_resource type="ArrayMesh" uid="uid://cwstqugiw76tc" path="res://map/items/pizza.res" id="1_lcgk8"]
+[ext_resource type="Material" uid="uid://cg7o7rn06bve1" path="res://map/items/dough_material.tres" id="2_snge3"]
+
+[node name="RawPizza" type="Node3D" unique_id=1513785364]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=449857524]
+transform = Transform3D(0.3, 0, 0, 0, 0.05, 0, 0, 0, 0.3, 0, 0.05, 0)
+mesh = ExtResource("1_lcgk8")
+surface_material_override/0 = ExtResource("2_snge3")
diff --git a/client/map/items/rice.res b/client/map/items/rice.res
index f9a6a81c..d57d301b 100644
--- a/client/map/items/rice.res
+++ b/client/map/items/rice.res
Binary files differ
diff --git a/client/map/items/rice.tscn b/client/map/items/rice.tscn
index bb41f3e8..03f69422 100644
--- a/client/map/items/rice.tscn
+++ b/client/map/items/rice.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://rs4b17lp80cx"]
+[gd_scene format=3 uid="uid://rs4b17lp80cx"]
[ext_resource type="ArrayMesh" uid="uid://cclj4k0d1d1qk" path="res://map/items/rice.res" id="1_fmn8b"]
-[node name="Rice" type="Node3D"]
+[node name="Rice" type="Node3D" unique_id=132148842]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1049224626]
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
mesh = ExtResource("1_fmn8b")
-skeleton = NodePath("")
diff --git a/client/map/items/rice_content.res b/client/map/items/rice_content.res
index 0f5dd44d..9aba9cfc 100644
--- a/client/map/items/rice_content.res
+++ b/client/map/items/rice_content.res
Binary files differ
diff --git a/client/map/items/rice_content.tscn b/client/map/items/rice_content.tscn
index 71038a4e..cc042d0a 100644
--- a/client/map/items/rice_content.tscn
+++ b/client/map/items/rice_content.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://do4qxd1d1x7cc"]
+[gd_scene format=3 uid="uid://do4qxd1d1x7cc"]
[ext_resource type="ArrayMesh" uid="uid://dfvubawp7vieh" path="res://map/items/rice_content.res" id="1_r5kmu"]
@@ -6,8 +6,7 @@
resource_local_to_scene = true
albedo_color = Color(0.933333, 0.933333, 0.666667, 1)
-[node name="RiceContent" type="MeshInstance3D"]
+[node name="RiceContent" type="MeshInstance3D" unique_id=867972096]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_r5kmu")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_ce6yj")
diff --git a/client/map/items/rolled_dough.gd b/client/map/items/rolled_dough.gd
index cd59d907..3d0b5d25 100644
--- a/client/map/items/rolled_dough.gd
+++ b/client/map/items/rolled_dough.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,10 +16,20 @@
class_name RolledDough
extends Item
-
func _init(owned_by_: Node3D):
super(owned_by_)
- add_child(load("res://map/items/rolled_dough.tscn").instantiate())
func add_contents(contents: Array[String]):
- super(contents)
+ contents.sort()
+
+ if contents.has("tomato-juice"):
+ base.add_child(load("res://map/items/raw_pizza.tscn").instantiate())
+ else:
+ base.add_child(load("res://map/items/rolled_dough.tscn").instantiate())
+
+ for c: String in contents:
+ match c:
+ "tomato-juice": continue
+ "sliced-cheese": base.add_child(load("res://map/items/pizza/cheese_pizza_topping.tscn").instantiate())
+ "sliced-mushroom": base.add_child(load("res://map/items/pizza/mushroom_pizza_topping.tscn").instantiate())
+ _: base.add_child(UnknownItem.new(owned_by, c))
diff --git a/client/map/items/rolled_dough.res b/client/map/items/rolled_dough.res
index 2759b731..c432a638 100644
--- a/client/map/items/rolled_dough.res
+++ b/client/map/items/rolled_dough.res
Binary files differ
diff --git a/client/map/items/rolled_dough.tscn b/client/map/items/rolled_dough.tscn
index 04577c96..0fc9c103 100644
--- a/client/map/items/rolled_dough.tscn
+++ b/client/map/items/rolled_dough.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dwfvdvvgenyn5"]
+[gd_scene format=3 uid="uid://dwfvdvvgenyn5"]
[ext_resource type="ArrayMesh" uid="uid://dtqjpqwxq5mvn" path="res://map/items/rolled_dough.res" id="1_uyf2v"]
-[node name="RolledDough" type="Node3D"]
+[node name="RolledDough" type="Node3D" unique_id=1623668918]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1841908103]
transform = Transform3D(0.3, 0, 0, 0, 0.05, 0, 0, 0, 0.3, 0, 0.05, 0)
mesh = ExtResource("1_uyf2v")
-skeleton = NodePath("")
diff --git a/client/map/items/seared_patty.res b/client/map/items/seared_patty.res
index 255b95df..d7ac0a30 100644
--- a/client/map/items/seared_patty.res
+++ b/client/map/items/seared_patty.res
Binary files differ
diff --git a/client/map/items/seared_patty.tscn b/client/map/items/seared_patty.tscn
index 7ffe65f2..d72e2681 100644
--- a/client/map/items/seared_patty.tscn
+++ b/client/map/items/seared_patty.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dfriokxmga3c8"]
+[gd_scene format=3 uid="uid://dfriokxmga3c8"]
[ext_resource type="ArrayMesh" uid="uid://dl8hstmmdkog4" path="res://map/items/seared_patty.res" id="1_gy1aa"]
-[node name="SearedPatty" type="Node3D"]
+[node name="SearedPatty" type="Node3D" unique_id=580728218]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1808379124]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_gy1aa")
-skeleton = NodePath("")
diff --git a/client/map/items/seared_steak.res b/client/map/items/seared_steak.res
index 32c784fb..b91da335 100644
--- a/client/map/items/seared_steak.res
+++ b/client/map/items/seared_steak.res
Binary files differ
diff --git a/client/map/items/seared_steak.tscn b/client/map/items/seared_steak.tscn
index 8592e851..ee7797f4 100644
--- a/client/map/items/seared_steak.tscn
+++ b/client/map/items/seared_steak.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://c70af18pms3gw"]
+[gd_scene format=3 uid="uid://c70af18pms3gw"]
[ext_resource type="ArrayMesh" uid="uid://kfod37qy5sx" path="res://map/items/seared_steak.res" id="1_keoxi"]
-[node name="Steak" type="Node3D"]
+[node name="Steak" type="Node3D" unique_id=201918396]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=151167089]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_keoxi")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_bun.tscn b/client/map/items/sliced_bun.tscn
index 961d0f70..48b0b303 100644
--- a/client/map/items/sliced_bun.tscn
+++ b/client/map/items/sliced_bun.tscn
@@ -1,16 +1,14 @@
-[gd_scene load_steps=3 format=3 uid="uid://cm88wpf64l4fu"]
+[gd_scene format=3 uid="uid://cm88wpf64l4fu"]
[ext_resource type="ArrayMesh" uid="uid://c1qyv55xpv30n" path="res://map/items/sliced_bun_bottom.res" id="1_plvi5"]
[ext_resource type="ArrayMesh" uid="uid://dy180cecs6rb1" path="res://map/items/sliced_bun_top.res" id="2_l6cg2"]
-[node name="SlicedBun" type="Node3D"]
+[node name="SlicedBun" type="Node3D" unique_id=289245464]
-[node name="MeshBottom" type="MeshInstance3D" parent="."]
+[node name="MeshBottom" type="MeshInstance3D" parent="." unique_id=2050604098]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_plvi5")
-skeleton = NodePath("")
-[node name="MeshTop" type="MeshInstance3D" parent="."]
+[node name="MeshTop" type="MeshInstance3D" parent="." unique_id=1553309169]
transform = Transform3D(0.433013, 0.25, 0, -0.25, 0.433013, 0, 0, 0, 0.5, 0.18, 0.08, 0)
mesh = ExtResource("2_l6cg2")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_bun_bottom.res b/client/map/items/sliced_bun_bottom.res
index df7bab99..350e9693 100644
--- a/client/map/items/sliced_bun_bottom.res
+++ b/client/map/items/sliced_bun_bottom.res
Binary files differ
diff --git a/client/map/items/sliced_bun_bottom.tscn b/client/map/items/sliced_bun_bottom.tscn
index 573dba13..45e7af68 100644
--- a/client/map/items/sliced_bun_bottom.tscn
+++ b/client/map/items/sliced_bun_bottom.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://djtfnj11lljke"]
+[gd_scene format=3 uid="uid://djtfnj11lljke"]
[ext_resource type="ArrayMesh" uid="uid://c1qyv55xpv30n" path="res://map/items/sliced_bun_bottom.res" id="1_ekr5f"]
-[node name="SlicedBunBottom" type="Node3D"]
+[node name="SlicedBunBottom" type="Node3D" unique_id=1954514598]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=234719865]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_ekr5f")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_bun_top.res b/client/map/items/sliced_bun_top.res
index fc88dcbe..4d4d57fc 100644
--- a/client/map/items/sliced_bun_top.res
+++ b/client/map/items/sliced_bun_top.res
Binary files differ
diff --git a/client/map/items/sliced_bun_top.tscn b/client/map/items/sliced_bun_top.tscn
index 403ecea7..b57c72ef 100644
--- a/client/map/items/sliced_bun_top.tscn
+++ b/client/map/items/sliced_bun_top.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cpmnp5sy6fwbe"]
+[gd_scene format=3 uid="uid://cpmnp5sy6fwbe"]
[ext_resource type="ArrayMesh" uid="uid://dy180cecs6rb1" path="res://map/items/sliced_bun_top.res" id="1_q5w8k"]
-[node name="SlicedBunTop" type="Node3D"]
+[node name="SlicedBunTop" type="Node3D" unique_id=45817428]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=487537457]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_q5w8k")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_cheese.res b/client/map/items/sliced_cheese.res
index ece9c0e0..799e4508 100644
--- a/client/map/items/sliced_cheese.res
+++ b/client/map/items/sliced_cheese.res
Binary files differ
diff --git a/client/map/items/sliced_cheese.tscn b/client/map/items/sliced_cheese.tscn
index 4e9ba406..22a6df5f 100644
--- a/client/map/items/sliced_cheese.tscn
+++ b/client/map/items/sliced_cheese.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cfdfhxgo4ot7m"]
+[gd_scene format=3 uid="uid://cfdfhxgo4ot7m"]
[ext_resource type="ArrayMesh" uid="uid://2qsg2dadmf1y" path="res://map/items/sliced_cheese.res" id="1_bbycg"]
-[node name="SlicedCheese" type="Node3D"]
+[node name="SlicedCheese" type="Node3D" unique_id=1506920915]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1120946141]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.04, 0)
mesh = ExtResource("1_bbycg")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_fish.res b/client/map/items/sliced_fish.res
index 9937a93b..a7d27cf5 100644
--- a/client/map/items/sliced_fish.res
+++ b/client/map/items/sliced_fish.res
Binary files differ
diff --git a/client/map/items/sliced_fish.tscn b/client/map/items/sliced_fish.tscn
index 5e60f301..d6ed4bec 100644
--- a/client/map/items/sliced_fish.tscn
+++ b/client/map/items/sliced_fish.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dxs04puo5ow7u"]
+[gd_scene format=3 uid="uid://dxs04puo5ow7u"]
[ext_resource type="ArrayMesh" uid="uid://c3pxaxxbv721y" path="res://map/items/sliced_fish.res" id="1_nt0xc"]
-[node name="SlicedFish" type="Node3D"]
+[node name="SlicedFish" type="Node3D" unique_id=1546314626]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1817309076]
transform = Transform3D(0.1, 0, 0, 0, -4.37114e-09, -0.1, 0, 0.1, -4.37114e-09, 0, 0.045, 0)
mesh = ExtResource("1_nt0xc")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_leek/leek_ring.res b/client/map/items/sliced_leek/leek_ring.res
new file mode 100644
index 00000000..78d57354
--- /dev/null
+++ b/client/map/items/sliced_leek/leek_ring.res
Binary files differ
diff --git a/client/map/items/sliced_leek/leek_ring.tscn b/client/map/items/sliced_leek/leek_ring.tscn
new file mode 100644
index 00000000..a8575b05
--- /dev/null
+++ b/client/map/items/sliced_leek/leek_ring.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://b25ajkbydfoi8"]
+
+[ext_resource type="ArrayMesh" uid="uid://ck1dtslyq0xqk" path="res://map/items/sliced_leek/leek_ring.res" id="1_wdt75"]
+
+[node name="LeekRing" type="Node3D" unique_id=6349426]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=207039888]
+transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
+mesh = ExtResource("1_wdt75")
diff --git a/client/map/items/sliced_leek/leek_ring_fill.tscn b/client/map/items/sliced_leek/leek_ring_fill.tscn
new file mode 100644
index 00000000..83fc2542
--- /dev/null
+++ b/client/map/items/sliced_leek/leek_ring_fill.tscn
@@ -0,0 +1,14 @@
+[gd_scene format=3 uid="uid://y7mg0uh4ghxe"]
+
+[ext_resource type="PackedScene" uid="uid://b25ajkbydfoi8" path="res://map/items/sliced_leek/leek_ring.tscn" id="1_cb47f"]
+
+[node name="LeekRingFill" type="Node3D" unique_id=1649292111]
+
+[node name="LeekRing" parent="." unique_id=601839974 instance=ExtResource("1_cb47f")]
+transform = Transform3D(0.5, 0, 0, 0, 0.4, 0, 0, 0, 0.5, 0.053702652, 0.04, -0.082)
+
+[node name="LeekRing2" parent="." unique_id=871702627 instance=ExtResource("1_cb47f")]
+transform = Transform3D(0.5, 0, 0, 0, 0.4, 0, 0, 0, 0.5, -0.09291987, 0.04, 0.0293293)
+
+[node name="LeekRing3" parent="." unique_id=1947059454 instance=ExtResource("1_cb47f")]
+transform = Transform3D(0.5, 0, 0, 0, 0.4, 0, 0, 0, 0.5, 0.05727595, 0.04, 0.08234578)
diff --git a/client/map/items/sliced_leek/sliced_leek.tscn b/client/map/items/sliced_leek/sliced_leek.tscn
index 701f4844..8d8bc2d7 100644
--- a/client/map/items/sliced_leek/sliced_leek.tscn
+++ b/client/map/items/sliced_leek/sliced_leek.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://dght3ftij5nx6"]
+[gd_scene format=3 uid="uid://dght3ftij5nx6"]
[ext_resource type="ArrayMesh" uid="uid://bjb2vxii3mkny" path="res://map/items/sliced_leek/sliced_leek_1.res" id="1_ub7pe"]
[ext_resource type="ArrayMesh" uid="uid://bthgt3jvyaet5" path="res://map/items/sliced_leek/sliced_leek_2.res" id="2_krib3"]
@@ -6,32 +6,27 @@
[ext_resource type="ArrayMesh" uid="uid://deqd1uok1ahtn" path="res://map/items/sliced_leek/sliced_leek_4.res" id="4_eia2k"]
[ext_resource type="ArrayMesh" uid="uid://cl36j3pufjfil" path="res://map/items/sliced_leek/sliced_leek_5.res" id="5_26kjl"]
-[node name="SlicedLeek" type="Node3D"]
+[node name="SlicedLeek" type="Node3D" unique_id=754926403]
-[node name="Node3D" type="Node3D" parent="."]
+[node name="Node3D" type="Node3D" parent="." unique_id=1618880656]
transform = Transform3D(-7.649493e-08, 0, 1.75, 0, 1.75, 0, -1.75, 0, -7.649493e-08, 0, 0, 0)
-[node name="leek_001" type="MeshInstance3D" parent="Node3D"]
+[node name="leek_001" type="MeshInstance3D" parent="Node3D" unique_id=1739603265]
transform = Transform3D(1, 0, 0, 0, 0.591008, 0.61566144, 0, -0.4617461, 0.7880107, 0, 0.03454741, 0.09892485)
mesh = ExtResource("1_ub7pe")
-skeleton = NodePath("")
-[node name="leek_002" type="MeshInstance3D" parent="Node3D"]
+[node name="leek_002" type="MeshInstance3D" parent="Node3D" unique_id=10737438]
transform = Transform3D(1, 0, 0, 0, 0.591008, 0.61566144, 0, -0.4617461, 0.7880107, -2.0835932e-06, 0.03454531, 0.04651942)
mesh = ExtResource("2_krib3")
-skeleton = NodePath("")
-[node name="leek_003" type="MeshInstance3D" parent="Node3D"]
+[node name="leek_003" type="MeshInstance3D" parent="Node3D" unique_id=1275702161]
transform = Transform3D(1, 0, 0, 0, 0.591008, 0.61566144, 0, -0.4617461, 0.7880107, -2.0874368e-06, 0.034545287, -0.004093088)
mesh = ExtResource("3_eq1cv")
-skeleton = NodePath("")
-[node name="leek_004" type="MeshInstance3D" parent="Node3D"]
+[node name="leek_004" type="MeshInstance3D" parent="Node3D" unique_id=2052531974]
transform = Transform3D(1, 0, 0, 0, 0.591008, 0.61566144, 0, -0.4617461, 0.7880107, -2.085316e-06, 0.03454527, -0.05421468)
mesh = ExtResource("4_eia2k")
-skeleton = NodePath("")
-[node name="leek_005" type="MeshInstance3D" parent="Node3D"]
+[node name="leek_005" type="MeshInstance3D" parent="Node3D" unique_id=1421505896]
transform = Transform3D(1, 0, 0, 0, 0.591008, 0.61566144, 0, -0.4617461, 0.7880107, -2.0847467e-06, 0.034545254, -0.10421119)
mesh = ExtResource("5_26kjl")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_leek/sliced_leek_1.res b/client/map/items/sliced_leek/sliced_leek_1.res
index 9a786370..dc5275d5 100644
--- a/client/map/items/sliced_leek/sliced_leek_1.res
+++ b/client/map/items/sliced_leek/sliced_leek_1.res
Binary files differ
diff --git a/client/map/items/sliced_leek/sliced_leek_2.res b/client/map/items/sliced_leek/sliced_leek_2.res
index 3234cd54..c0d7ccd3 100644
--- a/client/map/items/sliced_leek/sliced_leek_2.res
+++ b/client/map/items/sliced_leek/sliced_leek_2.res
Binary files differ
diff --git a/client/map/items/sliced_leek/sliced_leek_3.res b/client/map/items/sliced_leek/sliced_leek_3.res
index 2165204a..2fe303a4 100644
--- a/client/map/items/sliced_leek/sliced_leek_3.res
+++ b/client/map/items/sliced_leek/sliced_leek_3.res
Binary files differ
diff --git a/client/map/items/sliced_leek/sliced_leek_4.res b/client/map/items/sliced_leek/sliced_leek_4.res
index 05d54114..32c02690 100644
--- a/client/map/items/sliced_leek/sliced_leek_4.res
+++ b/client/map/items/sliced_leek/sliced_leek_4.res
Binary files differ
diff --git a/client/map/items/sliced_leek/sliced_leek_5.res b/client/map/items/sliced_leek/sliced_leek_5.res
index 90f4d4b2..93f9e009 100644
--- a/client/map/items/sliced_leek/sliced_leek_5.res
+++ b/client/map/items/sliced_leek/sliced_leek_5.res
Binary files differ
diff --git a/client/map/items/sliced_leek/sliced_leek_6.res b/client/map/items/sliced_leek/sliced_leek_6.res
index db0baeda..1cd6c906 100644
--- a/client/map/items/sliced_leek/sliced_leek_6.res
+++ b/client/map/items/sliced_leek/sliced_leek_6.res
Binary files differ
diff --git a/client/map/items/sliced_lettuce.res b/client/map/items/sliced_lettuce.res
index 1a748947..40cb0702 100644
--- a/client/map/items/sliced_lettuce.res
+++ b/client/map/items/sliced_lettuce.res
Binary files differ
diff --git a/client/map/items/sliced_lettuce.tscn b/client/map/items/sliced_lettuce.tscn
index f2840059..d5ec39ed 100644
--- a/client/map/items/sliced_lettuce.tscn
+++ b/client/map/items/sliced_lettuce.tscn
@@ -1,11 +1,10 @@
-[gd_scene load_steps=2 format=3 uid="uid://c8tjoqcdn1gpj"]
+[gd_scene format=3 uid="uid://c8tjoqcdn1gpj"]
[ext_resource type="ArrayMesh" uid="uid://jkb0e8d584uo" path="res://map/items/sliced_lettuce.res" id="1_y7x7n"]
-[node name="SlicedLettuce" type="Node3D"]
+[node name="SlicedLettuce" type="Node3D" unique_id=814161375]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.01, 0)
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=189735380]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.01, 0)
mesh = ExtResource("1_y7x7n")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_mushroom.res b/client/map/items/sliced_mushroom.res
new file mode 100644
index 00000000..94b17fe4
--- /dev/null
+++ b/client/map/items/sliced_mushroom.res
Binary files differ
diff --git a/client/map/items/sliced_mushroom.tscn b/client/map/items/sliced_mushroom.tscn
new file mode 100644
index 00000000..17945fc0
--- /dev/null
+++ b/client/map/items/sliced_mushroom.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://8waoyr3a7c6q"]
+
+[ext_resource type="ArrayMesh" uid="uid://13uivbfdn4kb" path="res://map/items/sliced_mushroom.res" id="1_4k44b"]
+
+[node name="SlicedMushroom" type="Node3D" unique_id=771921867]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1483580511]
+transform = Transform3D(0.8, 0, 0, 0, -0.7250462, -0.33809468, 0, 0.33809468, -0.7250462, 0, 0.059715845, 0.1)
+mesh = ExtResource("1_4k44b")
diff --git a/client/map/items/sliced_potato.tscn b/client/map/items/sliced_potato.tscn
index ec48414d..f64eafd3 100644
--- a/client/map/items/sliced_potato.tscn
+++ b/client/map/items/sliced_potato.tscn
@@ -1,14 +1,13 @@
-[gd_scene load_steps=3 format=3 uid="uid://b85iw6rv2snx8"]
+[gd_scene format=3 uid="uid://b85iw6rv2snx8"]
[ext_resource type="ArrayMesh" uid="uid://b4ayvyhakbe7t" path="res://map/items/french_fries.res" id="1_ikao7"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qhqrd"]
albedo_color = Color(0.88, 0.7546, 0.484, 1)
-[node name="SlicedPotato" type="Node3D"]
+[node name="SlicedPotato" type="Node3D" unique_id=552755740]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=983811931]
transform = Transform3D(0.75, 0, 0, 0, 0.75, 0, 0, 0, 0.75, 0, 0, -0.112)
mesh = ExtResource("1_ikao7")
-skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_qhqrd")
diff --git a/client/map/items/sliced_tomato.res b/client/map/items/sliced_tomato.res
index 3594e6f9..37996910 100644
--- a/client/map/items/sliced_tomato.res
+++ b/client/map/items/sliced_tomato.res
Binary files differ
diff --git a/client/map/items/sliced_tomato.tscn b/client/map/items/sliced_tomato.tscn
index 28ba45f4..9ea93827 100644
--- a/client/map/items/sliced_tomato.tscn
+++ b/client/map/items/sliced_tomato.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://8u4yp0323kiw"]
+[gd_scene format=3 uid="uid://8u4yp0323kiw"]
[ext_resource type="ArrayMesh" uid="uid://cwjqxolxw0ttl" path="res://map/items/sliced_tomato.res" id="1_6yvlk"]
-[node name="SlicedTomato" type="Node3D"]
+[node name="SlicedTomato" type="Node3D" unique_id=1212521096]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=642983217]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_6yvlk")
-skeleton = NodePath("")
diff --git a/client/map/items/sliced_tomato_sliced_lettuce_fill.tscn b/client/map/items/sliced_tomato_sliced_lettuce_fill.tscn
index 75ef95f1..4d0c4c4f 100644
--- a/client/map/items/sliced_tomato_sliced_lettuce_fill.tscn
+++ b/client/map/items/sliced_tomato_sliced_lettuce_fill.tscn
@@ -1,35 +1,35 @@
-[gd_scene load_steps=3 format=3 uid="uid://cy12k7ghclh2g"]
+[gd_scene format=3 uid="uid://cy12k7ghclh2g"]
[ext_resource type="ArrayMesh" uid="uid://cwjqxolxw0ttl" path="res://map/items/sliced_tomato.res" id="1_gnakr"]
[ext_resource type="ArrayMesh" uid="uid://jkb0e8d584uo" path="res://map/items/sliced_lettuce.res" id="3_6hedi"]
-[node name="SlicedTomatoFill" type="Node3D"]
+[node name="SlicedTomatoFill" type="Node3D" unique_id=1588553817]
-[node name="Mesh8" type="MeshInstance3D" parent="."]
+[node name="Mesh8" type="MeshInstance3D" parent="." unique_id=1786817704]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, -0.1, 0.04, 0)
mesh = ExtResource("1_gnakr")
-[node name="Mesh11" type="MeshInstance3D" parent="."]
+[node name="Mesh11" type="MeshInstance3D" parent="." unique_id=64683158]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0.1, 0.04, 0)
mesh = ExtResource("1_gnakr")
-[node name="Mesh12" type="MeshInstance3D" parent="."]
+[node name="Mesh12" type="MeshInstance3D" parent="." unique_id=1975270560]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0.04, 0.1)
mesh = ExtResource("1_gnakr")
-[node name="Mesh13" type="MeshInstance3D" parent="."]
+[node name="Mesh13" type="MeshInstance3D" parent="." unique_id=1081920419]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0.04, -0.1)
mesh = ExtResource("1_gnakr")
-[node name="Mesh9" type="MeshInstance3D" parent="."]
+[node name="Mesh9" type="MeshInstance3D" parent="." unique_id=1635978560]
transform = Transform3D(0.28, 0, 0, 0, 0.28, 0, 0, 0, 0.28, 0.0815632, 0.0377627, -0.0198822)
visible = false
mesh = ExtResource("1_gnakr")
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=364673189]
transform = Transform3D(0.45, 0, 0, 0, 0.45, 0, 0, 0, 0.45, 0, 0.025, 0)
mesh = ExtResource("3_6hedi")
-[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D4" type="MeshInstance3D" parent="." unique_id=196525840]
transform = Transform3D(0.279, 0, 0, 0, 0.279, 0, 0, 0, 0.279, 0, 0.075, 0)
mesh = ExtResource("3_6hedi")
diff --git a/client/map/items/steak.res b/client/map/items/steak.res
index 8deb7f8a..21d27302 100644
--- a/client/map/items/steak.res
+++ b/client/map/items/steak.res
Binary files differ
diff --git a/client/map/items/steak.tscn b/client/map/items/steak.tscn
index 59846d8a..8efb2b19 100644
--- a/client/map/items/steak.tscn
+++ b/client/map/items/steak.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://c8ylx2rsklp2y"]
+[gd_scene format=3 uid="uid://c8ylx2rsklp2y"]
[ext_resource type="ArrayMesh" uid="uid://tuorjx63f0ij" path="res://map/items/steak.res" id="1_iei2f"]
-[node name="Steak" type="Node3D"]
+[node name="Steak" type="Node3D" unique_id=273592414]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=683408760]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_iei2f")
-skeleton = NodePath("")
diff --git a/client/map/items/steam.tscn b/client/map/items/steam.tscn
index a6114124..2097c1ee 100644
--- a/client/map/items/steam.tscn
+++ b/client/map/items/steam.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=4 format=3 uid="uid://g1wsqgb56o1o"]
+[gd_scene format=3 uid="uid://g1wsqgb56o1o"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e1q7j"]
transparency = 1
@@ -13,7 +13,7 @@ height = 0.2
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.10989), 0.0, 0.0, 0, 0]
point_count = 2
-[node name="Steam" type="CPUParticles3D"]
+[node name="Steam" type="CPUParticles3D" unique_id=1010015344]
emitting = false
amount = 25
lifetime = 2.0
diff --git a/client/map/items/strawberry.res b/client/map/items/strawberry.res
index 60da68ed..b92780ef 100644
--- a/client/map/items/strawberry.res
+++ b/client/map/items/strawberry.res
Binary files differ
diff --git a/client/map/items/strawberry.tscn b/client/map/items/strawberry.tscn
index 90df0c3c..cc9464e0 100644
--- a/client/map/items/strawberry.tscn
+++ b/client/map/items/strawberry.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://df1xktleeqg3m"]
+[gd_scene format=3 uid="uid://df1xktleeqg3m"]
[ext_resource type="ArrayMesh" uid="uid://c2uwqjxx7mnqp" path="res://map/items/strawberry.res" id="1_8dx1o"]
-[node name="Strawberry" type="Node3D"]
+[node name="Strawberry" type="Node3D" unique_id=613205790]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1524130613]
transform = Transform3D(-5.68248e-10, 1.1365e-09, 0.013, 0, -0.013, 1.1365e-09, 0.013, 4.96778e-17, 5.68248e-10, 0, 0.125, 0)
mesh = ExtResource("1_8dx1o")
-skeleton = NodePath("")
diff --git a/client/map/items/tomato.res b/client/map/items/tomato.res
index aafc8738..77d921cf 100644
--- a/client/map/items/tomato.res
+++ b/client/map/items/tomato.res
Binary files differ
diff --git a/client/map/items/tomato.tscn b/client/map/items/tomato.tscn
index 4589cca5..e68801d8 100644
--- a/client/map/items/tomato.tscn
+++ b/client/map/items/tomato.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cvgmmrm8xqg4t"]
+[gd_scene format=3 uid="uid://cvgmmrm8xqg4t"]
[ext_resource type="ArrayMesh" uid="uid://bh5t6gqdxv1t8" path="res://map/items/tomato.res" id="1_8xuup"]
-[node name="Tomato" type="Node3D"]
+[node name="Tomato" type="Node3D" unique_id=256268001]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1541018452]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_8xuup")
-skeleton = NodePath("")
diff --git a/client/map/items/unknown_item.gd b/client/map/items/unknown_item.gd
index ec6cab1a..da43eb08 100644
--- a/client/map/items/unknown_item.gd
+++ b/client/map/items/unknown_item.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/items/unknown_item.tscn b/client/map/items/unknown_item.tscn
index 5e8b317a..fa838e9b 100644
--- a/client/map/items/unknown_item.tscn
+++ b/client/map/items/unknown_item.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://cw54drt6oqxpd"]
+[gd_scene format=3 uid="uid://cw54drt6oqxpd"]
[sub_resource type="BoxMesh" id="BoxMesh_e6d7n"]
@@ -7,9 +7,9 @@ albedo_color = Color(1, 0, 1, 1)
emission_enabled = true
emission = Color(1, 0, 1, 1)
-[node name="UnknownItem" type="Node3D"]
+[node name="UnknownItem" type="Node3D" unique_id=1035215297]
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1034064644]
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0, 0.2, 0)
mesh = SubResource("BoxMesh_e6d7n")
surface_material_override/0 = SubResource("StandardMaterial3D_voy47")
diff --git a/client/map/items/unknown_order.tscn b/client/map/items/unknown_order.tscn
index 24116387..558be6f4 100644
--- a/client/map/items/unknown_order.tscn
+++ b/client/map/items/unknown_order.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=3 format=3 uid="uid://dgg7srscxmtmy"]
+[gd_scene format=3 uid="uid://dgg7srscxmtmy"]
[ext_resource type="FontFile" uid="uid://bo4vh5xkpvrh1" path="res://gui/resources/fonts/font-sansita-swashed.woff2" id="1_3pq52"]
@@ -8,9 +8,9 @@ variation_opentype = {
2003265652: 700
}
-[node name="UnknownOrder" type="Node3D"]
+[node name="UnknownOrder" type="Node3D" unique_id=1440369537]
-[node name="Label3D" type="Label3D" parent="."]
+[node name="Label3D" type="Label3D" parent="." unique_id=717159416]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.189058, 0)
pixel_size = 0.0025
billboard = 1
diff --git a/client/map/kitchen_background.gd b/client/map/kitchen_background.gd
index 4b728a94..456aa598 100644
--- a/client/map/kitchen_background.gd
+++ b/client/map/kitchen_background.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -22,13 +22,13 @@ func _ready() -> void:
func init_map():
var map_tile = func (t): match t:
- ".": return "floor"
- "=": return "counter"
- "s": return "stove"
- "c": return "chair"
- "t": return "table"
- "o": return "oven"
- "#": return "wall"
+ ".": return ["floor"]
+ "=": return ["counter"]
+ "s": return ["stove"]
+ "c": return ["chair"]
+ "t": return ["table"]
+ "o": return ["oven"]
+ "#": return ["wall"]
_: push_error("unknown tile: ", t)
var tiles = [
"...............",
@@ -39,9 +39,10 @@ func init_map():
".............=#",
".............=#"
].map(func (l): return Array(l.split("")).map(map_tile))
- var gt = func (e): return null if e[1] >= tiles.size() else null if e[0] >= tiles[e[1]].size() else tiles[e[1]][e[0]]
- var co = Vector2i(floor(tiles[0].size() / 2), floor(tiles.size() - 2))
- for y in tiles.size():
- for x in tiles[y].size():
- map.set_tile(Vector2i(x,y) - co, gt.call([x,y]), [[x,y-1],[x-1,y],[x,y+1],[x+1,y]].map(gt))
+ var offset = Vector2i(floor(tiles[0].size() / 2), floor(tiles.size() - 2))
+ var pos_to_tile: Dictionary[Vector2i, Array] = {} # : Dictionary[Vector2i, Array[String]]
+ for y in range(tiles.size()):
+ for x in range(tiles[y].size()):
+ pos_to_tile[Vector2i(x,y) - offset] = tiles[y][x]
+ map.set_all_tiles(pos_to_tile)
map.flush()
diff --git a/client/map/kitchen_background.tscn b/client/map/kitchen_background.tscn
index 5d572f73..918a6403 100644
--- a/client/map/kitchen_background.tscn
+++ b/client/map/kitchen_background.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://wwu574dq2r8h"]
+[gd_scene format=3 uid="uid://wwu574dq2r8h"]
[ext_resource type="PackedScene" uid="uid://b4gone8fu53r7" path="res://map/map.tscn" id="1_heqla"]
[ext_resource type="Script" uid="uid://ddpr5p4c6p8pn" path="res://map/kitchen_background.gd" id="1_ppf8f"]
@@ -13,18 +13,18 @@ size = Vector3(14, 5, 0.3)
[sub_resource type="BoxMesh" id="BoxMesh_xidlh"]
size = Vector3(7.5, 5, 0.3)
-[node name="KitchenBackground" type="Node3D"]
+[node name="KitchenBackground" type="Node3D" unique_id=296843447]
script = ExtResource("1_ppf8f")
-[node name="Map" parent="." instance=ExtResource("1_heqla")]
+[node name="Map" parent="." unique_id=1312929770 instance=ExtResource("1_heqla")]
-[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1245737099]
environment = SubResource("Environment_ex25y")
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1705656468]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.5, -3.5)
mesh = SubResource("BoxMesh_ppf8f")
-[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=1171319920]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 7.5, 0.5, -1)
mesh = SubResource("BoxMesh_xidlh")
diff --git a/client/map/map.gd b/client/map/map.gd
index f6cb2f82..00f0f7b3 100644
--- a/client/map/map.gd
+++ b/client/map/map.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -17,52 +17,87 @@ class_name Map
extends Node3D
class TileInfo:
- func _init(position_, name_, tile_, neighbours_) -> void:
- position = position_; name = name_; tile = tile_; neighbours = neighbours_
+ func _init(position_, tiles_, tile_instances_, tile_parent_) -> void:
+ position = position_; tiles = tiles_; tile_instances = tile_instances_; tile_parent = tile_parent_
var position: Vector2i
- var name: String
- var tile: Tile
- var neighbours: Array
+ var tiles: Array # Array[String]
+ var tile_instances: Array[Tile]
+ var tile_parent: Node3D
+ var interact_tile: Tile
+
+const NEIGHBOR_OFFSETS: Array[Vector2i] = [Vector2i.UP, Vector2i.LEFT, Vector2i.DOWN, Vector2i.RIGHT]
var tile_by_pos: Dictionary[Vector2i, TileInfo] = {}
-var autobake = false
+var autoflush = false
var currently_baked = false
var floor_node := MeshInstance3D.new()
-var tile_factory = TileFactory.new()
+var tile_factory := TileFactory.new()
-func get_tile_name(pos: Vector2i): # -> String?
+func get_tiles_at(pos: Vector2i): # -> Array[String]?
var e = tile_by_pos.get(pos)
- if e != null: return e.name
- else: return null
-func get_tile_instance(pos: Vector2i) -> Tile:
+ if e == null: return null
+ return e.tiles
+func get_topmost_instance(pos: Vector2i): # -> Tile?
var e = tile_by_pos.get(pos)
- if e != null: return e.tile
- else: return null
+ if e == null: return null
+ return e.tile_instances[-1]
+func get_tile_item(pos: Vector2i): # -> Item?
+ var e = get_topmost_instance(pos)
+ if e == null: return null
+ return e.item
-func set_tile(pos: Vector2i, name_: String, neighbors: Array = [null,null,null,null]) -> Tile:
- clear_tile(pos)
- var tile := tile_factory.produce(name_, pos, neighbors)
- add_child(tile)
- tile.position = Vector3(pos.x, 0, pos.y)
- tile_by_pos[pos] = TileInfo.new(pos, name_, tile, neighbors)
- return tile
+func set_all_tiles(changes: Dictionary[Vector2i, Array], srv: Game.ServerContext = null):
+ for pos: Vector2i in changes:
+ set_tiles(Vector2i(pos.x, pos.y), changes[pos], changes, srv)
-func clear_tile(pos: Vector2i):
- var tile = get_tile_instance(pos)
- if tile == null: return
- if tile.item != null: tile.item.queue_free()
- if tile is FloorLike:
- var floor_mesher = tile_factory.floor_meshers.get(tile.fm_id())
- if floor_mesher != null:
- floor_mesher.remove_tile(pos)
- tile.queue_free()
+func set_tiles(pos: Vector2i, tiles: Array = [], pending_changes: Dictionary[Vector2i, Array] = {}, srv: Game.ServerContext = null): # tiles: Array[String]
+ var tile_info = tile_by_pos.get(pos)
+ if tile_info != null:
+ for inst: Tile in tile_info.tile_instances:
+ for tile: String in tiles:
+ # TODO: Don't return, but handle changes which weren't handled by the instance below.
+ if inst.change(tile): return # Instance handled change itself!
+ _remove_tile(pos)
+ if not tiles.is_empty(): _add_tiles(pos, tiles, pending_changes, srv)
+ if autoflush: flush()
+
+func _add_tiles(pos: Vector2i, tiles: Array, pending_changes: Dictionary[Vector2i, Array], srv: Game.ServerContext) -> void:
+ # Find neighbor tile names
+ var neighbors: Array[Array] = [] # Array[Array[String]]
+ for offset: Vector2i in NEIGHBOR_OFFSETS:
+ var neighbor_pos: Vector2i = pos + offset
+ if pending_changes.has(neighbor_pos):
+ neighbors.append(pending_changes[neighbor_pos])
+ elif tile_by_pos.has(neighbor_pos):
+ neighbors.append(tile_by_pos[neighbor_pos])
+ else: neighbors.append([])
+
+ var tiles_parent = Node3D.new()
+ tiles_parent.name = str(pos)
+ var tile_instances = tile_factory.produce(tiles_parent, tiles, pos, neighbors, srv)
+ tile_by_pos[pos] = TileInfo.new(pos, tiles, tile_instances, tiles_parent)
+ add_child(tiles_parent)
+
+func _remove_tile(pos: Vector2i):
+ var tile_info = tile_by_pos.get(pos)
+ if tile_info == null: return
+
+ var topmost_instance = get_topmost_instance(pos)
+ if topmost_instance.item != null:
+ topmost_instance.item.queue_free()
+
+ for instance: Tile in tile_info.tile_instances:
+ if instance is FloorLike:
+ var floor_mesher = tile_factory.floor_meshers.get(instance.fm_id())
+ if floor_mesher != null:
+ floor_mesher.remove_tile(pos)
+ instance.queue_free()
tile_by_pos.erase(pos)
- tile.name += "_queued_free"
@onready var voxelgi: VoxelGI = $VoxelGI
func _ready():
- Settings.hook_changed("graphics.gi", "main", apply_gi_setting)
+ Settings.hook_changed("graphics.gi", self, apply_gi_setting)
floor_node.material_override = preload("res://map/tiles/floor_material.tres")
for fm in tile_factory.floor_meshers.values():
add_child(fm.mesh_instance)
diff --git a/client/map/map.tscn b/client/map/map.tscn
index 84a4f09b..27cd3900 100644
--- a/client/map/map.tscn
+++ b/client/map/map.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=4 format=3 uid="uid://b4gone8fu53r7"]
+[gd_scene format=3 uid="uid://b4gone8fu53r7"]
[ext_resource type="Script" uid="uid://bxuukjyme1git" path="res://map/map.gd" id="1_3en0a"]
@@ -6,9 +6,9 @@
[sub_resource type="VoxelGIData" id="VoxelGIData_m5j5n"]
-[node name="Map" type="Node3D"]
+[node name="Map" type="Node3D" unique_id=764657840]
script = ExtResource("1_3en0a")
-[node name="VoxelGI" type="VoxelGI" parent="."]
+[node name="VoxelGI" type="VoxelGI" parent="." unique_id=1789448607]
camera_attributes = SubResource("CameraAttributesPractical_kwk4i")
data = SubResource("VoxelGIData_m5j5n")
diff --git a/client/map/tiles/leek_crate.gd b/client/map/particles/checkmark/checkmark.gd
index b90f6602..8a5cc248 100644
--- a/client/map/tiles/leek_crate.gd
+++ b/client/map/particles/checkmark/checkmark.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name LeekCrate
-extends Crate
+extends CPUParticles3D
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/leek_crate.tscn").instantiate())
+func _on_finished() -> void:
+ queue_free()
diff --git a/client/map/particles/checkmark/checkmark.gd.uid b/client/map/particles/checkmark/checkmark.gd.uid
new file mode 100644
index 00000000..913fb945
--- /dev/null
+++ b/client/map/particles/checkmark/checkmark.gd.uid
@@ -0,0 +1 @@
+uid://bj1h0r3qvy6vm
diff --git a/client/map/particles/checkmark/checkmark.svg b/client/map/particles/checkmark/checkmark.svg
new file mode 100644
index 00000000..f8a31e29
--- /dev/null
+++ b/client/map/particles/checkmark/checkmark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="256px" viewBox="0 -960 960 960" width="256px" fill="#FFFFFF"><path d="m419-283 294-294-66-66-228 228-111-111-65 66 176 177Zm61.14 228Q392-55 314.51-88.08q-77.48-33.09-135.41-91.02-57.93-57.93-91.02-135.27Q55-391.72 55-479.86 55-569 88.08-646.49q33.09-77.48 90.86-134.97 57.77-57.48 135.19-91.01Q391.56-906 479.78-906q89.22 0 166.83 33.45 77.6 33.46 135.01 90.81t90.89 134.87Q906-569.34 906-480q0 88.28-33.53 165.75t-91.01 135.28q-57.49 57.8-134.83 90.89Q569.28-55 480.14-55Z"/></svg> \ No newline at end of file
diff --git a/client/map/particles/checkmark/checkmark.svg.import b/client/map/particles/checkmark/checkmark.svg.import
new file mode 100644
index 00000000..4011e4f8
--- /dev/null
+++ b/client/map/particles/checkmark/checkmark.svg.import
@@ -0,0 +1,45 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c10wjga8ni7eq"
+path.s3tc="res://.godot/imported/checkmark.svg-6dd7b104b667f47666846eb9f77215a8.s3tc.ctex"
+path.etc2="res://.godot/imported/checkmark.svg-6dd7b104b667f47666846eb9f77215a8.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/particles/checkmark/checkmark.svg"
+dest_files=["res://.godot/imported/checkmark.svg-6dd7b104b667f47666846eb9f77215a8.s3tc.ctex", "res://.godot/imported/checkmark.svg-6dd7b104b667f47666846eb9f77215a8.etc2.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/client/map/particles/checkmark/checkmark.tscn b/client/map/particles/checkmark/checkmark.tscn
new file mode 100644
index 00000000..25e3d606
--- /dev/null
+++ b/client/map/particles/checkmark/checkmark.tscn
@@ -0,0 +1,45 @@
+[gd_scene format=3 uid="uid://bdbw8whs3data"]
+
+[ext_resource type="Texture2D" uid="uid://c10wjga8ni7eq" path="res://map/particles/checkmark/checkmark.svg" id="1_co83x"]
+[ext_resource type="Script" uid="uid://bj1h0r3qvy6vm" path="res://map/particles/checkmark/checkmark.gd" id="2_ru6ov"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ru6ov"]
+transparency = 1
+no_depth_test = true
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_texture = ExtResource("1_co83x")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_4d8iq"]
+material = SubResource("StandardMaterial3D_ru6ov")
+
+[sub_resource type="Curve" id="Curve_co83x"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.25675318, 1), 0.0, 0.0, 0, 0, Vector2(0.9931608, 1), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="Gradient" id="Gradient_gh7p3"]
+offsets = PackedFloat32Array(0, 0.26672226, 0.4904026, 1)
+colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[node name="Checkmark" type="CPUParticles3D" unique_id=56025052]
+emitting = false
+amount = 1
+one_shot = true
+explosiveness = 1.0
+mesh = SubResource("QuadMesh_4d8iq")
+direction = Vector3(0, 0, 0)
+spread = 0.0
+gravity = Vector3(0, 0, 0)
+scale_amount_min = 0.3
+scale_amount_max = 0.3
+scale_amount_curve = SubResource("Curve_co83x")
+color = Color(0, 1, 0, 1)
+color_ramp = SubResource("Gradient_gh7p3")
+script = ExtResource("2_ru6ov")
+
+[connection signal="finished" from="." to="." method="_on_finished"]
diff --git a/client/map/progress/progress.gd b/client/map/progress/progress.gd
index d8d714ba..be8de5ae 100644
--- a/client/map/progress/progress.gd
+++ b/client/map/progress/progress.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/progress/progress.gdshader b/client/map/progress/progress.gdshader
index 3c3557cd..cbf1a3d2 100644
--- a/client/map/progress/progress.gdshader
+++ b/client/map/progress/progress.gdshader
@@ -1,6 +1,6 @@
/*
Hurry Curry! - a game about cooking
- Copyright (C) 2025 Hurry Curry! Contributors
+ Copyright (C) 2026 Hurry Curry! Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/progress/progress.tscn b/client/map/progress/progress.tscn
index af7dfe0a..b8182ea5 100644
--- a/client/map/progress/progress.tscn
+++ b/client/map/progress/progress.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=3 uid="uid://4ewufm6tqhpb"]
+[gd_scene format=3 uid="uid://4ewufm6tqhpb"]
[ext_resource type="Shader" uid="uid://b3w7j4oka0yeb" path="res://map/progress/progress.gdshader" id="1_6f2a0"]
[ext_resource type="Script" uid="uid://dmdqg418vkip6" path="res://map/progress/progress.gd" id="2_bb3u3"]
@@ -13,7 +13,7 @@ shader = ExtResource("1_6f2a0")
shader_parameter/progress = 0.0
shader_parameter/bad = false
-[node name="Progress" type="MeshInstance3D"]
+[node name="Progress" type="MeshInstance3D" unique_id=2131670011]
mesh = SubResource("QuadMesh_m0itj")
surface_material_override/0 = SubResource("ShaderMaterial_4k6cy")
script = ExtResource("2_bb3u3")
diff --git a/client/map/tile_factory.gd b/client/map/tile_factory.gd
index 5a7f7e3e..d3d1ca8d 100644
--- a/client/map/tile_factory.gd
+++ b/client/map/tile_factory.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -20,8 +20,10 @@ extends Object
class TileName:
var name# : String
var variant #: String?
- func _init(raw_name: String):
- var c = Array(raw_name.split(":"))
+ var raw_name: String
+ func _init(raw_name_: String):
+ raw_name = raw_name_
+ var c = Array(raw_name_.split(":"))
name = c[0]; variant = c[1] if c.size() >= 2 else null # TODO Array.get throws errors
class TileCC:
@@ -29,6 +31,9 @@ class TileCC:
var position: Vector2i
var neighbors: Array
var floor_meshers: Dictionary[String, FloorMesher]
+ var server_context: Game.ServerContext
+ var below_tile_instances: Array[Tile]
+ var above_tile_names: Array[String]
var floor_meshers: Dictionary[String, FloorMesher] = {
"floor": FloorMesher.new(Floor.floor_mesh()),
@@ -37,25 +42,57 @@ var floor_meshers: Dictionary[String, FloorMesher] = {
"street": FloorMesher.new(Street.floor_mesh())
}
-func produce(raw_name: String, position: Vector2i, neighbors: Array) -> Tile:
+const TILE_COMBINATOR: Dictionary[Array, Array] = { # : Dictionary[Array[String], Array[String]]
+ ["counter", "sink"]: ["sink"]
+}
+
+func produce(parent: Node3D, tile_names: Array, position: Vector2i, neighbors: Array, server_context: Game.ServerContext = null) -> Array[Tile]:
+ # Combinate tiles
+ tile_names = tile_names.duplicate()
+ for k in TILE_COMBINATOR:
+ if G.has_all(tile_names, k):
+ for item: String in k: tile_names.erase(item)
+ tile_names.append_array(TILE_COMBINATOR[k])
+
+ var tile_instances: Array[Tile] = []
+ for i in range(tile_names.size()):
+ var tile_name: String = tile_names[i]
+ var above_tile_names: Array[String] = []
+ above_tile_names.append_array(tile_names.slice(i+1, tile_names.size()))
+ var tile := produce_part(tile_name, position, neighbors, tile_instances, above_tile_names, server_context)
+ tile_instances.append(tile)
+ tile.position = Vector3(position.x, 0, position.y)
+ parent.add_child(tile)
+
+ return tile_instances
+
+func produce_part(raw_name: String, position: Vector2i, neighbors: Array, below_tile_instances: Array[Tile] = [], above_tile_names: Array[String] = [], server_context: Game.ServerContext = null) -> Tile:
var tile_name = TileName.new(raw_name)
var ctx := TileCC.new()
ctx.tile_name = tile_name
ctx.position = position
- ctx.neighbors = neighbors.map(func(n): return null if n == null else TileName.new(n).name)
+ ctx.neighbors = neighbors.map(func(a):
+ if a != null:
+ return a.map(func(b): return null if b == null else TileName.new(b).name)
+ else: return null
+ )
ctx.floor_meshers = floor_meshers
+ ctx.server_context = server_context
+ ctx.below_tile_instances = below_tile_instances
+ ctx.above_tile_names = above_tile_names
match tile_name.name:
- "black-hole-counter": return ItemPortal.new(ctx, false)
- "black-hole": return PlayerPortal.new(ctx, false)
- "book": return Book.new(ctx)
- "ceiling-lamp": return CeilingLamp.new(ctx)
+ "book": return GenericTile.new(ctx, preload("res://map/tiles/book.tscn"))
+ "button": return Button_.new(ctx)
+ "button-base": return ButtonBase.new(ctx)
+ "ceiling-lamp": return GenericTile.new(ctx, preload("res://map/tiles/ceiling_lamp.tscn"))
"chair": return Chair.new(ctx)
- "chandelier": return Chandelier.new(ctx)
+ "chandelier": return GenericTile.new(ctx, preload("res://map/tiles/chandelier.tscn"))
"conveyor": return Conveyor.new(ctx)
"counter-window": return CounterWindow.new(ctx)
- "counter": return CounterBase.new(ctx)
+ "counter-window-conveyor": return CounterWindowConveyor.new(ctx)
+ "counter": return Counter.new(ctx)
"cutting-board": return CuttingBoard.new(ctx)
"door": return Door.new(ctx)
"fence": return Fence.new(ctx)
@@ -63,9 +100,11 @@ func produce(raw_name: String, position: Vector2i, neighbors: Array) -> Tile:
"freezer": return Freezer.new(ctx)
"grass": return Grass.new(ctx)
"lamp": return Lamp.new(ctx)
+ "map-selector": return GenericTile.new(ctx, preload("res://map/tiles/map_selector.tscn"))
"oven": return Oven.new(ctx)
"path": return Path.new(ctx)
"rolling-board": return RollingBoard.new(ctx)
+ "screen": return Screen.new(ctx)
"deep-fryer": return DeepFryer.new(ctx)
"sink": return Sink.new(ctx)
"stove": return Stove.new(ctx)
@@ -75,8 +114,12 @@ func produce(raw_name: String, position: Vector2i, neighbors: Array) -> Tile:
"tree": return ExteriorTree.new(ctx)
"wall-window": return WallWindow.new(ctx)
"wall": return Wall.new(ctx)
- "white-hole-counter": return ItemPortal.new(ctx, true)
- "white-hole": return PlayerPortal.new(ctx, true)
+ "white-hole-counter": return ItemPortal.new(ctx, 1)
+ "white-hole": return PlayerPortal.new(ctx)
+ "grey-hole-counter": return ItemPortal.new(ctx, 0)
+ "grey-hole": return PlayerPortal.new(ctx)
+ "black-hole-counter": return ItemPortal.new(ctx, -1)
+ "black-hole": return PlayerPortal.new(ctx)
"house-balcony": return HouseBalcony.new(ctx)
"house-door": return HouseDoor.new(ctx)
@@ -86,19 +129,51 @@ func produce(raw_name: String, position: Vector2i, neighbors: Array) -> Tile:
"house-roof": return HouseRoof.new(ctx)
"house-roof-chimney": return HouseRoofChimney.new(ctx)
- "bun-crate": return BunCrate.new(ctx)
- "cheese-crate": return CheeseCrate.new(ctx)
- "coconut-crate": return CoconutCrate.new(ctx)
- "fish-crate": return FishCrate.new(ctx)
- "flour-crate": return FlourCrate.new(ctx)
- "leek-crate": return LeekCrate.new(ctx)
- "lettuce-crate": return LettuceCrate.new(ctx)
- "mushroom-crate": return MushroomCrate.new(ctx)
- "steak-crate": return SteakCrate.new(ctx)
- "rice-crate": return RiceCrate.new(ctx)
- "strawberry-crate": return StrawberryCrate.new(ctx)
- "tomato-crate": return TomatoCrate.new(ctx)
- "potato-crate": return PotatoCrate.new(ctx)
+ "crate": return Crate.new(ctx)
+
+ # TODO: update maps to use "crate:..."
+ "bun-crate":
+ ctx.tile_name.variant = "bun"
+ return Crate.new(ctx)
+ "cheese-crate":
+ ctx.tile_name.variant = "cheese"
+ return Crate.new(ctx)
+ "coconut-crate":
+ ctx.tile_name.variant = "coconut"
+ return Crate.new(ctx)
+ "fish-crate":
+ ctx.tile_name.variant = "fish"
+ return Crate.new(ctx)
+ "flour-crate":
+ ctx.tile_name.variant = "flour"
+ return Crate.new(ctx)
+ "leek-crate":
+ ctx.tile_name.variant = "leek"
+ return Crate.new(ctx)
+ "lettuce-crate":
+ ctx.tile_name.variant = "lettuce"
+ return Crate.new(ctx)
+ "mushroom-crate":
+ ctx.tile_name.variant = "mushroom"
+ return Crate.new(ctx)
+ "noodles-crate":
+ ctx.tile_name.variant = "noodles"
+ return Crate.new(ctx)
+ "steak-crate":
+ ctx.tile_name.variant = "steak"
+ return Crate.new(ctx)
+ "rice-crate":
+ ctx.tile_name.variant = "rice"
+ return Crate.new(ctx)
+ "strawberry-crate":
+ ctx.tile_name.variant = "strawberry"
+ return Crate.new(ctx)
+ "tomato-crate":
+ ctx.tile_name.variant = "tomato"
+ return Crate.new(ctx)
+ "potato-crate":
+ ctx.tile_name.variant = "potato"
+ return Crate.new(ctx)
var t:
push_warning("tile %s unknown" % t)
diff --git a/client/map/tiles/active_interact_counter.gd b/client/map/tiles/active_interact_counter.gd
new file mode 100644
index 00000000..b44c862a
--- /dev/null
+++ b/client/map/tiles/active_interact_counter.gd
@@ -0,0 +1,61 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+@abstract
+class_name ActiveInteractCounter
+extends Tile
+
+var interact_sound: AudioStreamPlayer3D = AudioStreamPlayer3D.new()
+var interact_tool: Node3D
+var acting_players: Array[Player] = []
+var play_character_animation: Callable
+
+func _init(ctx: TileFactory.TileCC, station_model_: PackedScene, interact_tool_path: NodePath, play_character_animation_: Callable, audio_stream_: AudioStream):
+ super(ctx)
+ base.add_child(station_model_.instantiate())
+ interact_sound.stream = audio_stream_
+ add_child(interact_sound)
+ interact_tool = base.get_node(interact_tool_path)
+ play_character_animation = play_character_animation_
+
+func progress(position_: float, speed: float, warn: bool, acting_players_: Array[Player]):
+ super(position_, speed, warn, acting_players)
+
+ if speed != 0.:
+ if not interact_sound.playing: interact_sound.play()
+ acting_players = acting_players.filter(is_instance_valid) # Some players might have disconnected
+ var players_who_stopped := G.unordered_array_difference(acting_players, acting_players_)
+ for p: Player in players_who_stopped:
+ if p != null: play_character_animation.call(p, false)
+ for p: Player in acting_players_:
+ interact_tool.visible = false
+ play_character_animation.call(p, true)
+ elif speed == 0:
+ interact_sound.stop()
+ interact_tool.visible = true
+ for p: Player in acting_players:
+ play_character_animation.call(p, false)
+ acting_players = acting_players_
+
+func finish():
+ super()
+ acting_players = acting_players.filter(is_instance_valid) # Some players might have disconnected
+ for p: Player in acting_players:
+ play_character_animation.call(p, false)
+ interact_tool.visible = true
+ interact_sound.stop()
+
+static func interact_target(): # -> Vector3?
+ return Vector3(0., 0.575, 0.)
diff --git a/client/map/tiles/active_interact_counter.gd.uid b/client/map/tiles/active_interact_counter.gd.uid
new file mode 100644
index 00000000..c83526ff
--- /dev/null
+++ b/client/map/tiles/active_interact_counter.gd.uid
@@ -0,0 +1 @@
+uid://bc4l8km0pnuq5
diff --git a/client/map/tiles/book.gd.uid b/client/map/tiles/book.gd.uid
deleted file mode 100644
index a53157dc..00000000
--- a/client/map/tiles/book.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://tx2an1h38i3c
diff --git a/client/map/tiles/book.res b/client/map/tiles/book.res
index 9caf89f1..fa64057a 100644
--- a/client/map/tiles/book.res
+++ b/client/map/tiles/book.res
Binary files differ
diff --git a/client/map/tiles/book.tscn b/client/map/tiles/book.tscn
index 9e1b144c..c7e9d141 100644
--- a/client/map/tiles/book.tscn
+++ b/client/map/tiles/book.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://c7fjfp5ygxsjc"]
+[gd_scene format=3 uid="uid://c7fjfp5ygxsjc"]
[ext_resource type="ArrayMesh" uid="uid://cgvow28wkwesp" path="res://map/tiles/book.res" id="1_vxs3d"]
-[node name="Book" type="Node3D"]
+[node name="Book" type="Node3D" unique_id=517586832]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=664640069]
transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 0, 0.5, 0)
mesh = ExtResource("1_vxs3d")
-skeleton = NodePath("")
diff --git a/client/map/tiles/bun_crate.gd.uid b/client/map/tiles/bun_crate.gd.uid
deleted file mode 100644
index 508d423c..00000000
--- a/client/map/tiles/bun_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://db7xuasfi403l
diff --git a/client/map/tiles/bun_crate.tscn b/client/map/tiles/bun_crate.tscn
index 00c8ead5..47460a14 100644
--- a/client/map/tiles/bun_crate.tscn
+++ b/client/map/tiles/bun_crate.tscn
@@ -1,34 +1,34 @@
-[gd_scene load_steps=3 format=3 uid="uid://bg2ykqq6rnyx6"]
+[gd_scene format=3 uid="uid://bg2ykqq6rnyx6"]
[ext_resource type="ArrayMesh" uid="uid://btn7oh1v2k40p" path="res://map/tiles/crate.res" id="1_84iuk"]
[ext_resource type="ArrayMesh" uid="uid://ke5s5itvrqce" path="res://map/items/bun.res" id="2_a48hy"]
-[node name="BunCrate" type="Node3D"]
+[node name="BunCrate" type="Node3D" unique_id=1836475580]
-[node name="Crate" type="MeshInstance3D" parent="."]
+[node name="Crate" type="MeshInstance3D" parent="." unique_id=982382847]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_84iuk")
-[node name="Bun" type="MeshInstance3D" parent="."]
+[node name="Bun" type="MeshInstance3D" parent="." unique_id=1348733542]
transform = Transform3D(0.35355335, -0.35355335, 0, 0.35355335, 0.35355335, 0, 0, 0, 0.5, 0.075, 0.15, -0.175)
mesh = ExtResource("2_a48hy")
-[node name="Bun2" type="MeshInstance3D" parent="."]
+[node name="Bun2" type="MeshInstance3D" parent="." unique_id=590760409]
transform = Transform3D(0.35355335, -0.35355335, 0, 0.35355335, 0.35355335, 0, 0, 0, 0.5, -0.15, 0.15, -0.175)
mesh = ExtResource("2_a48hy")
-[node name="Bun3" type="MeshInstance3D" parent="."]
+[node name="Bun3" type="MeshInstance3D" parent="." unique_id=1530470047]
transform = Transform3D(0.35355335, -0.35355335, 0, 0.35355335, 0.35355335, 0, 0, 0, 0.5, 0.3, 0.15, -0.175)
mesh = ExtResource("2_a48hy")
-[node name="Bun4" type="MeshInstance3D" parent="."]
+[node name="Bun4" type="MeshInstance3D" parent="." unique_id=765223744]
transform = Transform3D(-0.35355338, 0.35355338, -4.371139e-08, 0.35355338, 0.35355338, 0, 3.090862e-08, -3.090862e-08, -0.5, -0.09912277, 0.15, 0.175)
mesh = ExtResource("2_a48hy")
-[node name="Bun5" type="MeshInstance3D" parent="."]
+[node name="Bun5" type="MeshInstance3D" parent="." unique_id=1175873093]
transform = Transform3D(-0.35355338, 0.35355338, -4.371139e-08, 0.35355338, 0.35355338, 0, 3.090862e-08, -3.090862e-08, -0.5, 0.12587723, 0.15, 0.17499998)
mesh = ExtResource("2_a48hy")
-[node name="Bun6" type="MeshInstance3D" parent="."]
+[node name="Bun6" type="MeshInstance3D" parent="." unique_id=1315373041]
transform = Transform3D(-0.35355338, 0.35355338, -4.371139e-08, 0.35355338, 0.35355338, 0, 3.090862e-08, -3.090862e-08, -0.5, -0.3241228, 0.15, 0.17500001)
mesh = ExtResource("2_a48hy")
diff --git a/client/map/tiles/button/accept.svg b/client/map/tiles/button/accept.svg
new file mode 100644
index 00000000..c703ae9a
--- /dev/null
+++ b/client/map/tiles/button/accept.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="128px" viewBox="0 -960 960 960" width="128px">
+ <rect width="960" height="960" x="0" y="-960" fill="#00A300"/>
+ <path fill="#FFFFFF" d="m382-388 321-321q19-19 45-19t45 19q19 19 19 45t-19 45L427-253q-19 19-45 19t-45-19L167-423q-19-19-19-45t19-45q19-19 45-19t45 19l125 125Z"/>
+</svg>
diff --git a/client/map/tiles/button/accept.svg.import b/client/map/tiles/button/accept.svg.import
new file mode 100644
index 00000000..010d0f2a
--- /dev/null
+++ b/client/map/tiles/button/accept.svg.import
@@ -0,0 +1,45 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1rx5o81pcv8g"
+path.s3tc="res://.godot/imported/accept.svg-3967b4e72211bf837c252cb2420fcd55.s3tc.ctex"
+path.etc2="res://.godot/imported/accept.svg-3967b4e72211bf837c252cb2420fcd55.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/button/accept.svg"
+dest_files=["res://.godot/imported/accept.svg-3967b4e72211bf837c252cb2420fcd55.s3tc.ctex", "res://.godot/imported/accept.svg-3967b4e72211bf837c252cb2420fcd55.etc2.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/client/map/items/lettuce_crate.gd b/client/map/tiles/button/button.gd
index 2a0ff5a5..f47eba2d 100644
--- a/client/map/items/lettuce_crate.gd
+++ b/client/map/tiles/button/button.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name LettuceCrate
-extends Crate
+class_name Button_
+extends Tile
+
+var button: ButtonModel = load("res://map/tiles/button/button.tscn").instantiate()
func _init(ctx: TileFactory.TileCC):
super(ctx)
- base.add_child(load("res://map/tiles/lettuce_crate.tscn").instantiate())
+ base.add_child(button)
+ button.set_up(ctx.tile_name.variant)
diff --git a/client/map/tiles/button/button.gd.uid b/client/map/tiles/button/button.gd.uid
new file mode 100644
index 00000000..1475ad20
--- /dev/null
+++ b/client/map/tiles/button/button.gd.uid
@@ -0,0 +1 @@
+uid://dyxxrus52yxxi
diff --git a/client/map/tiles/button/button.tscn b/client/map/tiles/button/button.tscn
new file mode 100644
index 00000000..c8ba94ac
--- /dev/null
+++ b/client/map/tiles/button/button.tscn
@@ -0,0 +1,36 @@
+[gd_scene format=3 uid="uid://nhmmgqwlmc8g"]
+
+[ext_resource type="ArrayMesh" uid="uid://cgq0beass0omg" path="res://map/tiles/button/button_static.res" id="1_tihjt"]
+[ext_resource type="Script" uid="uid://c06qln7x5266q" path="res://map/tiles/button/button_model.gd" id="1_ubqac"]
+[ext_resource type="ArrayMesh" uid="uid://dhaxbrl6a0vg" path="res://map/tiles/button/button_dynamic_cancel.res" id="2_ubqac"]
+[ext_resource type="ArrayMesh" uid="uid://u6ugrx5nrfj7" path="res://map/tiles/button/button_dynamic_accept.res" id="3_lxai3"]
+
+[node name="Button" type="Node3D" unique_id=1558887746]
+script = ExtResource("1_ubqac")
+
+[node name="StaticMesh" type="MeshInstance3D" parent="." unique_id=1131117450]
+transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.55, 0)
+mesh = ExtResource("1_tihjt")
+
+[node name="Dynamic" type="Node3D" parent="." unique_id=509704898]
+
+[node name="Reject" type="MeshInstance3D" parent="Dynamic" unique_id=1474668033]
+transform = Transform3D(0.375, 0, 0, 0, 0.5, 0, 0, 0, 0.375, 0, 0.525, 0)
+visible = false
+mesh = ExtResource("2_ubqac")
+
+[node name="Accept" type="MeshInstance3D" parent="Dynamic" unique_id=1159246571]
+transform = Transform3D(0.375, 0, 0, 0, 0.5, 0, 0, 0, 0.375, 0, 0.525, 0)
+mesh = ExtResource("3_lxai3")
+
+[node name="DynamicPressed" type="MeshInstance3D" parent="." unique_id=90564715]
+transform = Transform3D(0.75, 0, 0, 0, 1, 0, 0, 0, 0.75, 0, 1.0500001, 0)
+visible = false
+mesh = ExtResource("2_ubqac")
+
+[node name="OmniLight3D" type="OmniLight3D" parent="DynamicPressed" unique_id=172878339]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.52889466, 0)
+light_color = Color(1, 0, 0, 1)
+omni_range = 2.0
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=326186226]
diff --git a/client/map/tiles/button/button_dynamic_accept.res b/client/map/tiles/button/button_dynamic_accept.res
new file mode 100644
index 00000000..21440b95
--- /dev/null
+++ b/client/map/tiles/button/button_dynamic_accept.res
Binary files differ
diff --git a/client/map/tiles/button/button_dynamic_cancel.res b/client/map/tiles/button/button_dynamic_cancel.res
new file mode 100644
index 00000000..d17c4dd3
--- /dev/null
+++ b/client/map/tiles/button/button_dynamic_cancel.res
Binary files differ
diff --git a/client/map/tiles/button/button_model.gd b/client/map/tiles/button/button_model.gd
new file mode 100644
index 00000000..41a4674f
--- /dev/null
+++ b/client/map/tiles/button/button_model.gd
@@ -0,0 +1,28 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name ButtonModel
+extends Node3D
+
+func set_up(variant: String):
+ match variant:
+ "accept":
+ $Dynamic/Accept.visible = true
+ $Dynamic/Reject.visible = false
+ "reject":
+ $Dynamic/Accept.visible = false
+ $Dynamic/Reject.visible = true
+ _:
+ push_error("Unrecognized button variant: %s" % variant)
diff --git a/client/map/tiles/button/button_model.gd.uid b/client/map/tiles/button/button_model.gd.uid
new file mode 100644
index 00000000..c9555c31
--- /dev/null
+++ b/client/map/tiles/button/button_model.gd.uid
@@ -0,0 +1 @@
+uid://c06qln7x5266q
diff --git a/client/map/tiles/button/button_static.res b/client/map/tiles/button/button_static.res
new file mode 100644
index 00000000..23ec99ec
--- /dev/null
+++ b/client/map/tiles/button/button_static.res
Binary files differ
diff --git a/client/map/tiles/button/cancel.svg b/client/map/tiles/button/cancel.svg
new file mode 100644
index 00000000..4f62fa5f
--- /dev/null
+++ b/client/map/tiles/button/cancel.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="128px" viewBox="0 -960 960 960" width="128px">
+ <rect width="960" height="960" x="0" y="-960" fill="#EA0026"/>
+ <path fill="#FFFFFF" d="M480-392 300-212q-18 18-44 18t-44-18q-18-18-18-44t18-44l180-180-180-180q-18-18-18-44t18-44q18-18 44-18t44 18l180 180 180-180q18-18 44-18t44 18q18 18 18 44t-18 44L568-480l180 180q18 18 18 44t-18 44q-18 18-44 18t-44-18L480-392Z"/>
+</svg>
diff --git a/client/map/tiles/button/cancel.svg.import b/client/map/tiles/button/cancel.svg.import
new file mode 100644
index 00000000..98ab8ec5
--- /dev/null
+++ b/client/map/tiles/button/cancel.svg.import
@@ -0,0 +1,45 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://blp5workmjdpi"
+path.s3tc="res://.godot/imported/cancel.svg-c3c8e16f267e99928c19f8a5251da6ef.s3tc.ctex"
+path.etc2="res://.godot/imported/cancel.svg-c3c8e16f267e99928c19f8a5251da6ef.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/button/cancel.svg"
+dest_files=["res://.godot/imported/cancel.svg-c3c8e16f267e99928c19f8a5251da6ef.s3tc.ctex", "res://.godot/imported/cancel.svg-c3c8e16f267e99928c19f8a5251da6ef.etc2.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/client/map/tiles/button/map.svg b/client/map/tiles/button/map.svg
new file mode 100644
index 00000000..11146ddd
--- /dev/null
+++ b/client/map/tiles/button/map.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="128px" viewBox="0 -960 960 960" width="128px">
+ <rect width="960" height="960" x="0" y="-960" fill="#0053C1"/>
+ <path fill="#FFFFFF" d="m612-94-263-93-170 69q-30 14-57-3.5T95-173v-558q0-21 12-38t32-24l210-73 263 92 169-69q30-13 57.5 4t27.5 51v565q0 20-12.5 34.5T822-168L612-94Zm-34-112v-484l-196-66v484l196 66Zm60 0 133-43v-492l-133 51v484Zm-449-15 133-51v-484l-133 44v491Zm449-469v484-484Zm-316-66v484-484Z"/>
+</svg>
diff --git a/client/map/tiles/button/map.svg.import b/client/map/tiles/button/map.svg.import
new file mode 100644
index 00000000..c2471747
--- /dev/null
+++ b/client/map/tiles/button/map.svg.import
@@ -0,0 +1,45 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnbivk0cko3kn"
+path.s3tc="res://.godot/imported/map.svg-83021c6555bc23e5e8a2e0aa8351ba08.s3tc.ctex"
+path.etc2="res://.godot/imported/map.svg-83021c6555bc23e5e8a2e0aa8351ba08.etc2.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc", "etc2_astc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://map/tiles/button/map.svg"
+dest_files=["res://.godot/imported/map.svg-83021c6555bc23e5e8a2e0aa8351ba08.s3tc.ctex", "res://.godot/imported/map.svg-83021c6555bc23e5e8a2e0aa8351ba08.etc2.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=0
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/client/map/tiles/flour_crate.gd b/client/map/tiles/button_base.gd
index a8fd5386..1ceee5e2 100644
--- a/client/map/tiles/flour_crate.gd
+++ b/client/map/tiles/button_base.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,12 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name FlourCrate
-extends Crate
+class_name ButtonBase
+extends Tile
func _init(ctx: TileFactory.TileCC):
super(ctx)
- base.add_child(load("res://map/tiles/flour_crate.tscn").instantiate())
+ base.add_child(load("res://map/tiles/button_base.tscn").instantiate())
+
+static func interact_target(): # -> Vector3?
+ return Vector3(0, .5, 0)
diff --git a/client/map/tiles/button_base.gd.uid b/client/map/tiles/button_base.gd.uid
new file mode 100644
index 00000000..eafbd5d4
--- /dev/null
+++ b/client/map/tiles/button_base.gd.uid
@@ -0,0 +1 @@
+uid://dblj24kid00tx
diff --git a/client/map/tiles/button_base.res b/client/map/tiles/button_base.res
new file mode 100644
index 00000000..ba909081
--- /dev/null
+++ b/client/map/tiles/button_base.res
Binary files differ
diff --git a/client/map/tiles/button_base.tscn b/client/map/tiles/button_base.tscn
new file mode 100644
index 00000000..8e3efbab
--- /dev/null
+++ b/client/map/tiles/button_base.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://bfbq0lsh7gp21"]
+
+[ext_resource type="ArrayMesh" uid="uid://d3867ya8moxb5" path="res://map/tiles/button_base.res" id="1_yvd7h"]
+
+[node name="ButtonBase" type="Node3D" unique_id=1753800164]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=305913322]
+transform = Transform3D(-2.1855694e-08, 0.5, -2.1855694e-08, 0, -2.1855694e-08, -0.5, -0.5, -2.1855694e-08, 9.553427e-16, 0, 0, 0)
+mesh = ExtResource("1_yvd7h")
diff --git a/client/map/tiles/ceiling_lamp.gd.uid b/client/map/tiles/ceiling_lamp.gd.uid
deleted file mode 100644
index 23e304d9..00000000
--- a/client/map/tiles/ceiling_lamp.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://c2eke3hg0l85c
diff --git a/client/map/tiles/ceiling_lamp.res b/client/map/tiles/ceiling_lamp.res
index f35e266b..37c4aa7b 100644
--- a/client/map/tiles/ceiling_lamp.res
+++ b/client/map/tiles/ceiling_lamp.res
Binary files differ
diff --git a/client/map/tiles/ceiling_lamp.tscn b/client/map/tiles/ceiling_lamp.tscn
index 50f79e11..dd2f5511 100644
--- a/client/map/tiles/ceiling_lamp.tscn
+++ b/client/map/tiles/ceiling_lamp.tscn
@@ -1,16 +1,15 @@
-[gd_scene load_steps=3 format=3 uid="uid://c8hu5h6dt0ixj"]
+[gd_scene format=3 uid="uid://c8hu5h6dt0ixj"]
[ext_resource type="ArrayMesh" uid="uid://bsir47jru4um7" path="res://map/tiles/ceiling_lamp.res" id="1_twi66"]
[ext_resource type="Script" uid="uid://nm4trjneu1qt" path="res://map/tiles/light_tile.gd" id="1_yyibl"]
-[node name="CeilingLamp" type="Node3D" node_paths=PackedStringArray("lights")]
+[node name="CeilingLamp" type="Node3D" unique_id=1236677325 node_paths=PackedStringArray("lights")]
script = ExtResource("1_yyibl")
lights = [NodePath("OmniLight3D")]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1645317673]
transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 1.875, 0)
mesh = ExtResource("1_twi66")
-skeleton = NodePath("")
-[node name="OmniLight3D" type="OmniLight3D" parent="."]
+[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1571857968]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, 0)
diff --git a/client/map/tiles/chair.gd b/client/map/tiles/chair.gd
index c17f3f9b..d5669dca 100644
--- a/client/map/tiles/chair.gd
+++ b/client/map/tiles/chair.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,19 +14,16 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Chair
-extends Floor
+extends Tile
func _init(ctx: TileFactory.TileCC):
super(ctx)
var chair = preload("res://map/tiles/chair.tscn").instantiate()
var facing = 0;
for i in range(4):
- if ctx.neighbors[i] == "conveyor":
- facing = i
- break
- for i in range(4):
- if ctx.neighbors[i] == "table":
+ if G.has_one(ctx.neighbors[i], ["coveyor", "table", "counter"]):
facing = i
break
+
base.add_child(chair)
turn_facing(facing)
diff --git a/client/map/tiles/chair.res b/client/map/tiles/chair.res
index cbf730ab..b6f1aa48 100644
--- a/client/map/tiles/chair.res
+++ b/client/map/tiles/chair.res
Binary files differ
diff --git a/client/map/tiles/chair.tscn b/client/map/tiles/chair.tscn
index 5ba28da7..406f2661 100644
--- a/client/map/tiles/chair.tscn
+++ b/client/map/tiles/chair.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bn1l1mcn8240o"]
+[gd_scene format=3 uid="uid://bn1l1mcn8240o"]
[ext_resource type="ArrayMesh" uid="uid://cwn5nt017j62d" path="res://map/tiles/chair.res" id="1_8tboh"]
-[node name="Chair" type="Node3D"]
+[node name="Chair" type="Node3D" unique_id=446076584]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=311426126]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_8tboh")
-skeleton = NodePath("")
diff --git a/client/map/tiles/chandelier.gd b/client/map/tiles/chandelier.gd
deleted file mode 100644
index cce877ea..00000000
--- a/client/map/tiles/chandelier.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name Chandelier
-extends Floor
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/chandelier.tscn").instantiate())
diff --git a/client/map/tiles/chandelier.gd.uid b/client/map/tiles/chandelier.gd.uid
deleted file mode 100644
index df037e09..00000000
--- a/client/map/tiles/chandelier.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://xj1r8ubad6mu
diff --git a/client/map/tiles/chandelier.res b/client/map/tiles/chandelier.res
index d8007bb8..47b1c017 100644
--- a/client/map/tiles/chandelier.res
+++ b/client/map/tiles/chandelier.res
Binary files differ
diff --git a/client/map/tiles/chandelier.tscn b/client/map/tiles/chandelier.tscn
index d4e4dd71..a8a4b617 100644
--- a/client/map/tiles/chandelier.tscn
+++ b/client/map/tiles/chandelier.tscn
@@ -1,16 +1,15 @@
-[gd_scene load_steps=3 format=3 uid="uid://coql3wlp3jwoc"]
+[gd_scene format=3 uid="uid://coql3wlp3jwoc"]
[ext_resource type="Script" uid="uid://nm4trjneu1qt" path="res://map/tiles/light_tile.gd" id="1_6vise"]
[ext_resource type="ArrayMesh" uid="uid://d11c3fl48g7qb" path="res://map/tiles/chandelier.res" id="1_urqpe"]
-[node name="Chandelier" type="Node3D"]
+[node name="Chandelier" type="Node3D" unique_id=396940130]
script = ExtResource("1_6vise")
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=989396255]
transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 1.875, 0)
mesh = ExtResource("1_urqpe")
-skeleton = NodePath("")
-[node name="OmniLight3D" type="OmniLight3D" parent="."]
+[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=102026265]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
light_color = Color(0.945098, 0.886275, 0.745098, 1)
diff --git a/client/map/tiles/cheese_crate.gd b/client/map/tiles/cheese_crate.gd
deleted file mode 100644
index 2965b8c0..00000000
--- a/client/map/tiles/cheese_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name CheeseCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/cheese_crate.tscn").instantiate())
diff --git a/client/map/tiles/cheese_crate.gd.uid b/client/map/tiles/cheese_crate.gd.uid
deleted file mode 100644
index 36a6ceb9..00000000
--- a/client/map/tiles/cheese_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://pwmpgyk3prdi
diff --git a/client/map/tiles/cheese_crate.tscn b/client/map/tiles/cheese_crate.tscn
index 7a1bd93a..f78ea177 100644
--- a/client/map/tiles/cheese_crate.tscn
+++ b/client/map/tiles/cheese_crate.tscn
@@ -1,24 +1,24 @@
-[gd_scene load_steps=3 format=3 uid="uid://do7vpyky2hdd0"]
+[gd_scene format=3 uid="uid://do7vpyky2hdd0"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_7kkwt"]
[ext_resource type="PackedScene" uid="uid://0lbjf2sie4rk" path="res://map/items/cheese.tscn" id="2_3iu16"]
-[node name="CheeseCrate" instance=ExtResource("1_7kkwt")]
+[node name="CheeseCrate" unique_id=1947061861 instance=ExtResource("1_7kkwt")]
-[node name="Cheese" parent="." index="1" instance=ExtResource("2_3iu16")]
+[node name="Cheese" parent="." index="1" unique_id=1357798385 instance=ExtResource("2_3iu16")]
transform = Transform3D(0.939693, 0, 0.34202, 0, 1, 0, -0.34202, 0, 0.939693, -0.155919, 0.03, -0.239194)
-[node name="Cheese2" parent="." index="2" instance=ExtResource("2_3iu16")]
+[node name="Cheese2" parent="." index="2" unique_id=1162582783 instance=ExtResource("2_3iu16")]
transform = Transform3D(-0.766045, 0, -0.642788, 0, 1, 0, 0.642788, 0, -0.766045, 0.143516, 0.03, -0.129342)
-[node name="Cheese3" parent="." index="3" instance=ExtResource("2_3iu16")]
+[node name="Cheese3" parent="." index="3" unique_id=2099970654 instance=ExtResource("2_3iu16")]
transform = Transform3D(0.822958, 0, -0.568102, 0, 1, 0, 0.568102, 0, 0.822958, -0.139973, 0.03, 0.178952)
-[node name="Cheese4" parent="." index="4" instance=ExtResource("2_3iu16")]
+[node name="Cheese4" parent="." index="4" unique_id=1356373605 instance=ExtResource("2_3iu16")]
transform = Transform3D(-0.909381, 0, 0.415964, 0, 1, 0, -0.415964, 0, -0.909381, 0.17718, 0.03, 0.178952)
-[node name="Cheese5" parent="." index="5" instance=ExtResource("2_3iu16")]
+[node name="Cheese5" parent="." index="5" unique_id=1934598214 instance=ExtResource("2_3iu16")]
transform = Transform3D(-0.909381, 0, 0.415964, 0, 1, 0, -0.415964, 0, -0.909381, 0.102617, 0.25, -0.074814)
-[node name="Cheese6" parent="." index="6" instance=ExtResource("2_3iu16")]
+[node name="Cheese6" parent="." index="6" unique_id=1487135630 instance=ExtResource("2_3iu16")]
transform = Transform3D(-0.11381, 0, 0.993503, 0, 1, 0, -0.993503, 0, -0.11381, -0.207069, 0.25, 0.0827757)
diff --git a/client/map/tiles/coconut_crate.gd b/client/map/tiles/coconut_crate.gd
deleted file mode 100644
index 34c41f18..00000000
--- a/client/map/tiles/coconut_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name CoconutCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/coconut_crate.tscn").instantiate())
diff --git a/client/map/tiles/coconut_crate.gd.uid b/client/map/tiles/coconut_crate.gd.uid
deleted file mode 100644
index 82cbfa8f..00000000
--- a/client/map/tiles/coconut_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://d2m7s35j2lyeb
diff --git a/client/map/tiles/coconut_crate.tscn b/client/map/tiles/coconut_crate.tscn
index af2146b1..e379d0ba 100644
--- a/client/map/tiles/coconut_crate.tscn
+++ b/client/map/tiles/coconut_crate.tscn
@@ -1,18 +1,18 @@
-[gd_scene load_steps=3 format=3 uid="uid://cti8difugwnxm"]
+[gd_scene format=3 uid="uid://cti8difugwnxm"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_1qpmd"]
[ext_resource type="PackedScene" uid="uid://cmsirxgv7iqnk" path="res://map/items/coconut.tscn" id="3_s5fgf"]
-[node name="StrawberryCrate" instance=ExtResource("1_1qpmd")]
+[node name="StrawberryCrate" unique_id=238285369 instance=ExtResource("1_1qpmd")]
-[node name="Coconut" parent="." index="1" instance=ExtResource("3_s5fgf")]
+[node name="Coconut" parent="." index="1" unique_id=1982239539 instance=ExtResource("3_s5fgf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.177501, 0, -0.17735)
-[node name="Coconut2" parent="." index="2" instance=ExtResource("3_s5fgf")]
+[node name="Coconut2" parent="." index="2" unique_id=1881504205 instance=ExtResource("3_s5fgf")]
transform = Transform3D(0.735258, 0, 0.677788, 0, 1, 0, -0.677788, 0, 0.735258, 0.185726, 0, -0.192698)
-[node name="Coconut3" parent="." index="3" instance=ExtResource("3_s5fgf")]
+[node name="Coconut3" parent="." index="3" unique_id=71866705 instance=ExtResource("3_s5fgf")]
transform = Transform3D(0.835347, 0, -0.549723, 0, 1, 0, 0.549723, 0, 0.835347, -0.177501, 0, 0.17735)
-[node name="Coconut4" parent="." index="4" instance=ExtResource("3_s5fgf")]
+[node name="Coconut4" parent="." index="4" unique_id=1363077163 instance=ExtResource("3_s5fgf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.184021, 0, 0.17735)
diff --git a/client/map/tiles/conveyor.gd b/client/map/tiles/conveyor.gd
index 60505425..e5e908b4 100644
--- a/client/map/tiles/conveyor.gd
+++ b/client/map/tiles/conveyor.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Conveyor
-extends Floor
+extends Tile
var conveyor: ConveyorModel = preload("res://map/tiles/conveyor.tscn").instantiate()
@@ -22,7 +22,7 @@ func _init(ctx: TileFactory.TileCC):
super(ctx)
base.add_child(conveyor)
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., .425, 0.)
func pass_to(tile: Tile):
diff --git a/client/map/tiles/conveyor.res b/client/map/tiles/conveyor.res
index e28bb057..2fcdf2bc 100644
--- a/client/map/tiles/conveyor.res
+++ b/client/map/tiles/conveyor.res
Binary files differ
diff --git a/client/map/tiles/conveyor.tscn b/client/map/tiles/conveyor.tscn
index 62e967a2..d5a53a6e 100644
--- a/client/map/tiles/conveyor.tscn
+++ b/client/map/tiles/conveyor.tscn
@@ -1,11 +1,11 @@
-[gd_scene load_steps=6 format=3 uid="uid://df5wbypoqbkf"]
+[gd_scene format=3 uid="uid://df5wbypoqbkf"]
[ext_resource type="ArrayMesh" uid="uid://djet05vuyh6iv" path="res://map/tiles/conveyor.res" id="1_hoctt"]
[ext_resource type="Script" uid="uid://sawoy4fqmd43" path="res://map/tiles/conveyor_model.gd" id="1_xdf1u"]
[ext_resource type="PackedScene" uid="uid://60wue8ult1bx" path="res://map/tiles/conveyor_direction.tscn" id="2_sf55l"]
[ext_resource type="Shader" uid="uid://2cpdtie0rquv" path="res://map/tiles/conveyor_direction.gdshader" id="4_8s3rd"]
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_bgatf"]
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_vkrca"]
resource_local_to_scene = true
render_priority = 0
shader = ExtResource("4_8s3rd")
@@ -15,14 +15,13 @@ shader_parameter/width = 0.2
shader_parameter/speed = 1.0
shader_parameter/alpha_fac = 1.0
-[node name="Conveyor" type="Node3D"]
+[node name="Conveyor" type="Node3D" unique_id=1694281657]
script = ExtResource("1_xdf1u")
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=863772891]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_hoctt")
-skeleton = NodePath("")
-[node name="ConveyorDirection" parent="." instance=ExtResource("2_sf55l")]
+[node name="ConveyorDirection" parent="." unique_id=889314478 instance=ExtResource("2_sf55l")]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.43, 0)
-surface_material_override/0 = SubResource("ShaderMaterial_bgatf")
+surface_material_override/0 = SubResource("ShaderMaterial_vkrca")
diff --git a/client/map/tiles/conveyor_direction.gdshader b/client/map/tiles/conveyor_direction.gdshader
index d59fcd2d..7adef653 100644
--- a/client/map/tiles/conveyor_direction.gdshader
+++ b/client/map/tiles/conveyor_direction.gdshader
@@ -1,6 +1,6 @@
/*
Hurry Curry! - a game about cooking
- Copyright (C) 2025 Hurry Curry! Contributors
+ Copyright (C) 2026 Hurry Curry! Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/conveyor_direction.tscn b/client/map/tiles/conveyor_direction.tscn
index 79eae94c..5fe0baf1 100644
--- a/client/map/tiles/conveyor_direction.tscn
+++ b/client/map/tiles/conveyor_direction.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=4 format=3 uid="uid://60wue8ult1bx"]
+[gd_scene format=3 uid="uid://60wue8ult1bx"]
[ext_resource type="Shader" uid="uid://2cpdtie0rquv" path="res://map/tiles/conveyor_direction.gdshader" id="1_47s57"]
@@ -15,7 +15,7 @@ shader_parameter/width = 0.2
shader_parameter/speed = 1.0
shader_parameter/alpha_fac = 1.0
-[node name="ConveyorDirection" type="MeshInstance3D"]
+[node name="ConveyorDirection" type="MeshInstance3D" unique_id=1563649411]
transform = Transform3D(1, 0, 0, 0, 1.19249e-08, 1, 0, -1, 1.19249e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_hr8jj")
surface_material_override/0 = SubResource("ShaderMaterial_h5q6r")
diff --git a/client/map/tiles/conveyor_model.gd b/client/map/tiles/conveyor_model.gd
index 1cbeb8a2..fcf36675 100644
--- a/client/map/tiles/conveyor_model.gd
+++ b/client/map/tiles/conveyor_model.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -26,5 +26,5 @@ func _process(delta):
func to_direction(direction: Vector2):
direction.y *= -1
- $ConveyorDirection.rotation.y = direction.angle() + .5 * PI
+ $ConveyorDirection.global_rotation.y = direction.angle() + .5 * PI
alpha = 1.
diff --git a/client/map/tiles/counter.gd b/client/map/tiles/counter.gd
index bd16c7a3..b8e7531a 100644
--- a/client/map/tiles/counter.gd
+++ b/client/map/tiles/counter.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,69 +14,14 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Counter
-extends Floor
-
-const COUNTERS: Array = [
- "counter",
- "pan",
- "sink",
- "oven",
-]
-
-const FLOORS: Array = [
- "floor",
- "chandelier",
- "ceiling-lamp",
- "grass",
- "table",
- "chair"
-]
-
-enum CounterKind {
- OUTER_CORNER,
- STRAIGHT,
- STRAIGHT_BACKSPLASH
-}
-
-var kind: CounterKind = CounterKind.STRAIGHT
-
-static func interact_target() -> Vector3:
- return Vector3(0, 0.5, 0)
+extends CounterLike
func _init(ctx: TileFactory.TileCC):
super(ctx)
-
- var facing: int = 0
- var max_series: int = 0
- var max_idx: int = 0
- for start in range(4):
- var series = 0
- for i in range(4):
- if Counter.is_floor(ctx.neighbors[(start + i) % 4]):
- series += 1
- else:
- break
- if series > max_series:
- max_series = series
- max_idx = start
-
- # we can neither find out whether it is an inner corner nor an outer corner
- # backsplash
- facing = max_idx
- if max_series == 1:
- if WallTile.WALLS.has(ctx.neighbors[(max_idx + 2) % 4]):
- kind = CounterKind.STRAIGHT_BACKSPLASH
- else:
- kind = CounterKind.STRAIGHT
- elif max_series == 2:
- kind = CounterKind.OUTER_CORNER
-
- turn_facing(facing)
-
-static func is_counter(tile_name_t) -> bool:
- if tile_name_t == null:
- return false
- return tile_name_t.ends_with("crate") or COUNTERS.has(tile_name_t)
-
-static func is_floor(floor_name) -> bool:
- return FLOORS.has(floor_name)
+ match kind:
+ CounterKind.OUTER_CORNER:
+ base.add_child(load("res://map/tiles/counter_outer_corner.tscn").instantiate())
+ CounterKind.STRAIGHT:
+ base.add_child(load("res://map/tiles/counter_straight.tscn").instantiate())
+ CounterKind.STRAIGHT_BACKSPLASH:
+ base.add_child(load("res://map/tiles/counter_straight_backsplash.tscn").instantiate())
diff --git a/client/map/tiles/counter.gd.uid b/client/map/tiles/counter.gd.uid
index 0fd45b66..395db459 100644
--- a/client/map/tiles/counter.gd.uid
+++ b/client/map/tiles/counter.gd.uid
@@ -1 +1 @@
-uid://bs61uem0427k6
+uid://bj8o06q70sek2
diff --git a/client/map/tiles/counter_base.gd.uid b/client/map/tiles/counter_base.gd.uid
deleted file mode 100644
index f46c79fa..00000000
--- a/client/map/tiles/counter_base.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://dx116e5ebg1p4
diff --git a/client/map/tiles/counter_like.gd b/client/map/tiles/counter_like.gd
new file mode 100644
index 00000000..ebecbbfa
--- /dev/null
+++ b/client/map/tiles/counter_like.gd
@@ -0,0 +1,80 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name CounterLike
+extends Tile
+
+const COUNTERS: Array = [
+ "counter",
+ "pan",
+ "sink",
+ "oven",
+]
+
+const FLOORS: Array = [
+ "floor",
+ "chandelier",
+ "ceiling-lamp",
+ "grass",
+ "table",
+ "chair"
+]
+
+enum CounterKind {
+ OUTER_CORNER,
+ STRAIGHT,
+ STRAIGHT_BACKSPLASH
+}
+
+var kind: CounterKind = CounterKind.STRAIGHT
+
+static func interact_target(): # -> Vector3?
+ return Vector3(0, 0.5, 0)
+
+func _init(ctx: TileFactory.TileCC):
+ super(ctx)
+
+ var facing: int = 0
+ var max_series: int = 0
+ var max_idx: int = 0
+ for start in range(4):
+ var series = 0
+ for i in range(4):
+ if not is_attachable(ctx.neighbors[(start + i) % 4]):
+ series += 1
+ else:
+ break
+ if series > max_series:
+ max_series = series
+ max_idx = start
+
+ # we can neither find out whether it is an inner corner nor an outer corner
+ # backsplash
+ facing = max_idx
+ if max_series == 1:
+ if G.has_one(WallTile.WALLS, ctx.neighbors[(max_idx + 2) % 4]):
+ kind = CounterKind.STRAIGHT_BACKSPLASH
+ else:
+ kind = CounterKind.STRAIGHT
+ elif max_series == 2:
+ kind = CounterKind.OUTER_CORNER
+
+ turn_facing(facing)
+
+static func is_attachable(neighbor: Array) -> bool:
+ for tile: String in neighbor:
+ if tile.ends_with("crate"): return true
+ if COUNTERS.has(tile): return true
+ return false
diff --git a/client/map/tiles/counter_like.gd.uid b/client/map/tiles/counter_like.gd.uid
new file mode 100644
index 00000000..0fd45b66
--- /dev/null
+++ b/client/map/tiles/counter_like.gd.uid
@@ -0,0 +1 @@
+uid://bs61uem0427k6
diff --git a/client/map/tiles/counter_outer_corner.res b/client/map/tiles/counter_outer_corner.res
index 68488c25..e647a046 100644
--- a/client/map/tiles/counter_outer_corner.res
+++ b/client/map/tiles/counter_outer_corner.res
Binary files differ
diff --git a/client/map/tiles/counter_outer_corner.tscn b/client/map/tiles/counter_outer_corner.tscn
index c5227dfc..ca202f48 100644
--- a/client/map/tiles/counter_outer_corner.tscn
+++ b/client/map/tiles/counter_outer_corner.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://blh11npblosbh"]
+[gd_scene format=3 uid="uid://blh11npblosbh"]
[ext_resource type="ArrayMesh" uid="uid://brpeawypw3jmg" path="res://map/tiles/counter_outer_corner.res" id="1_rq22t"]
-[node name="Counter" type="Node3D"]
+[node name="Counter" type="Node3D" unique_id=1053408630]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1111773353]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_rq22t")
-skeleton = NodePath("")
diff --git a/client/map/tiles/counter_straight.res b/client/map/tiles/counter_straight.res
index 78a0cad3..9e95bccc 100644
--- a/client/map/tiles/counter_straight.res
+++ b/client/map/tiles/counter_straight.res
Binary files differ
diff --git a/client/map/tiles/counter_straight.tscn b/client/map/tiles/counter_straight.tscn
index 74517d2d..20016723 100644
--- a/client/map/tiles/counter_straight.tscn
+++ b/client/map/tiles/counter_straight.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cg084pjthp7tn"]
+[gd_scene format=3 uid="uid://cg084pjthp7tn"]
[ext_resource type="ArrayMesh" uid="uid://btafby3tayv7r" path="res://map/tiles/counter_straight.res" id="1_5ksmf"]
-[node name="Counter" type="Node3D"]
+[node name="Counter" type="Node3D" unique_id=264805024]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=9093183]
mesh = ExtResource("1_5ksmf")
-skeleton = NodePath("")
diff --git a/client/map/tiles/counter_straight_backsplash.res b/client/map/tiles/counter_straight_backsplash.res
index 80845fc0..313c99f8 100644
--- a/client/map/tiles/counter_straight_backsplash.res
+++ b/client/map/tiles/counter_straight_backsplash.res
Binary files differ
diff --git a/client/map/tiles/counter_straight_backsplash.tscn b/client/map/tiles/counter_straight_backsplash.tscn
index 3490df9c..e243836a 100644
--- a/client/map/tiles/counter_straight_backsplash.tscn
+++ b/client/map/tiles/counter_straight_backsplash.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://blcqlogspnah1"]
+[gd_scene format=3 uid="uid://blcqlogspnah1"]
[ext_resource type="ArrayMesh" uid="uid://cdlmrxt42emtr" path="res://map/tiles/counter_straight_backsplash.res" id="1_3t3hs"]
-[node name="Counter" type="Node3D"]
+[node name="Counter" type="Node3D" unique_id=693383210]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1678672210]
mesh = ExtResource("1_3t3hs")
-skeleton = NodePath("")
diff --git a/client/map/tiles/counter_window.gd b/client/map/tiles/counter_window.gd
index 46889e43..d9cf6d24 100644
--- a/client/map/tiles/counter_window.gd
+++ b/client/map/tiles/counter_window.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,7 +16,7 @@
class_name CounterWindow
extends WallTile
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0, 0.625, 0)
func _init(ctx: TileFactory.TileCC):
diff --git a/client/map/tiles/counter_window.res b/client/map/tiles/counter_window.res
index 2cb0f059..98d52663 100644
--- a/client/map/tiles/counter_window.res
+++ b/client/map/tiles/counter_window.res
Binary files differ
diff --git a/client/map/tiles/counter_window.tscn b/client/map/tiles/counter_window.tscn
index 8ae5a54d..09a5eaff 100644
--- a/client/map/tiles/counter_window.tscn
+++ b/client/map/tiles/counter_window.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bwgkd65215m7e"]
+[gd_scene format=3 uid="uid://bwgkd65215m7e"]
[ext_resource type="ArrayMesh" uid="uid://lywflqnpelc7" path="res://map/tiles/counter_window.res" id="1_gyddt"]
-[node name="CounterWindow" type="Node3D"]
+[node name="CounterWindow" type="Node3D" unique_id=1350548242]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=2102120795]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_gyddt")
-skeleton = NodePath("")
diff --git a/client/map/tiles/counter_base.gd b/client/map/tiles/counter_window_conveyor.gd
index 34bc5b59..e34dd2fd 100644
--- a/client/map/tiles/counter_base.gd
+++ b/client/map/tiles/counter_window_conveyor.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,15 +13,24 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name CounterBase
-extends Counter
+class_name CounterWindowConveyor
+extends WallTile
+
+var conveyor: ConveyorModel = preload("res://map/tiles/counter_window_conveyor.tscn").instantiate()
func _init(ctx: TileFactory.TileCC):
super(ctx)
match kind:
- CounterKind.OUTER_CORNER:
- base.add_child(load("res://map/tiles/counter_outer_corner.tscn").instantiate())
- CounterKind.STRAIGHT:
- base.add_child(load("res://map/tiles/counter_straight.tscn").instantiate())
- CounterKind.STRAIGHT_BACKSPLASH:
- base.add_child(load("res://map/tiles/counter_straight_backsplash.tscn").instantiate())
+ WallKind.STRAIGHT:
+ add_dyed_mesh(ctx, conveyor)
+ WallKind.OUTER_CORNER:
+ push_warning("There is no corner counter window!")
+ add_dyed_mesh(ctx, conveyor)
+
+static func interact_target(): # -> Vector3?
+ return Vector3(0., .425, 0.)
+
+func pass_to(tile: Tile):
+ super(tile)
+ var dir: Vector3 = (tile.position - position)
+ conveyor.to_direction(Vector2(dir.x, dir.z).normalized())
diff --git a/client/map/tiles/counter_window_conveyor.gd.uid b/client/map/tiles/counter_window_conveyor.gd.uid
new file mode 100644
index 00000000..861f4f0c
--- /dev/null
+++ b/client/map/tiles/counter_window_conveyor.gd.uid
@@ -0,0 +1 @@
+uid://onp3ijhfm4hg
diff --git a/client/map/tiles/counter_window_conveyor.res b/client/map/tiles/counter_window_conveyor.res
new file mode 100644
index 00000000..af234851
--- /dev/null
+++ b/client/map/tiles/counter_window_conveyor.res
Binary files differ
diff --git a/client/map/tiles/counter_window_conveyor.tscn b/client/map/tiles/counter_window_conveyor.tscn
new file mode 100644
index 00000000..5b977ecc
--- /dev/null
+++ b/client/map/tiles/counter_window_conveyor.tscn
@@ -0,0 +1,31 @@
+[gd_scene format=3 uid="uid://qxbupftye50d"]
+
+[ext_resource type="ArrayMesh" uid="uid://cgxmagghg40l3" path="res://map/tiles/counter_window_conveyor.res" id="1_sxc4d"]
+[ext_resource type="Script" uid="uid://sawoy4fqmd43" path="res://map/tiles/conveyor_model.gd" id="1_yowx8"]
+[ext_resource type="PackedScene" uid="uid://60wue8ult1bx" path="res://map/tiles/conveyor_direction.tscn" id="2_5k25t"]
+[ext_resource type="Shader" uid="uid://2cpdtie0rquv" path="res://map/tiles/conveyor_direction.gdshader" id="3_yowx8"]
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yowx8"]
+albedo_color = Color(0, 0, 0, 1)
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yowx8"]
+resource_local_to_scene = true
+render_priority = 0
+shader = ExtResource("3_yowx8")
+shader_parameter/angle = 0.2
+shader_parameter/frequency = 0.5
+shader_parameter/width = 0.2
+shader_parameter/speed = 1.0
+shader_parameter/alpha_fac = 1.0
+
+[node name="CounterWindowConveyor" type="Node3D" unique_id=326965642]
+script = ExtResource("1_yowx8")
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1365726575]
+transform = Transform3D(-2.1855694e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.1855694e-08, 0, 0, 0)
+mesh = ExtResource("1_sxc4d")
+surface_material_override/3 = SubResource("StandardMaterial3D_yowx8")
+
+[node name="ConveyorDirection" parent="." unique_id=61838280 instance=ExtResource("2_5k25t")]
+transform = Transform3D(-4.371139e-08, -1, -4.371139e-08, 0, -4.371139e-08, 1, -1, 4.371139e-08, 1.9106855e-15, 0, 0.43, 0)
+surface_material_override/0 = SubResource("ShaderMaterial_yowx8")
diff --git a/client/map/tiles/crate.gd b/client/map/tiles/crate.gd
index a952c2e8..bb96b919 100644
--- a/client/map/tiles/crate.gd
+++ b/client/map/tiles/crate.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,10 +14,57 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Crate
-extends Counter
+extends CounterLike
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0, 0.25, 0)
func _init(ctx: TileFactory.TileCC):
super(ctx)
+ match ctx.tile_name.variant:
+ "bun":
+ base.add_child(load("res://map/tiles/bun_crate.tscn").instantiate())
+ "cheese":
+ base.add_child(load("res://map/tiles/cheese_crate.tscn").instantiate())
+ "coconut":
+ base.add_child(load("res://map/tiles/coconut_crate.tscn").instantiate())
+ "fish":
+ base.add_child(load("res://map/tiles/fish_crate.tscn").instantiate())
+ "flour":
+ base.add_child(load("res://map/tiles/flour_crate.tscn").instantiate())
+ "leek":
+ base.add_child(load("res://map/tiles/leek_crate.tscn").instantiate())
+ "lettuce":
+ base.add_child(load("res://map/tiles/lettuce_crate.tscn").instantiate())
+ "mushroom":
+ base.add_child(load("res://map/tiles/mushroom_crate.tscn").instantiate())
+ "noodles":
+ base.add_child(load("res://map/tiles/noodles_crate.tscn").instantiate())
+ "potato":
+ base.add_child(load("res://map/tiles/potato_crate.tscn").instantiate())
+ "rice":
+ base.add_child(load("res://map/tiles/rice_crate.tscn").instantiate())
+ "steak":
+ base.add_child(load("res://map/tiles/steak_crate.tscn").instantiate())
+ "strawberry":
+ base.add_child(load("res://map/tiles/strawberry_crate.tscn").instantiate())
+ "tomato":
+ base.add_child(load("res://map/tiles/tomato_crate.tscn").instantiate())
+ var item_name:
+ base.add_child(load("res://map/tiles/crate.tscn").instantiate())
+ for i in [
+ [Vector3(0.25, 0.1, -0.2), deg_to_rad(-8)],
+ [Vector3(0.25, 0.15, 0.2), deg_to_rad(8)],
+ [Vector3(0, 0.1, -0.2), deg_to_rad(12)],
+ [Vector3(0, 0.1, 0.1), deg_to_rad(-6)],
+ [Vector3(-0.25, 0.15, -0.2), deg_to_rad(-8)],
+ [Vector3(-0.25, 0.1, 0.2), deg_to_rad(4)],
+ ]:
+ var crate_item_base = Node3D.new()
+ var crate_item = ItemFactory.produce(item_name, crate_item_base)
+ crate_item.position = i[0]
+ crate_item_base.position = i[0]
+ crate_item.rotation.y = i[1]
+ crate_item_base.rotation.y = i[1]
+ crate_item_base.add_child(crate_item)
+ base.add_child(crate_item_base)
diff --git a/client/map/tiles/crate.res b/client/map/tiles/crate.res
index 1d1183c5..6b1e5251 100644
--- a/client/map/tiles/crate.res
+++ b/client/map/tiles/crate.res
Binary files differ
diff --git a/client/map/tiles/crate.tscn b/client/map/tiles/crate.tscn
index 55da257b..885bee8e 100644
--- a/client/map/tiles/crate.tscn
+++ b/client/map/tiles/crate.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://xdui0oya4lpb"]
+[gd_scene format=3 uid="uid://xdui0oya4lpb"]
[ext_resource type="ArrayMesh" uid="uid://btn7oh1v2k40p" path="res://map/tiles/crate.res" id="1_qu7f0"]
-[node name="Crate" type="Node3D"]
+[node name="Crate" type="Node3D" unique_id=1797382951]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=473438995]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_qu7f0")
-skeleton = NodePath("")
diff --git a/client/map/tiles/cutting_board.gd b/client/map/tiles/cutting_board.gd
index 300b5700..d9f95911 100644
--- a/client/map/tiles/cutting_board.gd
+++ b/client/map/tiles/cutting_board.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,43 +14,10 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name CuttingBoard
-extends CounterBase
-
-var board = load("res://map/tiles/cutting_board.tscn").instantiate()
-var chopping: AudioStreamPlayer3D = AudioStreamPlayer3D.new()
-var acting_player
+extends ActiveInteractCounter
func _init(ctx: TileFactory.TileCC):
- super(ctx)
- chopping.stream = preload("res://map/tiles/sounds/chop.ogg")
- add_child(chopping)
- base.add_child(board)
-
-func progress(position_: float, speed: float, warn: bool, acting_player_):
- super(position_, speed, warn, acting_player)
- var knife: Node3D = board.get_node("Knife")
- acting_player = acting_player_
-
- if not chopping.playing and speed != 0.:
- chopping.play()
- if acting_player != null:
- knife.visible = false
- var acting_character: Character = acting_player.character
- acting_character.cutting = true
- elif speed == 0:
- chopping.stop()
- knife.visible = true
- if acting_player != null:
- var acting_character: Character = acting_player.character
- acting_character.cutting = false
-
-func finish():
- super()
- if is_instance_valid(acting_player):
- var acting_character: Character = acting_player.character
- acting_character.cutting = false
- board.get_node("Knife").visible = true
- chopping.stop()
+ super(ctx, preload("res://map/tiles/cutting_board.tscn"), "CuttingBoard/Knife", func (p: Player, x: bool): p.character.cutting = x, preload("res://map/tiles/sounds/chop.ogg"))
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., 0.575, 0.)
diff --git a/client/map/tiles/cutting_board.res b/client/map/tiles/cutting_board.res
index 15a1b5c3..9511f542 100644
--- a/client/map/tiles/cutting_board.res
+++ b/client/map/tiles/cutting_board.res
Binary files differ
diff --git a/client/map/tiles/cutting_board.tscn b/client/map/tiles/cutting_board.tscn
index dd469417..498665eb 100644
--- a/client/map/tiles/cutting_board.tscn
+++ b/client/map/tiles/cutting_board.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://bslx1a7kdufde"]
+[gd_scene format=3 uid="uid://bslx1a7kdufde"]
[ext_resource type="ArrayMesh" uid="uid://dd4g04lgvsly5" path="res://map/tiles/cutting_board.res" id="1_d4k2k"]
[ext_resource type="PackedScene" uid="uid://cufype1bex3r3" path="res://map/tiles/knife.tscn" id="3_wvxni"]
@@ -150,17 +150,14 @@ _data = {
&"cut_loop": SubResource("Animation_vu13j")
}
-[node name="CuttingBoard" type="Node3D"]
+[node name="CuttingBoard" type="Node3D" unique_id=238504632]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=396141108]
transform = Transform3D(0.4, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -0.075, 0.5, 0)
mesh = ExtResource("1_d4k2k")
-skeleton = NodePath("")
-[node name="Knife" parent="." instance=ExtResource("3_wvxni")]
-transform = Transform3D(1, 0, 0, 0, -3.61999e-06, 1, 0, -1, -3.61999e-06, 0.375, 0.52, 0.19)
+[node name="Knife" parent="." unique_id=1126807225 instance=ExtResource("3_wvxni")]
+transform = Transform3D(1, 0, 0, 0, -3.6199901e-06, 1, 0, -1, -3.6199901e-06, 0.375, 0.52, 0.19)
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-libraries = {
-"": SubResource("AnimationLibrary_fy61n")
-}
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=127266211]
+libraries/ = SubResource("AnimationLibrary_fy61n")
diff --git a/client/map/tiles/deep_fryer.gd b/client/map/tiles/deep_fryer.gd
index 82204cb8..d730207f 100644
--- a/client/map/tiles/deep_fryer.gd
+++ b/client/map/tiles/deep_fryer.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,18 +14,16 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name DeepFryer
-extends CounterBase
-
-var deep_fryer = load("res://map/tiles/deep_fryer.tscn").instantiate()
+extends Tile
func _init(ctx: TileFactory.TileCC):
super(ctx)
- base.add_child(deep_fryer)
+ base.add_child(preload("res://map/tiles/deep_fryer.tscn").instantiate())
func set_item(i: Item):
super(i)
if i != null:
i.rotation_target = item_base.global_rotation.y + PI
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., 0.55, 0.)
diff --git a/client/map/tiles/deep_fryer.gd.uid b/client/map/tiles/deep_fryer.gd.uid
index 0fc161a4..26210181 100644
--- a/client/map/tiles/deep_fryer.gd.uid
+++ b/client/map/tiles/deep_fryer.gd.uid
@@ -1 +1 @@
-uid://x4gtbub0vfun
+uid://bd0pophijvqv5
diff --git a/client/map/tiles/deep_fryer.tscn b/client/map/tiles/deep_fryer.tscn
index cb854ec0..a163411f 100644
--- a/client/map/tiles/deep_fryer.tscn
+++ b/client/map/tiles/deep_fryer.tscn
@@ -1,20 +1,21 @@
-[gd_scene load_steps=4 format=3 uid="uid://bys6bffu5srpt"]
+[gd_scene format=3 uid="uid://bys6bffu5srpt"]
[ext_resource type="ArrayMesh" uid="uid://bketpomfy35to" path="res://map/tiles/deep_fryer_base.res" id="1_e4g0d"]
[ext_resource type="ArrayMesh" uid="uid://c7k6gevpwdbv0" path="res://map/tiles/deep_fryer_fill.res" id="3_1rwcx"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1rwcx"]
+transparency = 1
cull_mode = 1
-albedo_color = Color(0.75, 0.58, 0.45000002, 1)
+albedo_color = Color(0.75, 0.58, 0.45000002, 0.6666667)
roughness = 0.1
-[node name="DeepFryer" type="Node3D"]
+[node name="DeepFryer" type="Node3D" unique_id=1218321913]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1815767562]
transform = Transform3D(0.75, 0, 0, 0, -3.278354e-08, -0.75, 0, 0.75, -3.278354e-08, 0, 0.5, 0)
mesh = ExtResource("1_e4g0d")
-[node name="Fill" type="MeshInstance3D" parent="."]
+[node name="Fill" type="MeshInstance3D" parent="." unique_id=56430436]
transform = Transform3D(0.75, 0, 0, 0, -3.278354e-08, -0.75, 0, 0.75, -3.278354e-08, 0, 0.5, 0)
mesh = ExtResource("3_1rwcx")
surface_material_override/0 = SubResource("StandardMaterial3D_1rwcx")
diff --git a/client/map/tiles/deep_fryer_base.res b/client/map/tiles/deep_fryer_base.res
index 2a392ab6..e6fd0377 100644
--- a/client/map/tiles/deep_fryer_base.res
+++ b/client/map/tiles/deep_fryer_base.res
Binary files differ
diff --git a/client/map/tiles/deep_fryer_fill.res b/client/map/tiles/deep_fryer_fill.res
index 0280a561..5c450bf1 100644
--- a/client/map/tiles/deep_fryer_fill.res
+++ b/client/map/tiles/deep_fryer_fill.res
Binary files differ
diff --git a/client/map/tiles/door.gd b/client/map/tiles/door.gd
index 7fe23c93..37dd012f 100644
--- a/client/map/tiles/door.gd
+++ b/client/map/tiles/door.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -21,7 +21,7 @@ func _init(ctx: TileFactory.TileCC):
var new_facing = 0
for i in range(4):
- if ctx.neighbors[i] == "door":
+ if ctx.neighbors[i].has("door"):
new_facing = i
turn_facing(new_facing)
add_dyed_mesh(ctx, load("res://map/tiles/door.tscn").instantiate(), "Door", 1)
diff --git a/client/map/tiles/door.res b/client/map/tiles/door.res
index ad64d5b6..d2dbbdcf 100644
--- a/client/map/tiles/door.res
+++ b/client/map/tiles/door.res
Binary files differ
diff --git a/client/map/tiles/door.tscn b/client/map/tiles/door.tscn
index 894d30a2..d00e99ec 100644
--- a/client/map/tiles/door.tscn
+++ b/client/map/tiles/door.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://coxh3mgvch5bd"]
+[gd_scene format=3 uid="uid://coxh3mgvch5bd"]
[ext_resource type="ArrayMesh" uid="uid://bomlbxf33hd11" path="res://map/tiles/door.res" id="1_wfoe6"]
-[node name="Door" type="Node3D"]
+[node name="Door" type="Node3D" unique_id=1352926697]
-[node name="Door" type="MeshInstance3D" parent="."]
+[node name="Door" type="MeshInstance3D" parent="." unique_id=1538534480]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_wfoe6")
-skeleton = NodePath("")
diff --git a/client/map/tiles/exterior_tree.gd b/client/map/tiles/exterior_tree.gd
index fe9eeaf8..82c457e2 100644
--- a/client/map/tiles/exterior_tree.gd
+++ b/client/map/tiles/exterior_tree.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name ExteriorTree
-extends Grass
+extends Tile
const SCALE: Vector3 = Vector3(100., 100., 100.)
const ROT: Vector3 = Vector3(1.5 * PI, 0., 0.)
@@ -23,23 +23,41 @@ func _init(ctx: TileFactory.TileCC):
super(ctx)
var random = RandomNumberGenerator.new()
random.seed = str(ctx.position).hash()
- var tree: int = random.randi_range(1,5)
- var trunk: Mesh = load("res://map/tiles/tree/trunk_%d.res" % tree)
- var leaves: Mesh = load("res://map/tiles/tree/leaves_%d_%s.res" % [
- tree,
- "lq" if Settings.read("graphics.lq_trees") else "hq"
- ])
+ var tree_type: int = random.randi_range(1,5)
+ var no_leaves := false
+
+ if ctx.tile_name.variant != null:
+ var variant: String = ctx.tile_name.variant
+ if variant == "no_leaves":
+ no_leaves = true
+ else:
+ if variant.is_valid_int():
+ var variant_int := int(variant)
+ if variant_int >= 1 and variant_int <= 5:
+ tree_type = variant_int
+ else:
+ push_error("Tree variant \"%d\" is out of bounds (expected element of [1..5])" % variant_int)
+ push_error("Tree variant \"%s\" not recognized" % variant)
+
+ var tree_node: Node3D = Node3D.new()
+
+ if not no_leaves:
+ var leaves: Mesh = load("res://map/tiles/tree/leaves_%d_%s.res" % [
+ tree_type,
+ "lq" if Settings.read("graphics.lq_trees") else "hq"
+ ])
+ var leaves_instance: MeshInstance3D = MeshInstance3D.new()
+ leaves_instance.mesh = leaves
+ leaves_instance.scale = SCALE
+ leaves_instance.rotation = ROT
+ tree_node.add_child(leaves_instance)
+
+ var trunk: Mesh = load("res://map/tiles/tree/trunk_%d.res" % tree_type)
var trunk_instance: MeshInstance3D = MeshInstance3D.new()
trunk_instance.mesh = trunk
trunk_instance.scale = SCALE
trunk_instance.rotation = ROT
- var leaves_instance: MeshInstance3D = MeshInstance3D.new()
- leaves_instance.mesh = leaves
- leaves_instance.scale = SCALE
- leaves_instance.rotation = ROT
- var tree_node: Node3D = Node3D.new()
tree_node.add_child(trunk_instance)
- tree_node.add_child(leaves_instance)
tree_node.name = "Tree"
base.add_child(tree_node)
diff --git a/client/map/tiles/fence.gd b/client/map/tiles/fence.gd
index 0510c4b9..5d2dfdd8 100644
--- a/client/map/tiles/fence.gd
+++ b/client/map/tiles/fence.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -17,10 +17,15 @@ class_name Fence
extends WallTile
func _init(ctx: TileFactory.TileCC):
+ walls = ["fence"]
super(ctx)
+ var neighboring_fences := ctx.neighbors.map(is_wall).count(true)
match kind:
WallKind.STRAIGHT:
- base.add_child(load("res://map/tiles/fence_straight.tscn").instantiate())
+ if neighboring_fences == 1:
+ base.add_child(load("res://map/tiles/fence_end.tscn").instantiate())
+ else:
+ base.add_child(load("res://map/tiles/fence_straight.tscn").instantiate())
WallKind.OUTER_CORNER:
base.add_child(load("res://map/tiles/fence_corner.tscn").instantiate())
WallKind.T:
@@ -29,5 +34,5 @@ func _init(ctx: TileFactory.TileCC):
push_warning("no wall cross available!")
base.add_child(load("res://map/tiles/fence_straight.tscn").instantiate())
-func get_base_mesh():
- return preload("res://map/tiles/grass.tscn").instantiate()
+static func fm_id() -> String:
+ return "grass"
diff --git a/client/map/tiles/fence_corner.res b/client/map/tiles/fence_corner.res
index 14e345a6..8324c435 100644
--- a/client/map/tiles/fence_corner.res
+++ b/client/map/tiles/fence_corner.res
Binary files differ
diff --git a/client/map/tiles/fence_corner.tscn b/client/map/tiles/fence_corner.tscn
index b7b0d356..57adebf5 100644
--- a/client/map/tiles/fence_corner.tscn
+++ b/client/map/tiles/fence_corner.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cvac5lq82xqhq"]
+[gd_scene format=3 uid="uid://cvac5lq82xqhq"]
[ext_resource type="ArrayMesh" uid="uid://25vo0ohcya7a" path="res://map/tiles/fence_corner.res" id="1_5aqc4"]
-[node name="FenceCorner" type="Node3D"]
+[node name="FenceCorner" type="Node3D" unique_id=1550671344]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=669814619]
transform = Transform3D(-2.18557e-06, 0, 50, 0, 50, 0, -50, 0, -2.18557e-06, 0, 0, 0)
mesh = ExtResource("1_5aqc4")
-skeleton = NodePath("")
diff --git a/client/map/tiles/fence_end.res b/client/map/tiles/fence_end.res
new file mode 100644
index 00000000..c7862747
--- /dev/null
+++ b/client/map/tiles/fence_end.res
Binary files differ
diff --git a/client/map/tiles/fence_end.tscn b/client/map/tiles/fence_end.tscn
new file mode 100644
index 00000000..5d8e185c
--- /dev/null
+++ b/client/map/tiles/fence_end.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://dseef40ucueuv"]
+
+[ext_resource type="ArrayMesh" uid="uid://bhdxbn6ivop6k" path="res://map/tiles/fence_end.res" id="1_cdo5n"]
+
+[node name="FenceEnd" type="Node3D" unique_id=1482639971]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=461934852]
+transform = Transform3D(5.9624404e-07, 0, -50, 0, 50, 0, 50, 0, 5.9624404e-07, 0, 0, 0)
+mesh = ExtResource("1_cdo5n")
diff --git a/client/map/tiles/fence_straight.res b/client/map/tiles/fence_straight.res
index c3975138..44f673ed 100644
--- a/client/map/tiles/fence_straight.res
+++ b/client/map/tiles/fence_straight.res
Binary files differ
diff --git a/client/map/tiles/fence_straight.tscn b/client/map/tiles/fence_straight.tscn
index d31af10d..eb31dc7f 100644
--- a/client/map/tiles/fence_straight.tscn
+++ b/client/map/tiles/fence_straight.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://d0w3mrbe8w8m0"]
+[gd_scene format=3 uid="uid://d0w3mrbe8w8m0"]
[ext_resource type="ArrayMesh" uid="uid://d1jfqqjhaqsgn" path="res://map/tiles/fence_straight.res" id="1_4ta43"]
-[node name="FenceStraight" type="Node3D"]
+[node name="FenceStraight" type="Node3D" unique_id=186177964]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1512127781]
transform = Transform3D(-2.18557e-06, 0, 50, 0, 50, 0, -50, 0, -2.18557e-06, 0, 0, 0)
mesh = ExtResource("1_4ta43")
-skeleton = NodePath("")
diff --git a/client/map/tiles/fence_t.res b/client/map/tiles/fence_t.res
index 93043f7c..65e66589 100644
--- a/client/map/tiles/fence_t.res
+++ b/client/map/tiles/fence_t.res
Binary files differ
diff --git a/client/map/tiles/fence_t.tscn b/client/map/tiles/fence_t.tscn
index 1efb3fe8..c85f3c56 100644
--- a/client/map/tiles/fence_t.tscn
+++ b/client/map/tiles/fence_t.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bk6ufdmbtrkkh"]
+[gd_scene format=3 uid="uid://bk6ufdmbtrkkh"]
[ext_resource type="ArrayMesh" uid="uid://b8v4k4o8cusn4" path="res://map/tiles/fence_t.res" id="1_i484t"]
-[node name="FenceT" type="Node3D"]
+[node name="FenceT" type="Node3D" unique_id=1903555463]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=891470237]
transform = Transform3D(50, 0, 0, 0, 50, 0, 0, 0, 50, 0, 0, 0)
mesh = ExtResource("1_i484t")
-skeleton = NodePath("")
diff --git a/client/map/tiles/fish_crate.gd b/client/map/tiles/fish_crate.gd
deleted file mode 100644
index 76859159..00000000
--- a/client/map/tiles/fish_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name FishCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/fish_crate.tscn").instantiate())
diff --git a/client/map/tiles/fish_crate.gd.uid b/client/map/tiles/fish_crate.gd.uid
deleted file mode 100644
index 2974ccf5..00000000
--- a/client/map/tiles/fish_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://c346hqdpfl3df
diff --git a/client/map/tiles/fish_crate.tscn b/client/map/tiles/fish_crate.tscn
index a096a000..f55c203b 100644
--- a/client/map/tiles/fish_crate.tscn
+++ b/client/map/tiles/fish_crate.tscn
@@ -1,21 +1,21 @@
-[gd_scene load_steps=3 format=3 uid="uid://d0u4ym5vny6v3"]
+[gd_scene format=3 uid="uid://d0u4ym5vny6v3"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_uotdf"]
[ext_resource type="PackedScene" uid="uid://dom5n7h7l7sr8" path="res://map/items/fish.tscn" id="3_p6tbn"]
-[node name="FishCrate" instance=ExtResource("1_uotdf")]
+[node name="FishCrate" unique_id=702043979 instance=ExtResource("1_uotdf")]
-[node name="Fish" parent="." index="1" instance=ExtResource("3_p6tbn")]
+[node name="Fish" parent="." index="1" unique_id=417741247 instance=ExtResource("3_p6tbn")]
transform = Transform3D(-0.449443, -0.771467, -0.450378, 0.791587, -0.577595, 0.199436, -0.413994, -0.266878, 0.870279, -0.214561, 0.395904, -0.219162)
-[node name="Fish2" parent="." index="2" instance=ExtResource("3_p6tbn")]
+[node name="Fish2" parent="." index="2" unique_id=345509005 instance=ExtResource("3_p6tbn")]
transform = Transform3D(-0.711008, -0.637308, 0.297164, 0.702745, -0.65893, 0.268256, 0.024849, 0.399563, 0.916369, -0.214561, 0.387099, 0.251797)
-[node name="Fish3" parent="." index="3" instance=ExtResource("3_p6tbn")]
+[node name="Fish3" parent="." index="3" unique_id=903314315 instance=ExtResource("3_p6tbn")]
transform = Transform3D(0.570404, 0.618182, 0.540824, 0.777163, -0.619291, -0.111795, 0.265817, 0.484076, -0.833674, 0.258679, 0.387099, 0.251797)
-[node name="Fish4" parent="." index="4" instance=ExtResource("3_p6tbn")]
+[node name="Fish4" parent="." index="4" unique_id=532382365 instance=ExtResource("3_p6tbn")]
transform = Transform3D(0.392672, 0.829406, 0.397361, 0.896997, -0.25003, -0.364529, -0.202991, 0.499572, -0.842154, 0.224403, 0.387099, -0.0202113)
-[node name="Fish5" parent="." index="5" instance=ExtResource("3_p6tbn")]
+[node name="Fish5" parent="." index="5" unique_id=984963027 instance=ExtResource("3_p6tbn")]
transform = Transform3D(0.667773, 0.721732, 0.18216, 0.744349, -0.64583, -0.169849, -0.00494065, 0.249011, -0.968488, 0.162187, 0.340659, -0.264269)
diff --git a/client/map/tiles/floor.gd b/client/map/tiles/floor.gd
index e0959708..6baae392 100644
--- a/client/map/tiles/floor.gd
+++ b/client/map/tiles/floor.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/floor.gdshader b/client/map/tiles/floor.gdshader
index a1567189..dd6f277f 100644
--- a/client/map/tiles/floor.gdshader
+++ b/client/map/tiles/floor.gdshader
@@ -1,6 +1,6 @@
/*
Hurry Curry! - a game about cooking
- Copyright (C) 2025 Hurry Curry! Contributors
+ Copyright (C) 2026 Hurry Curry! Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/floor.res b/client/map/tiles/floor.res
index bcd3625c..3e50860a 100644
--- a/client/map/tiles/floor.res
+++ b/client/map/tiles/floor.res
Binary files differ
diff --git a/client/map/tiles/floor.tscn b/client/map/tiles/floor.tscn
index 61299e3a..e4bd7fd4 100644
--- a/client/map/tiles/floor.tscn
+++ b/client/map/tiles/floor.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://d22cslgao5jd4"]
+[gd_scene format=3 uid="uid://d22cslgao5jd4"]
[ext_resource type="ArrayMesh" uid="uid://bd11w8rl78pab" path="res://map/tiles/floor.res" id="1_8pd6m"]
-[node name="Floor" type="Node3D"]
+[node name="Floor" type="Node3D" unique_id=1210077403]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1731675264]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_8pd6m")
-skeleton = NodePath("")
diff --git a/client/map/tiles/floor_like.gd b/client/map/tiles/floor_like.gd
index 228a95e9..fc9be052 100644
--- a/client/map/tiles/floor_like.gd
+++ b/client/map/tiles/floor_like.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/floor_material.tres b/client/map/tiles/floor_material.tres
index d0d4ad4f..dedb50ba 100644
--- a/client/map/tiles/floor_material.tres
+++ b/client/map/tiles/floor_material.tres
@@ -1,4 +1,4 @@
-[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dngt21phuitvu"]
+[gd_resource type="ShaderMaterial" format=3 uid="uid://dngt21phuitvu"]
[ext_resource type="Shader" uid="uid://bf1jo3phn2pvs" path="res://map/tiles/floor.gdshader" id="1_7ju4h"]
diff --git a/client/map/tiles/floor_mesher.gd b/client/map/tiles/floor_mesher.gd
index cb89cc0b..addd23d2 100644
--- a/client/map/tiles/floor_mesher.gd
+++ b/client/map/tiles/floor_mesher.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/flour_crate.gd.uid b/client/map/tiles/flour_crate.gd.uid
deleted file mode 100644
index 9dd3f3de..00000000
--- a/client/map/tiles/flour_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://fangsumpqnoy
diff --git a/client/map/tiles/flour_crate.tscn b/client/map/tiles/flour_crate.tscn
index 1e4a7b7d..8f7d39bd 100644
--- a/client/map/tiles/flour_crate.tscn
+++ b/client/map/tiles/flour_crate.tscn
@@ -1,24 +1,24 @@
-[gd_scene load_steps=3 format=3 uid="uid://qwk6nih458mh"]
+[gd_scene format=3 uid="uid://qwk6nih458mh"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_7xctt"]
[ext_resource type="PackedScene" uid="uid://dgo8cknr1o6ml" path="res://map/items/flour.tscn" id="2_i5ha0"]
-[node name="FlourCrate" instance=ExtResource("1_7xctt")]
+[node name="FlourCrate" unique_id=457614471 instance=ExtResource("1_7xctt")]
-[node name="Flour" parent="." index="1" instance=ExtResource("2_i5ha0")]
+[node name="Flour" parent="." index="1" unique_id=1669483030 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.990268, 0, -0.139173, 0, 1, 0, 0.139173, 0, 0.990268, 0.25, 0, -0.2)
-[node name="Flour2" parent="." index="2" instance=ExtResource("2_i5ha0")]
+[node name="Flour2" parent="." index="2" unique_id=145159583 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.990268, 0, 0.139173, 0, 1, 0, -0.139173, 0, 0.990268, 0.25, 0, 0.2)
-[node name="Flour3" parent="." index="3" instance=ExtResource("2_i5ha0")]
+[node name="Flour3" parent="." index="3" unique_id=663539735 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.973674, 0, 0.227943, 0, 1, 0, -0.227943, 0, 0.973674, 0, 0, -0.202263)
-[node name="Flour4" parent="." index="4" instance=ExtResource("2_i5ha0")]
+[node name="Flour4" parent="." index="4" unique_id=152480553 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.99525, -0.00903298, -0.0969282, -0.0219365, 0.949266, -0.313707, 0.0948444, 0.314343, 0.94456, 0, 0, 0.106343)
-[node name="Flour5" parent="." index="5" instance=ExtResource("2_i5ha0")]
+[node name="Flour5" parent="." index="5" unique_id=1577002603 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.990268, 0, -0.139173, 0, 1, 0, 0.139173, 0, 0.990268, -0.25, 0, -0.2)
-[node name="Flour6" parent="." index="6" instance=ExtResource("2_i5ha0")]
+[node name="Flour6" parent="." index="6" unique_id=1425393970 instance=ExtResource("2_i5ha0")]
transform = Transform3D(0.997564, 0, 0.0697565, 0, 1, 0, -0.0697565, 0, 0.997564, -0.25, 0, 0.2)
diff --git a/client/map/tiles/freezer.gd b/client/map/tiles/freezer.gd
index 47ab89a9..72aa4660 100644
--- a/client/map/tiles/freezer.gd
+++ b/client/map/tiles/freezer.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Freezer
-extends Counter
+extends CounterLike
var freezer: FreezerModel = load("res://map/tiles/freezer.tscn").instantiate()
diff --git a/client/map/tiles/freezer.tscn b/client/map/tiles/freezer.tscn
index 604bd439..950d1ce3 100644
--- a/client/map/tiles/freezer.tscn
+++ b/client/map/tiles/freezer.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=3 uid="uid://ch753p32b3jl8"]
+[gd_scene format=3 uid="uid://ch753p32b3jl8"]
[ext_resource type="Script" uid="uid://b8r7lcqws42yr" path="res://map/tiles/freezer_model.gd" id="1_kso20"]
[ext_resource type="ArrayMesh" uid="uid://cbdalq2gofyu8" path="res://map/tiles/freezer_base.res" id="2_akcb5"]
@@ -42,20 +42,18 @@ _data = {
&"open": SubResource("Animation_axsnk")
}
-[node name="Freezer" type="Node3D"]
+[node name="Freezer" type="Node3D" unique_id=758213999]
script = ExtResource("1_kso20")
-[node name="FreezerBase" type="MeshInstance3D" parent="."]
+[node name="FreezerBase" type="MeshInstance3D" parent="." unique_id=54052954]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("2_akcb5")
-skeleton = NodePath("")
-[node name="FreezerDoor" type="MeshInstance3D" parent="FreezerBase"]
+[node name="FreezerDoor" type="MeshInstance3D" parent="FreezerBase" unique_id=438445392]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.850006, 1.25, 0.5)
mesh = ExtResource("3_0pgw0")
-skeleton = NodePath("")
-[node name="OmniLight3D" type="OmniLight3D" parent="."]
+[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=565200753]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
visible = false
light_color = Color(0.566816, 0.801037, 0.838352, 1)
@@ -64,7 +62,7 @@ omni_range = 3.0
script = ExtResource("4_1eu4t")
completely_disable_light_if_shadows_disabled = true
-[node name="OmniLight3D2" type="OmniLight3D" parent="."]
+[node name="OmniLight3D2" type="OmniLight3D" parent="." unique_id=452354585]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
visible = false
light_color = Color(0.566816, 0.801037, 0.838352, 1)
@@ -73,7 +71,7 @@ omni_range = 3.0
script = ExtResource("4_1eu4t")
completely_disable_light_if_shadows_disabled = true
-[node name="OmniLight3D3" type="OmniLight3D" parent="."]
+[node name="OmniLight3D3" type="OmniLight3D" parent="." unique_id=1314789449]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0)
visible = false
light_color = Color(0.566816, 0.801037, 0.838352, 1)
@@ -82,9 +80,7 @@ omni_range = 3.0
script = ExtResource("4_1eu4t")
completely_disable_light_if_shadows_disabled = true
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-libraries = {
-&"": SubResource("AnimationLibrary_usga0")
-}
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1644020234]
+libraries/ = SubResource("AnimationLibrary_usga0")
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]
diff --git a/client/map/tiles/freezer_base.res b/client/map/tiles/freezer_base.res
index dded8a8b..172564a5 100644
--- a/client/map/tiles/freezer_base.res
+++ b/client/map/tiles/freezer_base.res
Binary files differ
diff --git a/client/map/tiles/freezer_door.res b/client/map/tiles/freezer_door.res
index 9efb17a3..3fe84dfc 100644
--- a/client/map/tiles/freezer_door.res
+++ b/client/map/tiles/freezer_door.res
Binary files differ
diff --git a/client/map/tiles/freezer_model.gd b/client/map/tiles/freezer_model.gd
index 4defda9c..b05c6959 100644
--- a/client/map/tiles/freezer_model.gd
+++ b/client/map/tiles/freezer_model.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/generic_tile.gd b/client/map/tiles/generic_tile.gd
index 0a11efc6..73ac3fac 100644
--- a/client/map/tiles/generic_tile.gd
+++ b/client/map/tiles/generic_tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,13 +13,9 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name UnknownTile
-extends Floor
+class_name GenericTile
+extends Tile
-func _init(ctx: TileFactory.TileCC):
+func _init(ctx: TileFactory.TileCC, scene: PackedScene):
super(ctx)
- var label = Label3D.new()
- label.text = ctx.tile_name.name
- label.position.y = 0.5
- label.billboard = BaseMaterial3D.BILLBOARD_ENABLED
- item_base.add_child(label)
+ base.add_child(scene.instantiate())
diff --git a/client/map/tiles/generic_tile.gd.uid b/client/map/tiles/generic_tile.gd.uid
index 3c331921..f73a3209 100644
--- a/client/map/tiles/generic_tile.gd.uid
+++ b/client/map/tiles/generic_tile.gd.uid
@@ -1 +1 @@
-uid://l154vna0x8de
+uid://dtq5tlmwi8gxy
diff --git a/client/map/tiles/grass.gd b/client/map/tiles/grass.gd
index d9ebce7c..bc555b93 100644
--- a/client/map/tiles/grass.gd
+++ b/client/map/tiles/grass.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,6 +16,13 @@
class_name Grass
extends FloorLike
+func _init(ctx: TileFactory.TileCC):
+ super(ctx)
+ if not base_mesh:
+ var grass_mesher: GrassMesher = ctx.floor_meshers[fm_id()]
+ var use_no_grass: bool = ctx.above_tile_names.any(func (s): return s == "chair" or s == "table" or s == "conveyor")
+ grass_mesher.add_tile(ctx.position, use_no_grass)
+
static func fm_id() -> String:
return "grass"
diff --git a/client/map/tiles/grass.res b/client/map/tiles/grass.res
index 1c4565a1..6a070c8e 100644
--- a/client/map/tiles/grass.res
+++ b/client/map/tiles/grass.res
Binary files differ
diff --git a/client/map/tiles/grass.tscn b/client/map/tiles/grass.tscn
index 649cc6c1..720786c2 100644
--- a/client/map/tiles/grass.tscn
+++ b/client/map/tiles/grass.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bi6o7lbvhunj1"]
+[gd_scene format=3 uid="uid://bi6o7lbvhunj1"]
[ext_resource type="ArrayMesh" uid="uid://dyu8iuolwqr5l" path="res://map/tiles/grass.res" id="1_pjjrj"]
-[node name="Grass" type="Node3D"]
+[node name="Grass" type="Node3D" unique_id=380813708]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=714753882]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_pjjrj")
-skeleton = NodePath("")
diff --git a/client/map/tiles/grass_mesher.gd b/client/map/tiles/grass_mesher.gd
index 466c3c1e..f157c84c 100644
--- a/client/map/tiles/grass_mesher.gd
+++ b/client/map/tiles/grass_mesher.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -19,10 +19,21 @@ extends FloorMesher
const GRASS_MESH: Mesh = preload("res://map/tiles/grass_side.tres")
var multimesh_instance := MultiMeshInstance3D.new()
+var no_grass_tiles: Dictionary[String, Vector2i] = {}
+
func _init(mesh: MeshInstance3D) -> void:
super(mesh)
mesh_instance.add_child(multimesh_instance)
+func add_tile(pos: Vector2i, use_no_grass: bool = false):
+ super(pos)
+ if use_no_grass:
+ no_grass_tiles[str(pos)] = pos
+
+func remove_tile(pos: Vector2i):
+ super(pos)
+ no_grass_tiles.erase(str(pos))
+
func flush() -> void:
super()
var random = RandomNumberGenerator.new()
@@ -33,8 +44,10 @@ func flush() -> void:
multimesh.transform_format = MultiMesh.TRANSFORM_3D
multimesh.instance_count = tiles.size() * Settings.read("graphics.grass_amount")
var t := tiles.values()
+ var no_grass := no_grass_tiles.values()
for i in multimesh.instance_count:
- var p = t[i / Settings.read("graphics.grass_amount")]
+ var p: Vector2i = t[i / Settings.read("graphics.grass_amount")]
+ if p in no_grass: continue
var origin := Vector3(random.randf_range(-.5, .5), 0.25, random.randf_range(-.5, .5)) + Vector3(p.x + 0.5, 0.0, p.y + 0.5)
var basis_ := (Basis(Vector3(0, 1, 0), random.randf_range(0, PI)) * Basis(Vector3(1, 0, 0), PI/2)).scaled(Vector3(0.75, 0.5, 0.75))
multimesh.set_instance_transform(i, Transform3D(basis_, origin))
diff --git a/client/map/tiles/grass_side.tres b/client/map/tiles/grass_side.tres
index 3f29e10e..52042308 100644
--- a/client/map/tiles/grass_side.tres
+++ b/client/map/tiles/grass_side.tres
@@ -1,4 +1,4 @@
-[gd_resource type="ArrayMesh" load_steps=4 format=3 uid="uid://l2by4gv4wpd1"]
+[gd_resource type="ArrayMesh" format=3 uid="uid://l2by4gv4wpd1"]
[ext_resource type="Texture2D" uid="uid://p35o0tkyfmrl" path="res://map/tiles/grass_side.webp" id="1_d17wb"]
diff --git a/client/map/tiles/house/balcony.res b/client/map/tiles/house/balcony.res
index 6a8b9c8e..012c7fbb 100644
--- a/client/map/tiles/house/balcony.res
+++ b/client/map/tiles/house/balcony.res
Binary files differ
diff --git a/client/map/tiles/house/balcony.tscn b/client/map/tiles/house/balcony.tscn
index 1c0232ff..7613c68b 100644
--- a/client/map/tiles/house/balcony.tscn
+++ b/client/map/tiles/house/balcony.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://dymxdxvmgjtae"]
+[gd_scene format=3 uid="uid://dymxdxvmgjtae"]
[ext_resource type="ArrayMesh" uid="uid://1y54ofmdj40i" path="res://map/tiles/house/balcony.res" id="1_6niu3"]
[ext_resource type="Material" uid="uid://djepfh3hn45mt" path="res://map/tiles/house/window_glass.tres" id="2_1yhve"]
@@ -6,12 +6,11 @@
[ext_resource type="Material" uid="uid://p1okexdmch4x" path="res://map/tiles/house/wall_color.tres" id="4_dqlht"]
[ext_resource type="Material" uid="uid://c56pgcp4onece" path="res://map/tiles/house/frame.tres" id="5_xtshi"]
-[node name="HouseBalcony" type="Node3D"]
+[node name="HouseBalcony" type="Node3D" unique_id=1463800129]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1473000161]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_6niu3")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_1yhve")
surface_material_override/1 = ExtResource("3_phigl")
surface_material_override/2 = ExtResource("4_dqlht")
diff --git a/client/map/tiles/house/chimney.res b/client/map/tiles/house/chimney.res
index 3c7d43a3..00487f53 100644
--- a/client/map/tiles/house/chimney.res
+++ b/client/map/tiles/house/chimney.res
Binary files differ
diff --git a/client/map/tiles/house/chimney.tscn b/client/map/tiles/house/chimney.tscn
index 68b8faa3..1c40f67b 100644
--- a/client/map/tiles/house/chimney.tscn
+++ b/client/map/tiles/house/chimney.tscn
@@ -1,14 +1,13 @@
-[gd_scene load_steps=4 format=3 uid="uid://bu1y3cish4snv"]
+[gd_scene format=3 uid="uid://bu1y3cish4snv"]
[ext_resource type="ArrayMesh" uid="uid://cji0k4mpudcxs" path="res://map/tiles/house/chimney.res" id="1_tq8p8"]
[ext_resource type="Material" uid="uid://dtoltk5uaa2l6" path="res://map/tiles/house/roof.tres" id="2_epifg"]
[ext_resource type="Material" uid="uid://bnip4xf36u1vv" path="res://map/tiles/house/rooftop.tres" id="2_q0gbv"]
-[node name="HouseRoofChimney" type="Node3D"]
+[node name="HouseRoofChimney" type="Node3D" unique_id=1380252236]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1708887236]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_tq8p8")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_q0gbv")
surface_material_override/1 = ExtResource("2_epifg")
diff --git a/client/map/tiles/house/corner.res b/client/map/tiles/house/corner.res
index 33db9356..e116a260 100644
--- a/client/map/tiles/house/corner.res
+++ b/client/map/tiles/house/corner.res
Binary files differ
diff --git a/client/map/tiles/house/corner.tscn b/client/map/tiles/house/corner.tscn
index dc2f5c15..89f9e79e 100644
--- a/client/map/tiles/house/corner.tscn
+++ b/client/map/tiles/house/corner.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=7 format=3 uid="uid://dyl01w3dwdodh"]
+[gd_scene format=3 uid="uid://dyl01w3dwdodh"]
[ext_resource type="ArrayMesh" uid="uid://qa436i3ovnsa" path="res://map/tiles/house/corner.res" id="1_trrsu"]
[ext_resource type="Material" uid="uid://djepfh3hn45mt" path="res://map/tiles/house/window_glass.tres" id="2_dpdnb"]
@@ -7,12 +7,11 @@
[ext_resource type="Material" uid="uid://p1okexdmch4x" path="res://map/tiles/house/wall_color.tres" id="3_x4hec"]
[ext_resource type="Material" uid="uid://c56pgcp4onece" path="res://map/tiles/house/frame.tres" id="4_p1skd"]
-[node name="HouseCorner" type="Node3D"]
+[node name="HouseCorner" type="Node3D" unique_id=902381028]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=527847211]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_trrsu")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_dpdnb")
surface_material_override/1 = ExtResource("3_edb5f")
surface_material_override/2 = ExtResource("4_p1skd")
diff --git a/client/map/tiles/house/door.res b/client/map/tiles/house/door.res
index 4314a3ce..e4005e41 100644
--- a/client/map/tiles/house/door.res
+++ b/client/map/tiles/house/door.res
Binary files differ
diff --git a/client/map/tiles/house/door.tscn b/client/map/tiles/house/door.tscn
index 4b6f840f..8e2ccd9c 100644
--- a/client/map/tiles/house/door.tscn
+++ b/client/map/tiles/house/door.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=3 uid="uid://me0va8kbn0ck"]
+[gd_scene format=3 uid="uid://me0va8kbn0ck"]
[ext_resource type="Material" uid="uid://c56pgcp4onece" path="res://map/tiles/house/frame.tres" id="1_7cj7h"]
[ext_resource type="ArrayMesh" uid="uid://bvrrb1rr6f41l" path="res://map/tiles/house/door.res" id="1_k0ila"]
@@ -11,12 +11,11 @@
cull_mode = 1
albedo_color = Color(0.160784, 0.180392, 0.0901961, 1)
-[node name="HouseDoor" type="Node3D"]
+[node name="HouseDoor" type="Node3D" unique_id=309824877]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1256654900]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_k0ila")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_n2fsy")
surface_material_override/1 = ExtResource("3_ca1vx")
surface_material_override/2 = ExtResource("4_lvj6j")
diff --git a/client/map/tiles/house/oriel.res b/client/map/tiles/house/oriel.res
index c25d1c64..fc2f19a0 100644
--- a/client/map/tiles/house/oriel.res
+++ b/client/map/tiles/house/oriel.res
Binary files differ
diff --git a/client/map/tiles/house/oriel.tscn b/client/map/tiles/house/oriel.tscn
index 2f67cf9c..1843bda0 100644
--- a/client/map/tiles/house/oriel.tscn
+++ b/client/map/tiles/house/oriel.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://cvu75687xehqb"]
+[gd_scene format=3 uid="uid://cvu75687xehqb"]
[ext_resource type="ArrayMesh" uid="uid://bvi7worim1fe5" path="res://map/tiles/house/oriel.res" id="1_66iue"]
[ext_resource type="Material" uid="uid://djepfh3hn45mt" path="res://map/tiles/house/window_glass.tres" id="2_66iue"]
@@ -6,12 +6,11 @@
[ext_resource type="Material" uid="uid://p1okexdmch4x" path="res://map/tiles/house/wall_color.tres" id="4_fd1my"]
[ext_resource type="Material" uid="uid://c56pgcp4onece" path="res://map/tiles/house/frame.tres" id="5_5mym6"]
-[node name="HouseOriel" type="Node3D"]
+[node name="HouseOriel" type="Node3D" unique_id=1351378153]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1577039197]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_66iue")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_66iue")
surface_material_override/1 = ExtResource("3_fqtxf")
surface_material_override/2 = ExtResource("4_fd1my")
diff --git a/client/map/tiles/house/roof.res b/client/map/tiles/house/roof.res
index b5efd434..ee0ab279 100644
--- a/client/map/tiles/house/roof.res
+++ b/client/map/tiles/house/roof.res
Binary files differ
diff --git a/client/map/tiles/house/roof.tscn b/client/map/tiles/house/roof.tscn
index b9eb92c2..11170208 100644
--- a/client/map/tiles/house/roof.tscn
+++ b/client/map/tiles/house/roof.tscn
@@ -1,12 +1,11 @@
-[gd_scene load_steps=3 format=3 uid="uid://ct7832jj3fewr"]
+[gd_scene format=3 uid="uid://ct7832jj3fewr"]
[ext_resource type="ArrayMesh" uid="uid://xuscogcrjlv0" path="res://map/tiles/house/roof.res" id="1_ar68v"]
[ext_resource type="Material" uid="uid://bnip4xf36u1vv" path="res://map/tiles/house/rooftop.tres" id="2_cfl0y"]
-[node name="HouseRoof" type="Node3D"]
+[node name="HouseRoof" type="Node3D" unique_id=1848385786]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=134240680]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_ar68v")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_cfl0y")
diff --git a/client/map/tiles/house/side.res b/client/map/tiles/house/side.res
index ff974a33..709b07cc 100644
--- a/client/map/tiles/house/side.res
+++ b/client/map/tiles/house/side.res
Binary files differ
diff --git a/client/map/tiles/house/side.tscn b/client/map/tiles/house/side.tscn
index b6d22484..11f1c241 100644
--- a/client/map/tiles/house/side.tscn
+++ b/client/map/tiles/house/side.tscn
@@ -1,14 +1,13 @@
-[gd_scene load_steps=4 format=3 uid="uid://booer6datgac"]
+[gd_scene format=3 uid="uid://booer6datgac"]
[ext_resource type="ArrayMesh" uid="uid://bd72yr7fhdbb6" path="res://map/tiles/house/side.res" id="1_h8y51"]
[ext_resource type="Material" uid="uid://bnip4xf36u1vv" path="res://map/tiles/house/rooftop.tres" id="2_caago"]
[ext_resource type="Material" uid="uid://p1okexdmch4x" path="res://map/tiles/house/wall_color.tres" id="3_rlg5c"]
-[node name="HouseSide" type="Node3D"]
+[node name="HouseSide" type="Node3D" unique_id=876251696]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=605370668]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_h8y51")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_caago")
surface_material_override/1 = ExtResource("3_rlg5c")
diff --git a/client/map/tiles/house/wall.res b/client/map/tiles/house/wall.res
index daeaa55c..d9c48a44 100644
--- a/client/map/tiles/house/wall.res
+++ b/client/map/tiles/house/wall.res
Binary files differ
diff --git a/client/map/tiles/house/wall.tscn b/client/map/tiles/house/wall.tscn
index 05bb73ef..e024158e 100644
--- a/client/map/tiles/house/wall.tscn
+++ b/client/map/tiles/house/wall.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=6 format=3 uid="uid://ctd63c1uvf6va"]
+[gd_scene format=3 uid="uid://ctd63c1uvf6va"]
[ext_resource type="ArrayMesh" uid="uid://c4tqpo8dn2mm7" path="res://map/tiles/house/wall.res" id="1_oovdv"]
[ext_resource type="Material" uid="uid://c56pgcp4onece" path="res://map/tiles/house/frame.tres" id="1_xlk0v"]
@@ -6,12 +6,11 @@
[ext_resource type="Material" uid="uid://djepfh3hn45mt" path="res://map/tiles/house/window_glass.tres" id="2_oovdv"]
[ext_resource type="Material" uid="uid://p1okexdmch4x" path="res://map/tiles/house/wall_color.tres" id="4_oovdv"]
-[node name="HouseWall" type="Node3D"]
+[node name="HouseWall" type="Node3D" unique_id=205942806]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1914595227]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_oovdv")
-skeleton = NodePath("")
surface_material_override/0 = ExtResource("2_oovdv")
surface_material_override/1 = ExtResource("2_gloxj")
surface_material_override/2 = ExtResource("4_oovdv")
diff --git a/client/map/tiles/house_balcony.gd b/client/map/tiles/house_balcony.gd
index 98fc63ac..210faaa5 100644
--- a/client/map/tiles/house_balcony.gd
+++ b/client/map/tiles/house_balcony.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_door.gd b/client/map/tiles/house_door.gd
index bcd35254..96c14459 100644
--- a/client/map/tiles/house_door.gd
+++ b/client/map/tiles/house_door.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_oriel.gd b/client/map/tiles/house_oriel.gd
index a659267b..828663f7 100644
--- a/client/map/tiles/house_oriel.gd
+++ b/client/map/tiles/house_oriel.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_roof.gd b/client/map/tiles/house_roof.gd
index 9e3e7b5c..30dfb517 100644
--- a/client/map/tiles/house_roof.gd
+++ b/client/map/tiles/house_roof.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_roof_chimney.gd b/client/map/tiles/house_roof_chimney.gd
index d46686d5..4d178788 100644
--- a/client/map/tiles/house_roof_chimney.gd
+++ b/client/map/tiles/house_roof_chimney.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_side.gd b/client/map/tiles/house_side.gd
index bca0317a..3fbaae9d 100644
--- a/client/map/tiles/house_side.gd
+++ b/client/map/tiles/house_side.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_tile.gd b/client/map/tiles/house_tile.gd
index cd0ff6c3..aba81f80 100644
--- a/client/map/tiles/house_tile.gd
+++ b/client/map/tiles/house_tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/house_wall.gd b/client/map/tiles/house_wall.gd
index fea2515d..e01fda08 100644
--- a/client/map/tiles/house_wall.gd
+++ b/client/map/tiles/house_wall.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/item_portal.gd b/client/map/tiles/item_portal.gd
index 69bad5e9..23e14caf 100644
--- a/client/map/tiles/item_portal.gd
+++ b/client/map/tiles/item_portal.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,10 +14,10 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name ItemPortal
-extends CounterBase
+extends Tile
-var model: PortalModel = load("res://map/tiles/portal.tscn").instantiate()
-func _init(ctx: TileFactory.TileCC, type: bool):
+var model := preload("res://map/tiles/portal.tscn")
+func _init(ctx: TileFactory.TileCC, type: float):
super(ctx)
+ base.add_child(model.instantiate())
model.configure(0.2, type)
- base.add_child(model)
diff --git a/client/map/tiles/knife.res b/client/map/tiles/knife.res
index 622d9eb3..8e49bd2e 100644
--- a/client/map/tiles/knife.res
+++ b/client/map/tiles/knife.res
Binary files differ
diff --git a/client/map/tiles/knife.tscn b/client/map/tiles/knife.tscn
index a7cd690e..02836ca3 100644
--- a/client/map/tiles/knife.tscn
+++ b/client/map/tiles/knife.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cufype1bex3r3"]
+[gd_scene format=3 uid="uid://cufype1bex3r3"]
[ext_resource type="ArrayMesh" uid="uid://buqo28euvn7ru" path="res://map/tiles/knife.res" id="1_uotix"]
-[node name="Knife" type="Node3D"]
+[node name="Knife" type="Node3D" unique_id=49665079]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=772515596]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_uotix")
-skeleton = NodePath("")
diff --git a/client/map/tiles/lamp.gd b/client/map/tiles/lamp.gd
index d315f737..d99949ee 100644
--- a/client/map/tiles/lamp.gd
+++ b/client/map/tiles/lamp.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/lamp.res b/client/map/tiles/lamp.res
index b4817fac..fa4085b9 100644
--- a/client/map/tiles/lamp.res
+++ b/client/map/tiles/lamp.res
Binary files differ
diff --git a/client/map/tiles/lamp.tscn b/client/map/tiles/lamp.tscn
index 6dbe9e86..13bc8dc8 100644
--- a/client/map/tiles/lamp.tscn
+++ b/client/map/tiles/lamp.tscn
@@ -1,18 +1,18 @@
-[gd_scene load_steps=3 format=3 uid="uid://b6x5xlchih2mc"]
+[gd_scene format=3 uid="uid://b6x5xlchih2mc"]
[ext_resource type="ArrayMesh" uid="uid://cranpcmdoa8mx" path="res://map/tiles/lamp.res" id="1_2f0v1"]
[ext_resource type="Script" uid="uid://nm4trjneu1qt" path="res://map/tiles/light_tile.gd" id="1_87gp4"]
-[node name="Lamp" type="Node3D" node_paths=PackedStringArray("lights")]
+[node name="Lamp" type="Node3D" unique_id=742335162 node_paths=PackedStringArray("lights")]
script = ExtResource("1_87gp4")
lights = [NodePath("OmniLight3D")]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1819243081]
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0, 0, 0)
cast_shadow = 0
mesh = ExtResource("1_2f0v1")
-[node name="OmniLight3D" type="OmniLight3D" parent="."]
+[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=421050732]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.68634, 0)
light_color = Color(0.896459, 0.717604, 0.587842, 1)
light_energy = 3.0
diff --git a/client/map/tiles/leek_crate.gd.uid b/client/map/tiles/leek_crate.gd.uid
deleted file mode 100644
index 8366b070..00000000
--- a/client/map/tiles/leek_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://fmpnrlya8too
diff --git a/client/map/tiles/leek_crate.tscn b/client/map/tiles/leek_crate.tscn
index 2cf77bc2..9e40ae72 100644
--- a/client/map/tiles/leek_crate.tscn
+++ b/client/map/tiles/leek_crate.tscn
@@ -1,24 +1,24 @@
-[gd_scene load_steps=3 format=3 uid="uid://bkrly2qyttgwh"]
+[gd_scene format=3 uid="uid://bkrly2qyttgwh"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_l8q4i"]
[ext_resource type="PackedScene" uid="uid://cmpwfkdnrm6e6" path="res://map/items/leek.tscn" id="2_n2ove"]
-[node name="LeekCrate" instance=ExtResource("1_l8q4i")]
+[node name="LeekCrate" unique_id=1033364037 instance=ExtResource("1_l8q4i")]
-[node name="Leek" parent="." index="1" instance=ExtResource("2_n2ove")]
+[node name="Leek" parent="." index="1" unique_id=1746190140 instance=ExtResource("2_n2ove")]
transform = Transform3D(-0.5767554, -0.79622483, -0.18269974, 0.8157721, -0.573194, -0.07723002, -0.043229926, -0.19358417, 0.9801311, -0.11139119, 0.28240138, -0.204823)
-[node name="Leek2" parent="." index="2" instance=ExtResource("2_n2ove")]
+[node name="Leek2" parent="." index="2" unique_id=974732976 instance=ExtResource("2_n2ove")]
transform = Transform3D(0.5011232, -0.9659322, -0.3177097, 0.8640088, 0.5337136, 0.23595639, -0.04862662, -0.471297, 0.91836, 0.3106259, 0.18931627, -0.223387)
-[node name="Leek3" parent="." index="3" instance=ExtResource("2_n2ove")]
+[node name="Leek3" parent="." index="3" unique_id=1903030949 instance=ExtResource("2_n2ove")]
transform = Transform3D(-0.40310276, -0.9025585, 0.15131347, 0.911373, -0.41092736, -0.023192208, 0.08311114, 0.12855409, 0.9882142, -0.136853, 0.30587843, 0.253195)
-[node name="Leek4" parent="." index="4" instance=ExtResource("2_n2ove")]
+[node name="Leek4" parent="." index="4" unique_id=1669547444 instance=ExtResource("2_n2ove")]
transform = Transform3D(0.47521883, 0.51630676, -0.7674939, 0.8236207, 0.10721652, 0.560059, 0.3095418, -1.0779284, -0.31190884, 0.1674414, 0.2460402, 0.34835967)
-[node name="Leek5" parent="." index="5" instance=ExtResource("2_n2ove")]
+[node name="Leek5" parent="." index="5" unique_id=2085585545 instance=ExtResource("2_n2ove")]
transform = Transform3D(0.32411182, -0.028707754, -0.94571644, 0.9431412, 0.10330227, 0.32105142, 0.0737312, -1.1951997, 0.050463554, 0.22963816, 0.2460402, 0.07488689)
-[node name="Leek6" parent="." index="6" instance=ExtResource("2_n2ove")]
+[node name="Leek6" parent="." index="6" unique_id=1797263298 instance=ExtResource("2_n2ove")]
transform = Transform3D(-0.4909433, -1.0452821, 0.014611006, 0.85173434, -0.58012193, -0.2020859, 0.1830938, -0.10412076, 0.9792587, -0.10463678, 0.29387888, 0.014548987)
diff --git a/client/map/tiles/lettuce_crate.tscn b/client/map/tiles/lettuce_crate.tscn
index 922773bf..e98f26c2 100644
--- a/client/map/tiles/lettuce_crate.tscn
+++ b/client/map/tiles/lettuce_crate.tscn
@@ -1,18 +1,18 @@
-[gd_scene load_steps=3 format=3 uid="uid://brgkq8x5jgxyb"]
+[gd_scene format=3 uid="uid://brgkq8x5jgxyb"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_57wln"]
[ext_resource type="PackedScene" uid="uid://cuf8vwqk6xujk" path="res://map/items/lettuce.tscn" id="3_03evc"]
-[node name="LettuceCrate" instance=ExtResource("1_57wln")]
+[node name="LettuceCrate" unique_id=1488715909 instance=ExtResource("1_57wln")]
-[node name="Lettuce" parent="." index="1" instance=ExtResource("3_03evc")]
+[node name="Lettuce" parent="." index="1" unique_id=1196212278 instance=ExtResource("3_03evc")]
transform = Transform3D(0.258819, 0, -0.965926, 0, 1, 0, 0.965926, 0, 0.258819, -0.15, 0, -0.15)
-[node name="Lettuce2" parent="." index="2" instance=ExtResource("3_03evc")]
+[node name="Lettuce2" parent="." index="2" unique_id=867063712 instance=ExtResource("3_03evc")]
transform = Transform3D(0.939693, 0, -0.34202, 0, 1, 0, 0.34202, 0, 0.939693, 0.15, 0, 0.15)
-[node name="Lettuce3" parent="." index="3" instance=ExtResource("3_03evc")]
+[node name="Lettuce3" parent="." index="3" unique_id=1638372503 instance=ExtResource("3_03evc")]
transform = Transform3D(0.939693, 0, -0.34202, 0, 1, 0, 0.34202, 0, 0.939693, -0.15, 0.15, 0.15)
-[node name="Lettuce4" parent="." index="4" instance=ExtResource("3_03evc")]
+[node name="Lettuce4" parent="." index="4" unique_id=563023149 instance=ExtResource("3_03evc")]
transform = Transform3D(0.939693, 0, -0.34202, 0, 1, 0, 0.34202, 0, 0.939693, 0.15, 0.15, -0.15)
diff --git a/client/map/tiles/light_tile.gd b/client/map/tiles/light_tile.gd
index 2476d8eb..2187ec6f 100644
--- a/client/map/tiles/light_tile.gd
+++ b/client/map/tiles/light_tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/map_selector.res b/client/map/tiles/map_selector.res
new file mode 100644
index 00000000..4b25868d
--- /dev/null
+++ b/client/map/tiles/map_selector.res
Binary files differ
diff --git a/client/map/tiles/map_selector.tscn b/client/map/tiles/map_selector.tscn
new file mode 100644
index 00000000..a91b8cb7
--- /dev/null
+++ b/client/map/tiles/map_selector.tscn
@@ -0,0 +1,9 @@
+[gd_scene format=3 uid="uid://bsl8lb18f8hcv"]
+
+[ext_resource type="ArrayMesh" uid="uid://bbfwavihrmf4i" path="res://map/tiles/map_selector.res" id="1_ktcsy"]
+
+[node name="MapSelector" type="Node3D" unique_id=2017272843]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=767071822]
+transform = Transform3D(-2.1855694e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.1855694e-08, 0, 0.525, 0)
+mesh = ExtResource("1_ktcsy")
diff --git a/client/map/tiles/mushroom_crate.gd b/client/map/tiles/mushroom_crate.gd
deleted file mode 100644
index de59b8f5..00000000
--- a/client/map/tiles/mushroom_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name MushroomCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/mushroom_crate.tscn").instantiate())
diff --git a/client/map/tiles/mushroom_crate.gd.uid b/client/map/tiles/mushroom_crate.gd.uid
deleted file mode 100644
index b0c54434..00000000
--- a/client/map/tiles/mushroom_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://by0dud130fog6
diff --git a/client/map/tiles/mushroom_crate.tscn b/client/map/tiles/mushroom_crate.tscn
index 01a5ed87..aa42f482 100644
--- a/client/map/tiles/mushroom_crate.tscn
+++ b/client/map/tiles/mushroom_crate.tscn
@@ -1,21 +1,21 @@
-[gd_scene load_steps=3 format=3 uid="uid://dn4o5dyp7t021"]
+[gd_scene format=3 uid="uid://dn4o5dyp7t021"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_juoqu"]
[ext_resource type="PackedScene" uid="uid://cc0jqiiywrrc0" path="res://map/items/mushroom.tscn" id="2_juoqu"]
-[node name="MushroomCrate" instance=ExtResource("1_juoqu")]
+[node name="MushroomCrate" unique_id=2098365067 instance=ExtResource("1_juoqu")]
-[node name="Mushroom" parent="." index="1" instance=ExtResource("2_juoqu")]
+[node name="Mushroom" parent="." index="1" unique_id=1158588513 instance=ExtResource("2_juoqu")]
transform = Transform3D(0.3251556, 0, -0.94566053, 0.22043908, 0.9724513, 0.075795695, 0.91960883, -0.23310593, 0.316198, -0.18228972, 0.08433756, -0.16040182)
-[node name="Mushroom2" parent="." index="2" instance=ExtResource("2_juoqu")]
+[node name="Mushroom2" parent="." index="2" unique_id=1505234337 instance=ExtResource("2_juoqu")]
transform = Transform3D(1.0213542, -0.27169096, -0.30499113, 0.30648074, 1.0527234, 0.08855964, 0.27000946, -0.16720423, 1.0531559, -0.15469912, 0.08611792, 0.22869657)
-[node name="Mushroom3" parent="." index="3" instance=ExtResource("2_juoqu")]
+[node name="Mushroom3" parent="." index="3" unique_id=1740137701 instance=ExtResource("2_juoqu")]
transform = Transform3D(0.905218, -0.124258906, 0.40637422, 0.12618923, 0.9917586, 0.022162013, -0.40577894, 0.031218598, 0.91343796, 0.25116885, 0.080719024, 0.16321422)
-[node name="Mushroom4" parent="." index="4" instance=ExtResource("2_juoqu")]
+[node name="Mushroom4" parent="." index="4" unique_id=382878953 instance=ExtResource("2_juoqu")]
transform = Transform3D(-0.34809524, -0.05838425, -0.93563926, 0.1280063, 0.9857505, -0.10913467, 0.9286787, -0.15775698, -0.33566153, 0.2079333, 0.058740195, -0.1254655)
-[node name="Mushroom5" parent="." index="5" instance=ExtResource("2_juoqu")]
+[node name="Mushroom5" parent="." index="5" unique_id=1716232471 instance=ExtResource("2_juoqu")]
transform = Transform3D(-0.09821522, -0.16101892, -0.9820523, 0.3132099, 0.9316722, -0.18408266, 0.94459164, -0.32566825, -0.041071653, 0, 0.15, 0.03306987)
diff --git a/client/map/tiles/noodles_crate.tscn b/client/map/tiles/noodles_crate.tscn
new file mode 100644
index 00000000..151219aa
--- /dev/null
+++ b/client/map/tiles/noodles_crate.tscn
@@ -0,0 +1,30 @@
+[gd_scene format=3 uid="uid://b0jyx2gu6fcx7"]
+
+[ext_resource type="ArrayMesh" uid="uid://btn7oh1v2k40p" path="res://map/tiles/crate.res" id="1_vcnsh"]
+[ext_resource type="ArrayMesh" uid="uid://c7nmboj44jn7a" path="res://map/items/noodles.res" id="2_3k214"]
+
+[node name="Crate" type="Node3D" unique_id=235966363]
+
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=2104345741]
+transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
+mesh = ExtResource("1_vcnsh")
+
+[node name="Noodles" type="MeshInstance3D" parent="." unique_id=330418144]
+transform = Transform3D(0.49983656, 0.012705037, 0.0014109544, -0.012783143, 0.4967825, 0.05517004, 0, -0.05518808, 0.49694493, -0.02444148, 0.3581394, 0.099653274)
+mesh = ExtResource("2_3k214")
+
+[node name="Noodles2" type="MeshInstance3D" parent="." unique_id=39703036]
+transform = Transform3D(0.36541817, 0, 0.16269466, 0, 0.4, 0, -0.16269466, 0, 0.36541817, -0.151, 0.239, 0.265)
+mesh = ExtResource("2_3k214")
+
+[node name="Noodles3" type="MeshInstance3D" parent="." unique_id=1633575361]
+transform = Transform3D(-0.19513778, 0, 0.3491722, 0, 0.39999998, 0, -0.3491722, 0, -0.19513778, 0.23498613, 0.24920535, 0.14507401)
+mesh = ExtResource("2_3k214")
+
+[node name="Noodles4" type="MeshInstance3D" parent="." unique_id=264982564]
+transform = Transform3D(-0.3997121, 0, -0.015173763, 0, 0.39999998, 0, 0.015173763, 0, -0.3997121, 0.16035348, 0.24920535, -0.2861838)
+mesh = ExtResource("2_3k214")
+
+[node name="Noodles5" type="MeshInstance3D" parent="." unique_id=1506519209]
+transform = Transform3D(0.111918226, 0, -0.38402385, 0, 0.39999995, 0, 0.38402385, 0, 0.111918226, -0.2625249, 0.24920535, -0.16159214)
+mesh = ExtResource("2_3k214")
diff --git a/client/map/tiles/oven.gd b/client/map/tiles/oven.gd
index ef47047f..14ff0758 100644
--- a/client/map/tiles/oven.gd
+++ b/client/map/tiles/oven.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Oven
-extends Counter
+extends CounterLike
var oven: OvenModel = load("res://map/tiles/oven.tscn").instantiate()
diff --git a/client/map/tiles/oven.tscn b/client/map/tiles/oven.tscn
index 69fea89d..14b0a7cc 100644
--- a/client/map/tiles/oven.tscn
+++ b/client/map/tiles/oven.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=3 uid="uid://bil6eip7uwqvs"]
+[gd_scene format=3 uid="uid://bil6eip7uwqvs"]
[ext_resource type="Script" uid="uid://evb48gqf08js" path="res://map/tiles/oven_model.gd" id="1_3v43w"]
[ext_resource type="ArrayMesh" uid="uid://blc1q50d5ky86" path="res://map/tiles/oven_base.res" id="1_d1hwl"]
@@ -39,25 +39,21 @@ _data = {
&"open": SubResource("Animation_yb3ht")
}
-[node name="Oven" type="Node3D"]
+[node name="Oven" type="Node3D" unique_id=144691918]
script = ExtResource("1_3v43w")
-[node name="Base" type="MeshInstance3D" parent="."]
+[node name="Base" type="MeshInstance3D" parent="." unique_id=1278985448]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_d1hwl")
-skeleton = NodePath("")
-[node name="Door" type="MeshInstance3D" parent="Base"]
+[node name="Door" type="MeshInstance3D" parent="Base" unique_id=964634352]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 0.43, 0.9)
mesh = ExtResource("2_i5vso")
-skeleton = NodePath("")
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-libraries = {
-&"": SubResource("AnimationLibrary_io5nw")
-}
+[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=1708626511]
+libraries/ = SubResource("AnimationLibrary_io5nw")
-[node name="OmniLight3D" type="OmniLight3D" parent="."]
+[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1222495133]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, 0)
visible = false
light_color = Color(0.944743, 0.70243, 0.38641, 1)
diff --git a/client/map/tiles/oven_base.res b/client/map/tiles/oven_base.res
index 6cef2533..c9a9cb73 100644
--- a/client/map/tiles/oven_base.res
+++ b/client/map/tiles/oven_base.res
Binary files differ
diff --git a/client/map/tiles/oven_door.res b/client/map/tiles/oven_door.res
index 8c468117..695b437b 100644
--- a/client/map/tiles/oven_door.res
+++ b/client/map/tiles/oven_door.res
Binary files differ
diff --git a/client/map/tiles/oven_model.gd b/client/map/tiles/oven_model.gd
index 9ad66bd6..644213ff 100644
--- a/client/map/tiles/oven_model.gd
+++ b/client/map/tiles/oven_model.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/path.gd b/client/map/tiles/path.gd
index 1127c0bf..cfb598ca 100644
--- a/client/map/tiles/path.gd
+++ b/client/map/tiles/path.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/path.res b/client/map/tiles/path.res
index e775b24e..9bd9f0dd 100644
--- a/client/map/tiles/path.res
+++ b/client/map/tiles/path.res
Binary files differ
diff --git a/client/map/tiles/path.tscn b/client/map/tiles/path.tscn
index b618e279..a5a04374 100644
--- a/client/map/tiles/path.tscn
+++ b/client/map/tiles/path.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://bwyb2ujmcrsar"]
+[gd_scene format=3 uid="uid://bwyb2ujmcrsar"]
[ext_resource type="ArrayMesh" uid="uid://1jelocokc0vu" path="res://map/tiles/path.res" id="1_6fqu5"]
-[node name="Path" type="Node3D"]
+[node name="Path" type="Node3D" unique_id=1933680340]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1928567105]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.3, 0)
mesh = ExtResource("1_6fqu5")
-skeleton = NodePath("")
diff --git a/client/map/tiles/player_portal.gd b/client/map/tiles/player_portal.gd
index e722a7ee..a9bd7fa0 100644
--- a/client/map/tiles/player_portal.gd
+++ b/client/map/tiles/player_portal.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,10 +14,16 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name PlayerPortal
-extends Floor
+extends Tile
var model: PortalModel = load("res://map/tiles/portal.tscn").instantiate()
-func _init(ctx: TileFactory.TileCC, type: bool):
+func _init(ctx: TileFactory.TileCC):
super(ctx)
- model.configure(0.4, type)
+ change(ctx.tile_name.name)
base.add_child(model)
+
+func change(tn: String) -> bool:
+ if tn == "white-hole": model.target_type = 1.; model.target_size = 0.4; return true
+ if tn == "grey-hole": model.target_type = 0.; model.target_size = 0.2; return true
+ if tn == "black-hole": model.target_type = -1.; model.target_size = 0.4; return true
+ return false
diff --git a/client/map/tiles/portal.gd b/client/map/tiles/portal.gd
index 961a8615..dc7d8700 100644
--- a/client/map/tiles/portal.gd
+++ b/client/map/tiles/portal.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,7 +16,22 @@
class_name PortalModel
extends Node3D
+var target_type = 0.
+var current_type = 0.
+var target_size = 0.
+var current_size = 0.
+@onready var mat: ShaderMaterial = $Mesh.get_active_material(0)
+
+func _process(delta: float) -> void:
+ if not mat: return
+ if abs(target_type - current_type) > 0.01:
+ current_type = G.interpolate(current_type, target_type, delta * 15.)
+ mat.set_shader_parameter("type", current_type)
+ if abs(target_size - current_size) > 0.01:
+ current_size = G.interpolate(current_size, target_size, delta * 5.)
+ mat.set_shader_parameter("size", current_size)
+
func configure(size: float, type: bool):
- var mat: ShaderMaterial = $Mesh.get_active_material(0)
- mat.set_shader_parameter("size", size)
- mat.set_shader_parameter("type", 1. if type else -1.)
+ mat = $Mesh.get_active_material(0)
+ target_type = 1. if type else -1.
+ target_size = size
diff --git a/client/map/tiles/portal.gdshader b/client/map/tiles/portal.gdshader
index a9dbd1e6..e3093b07 100644
--- a/client/map/tiles/portal.gdshader
+++ b/client/map/tiles/portal.gdshader
@@ -1,6 +1,6 @@
/*
Hurry Curry! - a game about cooking
- Copyright (C) 2025 Hurry Curry! Contributors
+ Copyright (C) 2026 Hurry Curry! Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@@ -25,6 +25,7 @@ varying vec3 world_position;
uniform float type : hint_range(-1.0, 1.0);
uniform float size : hint_range(0.0, 2.0);
+uniform vec3 glow : source_color;
void vertex() {
MODELVIEW_MATRIX = VIEW_MATRIX * mat4(
@@ -37,25 +38,21 @@ void vertex() {
world_camera = (inverse(MODELVIEW_MATRIX) * vec4(0, 0, 0, 1)).xyz;
}
+vec2 rv_to_screen(mat4 pm, vec3 rv) {
+ vec4 k = pm * vec4(rv*1000.0, 1.0);
+ k /= k.w;
+ return (k.xy + 1.) / 2.;
+}
+
void fragment() {
vec3 ray = world_camera / size;
vec3 rv = normalize(world_position - world_camera);
- vec3 em = vec3(0.);
- bool hit = false;
-
- for (int i = 0; i < 100; i++) {
- float st = length(ray) * 0.1;
- ray += normalize(rv) * st;
- if (length(ray) < 1.) { hit = true; break; }
- rv += -normalize(ray) * -type / exp(dot(ray,ray)) * st;
- em += st * smoothstep(1.5,1.2,length(ray)) * 0.2;
- }
-
- vec4 k = PROJECTION_MATRIX * vec4(rv*1000.0, 1.0);
- k /= k.w;
- vec2 k2 = (k.xy + 1.) / 2.;
-
- vec3 col = hit ? vec3(type*0.5+0.5) : texture(screen_texture, k2).rgb;
- col += vec3(0.3,0.0,1.0) * max(em - 0.1,0.);
+
+ vec3 o = ray + length(ray)*rv;
+ float d = length(o) - 1.;
+ rv += o / (exp(d*2.)-1.) * type * 0.08;
+ vec2 screen = rv_to_screen(PROJECTION_MATRIX, rv);
+ vec3 col = d<0. ? vec3(type*0.5+0.5) : texture(screen_texture, screen).rgb;
+ col += glow * exp(d < 0. ? d*30. : d*-10.);
ALBEDO = col;
}
diff --git a/client/map/tiles/portal.tscn b/client/map/tiles/portal.tscn
index 372b97ea..07c39c76 100644
--- a/client/map/tiles/portal.tscn
+++ b/client/map/tiles/portal.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=5 format=3 uid="uid://cc5ubao3ln3r6"]
+[gd_scene format=3 uid="uid://cc5ubao3ln3r6"]
[ext_resource type="Shader" uid="uid://emcvwj5fjmju" path="res://map/tiles/portal.gdshader" id="1_aiexk"]
[ext_resource type="Script" uid="uid://cbr1qsqk5cyl2" path="res://map/tiles/portal.gd" id="1_h7xlp"]
@@ -10,13 +10,14 @@ size = Vector2(3, 3)
resource_local_to_scene = true
render_priority = 0
shader = ExtResource("1_aiexk")
-shader_parameter/type = 4.75e-08
-shader_parameter/size = 0.2
+shader_parameter/type = -1.0
+shader_parameter/size = 0.2000000095
+shader_parameter/glow = Color(0.6156863, 0.003921569, 1, 1)
-[node name="Portal" type="Node3D"]
+[node name="Portal" type="Node3D" unique_id=1362510877]
script = ExtResource("1_h7xlp")
-[node name="Mesh" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, 0)
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=726727519]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0022193193, 0.69999975, -0.0013526678)
mesh = SubResource("QuadMesh_us4em")
surface_material_override/0 = SubResource("ShaderMaterial_hvgsb")
diff --git a/client/map/tiles/potato_crate.gd b/client/map/tiles/potato_crate.gd
deleted file mode 100644
index d5fdd8e9..00000000
--- a/client/map/tiles/potato_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name PotatoCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/potato_crate.tscn").instantiate())
diff --git a/client/map/tiles/potato_crate.gd.uid b/client/map/tiles/potato_crate.gd.uid
deleted file mode 100644
index cf021ee9..00000000
--- a/client/map/tiles/potato_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://tyivqc0wc6mi
diff --git a/client/map/tiles/potato_crate.tscn b/client/map/tiles/potato_crate.tscn
index 9ced8854..404e3fdc 100644
--- a/client/map/tiles/potato_crate.tscn
+++ b/client/map/tiles/potato_crate.tscn
@@ -1,38 +1,38 @@
-[gd_scene load_steps=3 format=3 uid="uid://c764nf6aojyvx"]
+[gd_scene format=3 uid="uid://c764nf6aojyvx"]
[ext_resource type="ArrayMesh" uid="uid://btn7oh1v2k40p" path="res://map/tiles/crate.res" id="1_3ga66"]
[ext_resource type="ArrayMesh" uid="uid://hj2dib0t8em3" path="res://map/items/potato.res" id="2_3ga66"]
-[node name="PotatoCrate" type="Node3D"]
+[node name="PotatoCrate" type="Node3D" unique_id=958359962]
-[node name="Crate" type="MeshInstance3D" parent="."]
+[node name="Crate" type="MeshInstance3D" parent="." unique_id=1476692277]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_3ga66")
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=737788022]
transform = Transform3D(1.9395866e-08, 0.44372568, 0.074883275, 0.43525255, 0.019013587, -0.112666346, -0.11425943, 0.0724292, -0.42918384, -0.2245059, 0.2020701, -0.17833076)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D6" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D6" type="MeshInstance3D" parent="." unique_id=11436800]
transform = Transform3D(1.9395866e-08, 0.44372568, 0.074883275, 0.43525255, 0.019013587, -0.112666346, -0.11425943, 0.0724292, -0.42918384, -0.0090149045, 0.35778415, -0.17833076)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D7" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D7" type="MeshInstance3D" parent="." unique_id=866909482]
transform = Transform3D(0.07296345, 0.06498954, -0.43926376, 0.43169037, 0.09389621, 0.08559741, 0.10401813, -0.4352699, -0.04712081, 0.015495509, 0.3663897, 0.14554687)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=1979398488]
transform = Transform3D(-0.12614171, -0.25575554, -0.3481054, 0.43195862, -0.07468642, -0.10165464, -1.5851693e-08, -0.3626445, 0.26643753, -0.18310761, 0.21690153, 0.19903006)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D3" type="MeshInstance3D" parent="." unique_id=934217696]
transform = Transform3D(0.08798323, 0.09877133, 0.43012, 0.44131497, -0.019691661, -0.08575129, 1.8829489e-08, 0.43858457, -0.1007151, 0.19106877, 0.19821344, -0.2371732)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D5" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D5" type="MeshInstance3D" parent="." unique_id=455737052]
transform = Transform3D(-0.061073676, -0.043150976, 0.4437432, 0.4453779, 0.0143979285, 0.062698804, -0.020209989, 0.4476948, 0.040753797, 0.1624504, 0.19821344, -0.01481241)
mesh = ExtResource("2_3ga66")
-[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
+[node name="MeshInstance3D4" type="MeshInstance3D" parent="." unique_id=702936552]
transform = Transform3D(-6.4949006e-09, -0.148586, 0.31689468, 0.35, -1.5298985e-08, 2.6817607e-17, 1.3851905e-08, 0.31689468, 0.148586, 0.23736578, 0.175, 0.22895074)
mesh = ExtResource("2_3ga66")
diff --git a/client/map/tiles/rice_crate.gd b/client/map/tiles/rice_crate.gd
deleted file mode 100644
index 456a18f7..00000000
--- a/client/map/tiles/rice_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name RiceCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/rice_crate.tscn").instantiate())
diff --git a/client/map/tiles/rice_crate.gd.uid b/client/map/tiles/rice_crate.gd.uid
deleted file mode 100644
index c1e454e7..00000000
--- a/client/map/tiles/rice_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://b51bickm0rq1y
diff --git a/client/map/tiles/rice_crate.tscn b/client/map/tiles/rice_crate.tscn
index 72c6c540..f9b86963 100644
--- a/client/map/tiles/rice_crate.tscn
+++ b/client/map/tiles/rice_crate.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=3 format=3 uid="uid://bk0jvgj6xg23d"]
+[gd_scene format=3 uid="uid://bk0jvgj6xg23d"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_wfea8"]
[ext_resource type="PackedScene" uid="uid://rs4b17lp80cx" path="res://map/items/rice.tscn" id="2_fbw0j"]
-[node name="RiceCrate" instance=ExtResource("1_wfea8")]
+[node name="RiceCrate" unique_id=1561944393 instance=ExtResource("1_wfea8")]
-[node name="Rice" parent="." index="1" instance=ExtResource("2_fbw0j")]
+[node name="Rice" parent="." index="1" unique_id=38870235 instance=ExtResource("2_fbw0j")]
transform = Transform3D(3, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0)
diff --git a/client/map/tiles/rolling_board.gd b/client/map/tiles/rolling_board.gd
index 078897b1..93db2989 100644
--- a/client/map/tiles/rolling_board.gd
+++ b/client/map/tiles/rolling_board.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,44 +14,10 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name RollingBoard
-extends CounterBase
-
-var board = load("res://map/tiles/rolling_board.tscn").instantiate()
-var rolling: AudioStreamPlayer3D = AudioStreamPlayer3D.new()
-var acting_player
+extends ActiveInteractCounter
func _init(ctx: TileFactory.TileCC):
- super(ctx)
- rolling.stream = preload("res://map/tiles/sounds/roll.ogg")
- rolling.volume_db = -10
- add_child(rolling)
- base.add_child(board)
-
-func progress(position_: float, speed: float, warn: bool, acting_player_):
- super(position_, speed, warn, acting_player)
- var pin: Node3D = board.get_node("RollingPin")
- acting_player = acting_player_
-
- if not rolling.playing and speed != 0.:
- rolling.play()
- if acting_player != null:
- pin.visible = false
- var acting_character: Character = acting_player.character
- acting_character.rolling = true
- elif speed == 0:
- rolling.stop()
- pin.visible = true
- if acting_player != null:
- var acting_character: Character = acting_player.character
- acting_character.rolling = false
-
-func finish():
- super()
- if is_instance_valid(acting_player):
- var acting_character: Character = acting_player.character
- acting_character.rolling = false
- board.get_node("RollingPin").visible = true
- rolling.stop()
+ super(ctx, preload("res://map/tiles/rolling_board.tscn"), "RollingBoard/RollingPin", func (p: Player, x: bool): p.character.rolling = x, preload("res://map/tiles/sounds/roll.ogg"))
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., 0.575, 0.)
diff --git a/client/map/tiles/rolling_board.tscn b/client/map/tiles/rolling_board.tscn
index ecf1c036..3e366ad3 100644
--- a/client/map/tiles/rolling_board.tscn
+++ b/client/map/tiles/rolling_board.tscn
@@ -1,14 +1,13 @@
-[gd_scene load_steps=3 format=3 uid="uid://c15xsbx0bduqt"]
+[gd_scene format=3 uid="uid://c15xsbx0bduqt"]
[ext_resource type="ArrayMesh" uid="uid://dd4g04lgvsly5" path="res://map/tiles/cutting_board.res" id="1_cuxby"]
[ext_resource type="PackedScene" uid="uid://c8t04dfp45a86" path="res://map/tiles/rolling_pin.tscn" id="2_cuxby"]
-[node name="CuttingBoard" type="Node3D"]
+[node name="RollingBoard" type="Node3D" unique_id=145149049]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1864479003]
transform = Transform3D(0.4, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -0.075, 0.5, 0)
mesh = ExtResource("1_cuxby")
-skeleton = NodePath("")
-[node name="RollingPin" parent="." instance=ExtResource("2_cuxby")]
+[node name="RollingPin" parent="." unique_id=397072105 instance=ExtResource("2_cuxby")]
transform = Transform3D(0.0979824, 0, -0.9951882, 0, 1, 0, 0.9951882, 0, 0.0979824, 0.3562666, 0.575, 0)
diff --git a/client/map/tiles/rolling_pin.res b/client/map/tiles/rolling_pin.res
index 29a31bc7..c5be7946 100644
--- a/client/map/tiles/rolling_pin.res
+++ b/client/map/tiles/rolling_pin.res
Binary files differ
diff --git a/client/map/tiles/rolling_pin.tscn b/client/map/tiles/rolling_pin.tscn
index b25419cd..c2cbc343 100644
--- a/client/map/tiles/rolling_pin.tscn
+++ b/client/map/tiles/rolling_pin.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://c8t04dfp45a86"]
+[gd_scene format=3 uid="uid://c8t04dfp45a86"]
[ext_resource type="ArrayMesh" uid="uid://bijk6tpibbek3" path="res://map/tiles/rolling_pin.res" id="1_s0lm5"]
-[node name="RollingPin" type="Node3D"]
+[node name="RollingPin" type="Node3D" unique_id=1931827681]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1368520525]
transform = Transform3D(1.75, 0, 0, 0, 1.75, 0, 0, 0, 1.75, 0, 0, 0)
mesh = ExtResource("1_s0lm5")
-skeleton = NodePath("")
diff --git a/client/map/tiles/screen/screen.gd b/client/map/tiles/screen/screen.gd
new file mode 100644
index 00000000..41667830
--- /dev/null
+++ b/client/map/tiles/screen/screen.gd
@@ -0,0 +1,24 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+class_name Screen
+extends Tile
+
+func _init(ctx: TileFactory.TileCC):
+ super(ctx)
+ var screen_model: ScreenModel = load("res://map/tiles/screen/screen.tscn").instantiate()
+ base.add_child(screen_model)
+ screen_model.set_server_context(ctx.server_context)
+ \ No newline at end of file
diff --git a/client/map/tiles/screen/screen.gd.uid b/client/map/tiles/screen/screen.gd.uid
new file mode 100644
index 00000000..c55416cb
--- /dev/null
+++ b/client/map/tiles/screen/screen.gd.uid
@@ -0,0 +1 @@
+uid://dodq5s5bpfr3c
diff --git a/client/map/tiles/screen/screen.res.depren b/client/map/tiles/screen/screen.res.depren
new file mode 100644
index 00000000..365a3c86
--- /dev/null
+++ b/client/map/tiles/screen/screen.res.depren
Binary files differ
diff --git a/client/map/tiles/screen/screen.tscn b/client/map/tiles/screen/screen.tscn
new file mode 100644
index 00000000..a1f88294
--- /dev/null
+++ b/client/map/tiles/screen/screen.tscn
@@ -0,0 +1,36 @@
+[gd_scene format=3 uid="uid://vqe0wrt0ddq"]
+
+[ext_resource type="ArrayMesh" uid="uid://g6nwwhptmmmd" path="res://map/tiles/screen/screen_display.res" id="1_d1utq"]
+[ext_resource type="Script" uid="uid://cye7akcsp46cv" path="res://map/tiles/screen/screen_model.gd" id="1_fabw7"]
+[ext_resource type="ArrayMesh" uid="uid://nsmq1ko2woad" path="res://map/tiles/screen/screen_base.res" id="1_mm46a"]
+[ext_resource type="PackedScene" uid="uid://d22cslgao5jd4" path="res://map/tiles/floor.tscn" id="3_dmy1m"]
+[ext_resource type="PackedScene" uid="uid://dgtdfctc0x78v" path="res://gui/menus/screen_info.tscn" id="4_ebgc8"]
+
+[node name="Screen" type="Node3D" unique_id=1614533170]
+script = ExtResource("1_fabw7")
+
+[node name="Base" type="MeshInstance3D" parent="." unique_id=597805735]
+transform = Transform3D(2, 0, 0, 0, 0, -2, 0, 2, 0, 0, 0, 0)
+mesh = ExtResource("1_mm46a")
+
+[node name="Display" type="MeshInstance3D" parent="." unique_id=1268321578]
+transform = Transform3D(3, 0, 0, 0, 0, -3, 0, 3, 0, -0.004130006, 2.244278, 0.3346749)
+mesh = ExtResource("1_d1utq")
+
+[node name="ScreenViewport" type="SubViewport" parent="Display" unique_id=1731785275]
+disable_3d = true
+size = Vector2i(834, 480)
+
+[node name="ScreenInfo" parent="Display/ScreenViewport" unique_id=907327052 instance=ExtResource("4_ebgc8")]
+script = null
+
+[node name="Floor" parent="." unique_id=527188940 instance=ExtResource("3_dmy1m")]
+transform = Transform3D(12.117, 0, 0, 0, 12.117, 0, 0, 0, 12.117, 0, 0, 0)
+visible = false
+
+[node name="OmniLight3D" type="SpotLight3D" parent="." unique_id=1339528342]
+transform = Transform3D(1, 0, 0, 0, -0.9653816, 0.26084167, 0, -0.26084167, -0.9653816, 0, 2.1330748, 0.46361876)
+light_color = Color(0.3137255, 0.32941177, 0.76862746, 1)
+light_energy = 7.0
+spot_range = 3.25
+spot_angle = 75.0
diff --git a/client/map/tiles/screen/screen_base.res b/client/map/tiles/screen/screen_base.res
new file mode 100644
index 00000000..885becfe
--- /dev/null
+++ b/client/map/tiles/screen/screen_base.res
Binary files differ
diff --git a/client/map/tiles/screen/screen_display.res b/client/map/tiles/screen/screen_display.res
new file mode 100644
index 00000000..f7e8ee59
--- /dev/null
+++ b/client/map/tiles/screen/screen_display.res
Binary files differ
diff --git a/client/map/tiles/screen/screen_model.gd b/client/map/tiles/screen/screen_model.gd
new file mode 100644
index 00000000..9f63fc3f
--- /dev/null
+++ b/client/map/tiles/screen/screen_model.gd
@@ -0,0 +1,25 @@
+# Hurry Curry! - a game about cooking
+# Copyright (C) 2026 Hurry Curry! Contributors
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, version 3 of the License only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+extends Node3D
+class_name ScreenModel
+
+func set_server_context(server_context: Game.ServerContext) -> void:
+ if server_context.motd == null:
+ $Display/ScreenViewport/ScreenInfo/MarginContainer/VBoxContainer/RichTextLabel.text = "[font_size=48][b]%s[/b]" % server_context.name
+ else:
+ $Display/ScreenViewport/ScreenInfo/MarginContainer/VBoxContainer/RichTextLabel.text = """[font_size=48][b]%s[/b]
+
+%s[/font_size]""" % [server_context.name, server_context.motd]
diff --git a/client/map/tiles/screen/screen_model.gd.uid b/client/map/tiles/screen/screen_model.gd.uid
new file mode 100644
index 00000000..6a2a81b0
--- /dev/null
+++ b/client/map/tiles/screen/screen_model.gd.uid
@@ -0,0 +1 @@
+uid://cye7akcsp46cv
diff --git a/client/map/tiles/sink.gd b/client/map/tiles/sink.gd
index 055cc353..4f9fffdf 100644
--- a/client/map/tiles/sink.gd
+++ b/client/map/tiles/sink.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Sink
-extends Counter
+extends CounterLike
var particles: SinkParticles = preload("res://map/tiles/sink_particles.tscn").instantiate()
var running: AudioStreamPlayer3D = AudioStreamPlayer3D.new()
diff --git a/client/map/tiles/sink.res b/client/map/tiles/sink.res
index dc8b2f8d..6ac27f7d 100644
--- a/client/map/tiles/sink.res
+++ b/client/map/tiles/sink.res
Binary files differ
diff --git a/client/map/tiles/sink.tscn b/client/map/tiles/sink.tscn
index 887a6a86..d2c85160 100644
--- a/client/map/tiles/sink.tscn
+++ b/client/map/tiles/sink.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://pxa0p42ojyg1"]
+[gd_scene format=3 uid="uid://pxa0p42ojyg1"]
[ext_resource type="ArrayMesh" uid="uid://bibdbxyp15njt" path="res://map/tiles/sink.res" id="1_w6v3o"]
-[node name="Sink" type="Node3D"]
+[node name="Sink" type="Node3D" unique_id=1560247840]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1377464037]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_w6v3o")
-skeleton = NodePath("")
diff --git a/client/map/tiles/sink_backsplash.res b/client/map/tiles/sink_backsplash.res
index a1bec8c2..5a7577a1 100644
--- a/client/map/tiles/sink_backsplash.res
+++ b/client/map/tiles/sink_backsplash.res
Binary files differ
diff --git a/client/map/tiles/sink_backsplash.tscn b/client/map/tiles/sink_backsplash.tscn
index 8154023c..632603a3 100644
--- a/client/map/tiles/sink_backsplash.tscn
+++ b/client/map/tiles/sink_backsplash.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://ctwkcro4c528y"]
+[gd_scene format=3 uid="uid://ctwkcro4c528y"]
[ext_resource type="ArrayMesh" uid="uid://rlvhl2hknvf6" path="res://map/tiles/sink_backsplash.res" id="1_bwi78"]
-[node name="Sink" type="Node3D"]
+[node name="Sink" type="Node3D" unique_id=921333855]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1099590544]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_bwi78")
-skeleton = NodePath("")
diff --git a/client/map/tiles/sink_particles.gd b/client/map/tiles/sink_particles.gd
index 415b1d64..6674c21d 100644
--- a/client/map/tiles/sink_particles.gd
+++ b/client/map/tiles/sink_particles.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/sink_particles.tscn b/client/map/tiles/sink_particles.tscn
index 6d655c45..2543d59c 100644
--- a/client/map/tiles/sink_particles.tscn
+++ b/client/map/tiles/sink_particles.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=8 format=3 uid="uid://ckxtlgx7hg368"]
+[gd_scene format=3 uid="uid://ckxtlgx7hg368"]
[ext_resource type="Script" uid="uid://bmk30s2yv3j05" path="res://map/tiles/sink_particles.gd" id="1_vh7ox"]
@@ -26,10 +26,10 @@ height = 0.1
_data = [Vector2(0.264045, 0), 0.0, 0.0, 0, 0, Vector2(0.460674, 1), 0.0, 0.0, 0, 0, Vector2(0.949438, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 4
-[node name="SinkParticles" type="Node3D"]
+[node name="SinkParticles" type="Node3D" unique_id=974890413]
script = ExtResource("1_vh7ox")
-[node name="Stream" type="CPUParticles3D" parent="."]
+[node name="Stream" type="CPUParticles3D" parent="." unique_id=685739412]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.75, -0.05)
emitting = false
amount = 10
@@ -41,7 +41,7 @@ initial_velocity_min = 0.1
initial_velocity_max = 0.3
color_ramp = SubResource("Gradient_p7a7b")
-[node name="Bubbles" type="CPUParticles3D" parent="."]
+[node name="Bubbles" type="CPUParticles3D" parent="." unique_id=2070218564]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 0)
emitting = false
amount = 30
diff --git a/client/map/tiles/steak_crate.gd b/client/map/tiles/steak_crate.gd
deleted file mode 100644
index df3d8154..00000000
--- a/client/map/tiles/steak_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name SteakCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/steak_crate.tscn").instantiate())
diff --git a/client/map/tiles/steak_crate.gd.uid b/client/map/tiles/steak_crate.gd.uid
deleted file mode 100644
index 40de1785..00000000
--- a/client/map/tiles/steak_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://cgjeokxei2o1d
diff --git a/client/map/tiles/steak_crate.res b/client/map/tiles/steak_crate.res
index afb91ff5..0fe078bf 100644
--- a/client/map/tiles/steak_crate.res
+++ b/client/map/tiles/steak_crate.res
Binary files differ
diff --git a/client/map/tiles/steak_crate.tscn b/client/map/tiles/steak_crate.tscn
index 985dcfdd..48bc48dc 100644
--- a/client/map/tiles/steak_crate.tscn
+++ b/client/map/tiles/steak_crate.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://cyi73ubyehy37"]
+[gd_scene format=3 uid="uid://cyi73ubyehy37"]
[ext_resource type="ArrayMesh" uid="uid://bdsqnesyjl3kv" path="res://map/tiles/steak_crate.res" id="1_ewp50"]
-[node name="SteakCrate" type="Node3D"]
+[node name="SteakCrate" type="Node3D" unique_id=766152255]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=432520379]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_ewp50")
-skeleton = NodePath("")
diff --git a/client/map/tiles/stove.gd b/client/map/tiles/stove.gd
index d305da8c..13ae2c7e 100644
--- a/client/map/tiles/stove.gd
+++ b/client/map/tiles/stove.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,11 +14,11 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Stove
-extends Counter
+extends CounterLike
func _init(ctx: TileFactory.TileCC):
super(ctx)
base.add_child(load("res://map/tiles/stove.tscn").instantiate())
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., 0.625, 0.)
diff --git a/client/map/tiles/stove.res b/client/map/tiles/stove.res
index 5008a897..4b4de9aa 100644
--- a/client/map/tiles/stove.res
+++ b/client/map/tiles/stove.res
Binary files differ
diff --git a/client/map/tiles/stove.tscn b/client/map/tiles/stove.tscn
index c47b9a55..85c1c477 100644
--- a/client/map/tiles/stove.tscn
+++ b/client/map/tiles/stove.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://gns51upjpuaf"]
+[gd_scene format=3 uid="uid://gns51upjpuaf"]
[ext_resource type="ArrayMesh" uid="uid://b343sdfdwvqne" path="res://map/tiles/stove.res" id="1_dpdf3"]
-[node name="Stove" type="Node3D"]
+[node name="Stove" type="Node3D" unique_id=1168423898]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1617771593]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_dpdf3")
-skeleton = NodePath("")
diff --git a/client/map/tiles/strawberry_crate.gd b/client/map/tiles/strawberry_crate.gd
deleted file mode 100644
index cf941df2..00000000
--- a/client/map/tiles/strawberry_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name StrawberryCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/strawberry_crate.tscn").instantiate())
diff --git a/client/map/tiles/strawberry_crate.gd.uid b/client/map/tiles/strawberry_crate.gd.uid
deleted file mode 100644
index 70f4ef4e..00000000
--- a/client/map/tiles/strawberry_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://bc8jd34nankae
diff --git a/client/map/tiles/strawberry_crate.tscn b/client/map/tiles/strawberry_crate.tscn
index 070323b6..0e85a59d 100644
--- a/client/map/tiles/strawberry_crate.tscn
+++ b/client/map/tiles/strawberry_crate.tscn
@@ -1,21 +1,21 @@
-[gd_scene load_steps=3 format=3 uid="uid://disox718eydry"]
+[gd_scene format=3 uid="uid://disox718eydry"]
[ext_resource type="PackedScene" uid="uid://xdui0oya4lpb" path="res://map/tiles/crate.tscn" id="1_j8iml"]
[ext_resource type="PackedScene" uid="uid://df1xktleeqg3m" path="res://map/items/strawberry.tscn" id="3_pv4co"]
-[node name="StrawberryCrate" instance=ExtResource("1_j8iml")]
+[node name="StrawberryCrate" unique_id=824564931 instance=ExtResource("1_j8iml")]
-[node name="Strawberry" parent="." index="1" instance=ExtResource("3_pv4co")]
+[node name="Strawberry" parent="." index="1" unique_id=1554090960 instance=ExtResource("3_pv4co")]
transform = Transform3D(0.450462, -0.749695, 0.48481, 0.857167, 0.515038, 0, -0.249695, 0.415563, 0.87462, 0.280431, 0.2, -0.249977)
-[node name="Strawberry2" parent="." index="2" instance=ExtResource("3_pv4co")]
+[node name="Strawberry2" parent="." index="2" unique_id=605451216 instance=ExtResource("3_pv4co")]
transform = Transform3D(0.514594, -0.856429, -0.0415094, 0.857167, 0.515038, 0, 0.0213789, -0.0355805, 0.999138, 0.304305, 0.2, 0.224393)
-[node name="Strawberry3" parent="." index="3" instance=ExtResource("3_pv4co")]
+[node name="Strawberry3" parent="." index="3" unique_id=1846780345 instance=ExtResource("3_pv4co")]
transform = Transform3D(0.333174, -0.941988, -0.0406744, 0.942623, 0.333757, -0.00828417, 0.0213789, -0.0355805, 0.999138, 0.0704219, 0.2, 0.0109546)
-[node name="Strawberry4" parent="." index="4" instance=ExtResource("3_pv4co")]
+[node name="Strawberry4" parent="." index="4" unique_id=711548062 instance=ExtResource("3_pv4co")]
transform = Transform3D(-0.06674, -0.173859, -0.982506, 0.976472, -0.213751, -0.0285059, -0.205055, -0.961293, 0.184035, -0.181014, 0.232884, -0.103933)
-[node name="Strawberry5" parent="." index="5" instance=ExtResource("3_pv4co")]
+[node name="Strawberry5" parent="." index="5" unique_id=50238983 instance=ExtResource("3_pv4co")]
transform = Transform3D(-0.0250969, -0.243938, 0.969466, 0.976472, -0.213751, -0.0285059, 0.214178, 0.945941, 0.243563, -0.181014, 0.232884, 0.0976371)
diff --git a/client/map/tiles/street.gd b/client/map/tiles/street.gd
index 38fb61f4..1ed21111 100644
--- a/client/map/tiles/street.gd
+++ b/client/map/tiles/street.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/street.res b/client/map/tiles/street.res
index 13da376b..5edd49a2 100644
--- a/client/map/tiles/street.res
+++ b/client/map/tiles/street.res
Binary files differ
diff --git a/client/map/tiles/street.tscn b/client/map/tiles/street.tscn
index 4200c4ab..435f93ff 100644
--- a/client/map/tiles/street.tscn
+++ b/client/map/tiles/street.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dhdu8gbrhj6wy"]
+[gd_scene format=3 uid="uid://dhdu8gbrhj6wy"]
[ext_resource type="ArrayMesh" uid="uid://bamfsa38y0o20" path="res://map/tiles/street.res" id="1_h0wov"]
-[node name="Street" type="Node3D"]
+[node name="Street" type="Node3D" unique_id=846434626]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=308299248]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.3, 0)
mesh = ExtResource("1_h0wov")
-skeleton = NodePath("")
diff --git a/client/map/tiles/table.gd b/client/map/tiles/table.gd
index 43e3dbea..4fe10323 100644
--- a/client/map/tiles/table.gd
+++ b/client/map/tiles/table.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,11 +14,11 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Table
-extends Floor
+extends Tile
func _init(ctx: TileFactory.TileCC):
super(ctx)
base.add_child(load("res://map/tiles/table.tscn").instantiate())
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0., .5, 0.)
diff --git a/client/map/tiles/table.res b/client/map/tiles/table.res
index 0e4f0fa9..ed98d026 100644
--- a/client/map/tiles/table.res
+++ b/client/map/tiles/table.res
Binary files differ
diff --git a/client/map/tiles/table.tscn b/client/map/tiles/table.tscn
index 96efc7eb..a0d9155d 100644
--- a/client/map/tiles/table.tscn
+++ b/client/map/tiles/table.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://ctuxsfv7rcqb4"]
+[gd_scene format=3 uid="uid://ctuxsfv7rcqb4"]
[ext_resource type="ArrayMesh" uid="uid://caf1m4egynwvn" path="res://map/tiles/table.res" id="1_ycvmt"]
-[node name="Table" type="Node3D"]
+[node name="Table" type="Node3D" unique_id=1328090581]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1607758610]
mesh = ExtResource("1_ycvmt")
-skeleton = NodePath("")
diff --git a/client/map/tiles/tile.gd b/client/map/tiles/tile.gd
index 9d4d732e..df7aa38d 100644
--- a/client/map/tiles/tile.gd
+++ b/client/map/tiles/tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -32,32 +32,42 @@ func _init(ctx: TileFactory.TileCC):
base.name = "Base"
base.position += Vector3(0.5, 0, 0.5)
add_child(base)
- self.name = str(ctx.position)
+ self.name = ctx.tile_name.raw_name
var item_base_ = Node3D.new()
# this method is supposed to be overriden
@warning_ignore("static_called_on_instance")
- item_base_.position = interact_target()
+
+ var item_base_pos = interact_target()
+ if item_base_pos == null:
+ if ctx.below_tile_instances.is_empty():
+ item_base_pos = Vector3.ZERO
+ else:
+ item_base_pos = ctx.below_tile_instances[-1].item_base.position
+ item_base_.position = item_base_pos
item_base_.name = "ItemBase"
base.add_child(item_base_)
item_base = item_base_
+
base_mesh = get_base_mesh()
if base_mesh != null:
var m: Node3D = base_mesh
m.position += Vector3(0.5, 0, 0.5)
add_child(m)
+ if not ctx.below_tile_instances.is_empty():
+ base.rotation.y = ctx.below_tile_instances[-1].base.rotation.y
func turn_facing(facing: Facing):
base.rotation.y = facing * 0.5 * PI + PI
# defines where items go when interacting
-static func interact_target() -> Vector3:
- return Vector3(0, 0, 0)
+static func interact_target(): #-> Vector3?
+ return null
# actions when interacting, e.g. animations
func interact():
pass
-func progress(position_: float, speed: float, warn: bool, _acting_player):
+func progress(position_: float, speed: float, warn: bool, _acting_players: Array[Player]):
if item != null:
item.progress(position_, speed, warn)
@@ -94,3 +104,9 @@ func take_item() -> Item:
func get_base_mesh():
return null
+
+# Called when about to be changed to different tile
+# returning false deletes the tile and replaces it normally
+# returning true means this function applies the change
+func change(_name: String) -> bool:
+ return false
diff --git a/client/map/tiles/tomato_crate.gd b/client/map/tiles/tomato_crate.gd
deleted file mode 100644
index 29b8e3a5..00000000
--- a/client/map/tiles/tomato_crate.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name TomatoCrate
-extends Crate
-
-func _init(ctx: TileFactory.TileCC):
- super(ctx)
- base.add_child(load("res://map/tiles/tomato_crate.tscn").instantiate())
diff --git a/client/map/tiles/tomato_crate.gd.uid b/client/map/tiles/tomato_crate.gd.uid
deleted file mode 100644
index fcdce7a8..00000000
--- a/client/map/tiles/tomato_crate.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://chvydto06s4qk
diff --git a/client/map/tiles/tomato_crate.res b/client/map/tiles/tomato_crate.res
index 4490208b..e5add892 100644
--- a/client/map/tiles/tomato_crate.res
+++ b/client/map/tiles/tomato_crate.res
Binary files differ
diff --git a/client/map/tiles/tomato_crate.tscn b/client/map/tiles/tomato_crate.tscn
index 999a9017..2730983c 100644
--- a/client/map/tiles/tomato_crate.tscn
+++ b/client/map/tiles/tomato_crate.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://div5vbcn10yv8"]
+[gd_scene format=3 uid="uid://div5vbcn10yv8"]
[ext_resource type="ArrayMesh" uid="uid://ycxehic1fe7x" path="res://map/tiles/tomato_crate.res" id="1_2nsw8"]
-[node name="TomatoCrate" type="Node3D"]
+[node name="TomatoCrate" type="Node3D" unique_id=210851246]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1201079374]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_2nsw8")
-skeleton = NodePath("")
diff --git a/client/map/tiles/trash.gd b/client/map/tiles/trash.gd
index 14ef9ad2..68e7f7d1 100644
--- a/client/map/tiles/trash.gd
+++ b/client/map/tiles/trash.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name Trash
-extends Crate
+extends CounterLike
func _init(ctx: TileFactory.TileCC):
super(ctx)
diff --git a/client/map/tiles/trash.res b/client/map/tiles/trash.res
index 925af56e..131a8f74 100644
--- a/client/map/tiles/trash.res
+++ b/client/map/tiles/trash.res
Binary files differ
diff --git a/client/map/tiles/trash.tscn b/client/map/tiles/trash.tscn
index f1458277..f07e53dc 100644
--- a/client/map/tiles/trash.tscn
+++ b/client/map/tiles/trash.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://dab8capc4hhks"]
+[gd_scene format=3 uid="uid://dab8capc4hhks"]
[ext_resource type="ArrayMesh" uid="uid://b5jcsnrkaqnsu" path="res://map/tiles/trash.res" id="1_w302o"]
-[node name="Crate" type="Node3D"]
+[node name="Crate" type="Node3D" unique_id=1478036191]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=710606675]
mesh = ExtResource("1_w302o")
-skeleton = NodePath("")
diff --git a/client/map/tiles/tree/bark.tres b/client/map/tiles/tree/bark.tres
index 3a6e8a04..01d9dd89 100644
--- a/client/map/tiles/tree/bark.tres
+++ b/client/map/tiles/tree/bark.tres
@@ -1,4 +1,4 @@
-[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://beyncaufbtoay"]
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://beyncaufbtoay"]
[ext_resource type="Texture2D" uid="uid://bgh74bmrp46qc" path="res://map/tiles/tree/bark.webp" id="1_3mn2u"]
[ext_resource type="Texture2D" uid="uid://bmvab6kdyccm4" path="res://map/tiles/tree/bark_normal.webp" id="2_v3ray"]
diff --git a/client/map/tiles/tree/leaves.tres b/client/map/tiles/tree/leaves.tres
index ad1b14e9..4347214f 100644
--- a/client/map/tiles/tree/leaves.tres
+++ b/client/map/tiles/tree/leaves.tres
@@ -1,10 +1,12 @@
-[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bwkrkt2cb0wa"]
+[gd_resource type="StandardMaterial3D" format=3 uid="uid://bwkrkt2cb0wa"]
[ext_resource type="Texture2D" uid="uid://bxxh66na6bumt" path="res://map/tiles/tree/leaves.webp" id="1_jg4r8"]
[resource]
resource_name = "NormalTree_Leaves"
-transparency = 4
+transparency = 2
+alpha_scissor_threshold = 0.5
+alpha_antialiasing_mode = 0
albedo_texture = ExtResource("1_jg4r8")
metallic_specular = 0.0
distance_fade_min_distance = 2.0
diff --git a/client/map/tiles/tree/leaves_1_hq.res b/client/map/tiles/tree/leaves_1_hq.res
index 776aab86..e73c0414 100644
--- a/client/map/tiles/tree/leaves_1_hq.res
+++ b/client/map/tiles/tree/leaves_1_hq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_1_lq.res b/client/map/tiles/tree/leaves_1_lq.res
index b701536a..29ff9170 100644
--- a/client/map/tiles/tree/leaves_1_lq.res
+++ b/client/map/tiles/tree/leaves_1_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_2_hq.res b/client/map/tiles/tree/leaves_2_hq.res
index ce83d2f1..dd544faf 100644
--- a/client/map/tiles/tree/leaves_2_hq.res
+++ b/client/map/tiles/tree/leaves_2_hq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_2_lq.res b/client/map/tiles/tree/leaves_2_lq.res
index 5064b2bb..f01221d4 100644
--- a/client/map/tiles/tree/leaves_2_lq.res
+++ b/client/map/tiles/tree/leaves_2_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_3_hq.res b/client/map/tiles/tree/leaves_3_hq.res
index fef80645..528d5a0d 100644
--- a/client/map/tiles/tree/leaves_3_hq.res
+++ b/client/map/tiles/tree/leaves_3_hq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_3_lq.res b/client/map/tiles/tree/leaves_3_lq.res
index 108f9120..0888c744 100644
--- a/client/map/tiles/tree/leaves_3_lq.res
+++ b/client/map/tiles/tree/leaves_3_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_4_hq.res b/client/map/tiles/tree/leaves_4_hq.res
index e0657993..9c9cbec4 100644
--- a/client/map/tiles/tree/leaves_4_hq.res
+++ b/client/map/tiles/tree/leaves_4_hq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_4_lq.res b/client/map/tiles/tree/leaves_4_lq.res
index 156b18e2..6b0d9b45 100644
--- a/client/map/tiles/tree/leaves_4_lq.res
+++ b/client/map/tiles/tree/leaves_4_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_5_hq.res b/client/map/tiles/tree/leaves_5_hq.res
index 63839358..11005d72 100644
--- a/client/map/tiles/tree/leaves_5_hq.res
+++ b/client/map/tiles/tree/leaves_5_hq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_5_lq.res b/client/map/tiles/tree/leaves_5_lq.res
index 4ed6ae0e..d265681b 100644
--- a/client/map/tiles/tree/leaves_5_lq.res
+++ b/client/map/tiles/tree/leaves_5_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/leaves_lq.res b/client/map/tiles/tree/leaves_lq.res
index 3b5b5549..ae8e6713 100644
--- a/client/map/tiles/tree/leaves_lq.res
+++ b/client/map/tiles/tree/leaves_lq.res
Binary files differ
diff --git a/client/map/tiles/tree/trunk_1.res b/client/map/tiles/tree/trunk_1.res
index abdbc3ab..2cade494 100644
--- a/client/map/tiles/tree/trunk_1.res
+++ b/client/map/tiles/tree/trunk_1.res
Binary files differ
diff --git a/client/map/tiles/tree/trunk_2.res b/client/map/tiles/tree/trunk_2.res
index 2a66054f..058b8bd5 100644
--- a/client/map/tiles/tree/trunk_2.res
+++ b/client/map/tiles/tree/trunk_2.res
Binary files differ
diff --git a/client/map/tiles/tree/trunk_3.res b/client/map/tiles/tree/trunk_3.res
index 02cb6023..aa61effd 100644
--- a/client/map/tiles/tree/trunk_3.res
+++ b/client/map/tiles/tree/trunk_3.res
Binary files differ
diff --git a/client/map/tiles/tree/trunk_4.res b/client/map/tiles/tree/trunk_4.res
index 87c47b25..a015328d 100644
--- a/client/map/tiles/tree/trunk_4.res
+++ b/client/map/tiles/tree/trunk_4.res
Binary files differ
diff --git a/client/map/tiles/tree/trunk_5.res b/client/map/tiles/tree/trunk_5.res
index 82722415..cf5a5111 100644
--- a/client/map/tiles/tree/trunk_5.res
+++ b/client/map/tiles/tree/trunk_5.res
Binary files differ
diff --git a/client/map/tiles/ceiling_lamp.gd b/client/map/tiles/unknown_tile.gd
index 3b504ed7..aa6eee79 100644
--- a/client/map/tiles/ceiling_lamp.gd
+++ b/client/map/tiles/unknown_tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -13,9 +13,13 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
-class_name CeilingLamp
-extends Floor
+class_name UnknownTile
+extends Tile
func _init(ctx: TileFactory.TileCC):
super(ctx)
- base.add_child(load("res://map/tiles/ceiling_lamp.tscn").instantiate())
+ var label = Label3D.new()
+ label.text = ctx.tile_name.name
+ label.position.y = 0.5
+ label.billboard = BaseMaterial3D.BILLBOARD_ENABLED
+ item_base.add_child(label)
diff --git a/client/map/tiles/unknown_tile.gd.uid b/client/map/tiles/unknown_tile.gd.uid
new file mode 100644
index 00000000..3c331921
--- /dev/null
+++ b/client/map/tiles/unknown_tile.gd.uid
@@ -0,0 +1 @@
+uid://l154vna0x8de
diff --git a/client/map/tiles/wall.gd b/client/map/tiles/wall.gd
index 25289635..1c14de11 100644
--- a/client/map/tiles/wall.gd
+++ b/client/map/tiles/wall.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
diff --git a/client/map/tiles/wall_corner.res b/client/map/tiles/wall_corner.res
index f232815a..5a76913d 100644
--- a/client/map/tiles/wall_corner.res
+++ b/client/map/tiles/wall_corner.res
Binary files differ
diff --git a/client/map/tiles/wall_corner.tscn b/client/map/tiles/wall_corner.tscn
index a158a119..c79b718e 100644
--- a/client/map/tiles/wall_corner.tscn
+++ b/client/map/tiles/wall_corner.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://ooke2w0txqvo"]
+[gd_scene format=3 uid="uid://ooke2w0txqvo"]
[ext_resource type="ArrayMesh" uid="uid://bjhbhom37qena" path="res://map/tiles/wall_corner.res" id="1_8v0wt"]
-[node name="Wall" type="Node3D"]
+[node name="Wall" type="Node3D" unique_id=170493502]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=1971348054]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_8v0wt")
-skeleton = NodePath("")
diff --git a/client/map/tiles/wall_cross.res b/client/map/tiles/wall_cross.res
index d23f908d..4a2ce34e 100644
--- a/client/map/tiles/wall_cross.res
+++ b/client/map/tiles/wall_cross.res
Binary files differ
diff --git a/client/map/tiles/wall_cross.tscn b/client/map/tiles/wall_cross.tscn
index 15a8b24a..b10838b2 100644
--- a/client/map/tiles/wall_cross.tscn
+++ b/client/map/tiles/wall_cross.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://37s417kannw"]
+[gd_scene format=3 uid="uid://37s417kannw"]
[ext_resource type="ArrayMesh" uid="uid://csy08a5uaejvm" path="res://map/tiles/wall_cross.res" id="1_cq25f"]
-[node name="WallCross" type="Node3D"]
+[node name="WallCross" type="Node3D" unique_id=480226603]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=635719470]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
mesh = ExtResource("1_cq25f")
-skeleton = NodePath("")
diff --git a/client/map/tiles/wall_straight.res b/client/map/tiles/wall_straight.res
index 61e00eea..587f0e63 100644
--- a/client/map/tiles/wall_straight.res
+++ b/client/map/tiles/wall_straight.res
Binary files differ
diff --git a/client/map/tiles/wall_straight.tscn b/client/map/tiles/wall_straight.tscn
index 0de536b8..0c9ca066 100644
--- a/client/map/tiles/wall_straight.tscn
+++ b/client/map/tiles/wall_straight.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://tx8anusdso4j"]
+[gd_scene format=3 uid="uid://tx8anusdso4j"]
[ext_resource type="ArrayMesh" uid="uid://sxg6np20cvs2" path="res://map/tiles/wall_straight.res" id="1_stsuc"]
-[node name="Wall" type="Node3D"]
+[node name="Wall" type="Node3D" unique_id=1493672826]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=2012998439]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_stsuc")
-skeleton = NodePath("")
diff --git a/client/map/tiles/wall_t.res b/client/map/tiles/wall_t.res
index 5de79639..84776fb8 100644
--- a/client/map/tiles/wall_t.res
+++ b/client/map/tiles/wall_t.res
Binary files differ
diff --git a/client/map/tiles/wall_t.tscn b/client/map/tiles/wall_t.tscn
index 9d390517..b8fd430c 100644
--- a/client/map/tiles/wall_t.tscn
+++ b/client/map/tiles/wall_t.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://canjwc3qoprsp"]
+[gd_scene format=3 uid="uid://canjwc3qoprsp"]
[ext_resource type="ArrayMesh" uid="uid://bysasgavbv1mj" path="res://map/tiles/wall_t.res" id="1_sb5lc"]
-[node name="Wall" type="Node3D"]
+[node name="Wall" type="Node3D" unique_id=1440368655]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=836503802]
transform = Transform3D(5.96244e-09, 0, -0.5, 0, 0.5, 0, 0.5, 0, 5.96244e-09, 0, 0, 0)
mesh = ExtResource("1_sb5lc")
-skeleton = NodePath("")
diff --git a/client/map/tiles/wall_tile.gd b/client/map/tiles/wall_tile.gd
index 390a4bfb..01522609 100644
--- a/client/map/tiles/wall_tile.gd
+++ b/client/map/tiles/wall_tile.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -14,7 +14,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
class_name WallTile
-extends Floor
+extends Tile
static func create_material(color: Color):
var mat = StandardMaterial3D.new()
@@ -31,8 +31,8 @@ const WALLS: Array = [
"wall",
"wall-window",
"counter-window",
+ "counter-window-conveyor",
"door",
- "fence"
]
var walls: Array = WALLS
@@ -56,8 +56,8 @@ func _init(ctx: TileFactory.TileCC):
for start in range(4):
var series = 0
for i in range(4):
- var i_name = ctx.neighbors[(start + i) % 4]
- if is_wall(i_name):
+ var neighbor: Array = ctx.neighbors[(start + i) % 4]
+ if is_wall(neighbor):
series += 1
else:
break
@@ -68,7 +68,7 @@ func _init(ctx: TileFactory.TileCC):
if max_series == 1:
facing = max_idx
kind = WallKind.STRAIGHT
- if not env.is_empty() and env.has(ctx.neighbors[(facing + 1) % 4]) or ctx.neighbors[(facing + 1) % 4] == null:
+ if not env.is_empty() and G.has_one(env, ctx.neighbors[(facing + 1) % 4]) or ctx.neighbors[(facing + 1) % 4].is_empty():
facing = (facing + 2) % 4
elif max_series == 2:
facing = max_idx
@@ -86,5 +86,5 @@ func add_dyed_mesh(ctx: TileFactory.TileCC, node: Node3D, node_name = "Mesh", su
meshi.set_surface_override_material(surface, MATERIALS.get(ctx.tile_name.variant, MATERIALS["green"]))
base.add_child(node)
-func is_wall(tile_name_t) -> bool:
- return walls.has(tile_name_t)
+func is_wall(neighbor: Array) -> bool:
+ return G.has_one(neighbor, walls)
diff --git a/client/map/tiles/window.gd b/client/map/tiles/window.gd
index da0963ed..9f8670a7 100644
--- a/client/map/tiles/window.gd
+++ b/client/map/tiles/window.gd
@@ -1,5 +1,5 @@
# Hurry Curry! - a game about cooking
-# Copyright (C) 2025 Hurry Curry! contributors
+# Copyright (C) 2026 Hurry Curry! Contributors
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -16,7 +16,7 @@
class_name WallWindow
extends WallTile
-static func interact_target() -> Vector3:
+static func interact_target(): # -> Vector3?
return Vector3(0, 0.625, 0)
func _init(ctx: TileFactory.TileCC):
diff --git a/client/map/tiles/window.res b/client/map/tiles/window.res
index b2ff56f0..f685d179 100644
--- a/client/map/tiles/window.res
+++ b/client/map/tiles/window.res
Binary files differ
diff --git a/client/map/tiles/window.tscn b/client/map/tiles/window.tscn
index b2db9c74..d086bc13 100644
--- a/client/map/tiles/window.tscn
+++ b/client/map/tiles/window.tscn
@@ -1,10 +1,9 @@
-[gd_scene load_steps=2 format=3 uid="uid://mn0avehv0qtt"]
+[gd_scene format=3 uid="uid://mn0avehv0qtt"]
[ext_resource type="ArrayMesh" uid="uid://ce60y0y6dqypp" path="res://map/tiles/window.res" id="1_ek3mj"]
-[node name="Window" type="Node3D"]
+[node name="Window" type="Node3D" unique_id=1268337780]
-[node name="Mesh" type="MeshInstance3D" parent="."]
+[node name="Mesh" type="MeshInstance3D" parent="." unique_id=753789933]
transform = Transform3D(-2.18557e-08, 0, 0.5, 0, 0.5, 0, -0.5, 0, -2.18557e-08, 0, 0, 0)
mesh = ExtResource("1_ek3mj")
-skeleton = NodePath("")