From 3e9387686105cc7a0928e65682b8075f7e7737f4 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 11 Dec 2024 17:45:57 -0500 Subject: [PATCH 01/10] Port N14 Mapper Assets (#1315) # Description By request from Old Dance Jacket, who wanted to be able to use N14 Mapping Assets in SS14. We should probably trim this list down for what assets aren't actually needed (Any asset that is 100% unique to Fallout for instance) # Changelog :cl: - add: Added a large number of mapping assets from Nuclear14 --- .../Structures/Decoration/floordecor.yml | 720 ++++++++++++++++++ .../Entities/Structures/Decoration/rails.yml | 95 +++ .../Structures/Decoration/torches.yml | 73 ++ .../Entities/Structures/Storage/barrels.yml | 287 +++++++ .../Entities/Structures/Storage/closets.yml | 228 ++++++ .../Entities/Structures/Storage/crates.yml | 227 ++++++ .../Entities/Structures/Storage/furniture.yml | 49 ++ .../Entities/Structures/Storage/tanks.yml | 182 +++++ .../Entities/Structures/Wallmount/adverts.yml | 19 + .../Structures/Wallmount/base_lighting.yml | 43 ++ .../Wallmount/monitors_televisions.yml | 54 ++ .../Structures/Wallmount/noticeboard.yml | 63 ++ .../Entities/Structures/Wallmount/signs.yml | 154 ++++ .../Structures/Wallmount/wallmounts.yml | 45 ++ .../Structures/Decoration/barrels.rsi/.png | Bin 0 -> 392 bytes .../Decoration/barrels.rsi/double_grey_1.png | Bin 0 -> 589 bytes .../Decoration/barrels.rsi/double_grey_2.png | Bin 0 -> 585 bytes .../Decoration/barrels.rsi/double_red_1.png | Bin 0 -> 596 bytes .../Decoration/barrels.rsi/double_red_2.png | Bin 0 -> 611 bytes .../Decoration/barrels.rsi/double_toxic_1.png | Bin 0 -> 756 bytes .../Decoration/barrels.rsi/double_waste_1.png | Bin 0 -> 867 bytes .../Decoration/barrels.rsi/double_waste_2.png | Bin 0 -> 778 bytes .../barrels.rsi/double_yellow_1.png | Bin 0 -> 604 bytes .../barrels.rsi/double_yellow_2.png | Bin 0 -> 586 bytes .../Decoration/barrels.rsi/flammable_1.png | Bin 0 -> 606 bytes .../Decoration/barrels.rsi/flammable_2.png | Bin 0 -> 676 bytes .../Decoration/barrels.rsi/flammable_3.png | Bin 0 -> 629 bytes .../Decoration/barrels.rsi/grey_1.png | Bin 0 -> 458 bytes .../Decoration/barrels.rsi/grey_2.png | Bin 0 -> 511 bytes .../Decoration/barrels.rsi/grey_3.png | Bin 0 -> 443 bytes .../Decoration/barrels.rsi/hazard_1.png | Bin 0 -> 565 bytes .../Decoration/barrels.rsi/hazard_2.png | Bin 0 -> 615 bytes .../Decoration/barrels.rsi/hazard_3.png | Bin 0 -> 540 bytes .../Decoration/barrels.rsi/label_1.png | Bin 0 -> 528 bytes .../Decoration/barrels.rsi/label_2.png | Bin 0 -> 589 bytes .../Decoration/barrels.rsi/label_3.png | Bin 0 -> 550 bytes .../Decoration/barrels.rsi/meta.json | 191 +++++ .../Decoration/barrels.rsi/quad_grey_1.png | Bin 0 -> 608 bytes .../Decoration/barrels.rsi/quad_red_1.png | Bin 0 -> 694 bytes .../Decoration/barrels.rsi/quad_red_2.png | Bin 0 -> 615 bytes .../Decoration/barrels.rsi/quad_toxic_1.png | Bin 0 -> 803 bytes .../Decoration/barrels.rsi/quad_waste_1.png | Bin 0 -> 796 bytes .../Decoration/barrels.rsi/quad_yellow_1.png | Bin 0 -> 566 bytes .../Decoration/barrels.rsi/red_1.png | Bin 0 -> 482 bytes .../Decoration/barrels.rsi/red_2.png | Bin 0 -> 534 bytes .../Decoration/barrels.rsi/red_3.png | Bin 0 -> 452 bytes .../Decoration/barrels.rsi/red_alt_1.png | Bin 0 -> 591 bytes .../Decoration/barrels.rsi/red_alt_2.png | Bin 0 -> 660 bytes .../Decoration/barrels.rsi/red_alt_3.png | Bin 0 -> 586 bytes .../Decoration/barrels.rsi/toxic_1.png | Bin 0 -> 593 bytes .../Decoration/barrels.rsi/toxic_2.png | Bin 0 -> 731 bytes .../Decoration/barrels.rsi/toxic_3.png | Bin 0 -> 701 bytes .../Decoration/barrels.rsi/toxic_4.png | Bin 0 -> 907 bytes .../Decoration/barrels.rsi/triple_grey_1.png | Bin 0 -> 649 bytes .../Decoration/barrels.rsi/triple_grey_2.png | Bin 0 -> 662 bytes .../Decoration/barrels.rsi/triple_grey_3.png | Bin 0 -> 694 bytes .../Decoration/barrels.rsi/triple_red_1.png | Bin 0 -> 655 bytes .../Decoration/barrels.rsi/triple_red_2.png | Bin 0 -> 665 bytes .../Decoration/barrels.rsi/triple_toxic_1.png | Bin 0 -> 860 bytes .../Decoration/barrels.rsi/triple_toxic_2.png | Bin 0 -> 923 bytes .../Decoration/barrels.rsi/triple_waste_1.png | Bin 0 -> 851 bytes .../Decoration/barrels.rsi/triple_waste_2.png | Bin 0 -> 850 bytes .../Decoration/barrels.rsi/triple_waste_3.png | Bin 0 -> 822 bytes .../barrels.rsi/triple_yellow_1.png | Bin 0 -> 666 bytes .../barrels.rsi/triple_yellow_2.png | Bin 0 -> 680 bytes .../barrels.rsi/triple_yellow_3.png | Bin 0 -> 700 bytes .../Decoration/barrels.rsi/warning_1.png | Bin 0 -> 624 bytes .../Decoration/barrels.rsi/warning_2.png | Bin 0 -> 689 bytes .../Decoration/barrels.rsi/warning_3.png | Bin 0 -> 635 bytes .../Decoration/barrels.rsi/waste_1.png | Bin 0 -> 636 bytes .../Decoration/barrels.rsi/waste_2.png | Bin 0 -> 770 bytes .../Decoration/barrels.rsi/waste_3.png | Bin 0 -> 750 bytes .../Decoration/barrels.rsi/yellow_1.png | Bin 0 -> 469 bytes .../Decoration/barrels.rsi/yellow_2.png | Bin 0 -> 521 bytes .../Decoration/barrels.rsi/yellow_3.png | Bin 0 -> 461 bytes .../cave_decor.rsi/boards_drought_ns-1.png | Bin 0 -> 478 bytes .../cave_decor.rsi/boards_drought_ns-2.png | Bin 0 -> 393 bytes .../cave_decor.rsi/boards_drought_ns-3.png | Bin 0 -> 584 bytes .../cave_decor.rsi/boards_drought_ns-4.png | Bin 0 -> 653 bytes .../cave_decor.rsi/boards_drought_ns-5.png | Bin 0 -> 552 bytes .../cave_decor.rsi/boards_drought_ns-6.png | Bin 0 -> 531 bytes .../cave_decor.rsi/boards_drought_we-1.png | Bin 0 -> 677 bytes .../cave_decor.rsi/boards_drought_we-2.png | Bin 0 -> 632 bytes .../cave_decor.rsi/boards_drought_we-3.png | Bin 0 -> 433 bytes .../cave_decor.rsi/boards_drought_we-4.png | Bin 0 -> 335 bytes .../cave_decor.rsi/boards_drought_we-5.png | Bin 0 -> 588 bytes .../cave_decor.rsi/boards_drought_we-6.png | Bin 0 -> 561 bytes .../cave_decor.rsi/boards_mammoth_ns-1.png | Bin 0 -> 508 bytes .../cave_decor.rsi/boards_mammoth_ns-2.png | Bin 0 -> 439 bytes .../cave_decor.rsi/boards_mammoth_ns-3.png | Bin 0 -> 649 bytes .../cave_decor.rsi/boards_mammoth_ns-4.png | Bin 0 -> 593 bytes .../cave_decor.rsi/boards_mammoth_ns-5.png | Bin 0 -> 650 bytes .../cave_decor.rsi/boards_mammoth_ns-6.png | Bin 0 -> 714 bytes .../cave_decor.rsi/boards_mammoth_we-1.png | Bin 0 -> 645 bytes .../cave_decor.rsi/boards_mammoth_we-2.png | Bin 0 -> 674 bytes .../cave_decor.rsi/boards_mammoth_we-3.png | Bin 0 -> 522 bytes .../cave_decor.rsi/boards_mammoth_we-4.png | Bin 0 -> 431 bytes .../cave_decor.rsi/boards_mammoth_we-5.png | Bin 0 -> 695 bytes .../cave_decor.rsi/boards_mammoth_we-6.png | Bin 0 -> 652 bytes .../Decoration/cave_decor.rsi/meta.json | 122 +++ .../cave_decor.rsi/minecart_fallen.png | Bin 0 -> 968 bytes .../Decoration/cave_decor.rsi/sign_left.png | Bin 0 -> 442 bytes .../Decoration/cave_decor.rsi/sign_right.png | Bin 0 -> 427 bytes .../Decoration/cave_decor.rsi/stalagmite.png | Bin 0 -> 708 bytes .../Decoration/cave_decor.rsi/stalagmite1.png | Bin 0 -> 546 bytes .../Decoration/cave_decor.rsi/stalagmite2.png | Bin 0 -> 721 bytes .../Decoration/cave_decor.rsi/stalagmite3.png | Bin 0 -> 694 bytes .../Decoration/cave_decor.rsi/stalagmite4.png | Bin 0 -> 595 bytes .../Decoration/cave_decor.rsi/stalagmite5.png | Bin 0 -> 564 bytes .../Decoration/cave_decor.rsi/support.png | Bin 0 -> 411 bytes .../cave_decor.rsi/support_beams.png | Bin 0 -> 358 bytes .../cave_decor.rsi/support_wall.png | Bin 0 -> 558 bytes .../cave_decor.rsi/support_wall_broken.png | Bin 0 -> 851 bytes .../rails64.rsi/junction-left-bottom.png | Bin 0 -> 2002 bytes .../rails64.rsi/junction-left-top.png | Bin 0 -> 1771 bytes .../rails64.rsi/junction-right-bottom.png | Bin 0 -> 1879 bytes .../rails64.rsi/junction-right-top.png | Bin 0 -> 1701 bytes .../Decoration/rails64.rsi/meta.json | 39 + .../Decoration/rails64.rsi/rails.png | Bin 0 -> 2057 bytes .../Decoration/rails64.rsi/turn-NE.png | Bin 0 -> 1912 bytes .../Decoration/rails64.rsi/turn-NW.png | Bin 0 -> 1902 bytes .../Decoration/rails64.rsi/turn-SE.png | Bin 0 -> 1844 bytes .../Decoration/rails64.rsi/turn-WS.png | Bin 0 -> 1891 bytes .../Decoration/signs_64x64.rsi/bazaar.png | Bin 0 -> 1641 bytes .../Decoration/signs_64x64.rsi/meta.json | 17 + .../Decoration/signs_64x64.rsi/we_open.png | Bin 0 -> 969 bytes .../Decoration/tires.rsi/junktire1.png | Bin 0 -> 895 bytes .../Decoration/tires.rsi/junktire2.png | Bin 0 -> 972 bytes .../Decoration/tires.rsi/junktire3.png | Bin 0 -> 834 bytes .../Decoration/tires.rsi/junktire4.png | Bin 0 -> 653 bytes .../Decoration/tires.rsi/junktire5.png | Bin 0 -> 1119 bytes .../Structures/Decoration/tires.rsi/meta.json | 31 + .../Decoration/torches.rsi/meta.json | 59 ++ .../Decoration/torches.rsi/torch_lit.png | Bin 0 -> 350 bytes .../Decoration/torches.rsi/torch_unlit.png | Bin 0 -> 541 bytes .../Decoration/torches.rsi/wall_torch_lit.png | Bin 0 -> 764 bytes .../torches.rsi/wall_torch_unlit.png | Bin 0 -> 664 bytes .../Decoration/world.rsi/barrels1.png | Bin 0 -> 948 bytes .../Decoration/world.rsi/barrels2.png | Bin 0 -> 1032 bytes .../Decoration/world.rsi/barrels3.png | Bin 0 -> 1060 bytes .../Decoration/world.rsi/barrels4.png | Bin 0 -> 1054 bytes .../Decoration/world.rsi/barrels5.png | Bin 0 -> 908 bytes .../Decoration/world.rsi/barrels6.png | Bin 0 -> 985 bytes .../Decoration/world.rsi/bookpile_1.png | Bin 0 -> 798 bytes .../Decoration/world.rsi/bookpile_2.png | Bin 0 -> 647 bytes .../Decoration/world.rsi/bookpile_3.png | Bin 0 -> 764 bytes .../Decoration/world.rsi/bookpile_4.png | Bin 0 -> 747 bytes .../Decoration/world.rsi/bookpile_5.png | Bin 0 -> 724 bytes .../Decoration/world.rsi/bookpile_6.png | Bin 0 -> 722 bytes .../Decoration/world.rsi/bookstack_1.png | Bin 0 -> 506 bytes .../Decoration/world.rsi/bookstack_2.png | Bin 0 -> 447 bytes .../Decoration/world.rsi/bookstack_3.png | Bin 0 -> 491 bytes .../Decoration/world.rsi/brickpile.png | Bin 0 -> 586 bytes .../Decoration/world.rsi/brickrubble.png | Bin 0 -> 2503 bytes .../Decoration/world.rsi/cardboard.png | Bin 0 -> 2683 bytes .../Decoration/world.rsi/concrete_barrier.png | Bin 0 -> 1070 bytes .../world.rsi/concrete_barrier_1.png | Bin 0 -> 1112 bytes .../world.rsi/concrete_barrier_2.png | Bin 0 -> 1298 bytes .../world.rsi/concrete_barrier_3.png | Bin 0 -> 1237 bytes .../world.rsi/concrete_barrier_4.png | Bin 0 -> 1196 bytes .../world.rsi/concrete_barrier_5.png | Bin 0 -> 1205 bytes .../world.rsi/concrete_barrier_alt.png | Bin 0 -> 1342 bytes .../world.rsi/concrete_barrier_alt_2.png | Bin 0 -> 1382 bytes .../Decoration/world.rsi/foodstuff_1.png | Bin 0 -> 783 bytes .../Decoration/world.rsi/foodstuff_2.png | Bin 0 -> 548 bytes .../Decoration/world.rsi/foodstuff_3.png | Bin 0 -> 564 bytes .../Decoration/world.rsi/foodstuff_4.png | Bin 0 -> 668 bytes .../Decoration/world.rsi/foodstuff_5.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/foodstuff_6.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/glass_1.png | Bin 0 -> 696 bytes .../Decoration/world.rsi/glass_2.png | Bin 0 -> 621 bytes .../Decoration/world.rsi/glass_3.png | Bin 0 -> 616 bytes .../Decoration/world.rsi/glass_4.png | Bin 0 -> 722 bytes .../Decoration/world.rsi/glass_5.png | Bin 0 -> 550 bytes .../Decoration/world.rsi/glass_6.png | Bin 0 -> 785 bytes .../Decoration/world.rsi/mailbox-open.png | Bin 0 -> 501 bytes .../Decoration/world.rsi/mailbox.png | Bin 0 -> 542 bytes .../Decoration/world.rsi/mailbox_old-open.png | Bin 0 -> 729 bytes .../Decoration/world.rsi/mailbox_old.png | Bin 0 -> 707 bytes .../Structures/Decoration/world.rsi/meta.json | 249 ++++++ .../Decoration/world.rsi/mine_sign.png | Bin 0 -> 667 bytes .../Decoration/world.rsi/pallet.png | Bin 0 -> 735 bytes .../Decoration/world.rsi/pallet_stack.png | Bin 0 -> 1036 bytes .../Decoration/world.rsi/papers_1.png | Bin 0 -> 1425 bytes .../Decoration/world.rsi/papers_2.png | Bin 0 -> 1788 bytes .../Decoration/world.rsi/papers_3.png | Bin 0 -> 2119 bytes .../Decoration/world.rsi/payphone.png | Bin 0 -> 1239 bytes .../Decoration/world.rsi/payphone_alt.png | Bin 0 -> 1327 bytes .../Decoration/world.rsi/phone_black.png | Bin 0 -> 339 bytes .../Decoration/world.rsi/phone_red.png | Bin 0 -> 367 bytes .../Structures/Decoration/world.rsi/pot_1.png | Bin 0 -> 321 bytes .../Structures/Decoration/world.rsi/pot_2.png | Bin 0 -> 494 bytes .../Structures/Decoration/world.rsi/pot_3.png | Bin 0 -> 449 bytes .../Structures/Decoration/world.rsi/pot_4.png | Bin 0 -> 475 bytes .../Decoration/world.rsi/scattered_papers.png | Bin 0 -> 2280 bytes .../Decoration/world.rsi/shower.png | Bin 0 -> 794 bytes .../Structures/Decoration/world.rsi/sink.png | Bin 0 -> 1241 bytes .../Decoration/world.rsi/skeleton.png | Bin 0 -> 677 bytes .../Decoration/world.rsi/toilet.png | Bin 0 -> 1267 bytes .../Decoration/world.rsi/trashbags_1.png | Bin 0 -> 623 bytes .../Decoration/world.rsi/trashbags_2.png | Bin 0 -> 771 bytes .../Decoration/world.rsi/trashbags_3.png | Bin 0 -> 685 bytes .../Decoration/world.rsi/trashbags_4.png | Bin 0 -> 617 bytes .../Decoration/world.rsi/trashbags_5.png | Bin 0 -> 569 bytes .../Decoration/world.rsi/trashbags_6.png | Bin 0 -> 546 bytes .../Decoration/world.rsi/trashbin-1.png | Bin 0 -> 524 bytes .../Decoration/world.rsi/trashbin-2.png | Bin 0 -> 496 bytes .../Decoration/world.rsi/trashbin-3.png | Bin 0 -> 435 bytes .../Decoration/world.rsi/trashbin.png | Bin 0 -> 465 bytes .../Decoration/world.rsi/woodscrap.png | Bin 0 -> 2323 bytes .../Storage/Closets/cabinet.rsi/closet.png | Bin 0 -> 540 bytes .../Closets/cabinet.rsi/closet_door.png | Bin 0 -> 483 bytes .../Closets/cabinet.rsi/closet_open.png | Bin 0 -> 254 bytes .../Storage/Closets/cabinet.rsi/meta.json | 20 + .../Storage/Closets/closet.rsi/closet.png | Bin 0 -> 5617 bytes .../Closets/closet.rsi/closet_door.png | Bin 0 -> 5682 bytes .../Closets/closet.rsi/closet_open.png | Bin 0 -> 5588 bytes .../Storage/Closets/closet.rsi/meta.json | 23 + .../Storage/Closets/closet.rsi/welded.png | Bin 0 -> 206 bytes .../Closets/closetgeneric.rsi/closet.png | Bin 0 -> 394 bytes .../Closets/closetgeneric.rsi/closet_door.png | Bin 0 -> 259 bytes .../Closets/closetgeneric.rsi/closet_open.png | Bin 0 -> 225 bytes .../Closets/closetgeneric.rsi/meta.json | 23 + .../Closets/closetgeneric.rsi/welded.png | Bin 0 -> 206 bytes .../Storage/Closets/closetgrey.rsi/closet.png | Bin 0 -> 1009 bytes .../Closets/closetgrey.rsi/closet_door.png | Bin 0 -> 793 bytes .../Closets/closetgrey.rsi/closet_open.png | Bin 0 -> 654 bytes .../Storage/Closets/closetgrey.rsi/meta.json | 23 + .../Storage/Closets/closetgrey.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/closetgrey2.rsi/closet.png | Bin 0 -> 498 bytes .../Closets/closetgrey2.rsi/closet_door.png | Bin 0 -> 548 bytes .../Closets/closetgrey2.rsi/closet_open.png | Bin 0 -> 343 bytes .../Storage/Closets/closetgrey2.rsi/meta.json | 23 + .../Closets/closetgrey2.rsi/welded.png | Bin 0 -> 386 bytes .../Storage/Closets/closetold.rsi/closet.png | Bin 0 -> 454 bytes .../Closets/closetold.rsi/closet_door.png | Bin 0 -> 516 bytes .../Closets/closetold.rsi/closet_open.png | Bin 0 -> 303 bytes .../Storage/Closets/closetold.rsi/meta.json | 23 + .../Storage/Closets/closetold.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/doublecloset.rsi/closet.png | Bin 0 -> 526 bytes .../Closets/doublecloset.rsi/closet_door.png | Bin 0 -> 583 bytes .../Closets/doublecloset.rsi/closet_open.png | Bin 0 -> 414 bytes .../Closets/doublecloset.rsi/meta.json | 23 + .../Closets/doublecloset.rsi/welded.png | Bin 0 -> 538 bytes .../Closets/fridgedirty.rsi/closet.png | Bin 0 -> 630 bytes .../Closets/fridgedirty.rsi/closet_door.png | Bin 0 -> 647 bytes .../Closets/fridgedirty.rsi/closet_open.png | Bin 0 -> 459 bytes .../Storage/Closets/fridgedirty.rsi/meta.json | 23 + .../Closets/fridgedirty.rsi/welded.png | Bin 0 -> 386 bytes .../Closets/fridgewidedirty.rsi/closet.png | Bin 0 -> 709 bytes .../fridgewidedirty.rsi/closet_door.png | Bin 0 -> 801 bytes .../fridgewidedirty.rsi/closet_open.png | Bin 0 -> 628 bytes .../Closets/fridgewidedirty.rsi/meta.json | 23 + .../Closets/fridgewidedirty.rsi/welded.png | Bin 0 -> 349 bytes .../Storage/Closets/guncabinet.rsi/closet.png | Bin 0 -> 572 bytes .../Closets/guncabinet.rsi/closet_door.png | Bin 0 -> 239 bytes .../Closets/guncabinet.rsi/closet_open.png | Bin 0 -> 332 bytes .../Storage/Closets/guncabinet.rsi/meta.json | 26 + .../Closets/guncabinet.rsi/shotgun.png | Bin 0 -> 329 bytes .../Storage/Closets/guncabinet.rsi/welded.png | Bin 0 -> 380 bytes .../Closets/medicabinet.rsi/closet.png | Bin 0 -> 306 bytes .../Closets/medicabinet.rsi/closet_door.png | Bin 0 -> 368 bytes .../Closets/medicabinet.rsi/closet_open.png | Bin 0 -> 284 bytes .../Storage/Closets/medicabinet.rsi/meta.json | 23 + .../Closets/medicabinet.rsi/welded.png | Bin 0 -> 322 bytes .../Crates/aluminiumcrate.rsi/base.png | Bin 0 -> 348 bytes .../Crates/aluminiumcrate.rsi/closed.png | Bin 0 -> 347 bytes .../Crates/aluminiumcrate.rsi/icon.png | Bin 0 -> 557 bytes .../Crates/aluminiumcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Crates/aluminiumcrate.rsi/meta.json | 29 + .../Crates/aluminiumcrate.rsi/open.png | Bin 0 -> 339 bytes .../Crates/aluminiumcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/armycrate.rsi/base.png | Bin 0 -> 415 bytes .../Storage/Crates/armycrate.rsi/closed.png | Bin 0 -> 610 bytes .../Storage/Crates/armycrate.rsi/icon.png | Bin 0 -> 710 bytes .../Storage/Crates/armycrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/armycrate.rsi/meta.json | 29 + .../Storage/Crates/armycrate.rsi/open.png | Bin 0 -> 364 bytes .../Storage/Crates/armycrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/cashregister.rsi/meta.json | 19 + .../cashregister.rsi/register_clean.png | Bin 0 -> 1320 bytes .../cashregister.rsi/register_cleanopen.png | Bin 0 -> 1187 bytes .../Crates/cashregisterbloody.rsi/meta.json | 19 + .../cashregisterbloody.rsi/register.png | Bin 0 -> 3520 bytes .../cashregisterbloody.rsi/registeropen.png | Bin 0 -> 3545 bytes .../Storage/Crates/cratemilitary.rsi/base.png | Bin 0 -> 445 bytes .../Crates/cratemilitary.rsi/closed.png | Bin 0 -> 394 bytes .../Storage/Crates/cratemilitary.rsi/icon.png | Bin 0 -> 478 bytes .../Crates/cratemilitary.rsi/meta.json | 23 + .../Storage/Crates/cratemilitary.rsi/open.png | Bin 0 -> 329 bytes .../Storage/Crates/cratewooden.rsi/base.png | Bin 0 -> 311 bytes .../Storage/Crates/cratewooden.rsi/closed.png | Bin 0 -> 312 bytes .../Storage/Crates/cratewooden.rsi/icon.png | Bin 0 -> 329 bytes .../Storage/Crates/cratewooden.rsi/meta.json | 23 + .../Storage/Crates/cratewooden.rsi/open.png | Bin 0 -> 329 bytes .../Storage/Crates/footlocker.rsi/base.png | Bin 0 -> 328 bytes .../Storage/Crates/footlocker.rsi/closed.png | Bin 0 -> 207 bytes .../Storage/Crates/footlocker.rsi/icon.png | Bin 0 -> 315 bytes .../Storage/Crates/footlocker.rsi/meta.json | 26 + .../Storage/Crates/footlocker.rsi/open.png | Bin 0 -> 227 bytes .../Storage/Crates/footlocker.rsi/welded.png | Bin 0 -> 285 bytes .../Storage/Crates/freezer.rsi/base.png | Bin 720 -> 419 bytes .../Storage/Crates/freezer.rsi/closed.png | Bin 186 -> 273 bytes .../Storage/Crates/freezer.rsi/icon.png | Bin 275 -> 455 bytes .../Storage/Crates/freezer.rsi/open.png | Bin 251 -> 279 bytes .../Storage/Crates/medicalcrate.rsi/base.png | Bin 0 -> 488 bytes .../Crates/medicalcrate.rsi/closed.png | Bin 0 -> 406 bytes .../Storage/Crates/medicalcrate.rsi/icon.png | Bin 0 -> 513 bytes .../Storage/Crates/medicalcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/medicalcrate.rsi/meta.json | 29 + .../Storage/Crates/medicalcrate.rsi/open.png | Bin 0 -> 224 bytes .../Crates/medicalcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/redcrate.rsi/base.png | Bin 0 -> 398 bytes .../Storage/Crates/redcrate.rsi/closed.png | Bin 0 -> 549 bytes .../Storage/Crates/redcrate.rsi/icon.png | Bin 0 -> 644 bytes .../Storage/Crates/redcrate.rsi/lock.png | Bin 0 -> 229 bytes .../Storage/Crates/redcrate.rsi/meta.json | 29 + .../Storage/Crates/redcrate.rsi/open.png | Bin 0 -> 347 bytes .../Storage/Crates/redcrate.rsi/welded.png | Bin 0 -> 283 bytes .../Storage/Crates/trashbin.rsi/base.png | Bin 0 -> 700 bytes .../Storage/Crates/trashbin.rsi/closed.png | Bin 0 -> 433 bytes .../Storage/Crates/trashbin.rsi/icon.png | Bin 0 -> 736 bytes .../Storage/Crates/trashbin.rsi/meta.json | 23 + .../Storage/Crates/trashbin.rsi/open.png | Bin 0 -> 491 bytes .../Storage/Crates/trashcart.rsi/base.png | Bin 378 -> 585 bytes .../Storage/Crates/trashcart.rsi/closed.png | Bin 262 -> 273 bytes .../Storage/Crates/trashcart.rsi/icon.png | Bin 380 -> 584 bytes .../Storage/Crates/trashcart.rsi/open.png | Bin 233 -> 215 bytes .../Storage/Crates/trashcart.rsi/welded.png | Bin 270 -> 690 bytes .../Crates/woodencrates.rsi/army_crate-1.png | Bin 0 -> 617 bytes .../Crates/woodencrates.rsi/army_crate-2.png | Bin 0 -> 632 bytes .../Crates/woodencrates.rsi/army_crate.png | Bin 0 -> 597 bytes .../Storage/Crates/woodencrates.rsi/meta.json | 35 + .../Crates/woodencrates.rsi/plain_crate-1.png | Bin 0 -> 533 bytes .../Crates/woodencrates.rsi/plain_crate-2.png | Bin 0 -> 530 bytes .../Crates/woodencrates.rsi/plain_crate-3.png | Bin 0 -> 559 bytes .../Crates/woodencrates.rsi/plain_crate.png | Bin 0 -> 473 bytes .../Crates/woodencrates.rsi/wood_crate.png | Bin 0 -> 872 bytes .../woodenfootlocker.rsi/footlocker_wood.png | Bin 0 -> 1772 bytes .../footlocker_woodopen.png | Bin 0 -> 1850 bytes .../Crates/woodenfootlocker.rsi/meta.json | 19 + .../Storage/Furniture/safe.rsi/closet.png | Bin 0 -> 449 bytes .../Furniture/safe.rsi/closet_door.png | Bin 0 -> 315 bytes .../Furniture/safe.rsi/closet_open.png | Bin 0 -> 349 bytes .../Storage/Furniture/safe.rsi/meta.json | 23 + .../Storage/Furniture/safe.rsi/welded.png | Bin 0 -> 289 bytes .../Furniture/safespinner.rsi/closet.png | Bin 0 -> 431 bytes .../Furniture/safespinner.rsi/closet_door.png | Bin 0 -> 485 bytes .../Furniture/safespinner.rsi/closet_open.png | Bin 0 -> 387 bytes .../Furniture/safespinner.rsi/meta.json | 23 + .../Furniture/safespinner.rsi/welded.png | Bin 0 -> 289 bytes .../Furniture/washingmachine.rsi/generic.png | Bin 0 -> 1090 bytes .../washingmachine.rsi/generic_door.png | Bin 0 -> 1082 bytes .../washingmachine.rsi/generic_on.png | Bin 0 -> 1489 bytes .../washingmachine.rsi/generic_open.png | Bin 0 -> 626 bytes .../Furniture/washingmachine.rsi/meta.json | 43 ++ .../washingmachine_industrial.rsi/generic.png | Bin 0 -> 1015 bytes .../generic_door.png | Bin 0 -> 993 bytes .../generic_on.png | Bin 0 -> 1183 bytes .../generic_open.png | Bin 0 -> 702 bytes .../washingmachine_industrial.rsi/meta.json | 43 ++ .../Storage/barrels.rsi/black-closed.png | Bin 0 -> 359 bytes .../Storage/barrels.rsi/black-full.png | Bin 0 -> 365 bytes .../Storage/barrels.rsi/black-open.png | Bin 0 -> 357 bytes .../Storage/barrels.rsi/blue-closed.png | Bin 0 -> 327 bytes .../Storage/barrels.rsi/blue-open.png | Bin 0 -> 325 bytes .../Structures/Storage/barrels.rsi/meta.json | 44 ++ .../Storage/barrels.rsi/red-closed.png | Bin 0 -> 330 bytes .../Storage/barrels.rsi/red-full.png | Bin 0 -> 351 bytes .../Storage/barrels.rsi/red-open.png | Bin 0 -> 328 bytes .../Storage/barrels.rsi/yellow-closed.png | Bin 0 -> 327 bytes .../Storage/barrels.rsi/yellow-full.png | Bin 0 -> 347 bytes .../Storage/barrels.rsi/yellow-open.png | Bin 0 -> 326 bytes .../Storage/burningbarrel.rsi/burnbarrel.png | Bin 0 -> 737 bytes .../burningbarrel.rsi/burnbarrel_lit.png | Bin 0 -> 2189 bytes .../Storage/burningbarrel.rsi/meta.json | 51 ++ .../Storage/storage.rsi/firstaid.png | Bin 0 -> 305 bytes .../Storage/storage.rsi/firstaid_door.png | Bin 0 -> 326 bytes .../Storage/storage.rsi/firstaid_open.png | Bin 0 -> 312 bytes .../Structures/Storage/storage.rsi/fridge.png | Bin 0 -> 445 bytes .../Storage/storage.rsi/fridge_door.png | Bin 0 -> 356 bytes .../Storage/storage.rsi/fridge_open.png | Bin 0 -> 358 bytes .../Structures/Storage/storage.rsi/locker.png | Bin 0 -> 376 bytes .../Storage/storage.rsi/locker_door.png | Bin 0 -> 356 bytes .../Storage/storage.rsi/locker_loot.png | Bin 0 -> 337 bytes .../Storage/storage.rsi/locker_open.png | Bin 0 -> 349 bytes .../Structures/Storage/storage.rsi/meta.json | 65 ++ .../Storage/storage.rsi/safe_wall-open.png | Bin 0 -> 463 bytes .../Storage/storage.rsi/safe_wall.png | Bin 0 -> 378 bytes .../Storage/storage.rsi/toolbox.png | Bin 0 -> 415 bytes .../Storage/storage.rsi/toolbox_loot.png | Bin 0 -> 306 bytes .../Storage/storage.rsi/toolbox_open.png | Bin 0 -> 432 bytes .../Storage/storage.rsi/vent-damaged.png | Bin 0 -> 261 bytes .../Storage/storage.rsi/vent-open.png | Bin 0 -> 225 bytes .../Structures/Storage/storage.rsi/vent.png | Bin 0 -> 221 bytes .../tanksx64.rsi/chemical_container.png | Bin 0 -> 1389 bytes .../chemical_container_broken.png | Bin 0 -> 1670 bytes .../Storage/tanksx64.rsi/largetank.png | Bin 0 -> 1272 bytes .../tanksx64.rsi/largetank_chemical.png | Bin 0 -> 1390 bytes .../tanksx64.rsi/largetank_chemical_huge.png | Bin 0 -> 1476 bytes .../Storage/tanksx64.rsi/largetank_pipe.png | Bin 0 -> 1453 bytes .../Structures/Storage/tanksx64.rsi/meta.json | 29 + .../Wallmounts/hydrant.rsi/closed.png | Bin 0 -> 534 bytes .../Wallmounts/hydrant.rsi/frame.png | Bin 0 -> 419 bytes .../Wallmounts/hydrant.rsi/meta.json | 20 + .../Wallmounts/hydrant.rsi/open.png | Bin 0 -> 257 bytes .../Wallmounts/hydrantold.rsi/closed.png | Bin 0 -> 521 bytes .../Wallmounts/hydrantold.rsi/frame.png | Bin 0 -> 408 bytes .../Wallmounts/hydrantold.rsi/meta.json | 20 + .../Wallmounts/hydrantold.rsi/open.png | Bin 0 -> 253 bytes .../Wallmounts/lightbulbcaged.rsi/base.png | Bin 0 -> 713 bytes .../Wallmounts/lightbulbcaged.rsi/broken.png | Bin 0 -> 745 bytes .../Wallmounts/lightbulbcaged.rsi/burned.png | Bin 0 -> 775 bytes .../Wallmounts/lightbulbcaged.rsi/empty.png | Bin 0 -> 411 bytes .../Wallmounts/lightbulbcaged.rsi/glow.png | Bin 0 -> 504 bytes .../Wallmounts/lightbulbcaged.rsi/meta.json | 31 + .../Wallmounts/noticeboard.rsi/meta.json | 60 +- .../noticeboard.rsi/noticeboard.png | Bin 353 -> 188 bytes .../Wallmounts/signs_32x32.rsi/bar.png | Bin 0 -> 341 bytes .../Wallmounts/signs_32x32.rsi/clinic.png | Bin 0 -> 605 bytes .../Wallmounts/signs_32x32.rsi/meta.json | 48 ++ .../Wallmounts/signs_32x32.rsi/open.png | Bin 0 -> 334 bytes .../Wallmounts/signs_32x32.rsi/open_bar.png | Bin 0 -> 308 bytes .../signs_32x32.rsi/open_bar_on.png | Bin 0 -> 562 bytes .../Wallmounts/signs_32x32.rsi/open_on.png | Bin 0 -> 634 bytes .../Wallmounts/signs_32x32.rsi/rent.png | Bin 0 -> 340 bytes .../Wallmounts/signs_64x32.rsi/bazaar_on.png | Bin 0 -> 366 bytes .../Wallmounts/signs_64x32.rsi/hotel.png | Bin 0 -> 388 bytes .../Wallmounts/signs_64x32.rsi/meta.json | 26 + .../Wallmounts/signs_64x32.rsi/private.png | Bin 0 -> 493 bytes .../signs_64x32.rsi/we_open_open.png | Bin 0 -> 741 bytes .../Wallmounts/signs_64x32.rsi/workers.png | Bin 0 -> 612 bytes .../Structures/Wallmounts/vdu.rsi/VDU.png | Bin 0 -> 1205 bytes .../Wallmounts/vdu.rsi/keyboard.png | Bin 0 -> 278 bytes .../Structures/Wallmounts/vdu.rsi/meta.json | 57 ++ .../Structures/Wallmounts/vdu.rsi/screen.png | Bin 0 -> 1305 bytes .../Wallmounts/walldecor.rsi/calendar.png | Bin 0 -> 358 bytes .../walldecor.rsi/calendar_blank.png | Bin 0 -> 284 bytes .../Wallmounts/walldecor.rsi/clock.png | Bin 0 -> 470 bytes .../Wallmounts/walldecor.rsi/cross.png | Bin 0 -> 274 bytes .../Wallmounts/walldecor.rsi/danger_sign.png | Bin 0 -> 370 bytes .../Wallmounts/walldecor.rsi/exit.png | Bin 0 -> 546 bytes .../Wallmounts/walldecor.rsi/meta.json | 44 ++ .../Wallmounts/walldecor.rsi/notice_sign.png | Bin 0 -> 305 bytes .../Wallmounts/walldecor.rsi/wallscreen.png | Bin 0 -> 1312 bytes .../walldecor.rsi/wanted_poster.png | Bin 0 -> 500 bytes .../walldecor.rsi/wanted_poster_goose.png | Bin 0 -> 506 bytes Resources/keybinds.yml | 3 - 448 files changed, 4100 insertions(+), 33 deletions(-) create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/rails.yml create mode 100644 Resources/Prototypes/Entities/Structures/Decoration/torches.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/barrels.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/closets.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/crates.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/furniture.yml create mode 100644 Resources/Prototypes/Entities/Structures/Storage/tanks.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/signs.yml create mode 100644 Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/grey_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/quad_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png create mode 100644 Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/minecart_fallen.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_left.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_right.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite3.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png create mode 100644 Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-bottom.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-top.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/rails.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-NE.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-NW.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png create mode 100644 Resources/Textures/Structures/Decoration/rails64.rsi/turn-WS.png create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/bazaar.png create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/junktire5.png create mode 100644 Resources/Textures/Structures/Decoration/tires.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/torch_unlit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png create mode 100644 Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_unlit.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/barrels6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookpile_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/brickpile.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/cardboard.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/glass_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox_old-open.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/meta.json create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pallet.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/papers_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/payphone.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/phone_black.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/phone_red.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/pot_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/shower.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/sink.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/skeleton.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/toilet.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbags_6.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-2.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin-3.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/trashbin.png create mode 100644 Resources/Textures/Structures/Decoration/world.rsi/woodscrap.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/cabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/shotgun.png create mode 100644 Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_cleanopen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/register.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/registeropen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/lock.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/closed.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/trashbin.rsi/open.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-1.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-2.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/wood_crate.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_wood.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_woodopen.png create mode 100644 Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_on.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_door.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_open.png create mode 100644 Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/black-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/red-open.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png create mode 100644 Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel_lit.png create mode 100644 Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_door.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_loot.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/locker_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/meta.json create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/safe_wall-open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox_loot.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent-damaged.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent-open.png create mode 100644 Resources/Textures/Structures/Storage/storage.rsi/vent.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container_broken.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png create mode 100644 Resources/Textures/Structures/Storage/tanksx64.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/closed.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/closed.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/hydrantold.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/broken.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/empty.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png create mode 100644 Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/bar.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/rent.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/we_open_open.png create mode 100644 Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/workers.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/VDU.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/keyboard.png create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/clock.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/cross.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/danger_sign.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/exit.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster.png create mode 100644 Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster_goose.png diff --git a/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml new file mode 100644 index 00000000000..2ed9c186eeb --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml @@ -0,0 +1,720 @@ +- type: entity + id: DecorFloorBase + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/cave_decor.rsi + netsync: false + noRot: true + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + - type: InteractionOutline +# No fixture on this base, inherit from further down for fixture + +# Cave Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard1 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard2 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard3 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard4 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard5 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard6 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard7 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard8 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard9 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard10 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard11 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard12 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard13 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard14 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard15 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard16 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard17 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard18 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard19 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard20 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard21 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard22 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard23 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard24 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorStalagmite1 + name: stalagmite + description: Pointy rocks! Mites go up, tites come... + components: + - type: Sprite + state: stalagmite + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite2 + components: + - type: Sprite + state: stalagmite1 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite3 + components: + - type: Sprite + state: stalagmite2 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite4 + components: + - type: Sprite + state: stalagmite3 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite5 + components: + - type: Sprite + state: stalagmite4 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite6 + components: + - type: Sprite + state: stalagmite5 + +- type: entity + parent: DecorStalagmite1 + id: DecorMinecart + name: minecrart + description: It seems to have fallen over... + components: + - type: Sprite + state: minecart_fallen + +- type: entity + parent: DecorFloorBase + id: DecorSignLeftMine + name: sign + description: A sign, for a mine, pointing li...left + components: + - type: Sprite + state: sign_left + +- type: entity + parent: DecorFloorBase + id: DecorSignRightMine + name: sign + description: A sign, pointing right. + components: + - type: Sprite + state: sign_right + +# World Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorWorldBase + abstract: true + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper + name: scattered paper + description: A mess of papers + suffix: 8 states + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + state: scattered_papers + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper1 + suffix: 4 states + name: scattered paper + description: A mess of papers + components: + - type: Sprite + state: papers_1 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper2 + components: + - type: Sprite + state: papers_2 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper3 + components: + - type: Sprite + state: papers_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorScrapwood + name: wood scraps + description: wood scraps + suffix: 6 states + components: + - type: Sprite + state: woodscrap + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBrickrubble + name: brick rubble + description: brick rubble + suffix: "6 states" + components: + - type: Sprite + state: brickrubble + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorCardboard + name: cardboard boxes + description: cardboard scrap boxes + suffix: "6 states" + components: + - type: Sprite + state: cardboard + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPallet + name: pallet + description: a wooden pallet. + suffix: "2 states" + components: + - type: Sprite + state: pallet + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPalletStack + name: pallet stack + description: a stack of wooden pallets + suffix: "2 states" + components: + - type: Sprite + state: pallet_stack + # add destruction drop for materials + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorPalletStack + id: DecorFloorBrickStack + name: brick stack + description: a neat stack of bricks + components: + - type: Sprite + state: brickpile + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookstack1 + name: book stack + description: a stack of books + components: + - type: Sprite + state: bookstack_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack2 + components: + - type: Sprite + state: bookstack_2 + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack3 + components: + - type: Sprite + state: bookstack_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookPile1 + name: book pile + description: a pile of books + components: + - type: Sprite + state: bookpile_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile2 + components: + - type: Sprite + state: bookpile_2 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile3 + components: + - type: Sprite + state: bookpile_3 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile4 + components: + - type: Sprite + state: bookpile_4 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile5 + components: + - type: Sprite + state: bookpile_5 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile6 + components: + - type: Sprite + state: bookpile_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorFood1 + name: food stuff + description: some old food stuff + components: + - type: Sprite + state: foodstuff_1 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood2 + components: + - type: Sprite + state: foodstuff_2 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood3 + components: + - type: Sprite + state: foodstuff_3 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood4 + components: + - type: Sprite + state: foodstuff_4 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood5 + components: + - type: Sprite + state: foodstuff_5 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood6 + components: + - type: Sprite + state: foodstuff_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorTrashbags1 + name: trash bags + description: some old trash bags + components: + - type: Sprite + state: trashbags_1 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags2 + components: + - type: Sprite + state: trashbags_2 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags3 + components: + - type: Sprite + state: trashbags_3 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags4 + components: + - type: Sprite + state: trashbags_4 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags5 + components: + - type: Sprite + state: trashbags_5 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags6 + components: + - type: Sprite + state: trashbags_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorGlass1 + name: glass bottles + description: some old glass scraps + components: + - type: Sprite + state: glass_1 + # add glass shard destruction + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass2 + components: + - type: Sprite + state: glass_2 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass3 + components: + - type: Sprite + state: glass_3 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass4 + components: + - type: Sprite + state: glass_4 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass5 + components: + - type: Sprite + state: glass_5 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass6 + components: + - type: Sprite + state: glass_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorSignMines + name: mines + description: danger of mines and death... + components: + - type: Sprite + state: mine_sign + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorSkeleton + name: skeleton + description: looks a little worse for wear + components: + - type: Sprite + state: skeleton + +- type: entity + parent: DecorFloorWorldBase + id: DecorBarrels + name: barrels + description: a bunch of old rusty barrels. + components: + - type: Sprite + layers: + - state: barrels1 + map: [ "body" ] + - type: RandomSprite + available: + - body: + barrels1: "" + barrels2: "" + barrels3: "" + barrels4: "" + barrels5: "" + barrels6: "" + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.3 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorSkeleton + id: DecorFloorSkeletonOver + suffix: draws over objects + components: + - type: Sprite + drawdepth: Mobs diff --git a/Resources/Prototypes/Entities/Structures/Decoration/rails.yml b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml new file mode 100644 index 00000000000..a41b474622a --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml @@ -0,0 +1,95 @@ +- type: entity + id: Rails + name: railway + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/rails64.rsi + state: rails + netsync: false + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + +- type: entity + parent: Rails + id: RailsJunctionRightTop + suffix: junction right top + components: + - type: Sprite + state: junction-right-top + +- type: entity + parent: Rails + id: RailsJunctionLeftTop + suffix: junction left top + components: + - type: Sprite + state: junction-left-top + +- type: entity + parent: Rails + id: RailsJunctionRightBottom + suffix: junction right bottom + components: + - type: Sprite + state: junction-right-bottom + +- type: entity + parent: Rails + id: RailsJunctionLeftBottom + suffix: junction left bottom + components: + - type: Sprite + state: junction-left-bottom + +- type: entity + parent: Rails + id: RailsTurnWS + suffix: turn west-south + components: + - type: Sprite + state: turn-WS + +- type: entity + parent: Rails + id: RailsTurnNW + suffix: turn north-west + components: + - type: Sprite + state: turn-NW + +- type: entity + parent: Rails + id: RailsTurnNE + suffix: turn north-east + components: + - type: Sprite + state: turn-NE + +- type: entity + parent: Rails + id: RailsTurnSE + suffix: turn south-east + components: + - type: Sprite + state: turn-SE diff --git a/Resources/Prototypes/Entities/Structures/Decoration/torches.yml b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml new file mode 100644 index 00000000000..1646ec9f707 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml @@ -0,0 +1,73 @@ +- type: entity + id: Torch2 + name: torch + suffix: floor + description: A flaming torch for lighting an area. + placement: + mode: SnapgridCenter + components: + - type: Transform + anchored: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: Static + canCollide: false + - type: Sprite + netsync: false + noRot: true + sprite: Structures/Decoration/torches.rsi + state: torch_unlit + - type: Appearance + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + - type: ExtinguishOnInteract + extinguishAttemptSound: + path: /Audio/Items/candle_blowing.ogg + params: + variation: 0.05 + volume: 10 + - type: UseDelay + - type: Flammable + fireSpread: false + canResistFire: false + alwaysCombustible: true + canExtinguish: true + firestacksOnIgnite: 3.0 + firestackFade: -0.01 + damage: + types: + Heat: 0.1 + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: torch_lit + - type: Damageable + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: ToggleableLightVisuals + spriteLayer: null + - type: PointLight + color: "#e39c40" + radius: 5 + power: 16 + +- type: entity + parent: Torch2 + id: TorchWall + suffix: wall + components: + - type: Sprite + noRot: false + state: wall_torch_unlit + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: wall_torch_lit diff --git a/Resources/Prototypes/Entities/Structures/Storage/barrels.yml b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml new file mode 100644 index 00000000000..0cbbb2ede8b --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml @@ -0,0 +1,287 @@ +# Barrels +# Base +- type: entity + parent: BaseStructureDynamic + id: BaseBarrel + name: barrel + description: This barrel looks like it could contain something. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.45" + density: 50 + mask: + - MachineMask + layer: + - WallLayer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + +# Base Open +- type: entity + parent: BaseBarrel + id: BaseBarrelOpen + suffix: open + categories: [ HideSpawnMenu ] + components: + - type: SolutionContainerManager + solutions: + barrel: + maxVol: 500 + - type: DrainableSolution + solution: barrel + - type: ReagentTank + +# Closed +- type: entity + parent: BaseBarrel + id: BlackBarrel + name: black barrel + description: A worn out black barrel. The label is torn off. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-closed + +- type: entity + parent: BaseBarrel + id: BlueBarrel + name: blue barrel + description: A blue barrel with a warning sign of. Maybe it contains water? + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + +- type: entity + parent: BaseBarrel + id: RedBarrel + name: red barrel + description: A red barrel with an explosive warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-closed + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: BaseBarrel + id: YellowBarrel + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-closed + - type: RadiationSource + intensity: 2 + slope: 1 + +# Open +- type: entity + parent: BaseBarrelOpen + id: BlackBarrelOpen + suffix: open + name: black barrel + description: A worn out black barrel. The label is torn off. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-open + +- type: entity + parent: BaseBarrelOpen + id: BlueBarrelOpen + suffix: open + name: blue barrel + description: A blue barrel with a warning sign of. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-open + +- type: entity + parent: BaseBarrelOpen + id: RedBarrelOpen + suffix: open + name: red barrel + description: A red barrel with an explosive warning sign on. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-open + +- type: entity + parent: BaseBarrelOpen + id: YellowBarrelOpen + suffix: open + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. The lid is off and you can see inside but it still makes you twitch. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-open + - type: RadiationSource + intensity: 1 + slope: 1 + +# Full barrels +- type: entity + parent: BlackBarrelOpen + id: BlackBarrelFull + suffix: full + description: A worn out black barrel. This one looks full of some dark liquid. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-full + # TODO - fill with some sort of waste product? Maybe just dirty water. + +- type: entity + parent: RedBarrelOpen + id: RedBarrelFull + suffix: full + description: A red barrel with an explosive warning sign on. It has a golden liquid inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-full + - type: SolutionContainerManager + solutions: + barrel: + reagents: + - ReagentId: WeldingFuel + Quantity: 500 + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: YellowBarrelOpen + id: YellowBarrelFull + suffix: full + description: A yellow barrel with a radiation warning sign on. You can see the glowing goo bubble. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-full + - type: RadiationSource + intensity: 3 + slope: 1 + - type: PointLight + netsync: false + radius: 1.5 + energy: 1.6 + color: "#3db83b" + castShadows: false + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1000 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + # TODO - fill with some sort of radioactive waste reagent. + +# Burning Barrels +- type: entity + parent: BaseStructureDynamic + id: BurningBarrel + name: burnt barrel + description: This barrel looks like it once contained a fire. + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 50 + mask: + - MachineMask + layer: + - MidImpassable + - LowImpassable + +- type: entity + parent: BurningBarrel + id: BurningBarrelLit + name: burning barrel + description: This barrel is smoldering. Toasty + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel_lit + netsync: false + - type: PointLight + color: "#E25822" + radius: 1.0 + energy: 5.0 + netsync: false + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour # immediately make it bright and flickery + id: burnbarrel_lit + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 6.0 + endValue: 9.0 + property: Energy + isLooped: true diff --git a/Resources/Prototypes/Entities/Structures/Storage/closets.yml b/Resources/Prototypes/Entities/Structures/Storage/closets.yml new file mode 100644 index 00000000000..394840caf48 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/closets.yml @@ -0,0 +1,228 @@ +# TODO:RESET:TIMEDSTORAGEFILL + +# Metal Closets +- type: entity + parent: ClosetBase + id: ClosetBase2 + abstract: true + components: + - type: Sprite + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + - type: Transform + anchored: true + noRot: true + - type: Physics + bodyType: Static + - type: Anchorable # Makes the anchoring near impossible due to high time requirement + delay: 3600 + +- type: entity + parent: ClosetBase2 + id: ClosetBaseW + name: closet + description: A basic closet for storing things. + components: + - type: Weldable + - type: Sprite + noRot: true + netsync: false + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + + +- type: entity + parent: ClosetBaseW + id: ClosetGrey1 + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey.rsi + - type: Weldable + +- type: entity + id: ClosetGrey2 + parent: ClosetBaseW + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey2.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetRusty + name: rusty closet + description: A rusty old closet for storing things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetold.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetGunCabinet + name: gun cabinet + description: A secure cabinet for storing guns. + components: + - type: Sprite + sprite: Structures/Storage/Closets/guncabinet.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeWideDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgewidedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetDouble + name: double closet + description: A double closet for holding twice the things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/doublecloset.rsi + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.15,-0.45,0.45,0.45" + density: 145 + mask: + - MachineMask + layer: + - MachineLayer + +# Wooden Closets + +- type: entity + parent: ClosetBase2 + id: ClosetCabinetWood + name: cabinet + description: An old pre-war wooden cabinet. + components: + - type: Sprite + sprite: Structures/Storage/Closets/cabinet.rsi + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Tag + tags: + - Wooden + +- type: entity + parent: ClosetBaseW + id: ClosetGeneric + suffix: generic roller + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgeneric.rsi + +# Wallmounted Closets +- type: entity + id: ClosetWallMedicabinet + placement: + mode: SnapgridCenter + name: medicabinet + description: A medicabinet mounted on the wall. + components: + - type: InteractionOutline + - type: Clickable + - type: ResistLocker + - type: Weldable + - type: WallMount + arc: 180 + - type: Transform + noRot: false + - type: Sprite + drawdepth: WallMountedItems + netsync: false + noRot: false + sprite: Structures/Storage/Closets/medicabinet.rsi + layers: + - state: closet + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorage + isCollidableWhenOpen: true + enteringOffset: 0, -0.75 + closeSound: + path: /Audio/Items/deconstruct.ogg + openSound: + path: /Audio/Items/deconstruct.ogg + - type: ContainerContainer + containers: + entity_storage: !type:Container + ents: [] + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 150 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 diff --git a/Resources/Prototypes/Entities/Structures/Storage/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/crates.yml new file mode 100644 index 00000000000..e6292912b09 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/crates.yml @@ -0,0 +1,227 @@ +- type: entity + parent: CrateGenericSteel + id: CrateFootlocker + name: footlocker + description: A footlocker for someones equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Sprite + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Reflect + reflects: + - Energy + reflectProb: 0.2 + spread: 90 + +- type: entity + parent: CrateGenericSteel + id: CrateAluminium + name: aluminium crate + description: An aluminium crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateArmy + name: army crate + description: A crate with a US Army star on. + components: + - type: Icon + sprite: Structures/Storage/Crates/armycrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/armycrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateMedical2 + name: medical crate + description: A metal crate for storing medical equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/medicalcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/medicalcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateRed + name: red crate + description: A faded red crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/redcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/redcrate.rsi + +- type: entity + parent: CrateGeneric + id: Trashbin + name: trash bin + description: A trash bin for putting rubbish in. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashbin.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashbin.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + +- type: entity + parent: CrateFootlocker + id: CrateTrashcart + name: trash cart + description: A trash cart for transporting waste. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashcart.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashcart.rsi + - type: TileFrictionModifier + modifier: 0.4 + +- type: entity + parent: CrateGeneric + id: CrateFreezer2 + name: freezer + description: A freezer for keeping things cool. + components: + - type: Icon + sprite: Structures/Storage/Crates/freezer.rsi + - type: Sprite + sprite: Structures/Storage/Crates/freezer.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: AntiRottingContainer + +# Wooden +- type: entity + parent: CrateGeneric + id: CrateWooden + name: wooden crate + components: + - type: Icon + sprite: Structures/Storage/Crates/cratewooden.rsi + state: icon + - type: Sprite + sprite: Structures/Storage/Crates/cratewooden.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.29" + density: 50 + mask: + - SmallMobMask #this is so they can go under plastic flaps + layer: + - MachineLayer + +- type: entity + parent: CrateWooden + id: CrateMilitary + name: military crate + description: An old wooden crate. Looks like it might have some supplies in. + components: + - type: Icon + sprite: Structures/Storage/Crates/cratemilitary.rsi + - type: Sprite + sprite: Structures/Storage/Crates/cratemilitary.rsi + +# Breakable Crates (deconstruct or destroy) +- type: entity + parent: BaseStructureDynamic + id: CrateBreakBase + name: wooden crate + description: A wooden crate for storage. + abstract: true + components: + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 75 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:EmptyAllContainersBehaviour + - type: Sprite + sprite: Structures/Storage/Crates/woodencrates.rsi + - type: Storage + grid: + - 0,0,6,3 + maxItemSize: Huge + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + +- type: entity + parent: CrateBreakBase + id: CrateBreakWood + suffix: wood + components: + - type: Sprite + state: wood_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlain + suffix: plain + components: + - type: Sprite + state: plain_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlainDamaged + suffix: plain damaged + components: + - type: Sprite + state: plain_crate-1 # TODO: Make this random between states -1, -2 and -3 + +- type: entity + parent: CrateBreakBase + id: CrateBreakArmy + name: army crate + components: + - type: Sprite + state: army_crate + +- type: entity + parent: CrateBreakArmy + id: CrateBreakArmyDamaged + suffix: damaged + components: + - type: Sprite + state: army_crate-1 # TODO: Make this random between states -1 and -2 diff --git a/Resources/Prototypes/Entities/Structures/Storage/furniture.yml b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml new file mode 100644 index 00000000000..6ea2a5e5649 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml @@ -0,0 +1,49 @@ +# Washing Machines +- type: entity + parent: ClosetBase + id: FurnitureWashingmachine + name: washing machine + description: wishy washy. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine.rsi + layers: + - state: generic + map: ["enum.StorageVisualLayers.Base"] + - state: generic_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: generic + stateDoorOpen: generic_open + stateDoorClosed: generic_door + - type: Transform + anchored: true + noRot: false + - type: Physics + bodyType: Static + +- type: entity + parent: FurnitureWashingmachine + id: FurnitureWashingmachineIndustrial + suffix: Industrial + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine_industrial.rsi + +# Safes +- type: entity + parent: ClosetBaseW + id: ClosetSafe + name: safe + description: Might be filled with valuables. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safe.rsi + +- type: entity + parent: ClosetSafe + id: ClosetSafeSpinner + suffix: spinner + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safespinner.rsi diff --git a/Resources/Prototypes/Entities/Structures/Storage/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml new file mode 100644 index 00000000000..41038fb74d1 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml @@ -0,0 +1,182 @@ +# :TODO: Add the destroyed versions of these as a destruction spawn. + +- type: entity + parent: BaseStructure + id: StorageTankBase + name: storage tank + description: A liquids storage tank. + abstract: true + components: + - type: Sprite + noRot: true + - type: InteractionOutline + - type: Physics + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:SpillBehavior + solution: tank + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + - type: SolutionContainerManager + solutions: + tank: + maxVol: 1500 + - type: DrainableSolution + solution: tank + - type: ReagentTank + - type: Transform + noRot: true + +# In use +- type: entity + id: StorageTankWide + parent: StorageTankBase + name: fuel tank + description: A fuel tank. It's used to store high amounts of fuel. + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: chemical_container + # - state: chemical_container + # map: ["enum.SolutionContainerLayers.Fill"] + # visible: false + - type: Appearance + # - type: SolutionContainerVisuals + # maxFillLevels: 3 + # fillBaseName: fueltank-2- + - type: ExaminableSolution + solution: tank + - type: ReagentTank + tankType: Fuel + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: PacifismDangerousAttack + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.5,0.9,0.2" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + parent: StorageTankWide + id: StorageTankWideFullFuel + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 + + +- type: entity + parent: StorageTankWide + id: StorageTank2 + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.7,-0.1,0.4" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankFullFuel + parent: StorageTank2 + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 1500 + +- type: entity + id: StorageTankHuge + parent: StorageTankWide + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical_huge + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.7,-0.7,0.2,0.6" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankHugeFullFuel + parent: StorageTankHuge + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml new file mode 100644 index 00000000000..53c2cb05f3c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml @@ -0,0 +1,19 @@ +- type: entity + parent: BaseSign + id: SignBase # for non directional signs otherwise remove snapCardinals: true + abstract: true + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml new file mode 100644 index 00000000000..bdbce362f42 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml @@ -0,0 +1,43 @@ +#Small lights +- type: entity + parent: SmallLight + id: LightSmallAlwayson + name: small light + suffix: Always on + description: "An always powered light." + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + drawdepth: Overdoors + offset: 0, 1 # 0.75 is better but breaks for east west placement + - type: PointLight + energy: 1.0 + radius: 6 + softness: 1.1 + enabled: true + - type: WallMount + +- type: entity + parent: PoweredSmallLightEmpty + id: LightSmallEmpty + name: small light + description: "A light fixture. Draws power and produces light when equipped with a light bulb." + suffix: Empty + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: empty + offset: 0, 1 + - type: WallMount + +- type: entity + parent: PoweredSmallLight + id: LightSmall + suffix: "" + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + offset: 0, 1 + - type: WallMount diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml new file mode 100644 index 00000000000..6cda440adae --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml @@ -0,0 +1,54 @@ +- type: entity + parent: BaseComputer + id: ComputerVDU + name: VDU + description: A wall mounted video display unit. + components: + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/vdu.rsi + layers: + - map: ["computerLayerBody"] + state: VDU + - map: ["computerLayerKeyboard"] + state: keyboard + - map: ["computerLayerScreen"] + state: screen + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.20,-0.10,0.25,0.35" + density: 250 + mask: + - FullTileMask + layer: + - WallLayer + - type: WallMount + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: #excess damage, don't spawn entities. + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + +# See terminals for more wall mounted versions diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml new file mode 100644 index 00000000000..c02f56e249c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml @@ -0,0 +1,63 @@ +- type: entity + id: NoticeBoard2 + name: notice board + description: Something important to post? + placement: + mode: SnapgridCenter + components: + - type: WallMount + - type: Sprite + sprite: Structures/Wallmounts/noticeboard.rsi + layers: + - state: noticeboard + - state: notice-0 + - map: ["enum.StorageFillLayers.Fill"] + - type: StorageFillVisualizer + maxFillLevels: 6 + fillBaseName: notice + - type: Appearance + - type: InteractionOutline + - type: Clickable + - type: Transform + anchored: true + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 1 + max: 2 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Storage + grid: + - 0,0,4,3 + maxItemSize: Small + whitelist: + tags: + - Folder + - Document + - Write + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + - type: Tag + tags: + - Wooden + - type: Construction + graph: NoticeBoard + node: noticeBoard diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml new file mode 100644 index 00000000000..b7ea2004a67 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml @@ -0,0 +1,154 @@ +# see adverts for sign base +# see street_furniture for floor signs + +# 32x32 +- type: entity + parent: SignBase + id: SignBar2 + name: bar sign + description: Bar! Get drunk here. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + +- type: entity + parent: SignBar2 + id: SignClinic + name: clinic sign + description: A clinic sign. Hopefully they have meds. + components: + - type: Sprite + state: clinic + - type: PointLight + radius: 3 + energy: 1 + color: '#00ff00' + +- type: entity + parent: SignBar2 + id: SignOpen1 + name: open sign + description: Open for business. Maybe. + components: + - type: Sprite + state: open + - type: PointLight + radius: 3 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignOpen1 + id: SignOpen2 + components: + - type: Sprite + state: open_bar + +- type: entity + parent: SignOpen1 + id: SignOpenOn1 + components: + - type: Sprite + state: open_on + +- type: entity + parent: SignOpen1 + id: SignOpenOn2 + components: + - type: Sprite + state: open_bar_on + +- type: entity + parent: SignBase + id: SignForRent + name: for rent sign + description: A sign advertising a place for rent. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: rent + +- type: entity + parent: SignBase + id: SignNotice + name: notice sign + description: NOTICE! + components: + - type: Sprite + sprite: Structures/Wallmounts/walldecor.rsi + state: notice_sign + +- type: entity + parent: SignNotice + id: SignDanger2 + name: danger sign + description: Danger. + components: + - type: Sprite + state: danger_sign + +- type: entity + parent: SignNotice + id: WallDecorExitsign + name: exit sign + description: A sign that says EXIT. I wonder what it means. + components: + - type: Sprite + state: exit + noRot: true + +# 64x32 +- type: entity + parent: SignBar2 + id: SignBazaarOn + name: bazaar sign + description: A sign for a bazaar. How bizarre. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_64x32.rsi + state: bazaar_on + - type: PointLight + radius: 2 + energy: 1 + color: '#ff8000' + +- type: entity + parent: SignBazaarOn + id: SignHotel + name: hotel sign + description: A sign for a hotel. Get a room! + components: + - type: Sprite + state: hotel + +- type: entity + parent: SignBazaarOn + id: SignPrivateProperty + name: private property sign + description: A private property sign. + components: + - type: Sprite + state: private + +- type: entity + parent: SignBazaarOn + id: SignOpenBig + name: open sign + description: We are open sign. I hope so. + components: + - type: Sprite + state: we_open_open + - type: PointLight + radius: 2 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignBazaarOn + id: SignWorkersOnly + name: workers only sign + description: No tresspassing! + components: + - type: Sprite + state: workers diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml new file mode 100644 index 00000000000..9946e6b2db5 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml @@ -0,0 +1,45 @@ +# For wallmount things that don't fit in any other file. + +# Safes + +# Vents +- type: entity + parent: BaseSign + id: WallmountVent + name: vent + description: An airvent. Could be a good stash. + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Storage/storage.rsi + state: vent + - type: SecretStash + secretPartName: secret-stash-part-vent + maxItemSize: Normal + - type: ContainerContainer + containers: + stash: !type:ContainerSlot {} + - type: PottedPlantHide # TODO: This needs changed to be generic stash hide? + +- type: entity + parent: WallmountVent + id: WallmountVentDamaged + suffix: damaged + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-damaged + +- type: entity + parent: WallmountVent + id: WallmountVentOpen + suffix: open + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-open + + +# First Aid diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/.png b/Resources/Textures/Structures/Decoration/barrels.rsi/.png new file mode 100644 index 0000000000000000000000000000000000000000..d035f7113480cb57ba60ce5d1b8853d18f9761cd GIT binary patch literal 392 zcmV;30eAk1P)DA!RvH%vKdH{47Q@QRO2FiYRLLh6G z6b2v<_U@C{q0_xud%+0Wt)}p~Bv&*D3P2n_Zag1??|$80_X*~N6dR390P$7waIBa= zg%|~q3BYs9!z;D%S8APRKOIjf*6MWuR;&=s0Pt4hX^?e*N=JPT5p1Ck{_g-vi(96P z%DaQ!HGc};ic5pS7F}+DWio>fyx(|IpEsdyzks0{C|czQ;FV0BSUsnOUAISx=`JWp z2IpJ zsSs>*sUgKkXb&z$!H}l*i|6z?Uf&QZx=~t>-digaGr(uu^*nFU0#I{IuIj(&1w`lsn?9%!HrILdgMLt z{SWV{*;ova#Ok}ogB5~7asTaAxn~YQv>F}q++_7*`#FRF@JuizxJOr50T8X`{8~*v znx7n64S>n`D=dWIT+VX79Qj}b5Hsz(Vl^1yxUj{#;$jBPTG;~v2Bau0J~w~I96x! z9FQGA;#!TZM>2Q77A{8U|K~v5jsS+@CI_$vL5H6c{cl2@193aTcg3C2MJ}uWa3PoH zK>MYa^BkjffZOb1wKD+Y;y@+Dp4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbeaea2709e5ed76a4976565695781a50a88b464 GIT binary patch literal 585 zcmV-P0=E5$P)jR-;pm|a(BsHaz!7MB)ufx@B8vzNSXbyv;c>lV~*`= zwW6%u-dvZK27tmSx=~+`{#&cnlGkvbAQ1qH@3yv-6Q;9S>=(w;Ia2Co-0A53B^ZmudLZ>vv#$@i=-yz0YE^Z!4zQ~g`t&dgZW5}0H9}1 zBP5W;{7Vbc*xY8mQWH%85Y!PyY$`q(PXvICY?34ZFiv#;(7j`HEWjV!pLok=rn3T%{ zE~&x2=zJppN%nwjB>84RxNn;p5+-K^(0M@jT9rXuCWhicJ~)F_CW7tSlZiR92d~dbsoUF$pfZ|L75&P2y6+2$aQj^Sele? zLIO$C?>M>F_kgQhQ)BfW$Rn>FaM4mdU?bbqK$IM4`nk}56Xu1$)+RN&!i52nAbIrz Xj-I^Nzx~}?00000NkvXXu0mjfAZGzS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a9973b956eb781bc38762263f6fcb8e3b87dd7 GIT binary patch literal 596 zcmV-a0;~OrP)9d2AdHMikD|3`5S_Q)m2aBenc110-8%Gw?5=M6J>Pr}lPz>x+&=XE;9fMqv%Sx#NS&kRU-Gank>+PWCB2OueK?@|2dmRt^o%qfW#r30b0$| zK@5K2jUJOwpL^5k=z|Hg&s!G|IY#2jsS+@ItTC!0)6m(^>;#*1GXJ4{&W7Uj4JWM z5&%8OWgobGdMPl+C>@|>cCp$Sfa2mnE&y2^$OQm%JYib_KxiB;RyzX_1darPq_sK| iKpf;R^6Nj%O!)$rOu$(d5Glq00000hEAI~S%P=~C|=uM5B=bKJn~%w4p0Ee0)hi{ z+DDGqb({cI-Q3CqLTN&D8SH)@;s9dzgU3F58%_9m>!hWG$O7+@G&jWyf03s9CQ5agS6j&Ci z;Q+(wp3?{k#MG!EX3g}3W6{i12>9WqMI6$?M_Y!AoGCiwJL(>PV8q| zyi{6}LL_<*&?IzI6Qz&`=q3{n(7H}RDF7*r2jcW^9-!h?*8`Ty16R+lxkI+$;0AiQ z%mY|gc_40LDtTJ~2pkCnvJ_)8otPFt5F|?OI33gXfEDEdQ<sgV^<4G;uLs$Yi8!qtpa7ymLry z0A#B-tMrJM)j3)b5CDc?rsURFjDp*MQ<2oVHPy;Td%!fH0VA5D3-kSJ@xp*xsIW3ReKo zy)BvpfIz}njq!DM9MIpR6Swf48!h4w=ToC8A)&7WY$*Ej-amlt_~(Y-`}m90(d;2Wnp`YB6;LFckOtuaWnFt-XTzJE6&epdD4_Tw57a z)WRA7KPbvR@OEvdi6X}6055Y`2VwzmqBzhHfH)2`1ORiqJ3deb2#+I*)sX=h0!Icx m!de{*Km|FEocT{PTmA!vLFDlU=Jq}S0000rMn_2NW_J@FbgY2toT87(b(A1+HnL6B^n{#_fF1q=FYvDOp^M- zaPNHOJm;Ku?o2wVO}ce$q>8a;FdaH~cm7$2>Asc$5EwywkMwxQ`cIw;Tr)RIRTD@{ z00=%hHXJ&>@%2k!A8>#Ihzij(z})QRsz2)}0c!00#Slc>JYW(sS1aOI(*RM~uM|E| z@%yfry`($0Z%POqh!G&l)d(ChsPK7slZQu}q-__i|;^Y1PsbW{>idot&+7brBT-D&w zRLu`{0Q^GcqZI96h}(q{>w-fsK2~UNuR>j&Wix=z)ltFu{F0~?vgDQl=4sxcpTB<7 zK)Nh8qSbYx@}X|B{_N-hqFk*LyZY+%h_{b^muyR9yh~Rubcv%0d9Gwv-n8sLf}cK-5dE(N=Ee$u`0zJ}W~R>6bv0{e(}l>456KZe+SqbrwlE)z2R{&1 zWN-*i!ln)Y8Dz%Obbs+P-FxtsCe9`TuI6fR<_O+>EagFP^^zh9+za!qt~*{k#4{ja zEDEj%#&-dJOf?!Hv8nQ}18#6v2n+yhs75krh3@qLp1gJ>J>Nvs=eascC_Tg#Lj@u3 zJ0vTXPKeO};2Oj&7fghOwh3Y?pp!YC@iiVdWZsP6)Geo*oN(8o)ep(;R-WwWks t8h{}%G6)pc)hz+2Apb)L{?{x@{{Z9@2z^UrFKqw-002ovPDHLkV1nzgiWUF> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5feb377a9bec767ef6f3d611222fe42a9356c04f GIT binary patch literal 778 zcmV+l1NHogP)0bV6Wr@xpxZ7KL~)~wxM+$MEp0$uv|6oJqacBxM3~Nb@lNOCzRApFiU%f> zH(&Sn?mK6a1pQ};05`7=8QACYSKF8vqKUXvdM9b*#JRq~nH#c{1Vzu>er~ z%*deUg3lk`JH~(m6hPvDPyh?_<~Cv!k&!Jg-MN0kvtG4HFy?ZuLWS)J+Nma=fhY}U;d<2 zxlVJ_!@j9u>C&V1fb?2rZB-7MpLIHx{jIu&@!>-U=*G3vV#iRty(=w3M0yX@{?;j# zN}C<)RL2VDc5m?=-M#->K|%J^_{rk|zRAx6ti{J)XlkOx`7R2qKsH5Ru5c0mr*8!P90C0Pz{Lgjx4QxBDyr13Fm?5rH!_WgJ%cd0q@o$WF{;?w-sl*P70WPR zl7h8$EtWYGE?^mx`v>7m%ImD?5{T_%SPR-0e&!C|D z7qpoo0fbFW>;OSi1K}EO{n}PV{!bVc0{bATkqWmA;0B4RT`C;o)|DQpbpQYW07*qo IM6N<$g1wPriU0rr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..541ea0fe2fa90258674d7dfc6ab8e23c2fae5391 GIT binary patch literal 604 zcmV-i0;BzjP)UQZ5D~%| zpxM~=`L0a?RCRq*g2>DPUC_C>BYd0zOx^c;kIeh{9>2O_$43VNgbG9pV6qwocJ}Mq z?gBT)YjCAC?_Wc9(YlWZNMd#StYwCn1jW0z18GeJfVa9op+|I9_gE)@05AkorFYj+ z7M1{bt7(4T<#c{x$m+J&Vnc5fz#w=nrnr!w_z(lY2c1`#*;Mm%QvB(*vffC%yz`Sq`6ru+cc#=-Jqdk#(j0000?K@^22kajD7BC#+jtb`~AO=A;FQ3&=Hb|R$D zBiQ>Q3WA+B7Kso+(aItbQH;ha53uHp+|B;n*`3*)pa;Tcv%7P@d*_@bdGW_$0S@;n zE{=uLY~=~ZrO04R*23o`}px5cI9zyqzOaBYHk04Tm%U5VWA_VOG!2OOXPVgo_~ zw3^$lzw0Ccs=B^q1wv^;bQ$h`8j=A1?(e%#qW?J>e`|~5qXQ*`Ex0@t-Pv!*MWqkM z=Qzd{`S>1)i?av$Jxgl5E$H6e$bI!7Vua$I+n(51D~jDl#m$nMfCm5p0fZB-qcBvO zcZ7}9NPyoxpNx<|2K^xmQrj#GTdDCT00`;`BUTmvdLL;Q)=82Cz&O$U`DI(sxgQ1s z5KStndoD>Tkbnm;S`rzJ1Sou{0HuZ#mn45`A^>3zP{&k|lRq^|2t_jy0D=gQofAAj zU?!l9=GNLf6Pr2p-K>rO9Mua#XqK#Ox8z;%@ek|w5-w*`Q}kwA!?lj+2? z0Ky<~suvyC>U+Rcrm4|-52TS*5144G9?+3)Y9LAu^!PgD{}ZN#z)>ePT;a?BVUV=? Y0f|t>I;@KeBme*a07*qoM6N<$f@1;pc>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png new file mode 100644 index 0000000000000000000000000000000000000000..611825a8ea859a2d6287e58131520e60b0046687 GIT binary patch literal 606 zcmV-k0-^nhP)Aw%?ImRz-K#Rx0QV%Z$5^`F>{Jn{m47hxHHe z5AgQ@g5zUSvu~N>6HCVcU~G3d$mJVS-w7U1O^p0qDiw={K)3*4K0Fa@crV`F)%*rr zDC}V%v3P_t z0nr7(;H^|m&oyhc#y2;4a{!>d?JYtPHd~4M8o_GtiVFbS4};=SK4un4>6L_qSq5T6 zZJmSwQsg>6rOiT#qUAT5v{Z;}eVqr;nk%weZLIBmd!`oy5Zp&`EAthnoucABojnn` z{f)8T0zfgL>Q~ol3-4iMltI84vyTXFx|CCpm*We?ck=)gB~u5iRkkCOyfTs99oCJ1 zeyGMyM-MlI;TqUjkE*Ag*2M20=-f$IFBoat@96j6igCg8c>@yu->2n+rj@j*$>y%i sxf4R_U@?+(Lb;6%0kk`~=>VP37tTEF$`=t`ZvX%Q07*qoM6N<$f?ll;SO5S3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png new file mode 100644 index 0000000000000000000000000000000000000000..91a37aa9e32c55531ab00255df53a5c3bc6e442c GIT binary patch literal 676 zcmV;V0$crwP)dv8_BWi1eG zfLg{vJLazKH)0aW0S>aVy51>j^}Eo1{gxDv@xJaU9^1sES2wYIjhSdE;#mJSO! zLfUsWztD@9uOx(Qp#k?$(H|0GK2>IYF7F zWeI|7a4;@vY!k8s<#I*J7qb5B0<31{?Hhjoe)gRWL=`}J30NQKO1lI|IY3}iz3`TYjSq&qiOPBZ0AQYc_JrRT`uk<0sRA5y z(Yi}!R?l1u0IM-seKYGs1~ZRD`q-7af+-XwAYz2E5s%VY=@;7tJ^=6uS<}H>m~MR7 zxE7PBoRBg8oP&5#Lx0DHvI}~Ce4~X@h0b=Uf_xL+#oSo_k<^E-k-ys!1%?$IlE+`4UzOM(TJI{r|^u z94MlZxP|}sr|d)HB(*d;X8|n$NKUpwmP@F%u_u5=C-)to8M*|*<Kd`3z$K0000< KMNUMnLSTZcZ!JLp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6c2378a45453d83c10c20e4b578747ff3e17b9 GIT binary patch literal 629 zcmV-*0*d{KP)RCt{2md#5WK^VrLsJ)~pqzxYYSd&<9B1$PLXz=48p1pWU zp*`r|WG{lbc=0IW!3e9OBBH1#KazEgA~khsL?vQb=N;X3lW2BUH&ww0!c3TV=lSit z?+$MnURdt{?*MNL;9EWn+FM(NsDx9nr|#oa+2tnnQr&~= z1nN}603SRh_=gg1Qpku><~l%IxEt!h0jh#uaFp1!jraO10WIMk0GWq7+xc9nt;Lc& zn-@cHr0ddss5@fjLICtOD$B1t2T0635U63l$SsVLGyy5bFqRsExJdm*LU93rZ^(*{ z%nj4|h55Xgw)9^}yG z?c6;8L-O1rAC1qEi=9klYLZW5R~gfoniNq8$2BlM7Bz1>t4SzS!+VFK+=RIzBkTAa zz5afH`nq7CL666i=wKI3Az4$CPRCt{2m%nSmKorMM=-5dLf+bdP7g{XUrBgSDqLWjH7P|Cr zs3(8d4|_$U$HJ=STmcqr{hm85EcM}U!0#V-5-ud3)g_VOlKUB zQt^=mp#&)0-q~{2Dgg=*GqE6ynGo&pR)ixZfGYb&vn9U9U1xlA|KLFAfG7bFAb*|p zeJH%qX#SjOO{d=zwaSwj0H|7jbNc!l1PQ^r?GM2f+XH}r<_23iuM?OJK>fuYAcNq2 z_v$bbch?&OAP6cmO1vt#tU-TZ4ggsp``1d@y_R7h08!=$ZpAD%1lt4guSID0V;FgfvtL={@x0uQ^E!awZqQ? zSVN^BPNrtQ2?+vc0)hN`%nhss-~}(3Hf;Qp%Lu^C6~+fp5MLq-sLi_a@GW3 z0+1M>Rw-LS&sq-@l2tl<_fb;-9mBR)y95qeGa=K5HWzCG4;}Wb={-QO0}#( zuCE%Q5F&upwM{)DKXb1T4FKT>2>X9lSR^6=wsv+cvw5kEqTzJzr|#3E>i7D}w9DIj z`wm2u#8ZII@7tZgD3q3#5prFo@o4yw9RT#)Hq~Oau0!iLx^Xy|qkU=sbcB#zoS!)m z>=^Z4Axdlqy}ggpCm}|AczmkMCr1ZPJ)x-j`i71I@+PASH92 z2ml>(ehCs}hUJ<$06InDL6VVT#bgSAC3e$n=rWetI1B_JjvVILGo%pW8~_9bVATbZ-qYTaf{!>PPVShyD`Ae$a--%yplP_8UENAhi ztm4~JA=DV+W^@Jsz0_aT$RI&=dp&x4Z;-8w06+bv8u=Vx5R@h?-x&bE^yo09Vw7W= zIm>3(7y&lpNi}<}EADj|2tYh@n0pCN3?c4;cGuHgjrl_WQzGdTdzb>xoj>t7H|NS=6pB%%`b03e`m zgVh{2l2{mk?Jv#%H3**fYIR#2e7-aQ2EmpYOI$0tTIp0;9ssIB^_QU_?=zUs^DvDM zW-G58$!&I0Z4bg_%Z+ddbEaBr61 z3G0i5?CnbiU=Tl#T9QL}0|6R8-VSNR3Q)*;dtj;rGco4mb2@ug$?ncJPhNKq;B*Ag z^sJxu(FPb)cMquB0D)NY|ERUj0amFR1_Dq+&jIx-SPcp_)B`f43lO=Fn>H*AP^Y{q_xMQi46f%gUD3V|BSu>O;Y(qvEL1E00000NkvXXu0mjf DpN8jj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png new file mode 100644 index 0000000000000000000000000000000000000000..292232c6ee643a91b94e75c68aa49532e9a3e967 GIT binary patch literal 615 zcmV-t0+{`YP)*d# zW6?wODdQS_+^$XrISd8zLTCXD4Uh7SjLfrzYyb#^Gl77(hTjKXch}kZ#ZE$;iX+hl=D3RAU!dXB)=$LB* zKqu#C90i08;_(bfoi#5B00YbV3P>(9Y**6(FenNS(wQlCjHv+FVn@LMx3Sd(=KCPT z@v70LW)5?l8M+YKH2?_F@$DP+y+qV?cOp*ic?bFTi0o9Himrj!do9P)W|x9+&)GQ6 zj1z5cSpbk;14K^>qJL$Dl~1oro%u0`qOg&sn0%gEvo@BGO7VHR1g5)a~>!0H=%r# z=6exI>UCblS^xrpC?HU-HP$sQ3LqQAOqKno*$+DKCXq#~n`Qt2002ovPDHLkV1kgc B56%Dp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b93a353892a4580684f4635c21e0b65e3465f184 GIT binary patch literal 540 zcmV+%0^|LOP)LgL}kCllSDsQs{rV3psMX zcXzp@1?sFOKog*`0463Qy4%yq{2qVzulp~#ESw|`UCIHBi8IfSKde#XQxVYCH*^^g zTL4Oq3G=zUW$fkIDF>OJo7Y7kYym`*qbLSJ5JE&kEf7g=j>k4A18`Ed0F_b|W}}O6 z6yFzqs7$<21+bjj)(-QxS63_(qi7hF0idpvx6BfVS%qQ|?ow%xl`X(~DZ?!70Rq9+ zSj8&?pofM-eay#p)Jjg0d24I|+C2ewdg?1)6U^tuIkOLLFF!dZ_xXLo5W+JM=osf&O(5VCl^(w=OfFLbd?O`?PB)2s(mLJFGrLRQf`>qUNWRAkY#Bs#cFh6H5V@ eK~$>l|Ab!;J^4wsCd-xp0000nH)LpcV1R1tF~nkq-Zg@Q4c_Z17jTMUeNG#|Ak(I(FkkKq3J! zc$fz1X}LXX+-~>e06;g_R|G{Ev=aUr!D{e|3jo^>gQ8IozW^p;ECc|-82P3x2sA2X z69HgbVTM@hAahoWi4{UDT^<0;wY?qp*>INsp;{S

^;z-yvp`&zuVYvoXyMsn!PD zF_TF;?Q{TR^gKYsP~&t?C7=B_q8kzb+yT>TUg5#CepeqK<1~PXXrhx4MzS;=_knTy z{?`CdOsM*kv*E%Ei|<<>@&Kr+wR^Xx+mRJL1*vgDS>lEeu7S(*3-7dJO|sc!d?%q_ zFk<_k=>P8mTrky4&c^@yZfQR>mQ9UrH09h0A#boUu_HpcjfDUv9b7s<9Qp<&WY2(K SmEWQO0000(BzDi7Z35E#^w2}P%%QXN(M3 zLx3Sb&j8Cyi)y#AeBsH{HvkwTew7o?#SJxZ_Ef$NiJvIngf-03J zsn$yFoC2)o@c4*6pPifu^17ONz?`Y4Cqh2@#&yRU-?DI|vLpZL1%kvBVwbPqK zB7S;j=*yR|Q!vu^ztP`61-MXzLs1p~@2kmm%UJ!^h};E)03beDil{cB!p4pOdY#;L bfPUx)8Tb2PHos4M00000NkvXXu0mjfFuVXk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png new file mode 100644 index 0000000000000000000000000000000000000000..23559f192891094743f01588496fcf187e5d7f4e GIT binary patch literal 550 zcmV+>0@?kEP)~OEB)D3AshPjN z{rX+`^h_@B+H;C}mbtWrumu?OctAKf1R4=IghdDq!1kGzG-3T$`f~s$vITfl6yTSa zsLOyte|@ty4S>R~UfbNz$2(iwmcgie<{W56U4pz^ga;|7hlIJ2hVuyORMY@{E;qb^ zTMw}c!jdrunBwO_E|p+7I0`pn&eq@W9Rg59b^sX8&ra)O$?t~~A^FXNaH!XwBFI^~ za4G=&H?me=AqBu`;emipyH-A6q_P2s9umw&g793q15siCpubRSIt(YF>7#UGk9Hx5 z6E(FFaSc{Mv+Dev5Jf(JTL7?`u{_dW!+nGZ`A)kJBXvt1kFAOr@f1}P{1$eFt1|n*qP==YsIZLm(G@_Jcb0|d_ oFN=dp?WL5X5;%Q1bAVRp9Upzo9O3#c@&Et;07*qoM6N<$g1*z}>;M1& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json new file mode 100644 index 00000000000..91a7049c538 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json @@ -0,0 +1,191 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by INFRARED_BARON for MS13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "" + }, + { + "name": "grey_1" + }, + { + "name": "grey_2" + }, + { + "name": "grey_3" + }, + { + "name": "red_1" + }, + { + "name": "red_2" + }, + { + "name": "red_3" + }, + { + "name": "yellow_1" + }, + { + "name": "yellow_2" + }, + { + "name": "yellow_3" + }, + { + "name": "label_1" + }, + { + "name": "label_2" + }, + { + "name": "label_3" + }, + { + "name": "hazard_1" + }, + { + "name": "hazard_2" + }, + { + "name": "hazard_3" + }, + { + "name": "red_alt_1" + }, + { + "name": "red_alt_2" + }, + { + "name": "red_alt_3" + }, + { + "name": "toxic_1" + }, + { + "name": "toxic_2" + }, + { + "name": "toxic_3" + }, + { + "name": "toxic_4" + }, + { + "name": "waste_1" + }, + { + "name": "waste_2" + }, + { + "name": "waste_3" + }, + { + "name": "flammable_1" + }, + { + "name": "flammable_2" + }, + { + "name": "flammable_3" + }, + { + "name": "warning_1" + }, + { + "name": "warning_2" + }, + { + "name": "warning_3" + }, + { + "name": "double_grey_1" + }, + { + "name": "double_grey_2" + }, + { + "name": "triple_grey_1" + }, + { + "name": "triple_grey_2" + }, + { + "name": "triple_grey_3" + }, + { + "name": "quad_grey_1" + }, + { + "name": "double_red_1" + }, + { + "name": "double_red_2" + }, + { + "name": "triple_red_1" + }, + { + "name": "triple_red_2" + }, + { + "name": "quad_red_1" + }, + { + "name": "quad_red_2" + }, + { + "name": "double_yellow_1" + }, + { + "name": "double_yellow_2" + }, + { + "name": "triple_yellow_1" + }, + { + "name": "triple_yellow_2" + }, + { + "name": "triple_yellow_3" + }, + { + "name": "quad_yellow_1" + }, + { + "name": "double_toxic_1" + }, + { + "name": "triple_toxic_1" + }, + { + "name": "triple_toxic_2" + }, + { + "name": "quad_toxic_1" + }, + { + "name": "double_waste_1" + }, + { + "name": "double_waste_2" + }, + { + "name": "triple_waste_1" + }, + { + "name": "triple_waste_2" + }, + { + "name": "triple_waste_3" + }, + { + "name": "quad_waste_1" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c2a390421e408472c68b94a5a8913e2ffd04b6 GIT binary patch literal 608 zcmV-m0-ybfP)7N)XGAzE2kDA@Qn zEc^pDf)-YGBBZs^!i0zcdm$zy5D8ZHr|)o%w_kU+t3?V27lps#X$DAu$cyEL<3jCLWr%qJDB}U1!n)PclHbZ#~B60~2W=k>1O5{QBzrEVWWx zi}NG{R3`eHj6Wo@X`ZjN$9Wcm{vdw1 z4^J{sSzZ;M^X$$0&H)h!NBCxgQx2GrHP600V-A>Ln`i29jIIkWGY4#907RCmo6fw{ zDZr?pQB3zuIpE8af{1_sfuI^p1R6W6_vL8@Ack_`e6v9F917vYLk36&kYsnwo8&zg z#jdaeh)@r>^1^bc2N6Jl1gH%|;)v@|*@+8}!`cII&i}!f;LFntKuj%P7EC>mhoc#o z${ye`%8e4zdLWC(k=g^MFC!{^d71%;O+^l%T&_Kkm-pWTMgy&CLXg1A%mIPl@CaXR-AF#Yq5@I?0000>?#WkrO44M78$NBmh*eE))xelW3};61gX8M3Trr z!E+NNd>H@<7Igv7Z3|`d&5bR6U;Z$tT;C|Z2RG5Y*xTh1;Cy-TkjTHk^+17vLbrJz zfE!Q+BJ(q4qcRMrjs1U~pHxwa5nz$5QPkDkSLk(y$N?2cHHLCJ__JCy>v^hz`h)#L zqf(LqK#0m|A4wdY{W1kn#~$JC&Uby4jaO$UgXh3RX~^8mppg`QY@F6=Ir|9zy8bQH z2{Z5Q8E994839P(N+N(AG(t9(#8RIFl1N-I193x~>Az-)GmsW(LYxVKG$GDx c1W7~u0<+XR!12kBLjV8(07*qoM6N<$g59J!kN^Mx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7af6fdd68e4256fa1fbb1eed2a2ec22b23da37d GIT binary patch literal 615 zcmV-t0+{`YP)|{g61%`1wh9DQz;o3cu;odE2%rH%g3-YQpzUbCEiYz(#3)>p-!!=1XRw;^h$9)G zNp{n`4ez-qor+FCBB%jVUOqb)@?$lCfkcQF48-}o=O;1YacFCRoa=~_@?r)^EE>Kv zsA^zbj$~jeYk-eYZd7#=6COum4XA#ML}AN|86dH#m;)3p(;66;_g@1_1J}>5nFF!r zLy*#;%O&>E>1}x}&y)Wfk{DJJ1bCP^NMI5k@B?AfO4{0o0iyr_002ovPDHLkV1ktE B4|V_m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9efa16cfcbe0c4385501f8088ebceee1c57ac96 GIT binary patch literal 803 zcmV+;1Kj+HP)A{UjGB}=D~s}9;}D<&=e~wu|+(zn);)|Q)I!7OULWD_7w8kyE~K99qr<21|R_P{=Gf&w*!X`2Wlq9sU8+|2qPul_21c1%})Ay_jw91nP{Bt5nR$Yg`XI0RZrx{=*`JPp=q&zJH z!)N-*<$Gpf7hY*{nzm&QB$*X$odc#C6Si#*m}*RD+Z=$%>A~Ir&lJY+;<4rc2gUTh z*&Im9)8+sVknmtpf$7Kft~|{Ei}4on`Nly~-uKV{O-KW9hc2d`%*kg}l)K^%SR@Ir z?Cqp#wMIt{W+h+C00t89;PDqKtu9ffb6vh;feWW{S|`log~6{@HyVqjg(>`%y_$Ic z?qiK|sn8CnXZdWlLVI@Ypr60~(6NE6VxUG{U0Ir0tWjTH=P|H2fZ9TLTHJ$Uf+YhL z`5TC%18J*3kmq;L=2bpxU`HY|km>ZFXBLTWj|~dZYX!fvzWk=BZep=hwxV1DqWd);YlUPha3TJgb0> zr-H+$W=Au?V(M99%Mm07pQp)$Z4Q{S6PW?tW}N@sd#_|M7H>8Om=_4-YDEN6%}(qL z;4GQwce3Hpkmc-bfFtT5X8L; zcOrD(pWwd!199iVf>^St3thC5ib_U7 zb3fiCaVQ42ub=ARI$kas@9r%u4-JZE7=QrC6Nkp5@1~9(Q`XGSQAZcd%To+MYZ{qQ0Ky`p%t_Kr4x zw1T@8x_jrA5KCjE7tfIwUb}fCR#enDSc5CC`Tld8wl{r|(yY8EkKd{WfVEdIdW-!B zL{?vJP+|y32TQ@HuVw%*IfYzb9natI(#}qcjvpyx;sLcU2k6&tm)yS| zxztiK0C$LDacL!bX3>X>9|GbZx^$vIhl_1m-y*8}t`JG$!3<}EjgLBQDou`%*U$_w zFpwA!c=Ys}6mdapQ1?SI*NNxJ^#+H5%>knXdM(+xE`ms8#PQ@!0T>=0hWYTGXxGeu zUQ3zCDFpBgH1}L8#qeaH_EQr@QAREUxQYQ=Ep_76bE8zLHWiUHJy5BB6sEayPD#zsp)5PJ(d5z^-; z*yoQZ2zIftNQ4MVtSk}{#b~Vj0cYm)?d{j)Zuc&r;6S(}_hxS1?%N^pSOgAtmwj9d zrD^TnNu!y|il-TX0LXJw1^(Uq!lG1DuQ6X0bmd6~AhJ?f(wsj(K1iSO5Qsw%Vy-;N zK)tr@i|*q9@ygm}Am+-036EI<9jKk9;c)|TUEFr=S^w>G^sdE@j}8K{Bu3(Ro>;iE zzZWSQ?D41uSE_ma7_dQq7%ZtR@BH*mHUM;PuHwah0Fm}}kCkTgPCRV|L=yly15D>x z6iCbC2EO-+akA)IJaqf64L%A zfi3U-B{abez#Y0cyJ+#xq9}Dm9gv6%Z>E^%d~F60NCb6YAdZ)*6C0k0$QdB#QN*-7 z%>aq1%a;VUyuUL8VYG%wG6Qiu5o2e-^rJ$BD^D{(V!t8>Xt``>ASv&E28;$S+r8XY zwd_NXmNjZGQA6Fk^14q$`M)8F;YxylxXdC*APo=r0wrco?nCE%vH$=807*qoM6N<$ Ef>Rs$_5c6? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a04fa07857b06f8a56bfc0c29448e47b582591be GIT binary patch literal 482 zcmV<80UiE{P)Fc`)&@Fs#CbsHW$Oc^K)PhLduB3^csUHuaK z9DWI}eu9ZG1aJNUQB=h3;9+zwY=U?b>YliStePg7sYU1mqiGxV{PMm}LpwuKRtAs( z{6B#G?Tt`%@9^|Imlyzy7YZJk^Yh}`Y`!=#r%~|2{>#t`#0UW9<+bH+*WU-diF3e} zDyt0S;ON*0LJQES?}qZKbpjNFs1qXyXCXv8q7^Zb7C^W9&Rv^4_l9g-+p94M8xSo3 z460k3%0KU08!nyF*XM1j{A!} zKnB6{9@SFO6M1k3z#({Wl{R-4q$P#Dy;sjbs^4W7zjXs{1}`2{=6}SaR%0_ zWif{FwbXAw;Wv$}GXP=5(;8X>aENHx+j7hIr z!%;_@{OGU***!iDgkS+IO;5@Zd6~O~XaEQgAQV+Mf+7(LuwI-q4ohV*knOfQ_fqA& zChFRYEH4xl3nEOc2t0ng3t@I%ySnp@!uVKT{_0k zl2JfDaLm~NQ2nMV-vk1^HB<*AXU-!5pkta}0`W7$a!ninog(od&PZuFCI)~dc2YW% zWo*NC7zjW#a+qV!;6ku-01zY?Q=$b%7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png new file mode 100644 index 0000000000000000000000000000000000000000..dd414145a0bc7a849a50c9f532d5298a73f26bc5 GIT binary patch literal 452 zcmV;#0XzPQP)VQ!P3@r!5*_-|s6%z!rc}0X!#ICe~t-9Dwc+YJvf869NG5;_xn(lm12k0000{ zM_-~%i&iZQK>}%0xhX6pB`R#JK?_R+7dGdOcNj-)-o!HrJe#?1-o^WS_Z}ZQ$EK_q zzzpF30qkwA_r~oVoL#sk27toBkdJu-e&gMOKRl3=4f%R+uT4iFLI5ZpODqq)|7z3+ z)_{w|S2@W3(WwxGEkHK2-7}xsPJrSN872fF&4d_-wId?31+Y7PwNzn`^(K$gJ82H# z1jH5q1(F-7u^*~?qr#t*(^4DkBwv&R04e2LKG&Zim{I)dy2?Z)>;XVP02#OMq_8kR ztv_Gf0cH?<-=Xv8Pa`)K^%;JU20#$hX0+H^JQei}X``&`4_TE_>*@wMY`cC=Vb` z^<(k?q(iy65z&d73;=={bq|nq=X-b;kgIgXPA>#t_5fnY470240f;)KXaHG~jB(Be{qH8tkY5b*z_tY~Nzaaje_jte0`@Qe| z?rdcZRuiBJP&Ghga6q-Xws(2mQa1o34s?52m(Oeb=IQJxnWJ4-Q<%$|Vq$=?Em1j&_Jejz$tite6kOiKyJf_6Y`nYBQf{35rvJovt zY0K@-42R^HUo!v}TAZ0;tDD;#V&~+7_2>(u)S^%&h?1WvO6?}ZZkHG4dAzc=UOW;_ zfHG@tBFw7*KgcAP27uC67yO$*pwE{~38c)KR|SBD>3j)Uj8+W*Q3r$p{q^nx@POEI39eGv0#G8+15U{n0Pk}VHo)Hr>228RsmIS>FTKp8 uSPFn3@J%3))fvkst_VN`aZ(NcYxWK62u^*}r!vO?0000p5-Nd6aw~{b zfMLoO0M6b_uCd+piSVCd|IuMa4giEJwzaX&UielNNko;eUk?;J>}<5Pj$td zU_#*<9{~iIX0yTPalJ!|LI``ne6Mi|$N8rpdpsVW0U;{K9)R$~bnKa8nJ32F><4K8 z1Y!07M9Glcsz32SG~R|u=L#HxfC6fZza5Na;xl7b?cENfLpF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..05f1f433c8004bb1a2d86c74bec81482b7ea4b2b GIT binary patch literal 593 zcmV-X0eeAC>Q;w3Xkd`^LUhowH_M6=r0`(-jLouZZaZtcN#Fy^&h8BR{AT{o ztZogdu&Mx6fd2RZ`}nG6GfvD57!txZnxUVCSkY>d#KPbJctK)3*4-tX=G zcK_z`LUs)}?|`3zEG_SFL8t-*1EYEAtknc4Km-GX3qrRLq8!C5!Xs4xwb>sG9`4h+{s{3Um`4ucgjd`d z00aaOrG72O+yI68(mgH%!G156yTvAs*A0L{uw}*)mok^?@s=M#6#%os>_gjO@mdN4 z0SJ)EbUn#tbELb&#tp%p0pE~EY{PhM>rODs2xevqg(I2H(f;$R9IHxW`Nnw6P+FXJB@!0J9o8BV&HMm;slg5Wwa(gEPQh zzt&nJ?EP0-b7*|fPPD453`pA$3m;10l6Umi{=I*5^MVgTR@AKuR^{HP!@B f45Fth{$=zD@j4eZf;U9u00000NkvXXu0mjf;syUp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fb0c25f68d2f93713404b55df8044a26b08888 GIT binary patch literal 731 zcmV<10wn#3P)S=EX}gX&TbNW z=>wacnH}Eux9>c=v)O@7))v4PfMtE|`|_nzCWMoeDp1f@fjlt#?qky`j2;_CaiJ{QGO_Hp z4Im-jzR%;R(PnAw?rtL-lXHIC01UL897HtUgUqcc3J;!}fmv#+SS3o%`H(BOZ^Goa z2>P|xz{EVpkwC^6TN}yXX1aoa0Yt5w9mDlN-Kg|~N^)fYsx)z2oFi8jaZQ^S?Hjj^ z{}S)(cuF~$lJGFSGaQmJBOFsKZn>;XbZu?n%7zqqsX z#YpB8P&{(ws<@tBsv@Kq*|i6#`%enSuOEGVej~9@jJ^C+g%^49z^` zPaJHsB3<{ug)?=SdsCk=b|PeYKnvFm$bF-$9^l)K2?IUcgno-PrxHg(a4Sz9ux?1w zd|U#}dB=7SVD-SpH=dpOy5<3{Kh@0Z0g*B?#4Qja3u70>o;sRve>2Md1Jd N002ovPDHLkV1lO>?`sGYtbJKs!qR*SH}A%(TnDfk z-@6l2pYJ{3E!a2E*Nv+k?fIGMS#1zo0BJ6blbNhqOUAPsc26phK_IUKVGAJ5t;WR^ zi?1kRts~^k+D|MmJ6Z%#sJ1ACZQ|s7EHf-E@lBj z%^D-{XZ{p=2R?pIWeYIBoDs8p4@eNUrqq7d0OU!-9qpo)Z@f}k`K%9N3((x?6<06& z%3~`GMIb^ZQoFIfohFQii^9U%8L@FoNgy1YesA4_V jHFgBB5yVYx`9GuIZ3{ydi?>R;00000NkvXXu0mjfM?*vq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a915a817fccc51744c0b4b088726f9a15775d3 GIT binary patch literal 907 zcmV;619bd}P)Xs#qq8V0X@nw!TG+G*gmB{~ zqNH_!=&DVtHm;Icw2s=iaT7t&A{BCx{Q)N?$q03vw6w`5<05JTyWhF*+*bat4T&DkXY`l z7<23FZ=MGu738A|N)POzAMF8#0SNNU7l3d%5Wf-NvE`nw!fPGG@;L%w1cccE^${3~ z)Y8cCFY?Elbbc!N(RVtTkj0bb`AiyLtP!e@E(lR8uD5=CI_dk|8>S(gx8++ZFDKn1#l zvJ3|}Q8$w6!>hdqc}%dS0q$$-bb^i?+DTKLDO%|9@i`|1_DS`eR~2UsXEk$LzBI9NE{)_)b- hLWxZt-}ay7e*h7O*>b`QmPr5r002ovPDHLkV1h>ol*Rx6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9b562466a7d12b8c1fc462f10cd377a9c84695df GIT binary patch literal 649 zcmV;40(Sk0P)~1eo00*-kti^4jZ9 zMy`2&dlk2x_EZ304w-_R?w!m@8UcZgFHaA#HNG6m10Vn*bHs4bzEaP%NcS!dAyg;2b$zuzG-CeK#8-R>w(Teb*Zssp~R%00LOw5aEJ;?dE}Ud4N~WD|Gb; zTYc+kBQkq{&slo}$@PG?mk}GBeZbWtOfa`u*G+kVSM=ink=i2|$d=neJz(n*L{feK zi3fO+EcKn)1Ks<_Qfp0wJTW$=dB6pi2f)WQ!}pJpOaVk-q!1FJnfQ7@4`c#?)eYzq z6hhRa|Mxb3=&lL*(1;yS-2 z?rv`iB4U_N|*6Kln4s&QK9GysBt7H!gm`>2{WB^X;5 zY@K`Vw37g|A^m&^1ZHZwapiFL?MHdf2BE^Db6jx;06~lCeCHK}iOqQnu?A-h5Q61D zK@?;%mH;?QJlyR(#9vf*cBMJMx}BjsLzD15LJT83BSfgJfrol@S_jCOS0_Zxnc`(M z9*uPXo&kQIKIVKb;20q_v@kDM${K{00oPnGNv8X_l{jy-o_?-n%d=Vr@YyvNxH*}k zV%L1o0O$>60GmKQb0IC=CV6EbZ7y)}bmx)*RArhAK9#BCSA~SUGC-l>neeU5^k>8+ zYX;Q0z{jX9-M*bl0Jt(h8~da?QwDmkVWGY!A}k~mo&lFu$^c#ffh$1%EdvD7XjbDt zkZJ~eE3;()&r+8rU*F09gr>!iT8(dIsu34AwgS*bS>^y8g&LK z_xjp*54Zu82M8xXk`_WAK7R6K)x!j+xtVtw!UvG1g-L{1c1H|A+7@yyN=L1>y1Tj5 zq2!%hWEY@`Y_6qh9{%w6N zv=c}S`OX2`1FV<{j6o9}ZYVc=kEeS~p#u4qn) zqvO+pNP#RIN&q%t!*sc%CZ|f3*yh8Q7`cRma75f#TV0$W{Cs_ieFrfJL1Kys<%kYj zJ0o4O4U^nG>?V7^jRevkt22S4zNa6RV6EcK1x zw!kJHhwoznP=wQU+UH84E+(YDA%gqB0YDT_j^Neuj2x8*kXM2x(SHN7^a9hYI2b-A zCOkm3SjNp9UBZm)G4-l;H+A6-q>o^Il@8;Tqb6qMAKmhA|EW!=_+RX!H@&K=# zSLo{zw))o7Mx^!tpVRgTlIsC&FC#X1`+%=Um|$+xu8VnqSM<|(`pzD~K(^fG>H%Ai zAd>3)Pdvbrq^a-J9yq(bFKmmY5l@VbE)V$N^8om`=4v=B$P_>XMhYPjnn|b!^gt#M zSlxg=K_Ns_EXe=&Hh<`_rNrb)g7c-+<&V7JeJc*_1Gxxr^$4E_auGm;cpw)6|Ly@_ pkI-S(cP;`b0;Aa@Y{(Lr_ySexMEk4@LW2MR002ovPDHLkV1k9xB?bTh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb8bd45a6a3abde915a6037f4d5583143f20e07 GIT binary patch literal 665 zcmV;K0%rY*P)9Q}AdHGgkD|3`5S^`e<(p=|nb{fFh2Def?#|Bp%s20TY#^AL#|JYU*EjO~ zmbkpS$%%|50bmT%)nY;3Tq%@dgIf(T%Nisg^GbC~yZJpC$IbxvZuMdI1OieeAfU7AF_d0j-o*m*37M0_QDgX!?O#6#-lu@0Wmk?vH z#{eN%{t9A2CSwVJy~M+vb~n1PSF1>KfDOl8xrZjCY$K$G7Ut#Rng*d|z||K_qIB0!_G9~v(z{+)Edw}r^#yKD zrdYAdPy?VplmScv`SgXPbQ_=X$v{$H;Nt1dBm=)GF!lwXm8tDlg-lW`0~8vb3E!2O zK1N)!Wz(!0!M)STLuWE zS(<;{su}QInJoi&ma6m^hVgGg(_lzljql1-BQ9=i1)z!2^a0w+MWg}nz5u03cWMAq znhazDuuKLr0pNWB=4sNM8h{{hBoJuPbo=TDwl5vCN48vt00000NkvXXu0mjfF}o*4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f603bfee66ad4408e69b7a851c95eadece6d11 GIT binary patch literal 860 zcmV-i1Ec(jP)v0CeAyAUy!MvOEr+J(9hf?|>G zqziWd0n3%jsl1*Hn&BGFW9b&O!3L{p4&roAukb26Rjf#l`Qy!Xzz z_nx_#6ghD7>TnBV-$1W%@6O$)U9?Rw1b`T%2lw@fYln}YP}a;$Q)|0~C;~v9FPt_O zefjiJnL`{zL5MD5tC6t#}lrbhgX^N(mNU&j;#4 zMQj4(3opwwa3B*(9F{pl0E+-1#0K0))EkGk#kjKI%G|@*x2ga>kRKlw0y5d%7W$R9 z9#&u7> z#(zO^MD+mAnHcpB$kys~`CL{+R`r^}SX)m=&XgiRuem;FQ6LBK)G(gEZz=?_Jn(Fx z+;yQi*up}NO7{Q&qyGB+M-Y$Yx`PjXBmF=u53mS~5aRMczOW(Y$$X85j{Flu>A&sB z5_y1y@Y}8I0XeeWJCPyophPE+wIg(S0DC$0OI1&OC$udFvH7YVKgueR4kl)V zz7==s1G@Q`luH=}P62vf01QJe*8)Q#a^2mD1u$G50N{h69K>}~TqO2DQaAP5VHupo+vdT0-=TB%Z7#6zmp)@qE@NQp*>`_1-E-pEWg|9~?m_m}Z(NvB-ju3UQ>;qRde05M2+Y->?-J9qDKtQj29=CxYrz^#iu31&WK4=1wX>?dgb)FO6Q@tP#1dp;)*3u%&6n>h;{Lri!Axi> zAz}K}gjiX~dG6)a1^LwTtQ<=L^^}kRa=nEh;xPa_P6bi=SZfK%J9y`WI{1l#h;K`U ziU0s5L|=VHu*|50L=K>mej-Q+1T?oMqzH!xAOe686Y!mgxfmk9ar3bpBY5B84r2_v z-C6POV@Y(jCu{-K7b+78F_|j8J>lph)?gom^k!NeaZEtF?efRuyQ%ZV zO$m$G7J%%lfxL6|@>w;PGjbtbKH?@e zdZ2q3JdhE0#^%Mb{-g@lmMU7Ci;|psKu;iui9J04$Hp5AR9 zMpkn$ZMOv`Ch|ZY*eG}c10p8{{ra;-dI4oOB_IVno61Ix^mUXWgxcYEhN*nG1!Na$yrRz|a5y002ovPDHLkV1lDSm?8iG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png new file mode 100644 index 0000000000000000000000000000000000000000..50c40b137ba645c8e256c6388e86a23e1fbd7caa GIT binary patch literal 851 zcmV-Z1FZasP)eLoXwOxpy&_XMAqYK>#qEOts za3@0d{R!^%ABbCNq1csnVHd4XQSk$DF{49EYsV2Rl+g%d&P#9R<-WWmlgWYf<>S3~ z&b{~KHsg@Mz1!1WjH8n^`G_7qdO1WTBN6~&kdB=kjUJAlJr|q2v`F2ug*Z$;Gk4K= zxby96>>A=A3PPlaqM37+7O!{psIvf3bF)_>5rbyV@PG~2RA!`%%sE-nzuW#ujUR`> z*(N=>e^+hJ1WDvJ$jn6oKydTUf}xtBNP;;SdCuO?ecErdC{O8? z7$DzzU8l)Y)l}lN%oze$1OOpPz;i?$ZrT%L%YrR)tIO}>0(e7yeOL&{ba!Kv;+{WS zj-FXXXkw8$36%ke;K^KHTqBM8<}!ttgBn8!ievipU|X zvDT|$5^x_T1`*cakN}5XIwJ#2ETfyDY!~Ojt4}^19r-lubW8!#1G1iZ$YozZ8DDI) z>DTW+G*RmW2ho@BM4b~O_~0367M=efq3Ob_tJS^xb2&eY>4Z`H_k2UMnNm0%PC*0<_I*XF0XAZ8Nj zfh_1Az}ksOdnHr2Dgi`bgpff!&@WfTk zlQ%M*NJ0`@1@J~i`T&=*9~c5;UjXuYpa`tL3yOH46aj;HpcDbJFMzy=y9*0o5g1tr d(677m;y;*ARh(7|)b0QP002ovPDHLkV1g}>fhqt1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d79361c643fc2fef32d2e28cf58c5c2d3a874b GIT binary patch literal 850 zcmV-Y1FigtP)|)2v6F%M?_a-o-XRX6AOs?`0=g+7FgtUhqh`GyAZl#%tQ6r95T}IQ0I~cPaRkII zA?Kp-Vd;}t{n@rg3*zSVl#I!^hMiUX5<&zBE?vD65KG9!tTlLY&5vIj;_2g$-I-8V zLSpINYq7D~3f-$#7vzg?>T)avBq<>Qa(@d!q{aa3I4%r+8MlP=4&GHlKhzTi5u44n zD*!+V(bq^3N@gq}$pKU{N(6;KKzXnrMR+^_5dehffbU7HiXr*j!xwUl;FA->+8B1b z>yjMnqyYAXWug$BsVaR1Pam-c`ygce^q?n>4rn*X*W0Eji-KDL1Z9~KEXvUUd-(Q! zQ;hGCMiC=(kYhc_34>W-^ONTbPL`?|X3ET2KEDV+cbTy@D)Eh}iQqk;_DwY!Md9Pe za-)^u6;AI=-?|%G2@nIGd%*7jW~?KO0=@I#-fd@2Jyp8ahI(K>u>7jv|1mKz|9Mwz zZ|{ntk&*{=3HZsEza0?2|Lll!C$i#j$rLMVLYN23;T~|WUl&m=!QQY09z9#PGH#3G zN3vE-Qwq=L%W^K%15rmRN(A9Gan6%Kqm^^kCB6p;)dPGd;mX>Um2qLO_x3)#I|5V> za8ptb5a|8TKuPu=8kok?852(bFc7=8DUHv%a~v_D%XPpfY!WajRD>N`+&&f`AE)B^AaH|!dQ00g%KGko>UBEabr!TeeP79q&P z$IJBLOM^N)%QQCHLtPPpFSrj}-z-A5Vx)(6j^JIrWqmassMI^6zYQH6i&>#Wo?d{B z$$aCt>qLwPwzs$R?j?Blt~&OC=Rzqk0(dcFZlOjOPV6y(jiaqP_JQjgN1TR)2NqX< zn+cr6;wsVc!!ZHZcNWO{=2B$@J#c;O7~PxusK+B`_R@=2Rda-)9^tBQ8Ia-i00K%8 zOYa*5OWHkxg>b{M$z?zuhkRf>fS|X=2O=ZZbQ(HTi->y!j@T7k!c{$K>r5Z0MCQ9Q zyJQw1N3uuoZloB%ms>#kAm{FN;@c75-P02YC(>=C{k=LyW%0o?FTX@g+!ng9R*07*qoM6N<$f*P%b AyZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b6e6efd85674fa9683d7b8e4ed7a249bd97a2ed GIT binary patch literal 666 zcmV;L0%iS)P)?K@^22ux%=TB3hUfRzd;>Ok<;^C8I}y_7 z5$t^ri6Exa#v&0SC|X%0B8t&i`2aCz^=@YF%fcGnFt#e#DtF$vR{>~3dVB~3W^%f5ED4=Cfui{G+m7h|B@jYmWEOB>ayM!wC1_!vzm{>$D1x zF<)ItxKlidKHqc*EdzW%eav}Zz&1j1Xkk9LnAIS(47mD&NtEuLYEjv5l-~8YY8k+} zt1obKGR2Brh8h6mHfl?^Z>1CfR|aTepL8e6z*W1O*{l?X7)T~O11?RK0ek@hM}YiW z1_*@SZsiR4uFRGJ+)Gt@cp0eggr>oeyc*w?$wpk<*a|=sCFujSm6J#V;C%r~lJ3L+ zq$C+g1z?&CqyoVE0?d=7J23!3;7B0Qr0Mq64?f2s-qfm)h5!Hn07*qoM6N<$f+v<1 A-v9sr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3ffcdb6e8cc72cb54ab70cbc6d1af1cbe4a833 GIT binary patch literal 680 zcmV;Z0$2TsP)&5L&CgBiJ-Khb zR#kEfAp!*BQ<7;N_RnCIw|XWEg+4B z1jzj@1d-eWsO{q-&zDIpWOnc@3H^{?6hyo~Ra^l8EJR$@E z_O*KUF#+uc`E%t<6;;7?0GrZgY-UR|z#g7nJgLE7QX4TU2RY`0oXE2(EZ*5WcB+(O zSSc%~eSQ&u=`dq!B=PL@Q1Bd(eUm|>DE$1me)!1o2xoTY7FR=^05RY>2mBde#U?@< zn4OKaC1*^2Ri@U4W}qHuzZ4uL#N_e_NSgsu0Z~I7ngRFtbzy4>)+Q++Gy}Fz$|iz{ z8sgOF03kEL=O`f#WPpp(W}qJae+Hr!pamS3%DK_u&MFqL9ky?n_Td!dxIY6?3vgNh z5x7za;13!hiKVdA=YSLv7tBE15NG<=EO7?XB29=h5s)UtnYAEkh`#|MNIh7(ZQvyU O0000_YP)q)K zRNs=w+js9(b*b#M<2_?)0{FoTyM{pk!R^3=uf9nFK7AzUUlYJ01o`;o$S}n7;?RLF zxDTvvl8~(!>EX!{e6dp2qtO8K%Ee?Tk*62nATr;0cHPL71|)cTR~`F6TPy{J02fmO zC=r77tzp%%53FxoaR`|-pyQ6~I}2oe%aj6zG{7s2^$1se%YZ~?4e0r4PuVsSVZ*VV z%YdB6bl}v03=p!p;HsX`x|9aUmKt#B!xpPAw}742!Wxh^`(xy*Z|t{qF|!6pE=zs0 z45J$OcHAj#)>j5yapfTm#1PYf{LuZn?3Z*3KmsF)5VL52L0p6o*xZ0LkO(pS8tU)8 z)WD=IPvE*{861@ zrq|<_@&Dd4*q1X_zcmrz(wc8VNE<9jvOy@fu_=Ij2e%xc5c&iwLibu|gLtw40000< KMNUMnLSTYtR~xMW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4814a838e6fb80b9136e7e9e9e88d558db3869 GIT binary patch literal 689 zcmV;i0#5yjP);pRa-RKkK0V+^7P4z=xe`7kLYOGFzFn020knaq~5J6pGr15dJ@ z?d+R*e)G;dyK{;Dv(5p|0cr-geXHL&?b*k*&kc10fN^s)N>}4a+1C~8bj7ge&JWwx z0?`JjW-OGmimv~N8Ax|>kj&dfPY5jlFY`(v8vw#JkRCyoCxkD+*yxC}v601Wi$bt}3TWxkKoG|w*L|*_5lDOfc8OMsLE1SXaH zUVR=^+5n9W7kCR3FC)LAs|f&WZEbE+TjB=o6u$Y!M_O8m>_T_|Fi+nZR+fFq}CfoU$ zp)PO2O2J5N|3zp2SdIflBA#;aeIFVd_Ka1RM&~S`1pvvxGUWJ#Y8wXvsCDqr0qUW@ XAJrpDbVDPz00000NkvXXu0mjfw&*q8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d788499313a4e57249941dbfe3a3064a8b17d2f GIT binary patch literal 635 zcmV->0)+jEP)2M?AjLHS+*XDZ_>`}&Tr@Y+4=o;GMVth z`Um(2_*($=wKcMYJFR$}AGsNuWq~R)WoE^+i6Xl&JucdNXbr^ zC^XWxU(xSB58%1ZVRy?u-w8B#v?h(!rp7NEnsX>csgrp?W{zc)p%fUM+;o6c=m{lT V^!8ndFmC_=002ovPDHLkV1f@pAFTiY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png new file mode 100644 index 0000000000000000000000000000000000000000..88f24bf8f6aa2a09ef00cc95597780320962f2a9 GIT binary patch literal 636 zcmV-?0)zdDP)*Grmexsv$AP*ZP?HMX>stYP!{)J@tGh!g;VcSkzE zjNjj0m)rv`(lfw8<`=f5AY1|FW{30Etlb1CK+MgO6ofJpq8#=ek&!EaTlOc1=XCRs zWxaixnV#ejUO-#{5MXp--0`8@8*B|)u_pPHqK(y4H2~1z(H^hsj}S#6c=RAfvXb@y zARvG^&3g$f4N#~rKjS4JIPZ3~)&Hv@xvR~WW zH}9=5TYDLLetDy&P>x+hS9e6Y>RQs?AJqT|_4kF%zA#!mt+9-=G}0SnqkcXYPaAwp zlYFvg4?rjZb^^hyLJ7R8EDs1FQ(X@fYhM7xJ(T&-)BrenU}f!+8XH2q{s`XQ>}T~i zO8QCwgsdLG+wne`;n~7`FdqCsWboh+PC`Njz;_-%UuWAs*nwckHe;59odFJ`k=*;B z?Ds$+ctHpZ09@D&U6-rB6oAzO=tBZ#arv0HqVCXRB1^R)KWh~M2-!V=U1>6_;y2;E zs%#Iak}JSYG*&g#AI<|rl*8$_0BcYJ=q#RA^Pf;apcNpH2xOORU{3&c5S9A#FQZR% WtR?Dq2EP6P0000g2@TM^pgqa};9h9*sV8^M&AHe#G_;<+?2X(q{) zZu-G6k2}oy%{gZ#lMd{&4gd}SS_TLY4V3DAdo>$B^xptzxWC(ro_@bQ7Ch2ZF-Ltb ztz>dWAjSZ-42#w`(-nQrIeq4&2AO!axF>`Wz{r(TdPlX4SBu^t5DOu~nOtcvPc#G= zy**rd{&W$6qh5RQTAH1UVan5fWfD3Jo_M&gN6S0SVNIjXc7pAMLMK4h@=TpLJKM6LuLmDkm!Q!Nj;R0F@cPpzGkRRon?J>Gr)z z)qi;$tI-_=nKO!cO8{J0;(Kk%hq0}Q1{rz#8(>k(q)|4`y5T5&q$5u-1IETntpBi=PZwafY$J~Z1H=P60rzdD^w-|zE)lv?KxKoeE`#1LG zO@GC)pkK$I#s_;{D*nZawqpPSA>wVfww~3yW%4oc5*Bw{)W#{E zgvJ+fi#foyN4fpt2^!;WvvxSt8PG6pnB500=8%0OD?>Rn52_lcudcS&{ zBhNCEpJF2bfnY5llo+a(so|yoszIF8zW+7*11G0st3i=}G5`Po07*qoM6N<$f_;Hf AivR!s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png new file mode 100644 index 0000000000000000000000000000000000000000..08da97f26df03a24b3e3d177d97704dc33a67f3c GIT binary patch literal 750 zcmV*Y+bNOE zSRg$o+o2<^5ZKMvF1O;~Of!b#=4nS#$B@5y0PE3JG~M`afw&4l{T}GX{!2e_B|L}N zsA+sbjM)%3_l)$LF#E>e>Auz(fSEmfaS+#%X=z5|`1v{0P>jF5+!XV#a?bVZ=#~5L z-h1v20L2o!bEXe?+K2qJ*N8x+ zE%dKnjC=vhuUa_*EUXq}uf78cgrV7KziR;MrO~cVIaXi1t@P%TfsG9VjrGnYs}0cB z?3brkapl|&^I{^0_54qS14Yq*q^QJVLlEB040NQO1NOS6@zmRSq_SRd;sVZgH;Sho zxt7Wr@|joj%~j_B#Sri&Xl55fP_1gp0VST)=kx!Ky$Q-WmHXv&2VlD#csTYMM_K|h z{xpxYdPMw(RM zL=8w7FZ8|#HGc<8b5k@X02^<^=hKV77JxkmIHnZL?FS!Zui{Q+mI??4Jfe3AK&dhZ zcq?HmDjo~2TGgBbZpjhg)zp05>7MoyK~y+)`a{GJP#;rScm63=5bPBQrHm@2Yg`pT gC5W5a^6%dT!;r2qf`07*qoM6N<$g4iHkfdBvi literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c14dd3aaf00a6ce6b5a966f09de8ff845733848d GIT binary patch literal 469 zcmV;`0V@89P)DIh8XGMGLa?{66Cr&b z!QKb(6%++KZ7dQYLPD%kBqEB@Sor|w{i}1{t!{SqTn&-?A>7{WkojijzvFH~j93Xk z0x*66JDW?MZtw7ucK{zuZ#-VnEBO`#R`ex%s^qyY*RZZ;eZc7Lo z5F-E*l(x#+Kb79_V{oLH$Cti1J!-iDfEw4Aa;`%mK7{1;tFGXR?EyeQ0MYH+BxVD= z&sW~#5fI$(s&domAl?}OK~S5~;_s4&_58qxFan?|RDXO{3(mtZ5P+z1B+tyI*$`|G z6j$@XS~VJ=@QWjB4?w6mZbEASf>7H&O#j~lpO4=tXdK1zKzRLAjn{L4+MIacPd#u^ z@21v^c@H2o4xI-OL#=P$4cxpF5(JI}0_kSVO>70Ag1FSkzl`1hk{R+HiS3#d00000 LNkvXXu0mjf?UKrW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png new file mode 100644 index 0000000000000000000000000000000000000000..09240c27c23e7b73d5bb0b8faa2118067ea862a4 GIT binary patch literal 521 zcmV+k0`~ohP)oaI*9FD!LdKVK~!)N)XBxk zT^-&03u*;N2OX?Z(V~-JD`K>@PFdVy-YX|0As?qnG@^YW-xgHyUAug{qnlj4>t=H)6a4<*v*Z}BgW2H=+ zI~4_Sc=}*tS(YjL)qqJVsmn2Q0R+SQqQ zGYItjc<+Fe%y}dLbj|26vrwP7iE7$Fm@00000 LNkvXXu0mjfFK6MA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png new file mode 100644 index 0000000000000000000000000000000000000000..395922b8cb053614798b774efe5b61433fdbcf8e GIT binary patch literal 461 zcmV;;0W$uHP)rITw3)r*#*^Kp3g+aKEJ!vZTIQC>ZP0mgpIE*yx{rbN;)!cduxL#g}ndRcou_L z0oa_4JA+{`)@cs4*|h+qOyo--tN?5tHXbFf*$Y65>p7B06atC44&oHxFJ%QlW*_X9 z=&({1zZCON&u-iRKq#@3<9*fN**h{CLzmYzl1dzc#>1Uz8AR9n>kFa$;>rrp{u-#3 z&jAKOXiW2+0q{%L3VGG%6VIgHhaAERkX=fv)pJ~NABKSd#4Cq6PDm+)I0wRY4deQK zD*}mY9L3H72rC}fFg5@~=-Y16|IY!`yIyV+&4FBY;{B)8YSfkO8hIDDn#MF54^*7ZU+MB9 zZN%5Jv-m+xIUz6zmG19UwME*>NxdI^#AnpNcpOz@L|! zLRCPDoFxEAPm@+6U6pbZNB{_Ia-5ljL0g~+vFD?4QlFU~;R7cDl2h*`zy)UcwSBu- zvX}rs&jhU5)snq@KoaaBM231J>^TUw1#N^9U{wHpZF52soJz2ah-jZ2_6%S6&!|KM ztc%aef}4a8qT7MrqiM4}wnH8y0Ej0iKVK$9i|4!&H26FFB}81%hawhj!Rl>Gw|9>; zJCEu!T*Gh^LiT3tgI)pIvQ%zX3D{u(kv)KcH1CGymIN6>S8xYWTmT?Ggf=8C*-L<= zC9~fJ(w6L10ar^7B0$=by|=)&WWc9AECF4XoT+z4(~?C6%wJ0NF|m4BbjB|D2G!Nd UYtIZuFaQ7m07*qoM6N<$f-+CUs{jB1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png new file mode 100644 index 0000000000000000000000000000000000000000..947f783128b7b35012a78778cb90f4d782e53f91 GIT binary patch literal 393 zcmV;40e1e0P)=y+3x+l6z*7jLFfDl>(#y{{zr%*(cG-2NNfw48St;WK>Kll(N@&G@etl zVL!y3b}jhcS*&8sE4>5&dKbr)5CF@TkN4Xn$x6BcSPmG6q4-!E0LwVaOr#>h0GQlc zyVnXNHJ1W_?5Y)M#H!-0H37hYH^*4mQ0o#fL!9$M$qL58Jwil604jEUB7ivh$|n3I zeorU|NYeR~0I&?%iQxBvwo?#gm_$+)z!8kzfG(W@(^7oMnc2K=00000NkvXXu0mjfBhsjH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d06908207d9365cc614308e0393306dcf8a396c GIT binary patch literal 584 zcmV-O0=NB%P)y9AyFbm znvfPn6P34h%67Xgv)eYl3obP~-<#c;DJSBeWd(3I@PBLrJUj(Ql>v0TQ_*gDqH%sK z*R%PXxbFL@^=NpR{C}`oAKbIl5df%Y&5<<#xz*R7AK$`7r80oyKwuS0U)Kgej`MNve&%XxRxe|btN~E>Y5+ae>6>5d-U&bz z0yfUm>E@ojH2^x=&7dd3_if^y&bnwkSNc*)!60&Pnh6B7pO7U1boZ$HqAo}}2$na6bE*J@s9&l-~Jc@>xlP=(e?v4$-54qy+k3|19_d_XrJcYqE` za19MyhEf7_JOD4G3fuvj6p3-P_(CZG>}%G(e{tsmcH(tOMlVxqubb0?pb{V>)Lo;n zTVv5zsY887>F6vb~k7puxZ-I*>x*!jK+ zf9?Yejx14g-3wGfyP>Z_)LfD%BfFn`zb^zSz?TC*^@8sUn4ex;x&Nn~lx70jd;ot( z=w84!1x{{LS#6G`mJj$OwEa>A`a~ygy1%32bN6}wKAr1J`s+JQ1g6P~IaNSVKnJ!a zRr^*96&QH0x8X{V5imbrn*e;Fr_O-T?O4eNW{Kb?M27m*)2Kqwd=^X#I12qvNdX)t4w>Iv-wZQC^TnFv>R_J8%j~z|!|2r+ n&CYu3a}8HB94x$aa$W`Rs{d}#pvS_nA&H^N9f6yzgKi|Lk_riz2 zod8X`C#?R)Cks{qqsM;M>s}W3cemZr+SSeZK}4OHC;~_fGEJmO@tbrLSpcFR^gAZ` z+8zkgO_G!KN*SO)h#e1&vkg`Oc+uFH44#t&QG%GytL56dCxQhK-OhE91wiiw`Rr>$ z>oPo*4UGb%4J49LQUnF~pj8G68_c%WYi7iEA2@YFL<%x&K3Sq%g9u~`HmsA~VeR#8 zWwqp}0BwT?t3ccE{B&PjA+`yvGa#!$gEj!JRyZF>q3Z0000XP)2{Oy|#z!pQQ|NJ_LzkM)M8Akx=fMXs?w4DLaie=7p zBBBj|$v4|Li$GK7MgUNF5=b3UR5n{j0B|5W#~AO>X$r_8>b%_viZQ-N=tv8|#;$J! zprSw7gmn`4gmr)>ozDp1Vmc_DgtS7c2yq`cs{)zBCNfF^N>J7btpgzZ<58bIES@tv zU;R(#XwT>iRgJ0<0BIe+r!Bbb5FnHeeD`{ePQz7{WWRp*I3MUT_Oy&rpw{;o%cBE3 zW;;7&NZ|*-YqDoo*SBoa_lobhhT$fJ)$_KF)GwveVW|QTZlnPxBc%qL^K!ndy@+Z7 zQ1~I*Xf`DU;KMH-Km=2DEwct73gM-T2;T|$@4Dfy1rS%y%V{H`@W;unvZ+ufth<~V z15jDfli@`S`)&(>J5>w_A~sOnCo%C-L!00aZLJbs`n!m)C9sZh*ssS3cVG-&8(E0b?w0XoAX|DwWb6xFXd+zakcA`})YUg-^Ky6F zkpskjK0SBAaUm2))2?zwxG8txN`M_ai0#)iNEA@Pm6>c^mp~Y|<^Uvvq~o*G42Yef z?kY`K2Avf4#61*~h9xPRF*6o&g6pb4T0~9RNRYS;N5^0M3DKT7%Vm8ap;jB_i-m{) zN8>6mH3dy&&>A(P);E=987$2-KF^^r!)e!_(J&(gQyD;91_Xu^bQMB}tY$pJr4(Y! zlg{QZ$BV3JR;HM;j>`}>bJI*Ax$m>Ne>U9iR)a`?4ldBb4FqXsLn<-!LFk0Y%f_u{ zyvQ|hL_A9KiYLvNzYm0hLNOtMW`UX&pzTivRPSuoch>xKI29OAmdQ1(;C100000 LNkvXXu0mjf(MmCF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8eade32e2bdb7721faa1cd53f8fab9ab78c1bfbd GIT binary patch literal 632 zcmV-;0*C#HP)I+Y47X(bTZTH z)!lgO&j@(+?PTvaJiYe2D#SXQuhh-MbZs()3G}+32YLPb{9P_wDnCP0w_NM*#g4p zaJ6Bk=1ylx14e=k%=GMN>z}et&sQ2vy z*ZNR0Nr9{+p?kn&B_Urx1a*e9&S$`2@D!05C1*}Lhp7Z4Y5CI9JzxgmSY>6y{*XW) zd6DL@m3>1p^!5C@OxdL*fN?w#bG@ewgq&}{ye|<<7UJbIN?uHmD!P{@ARi=hpQooB zxpWfwWMuG!07@ohkdDog0USqDI!=hqCJWAYzG4EkP(Ovu`Y0_4lmtowzkv^>!Y{+g Sqft2k0000{Gnsidc{l06mX!b!KmzDoo#yl5V}4N@D_$qR|FV^uwgB$#pP--Z z!O>w>{p#ZI2jot`I6~ml2S-iHuXup-vt#FNyS>Ex+4)DfdbR zkR9wp2~$%;Upz+x4COf{wC<<$g-G))erY^_A|Gg?y_RDO4`5TtFTPhq59pEsX>L9M zco@AjUlJGg@V(-AfReNZ^t1zqYoICsJO#Cr4`VzY1F`HxtpNCU&*h&1(s(F`@3%C+ z@qqQrM&Z3-@eBH(R@*PWS5~?W`4(t#%T}#*9a~MPI5r9o70VIF~ buyueRV{y!*)UsOI00000NkvXXu0mjfDb>C= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png new file mode 100644 index 0000000000000000000000000000000000000000..096bd81728894c6fd78c9d1a7fe8d30434df27e2 GIT binary patch literal 335 zcmV-V0kHmwP)9iFM{YHdjH4h5eh;ON)QW4uo^{^ zZANFYzl%9HuDUz(?aXnVTR)Zn2!H?xfB?JzY}V?wTB^ZCj%%|MT#Kq3$4P2!59w?W zAPg2p3AmzS8npm+GX&S)EmtT&ddkQJ=L;Ro_kzd!ydGzH**%A<#z~2;K>;Apn5arP zZdhMc)NBM|!Cc>~Y7ejg-r)gghl;{(%=Q434(O*OZj*65VeA1A)uOilm`{v6(3Z|z zPq2Q;n|9dNZhzzf^h*bUuu|&J;hr`o?J4pc80(|nYaIrg&j!Fgm#KoYfCZqR)t}b? h{S5^`00iLMx&wlzV!Ox7mwW&K002ovPDHLkV1ih;i1z>h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8df1d053507689e58cd7ba59dc8f41612834be0d GIT binary patch literal 588 zcmV-S0<-;zP)wQpgn`LY zNf`QI@VDyA5Q>`5&<}g>jg$lV{R$V&Cr;TXAPsvVm~N^A>vRWNO*5WNMTe6}E1hyv zN^-eBIK~aiQp)*p-`%Q)BW03jfVq%KF2^vBrNLrQm9Mo_P{zkI8bB^C&j9poK&GtB zGWNSs@X^-tNYHX=wFlhdxpq#}!V)|!w* zsxd7mK3N9y(2^hr0hre92T8k8jq8f+pF1Br$G9vOeg@DP206>P+Q&MPlBe@YmH}h{ a$FgsA%qUNI_FT#U00004ZcKoDJJtyV)J6$&cou?G)+LBHNF@Zh0G6)jY3 zAf&BTF!m*V%XG85CWwfV2PNI^X5O2bmua;6WwZiX0pAiZ8V+(?j}9Z%IoMTq_b=+^ zG1>W10VIw4y~&=2C%+3KW;2S(?B+4Y4M$zlC*kXDdc1j!wa?Bpnav4S#}P3 zTm7d%SCw#`Oy5;qXk>=c%U&`Nh>6KGQJ2G0l`U6J5mF3VvHqCWx{_l|on}y*nv#YL z=L!-!>pLUY#Zw^rDK}jK_#4_2dP=sv6M2Pd24lHpDd~avqFmpOpNe5a6G~(941s;b zVoRlPpsf5_07mE4S)9jxwG|NAK@@LHv!v*)%+@8^u9&O{AwA~0mRy3h+jM4)X8X~YqxerD_o!N~k=pvS6uJIfa(ddOl zKBf}(3~>GKJ5yUg(^sv!_}ed~t$V7~~u;R!@h500000NkvXXu0mjf%`)3`pIbI{RPBz^41n?CifgH5NT)H+v)0bN+tjI@Sts5eFuk#U=E+=!IuDx{sd0+c07zxIY0D1H-->o=w$-jK zebK_I0^rY+WL9U`e;?h2-E;j7V+d3gV7*zjnF9tf&m1u_$1{yr1t4L91|;q+MgJQB zMDx1?P{zY|e8S;(RREe0`#cD{X5$`liktv=iO1sqNNhyM#LG|i?PAGl01)*AtlD)q zhyZL&=A{XFli`;)AiaYP!;IG7mA`F>?&ns^V@ynq`L){C(24+UhRk}QU-7`I)c}xb zX__-0%VD!(bpVuK@8*MR z7-Ce1$EU~&KyLQ*aKFdeBYOzF!S9B&3zAgk2dYj;AQGtqK*M8N9YE8PodJAVvbX{g yOI8K&Wyzw$$cH661NgFJQ4jdAWD$T5Oa1}L)BR%Nn=5eu0000WAR!uDOxVGV(@0vwKez>1g=Xj^}tNCp(iqw>n$h9A@)rSAzuszf8yiz$e(h^s0Og_9dZ8=3)2i73;AttEGal)%wPJPv zgp@8EeVuSy)Dq~_+bLN9AUf+2=54W)9?#nIU$kiwqVfZfHTY7o;5t+OV0oR002ovPDHLkV1i8_zO(=U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png new file mode 100644 index 0000000000000000000000000000000000000000..08f725999fc2ef1d1ce4ee66847248873b69f2e3 GIT binary patch literal 649 zcmV;40(Sk0P)9S6Z^-e2W#K11H%HcTOhs*EKugR!|a>wf%VTa0=NoJHl_jY!}q<~01n-j<#b%D zW$%k|7=Bp&o}U^A!EyZjH2N%krxAeXcg4|Z+v12|biVjnrGoS4YXcyS-X?J-5O}@% zjYmUnPOKQXLAZBuj$GdK&|lcBofQd^W{B^XY)w-Ln8njB=4Ne3R%H< zV*n89!1EIbS_M)P;^y*H*!SJTYpx~N){O93T6Q;6kjMs91Y!h$LUTGv%DD~0_c42b z&~@?$0zrMK+BpNdU0QPd>ZBc-WVWV>Aww%jgwmFrZRvfnYR**0Z@o!Iz@ee?olRS$wfOOV*nHq z4^Y${Iq+ZGvPv}|+jDx?qXLyl8{qc(V#C)p|Mq5vrxFnjKL zDwLF)fhwE5Hh}7S@$~{2lU-3M0RD`?P-25oT(1a5XE&q;00SWx!#S#+fK=Bbp%>_? z6o9)IvN0MzTjys%Y{4QEe%kfQ*1iz{SMt(O^!8yt*>>r;US$B%OSGT>TaZX(Bn#Of jKo&%1KVQt*sE+D{_w00000NkvXXu0mjf-(Dlr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d13ab2e078411a43f73783d92244444f69053665 GIT binary patch literal 593 zcmV-X0Vw zB$?T5z{Kf%VPjPQ4BTwiP27pL?#DH=GX|I{z;rgTD+3H-nvyXxgKNI83P5EkZv0BM zO#iev0s8@P#qK>hq5E7FfD^)u)hIKgtP#En25=o7;&>GRANi*LU;vQo33Y&?RjQlt z_UdveO@?0>P?lcYLySU%_+S~3r5F?a6@N`qT>!g6w-gt|r2&|JtSm8`Z#?3nQmh6* zA*F0Mc2&aRC|v<9c2-Ii0Eni8(T1b(YQ>eTA28WA88g=bVEU=&m%&!&gEkB?4aeA5 zxd8Wf*R~18{&Qdg#dTwSfNKcx!_#YSBkBzRNpndUE#(5RsGtkN`KH`nk3h(T&)N3| z7`%<_z<`kVdHiG%3ORmW01yY4lXg38`#fD8JARUJD%1ereoVwJmxTxQAI&Ds$IP$+ zE&3pOu literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8a10f9ebd973e43e5163c5480b8ffe0f57fd7b94 GIT binary patch literal 650 zcmV;50(Jd~P)t}hrwg9nKD`xOo?$IOlGdvA;5hNe z!MuwIBLO6pgglvxUzN&5<%+}%fP5S2 zY&wrf5j}BzdA7K@f3_+^tN=t0l2SP&9u2=E5t6j~-ro?Li-4c;Y)QBpqt=p?gb;;{ zxFWFxh?>MQQvAXa)T94mJn?fB@Ywk%pb;6ZY)07+B&RssgL^Xzpa?8M5Nt~`=XbUW zOn{7_Q7I73yHf#3GkRmy2O(sZPzHHVQb|$;z+O=X_CTB<0{tOZkG$q2fRGV#39{>T zlVYQGI)l`b7zv;!NTb2>r2p&AD2*x&#u)&Kj1uz|6FUVo_C?Zap+osp!{ z8F7BxY^2(=kpP-fkcIzfL5hbfu)(&fW`udq-f;c06++OCzmD!n1!0wU(ySD z{n?Uqplsmege27o`2xf1?1fwfpc!>SDav+hwi3Y2Nk&Oq*1={>+oCgVMrqNSWW#AQ zV)XKrjlf*3QeOU4;FLSdfP6>P#~@}2uoQC@5JlK3ug!0aD`wBL7Jx`cDs(uS56dEV zLete?EdVLyo}iOJ1iYbEovXOlxXc0olps8YzTh>A(Hw<@iwNxUZQp#T5?07*qoM6N<$g6nl6E&u=k literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png new file mode 100644 index 0000000000000000000000000000000000000000..b42dd106c68bd129eb0f660775d751ce3880992f GIT binary patch literal 714 zcmV;*0yX`KP)RCt`VSIbVqKolK~As}c{V$cNT12pjm^b`DI_wHP|khn!n zlo&`5l(-N%Go0ylDD9mBchh!Admi^O!=BktT%DiIcz^f!yrX?@Z2|!P9RHa5e#2C% zyXI&5YuB_SN)w=B0Dq1LejOwxU;6Jv6Cf~DpR}45u+up*!@+32+At(_bA2&`8@Kn} zTqo27q+&G;Mix6s0+pRgUdwzNCdso5^V14986al(` z`^opzu0gF#2c7{;LgR7BrRW% zAzAx=vhUwTgmt2FK=wD|tv|4CNI=d83Bp3fTGn(dBw&kZu7XM|P%Q55l0j@&?p3zyDDJlX8*;c6bG!^bF;HTpPRJvkqZ@TV5%47?x z2}ly*8g@n01Jz1*P_V2Y1i-00ng9W_PCFnW=K{fu8F|Gaa1?=X%!bdB7=FuBT#A4u z00tL|6mN|{dO{j)?^s^6yJ>d6XacgGIDr0-W>*Wm#vI921Q>GT$r{ZZHesKyO+cz= z;9ibqyVlm7f};sQ+0cv}$YQ|AzhQKuO#W2_U@89jAhIUmTOa=me={fLMhGBSbg&*{ w7n_gVTGPUun%Gbg=svypy&n;7EPO5#e~s{^vhwbLD*ylh07*qoM6N<$f++GYJOBUy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae42e48fcaa1011b8f08e0d900fe91cc5d52a6f GIT binary patch literal 645 zcmV;00($+4P)dgx0?H|>19c{812(H|otkP*lTq!PG1JsjhD*L>gF z7=iP~{vm~f5CkAO zCuIx=BS8Ra08oRU-QGV*HCAnxAn@HEM!zoAsulSF$r;=lCU$dmCdsVYF4+Pk;i~oE zMcauv=+9xlYP&2*h$QI$a1hGC2nc10Hpw;sNN5sGYgfDD#gx+ldjK{Tl9VgCn1LP~ zFjaumL8$KQ_IexjWV(%h7A=5ma5UvN?{P3)1t=%%{V+x_sf?2-Ob|ela@m#vc&HXp zh7-ddNudZQ$7{_bSSg(OIpPZf!ue-F@;a?fcR+wNC72Za7_gnye;(Qisp$-G)kAwE zNC2+ek^wN;Y{M0%5#lPj!ZffCZ20Z5S|1&1wY})*QN31?(wJ4MMWqIk+l7Ge;{i1H zh6#P?S-dpxEtn7?+I5^5OMQ}YzkX0nvAP}0a^e|2C5+Oq*YEt z#1o{Bj~q$Ne06mqjMxm&5chpuFh?o5ui^B%7g@A(*>ja zisi*-I%Wcr!aF7}TOZ(Pal)65O$DZuzCL4eYoLtoGsYmz(K{Kw>mBV}Uq}LNQ9B&;uGA z;0H*dR`3c&GqyXC9nUwA?6J_$j7#|~0lx<*o8Q%WC5q~R$bDQ*Wo~y+fGc8Sy_K$e zNbe|?WB>pF literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d0363b61413e60b70d7a3c202377b2e7b0267c54 GIT binary patch literal 522 zcmV+l0`>igP)oI;ss_WCN+9jMxTAw281y=Q zGePa(wg4yvKg8)oEmcQ_8E~uM3rKrDxBXnG$^hKG6m2pIg`LV|-$0ofjhFQSWD8^x zpX`dnmJL3=u2PtR+w1d{3W)GnS7?Epfja#R%>a{0yS#4CvZbb`$_CFDSo*m(wgzyh zmTyD40w@KZ2C1)>_}jpC>5}h8Dt})XJ7<6u0R-ELYx-j22H^NG^*)B-7T93iDH0`V zOAUt;ZzZvgmEx?deGDliU?PHP*rcmJr~)?8iNYh z3=%qe-Cl=)p9{#gMa00e*laJT>uw^th(dwLlk`4rW; z!z5Mj)v9#nwgB#~FPeq3{H%%B>#r6RUqC(&PQjW;$Qcb1^eOS^%eMq>7;k z^uG9LikU^XieeL#3;C!Q#RF?@uLoooT!r}eYGvk2s9pfQds~bbm%>i@Vq2h+rt{h# zfRBL3x@2}HHDbseCPeUn7XTOcKv(;_@^|vUvaA)Ymdki9$$9VP0kjIIf$L`^-DA*W zQ!PJ{0$OCCcl6qfHAP(f#j`k@Qh48JS9 z0N{mXX%cg9@H+v|90s|sqlw71`@rb|i2DFVZO6zZnQOaStN`+^{%sxZ-*Es400H2y Z^bI)JvSwjN(3SuI002ovPDHLkV1i8qyd3}l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4b6c6bec5e94405a51bdf775b817af35431188 GIT binary patch literal 695 zcmV;o0!aOdP)2Y;HBunlQ-}FXz$)Ud9ZkF zt)L<)YEw%O#=MDdGg%{O!H+{8l%$*8nK$pvZW72Jqasids0fr2I6l}-a6P-cuKgN; z!|ry{?QZJ*IC_#+xGpD0`$;^V$f9Hr6W8`uD2xLOLj~q5D8MAFnjmBQ z-Ncv#AS$0ASjvi?adMQdS#~DqtO(4dn3L+JGXd zf>QuVTH#V*(5gUmcD6JaWgXqzYhnbn1ktp<3f2bV-R?v!V3YXrbBwI5tgISU`h?30 zAgraT0Fty?bypqF0ACsS?skT;fjfm;tc(ojbDr(30Lc;DUBg^Lda7Qgi+mgUS0g8_ zZ8%zD)xmtpH(B0}1xjq-95y58m)T;GDV*6JpqWOuU=vBF9lAYg zD`GI(prkz;c+%PVHU^v4?i5vkXFLv*M6t`0-hci*U#h002ovPDHLkV1h@CGX4Mn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png new file mode 100644 index 0000000000000000000000000000000000000000..5d25c6018e397d77f3001f8b13a0e8c1d07871c3 GIT binary patch literal 652 zcmV;70(1R|P)4lfKond_Ll7!SIiLyX)!@OCH}C$rKj1;*6){ml zAd!NE1ITQdGTpY?8jUew5@@^I-8XOE>;upIG4=%Z1inS!^6Yqx>q)z1X7ex}pN30w z*MB|u6#~~6r)%B^t!6wvn;X-p`&$BIQx>@dG#~<0YZZGx8NZq3Vr4T25zOHp*CW4b z)hVMwOu&^@vs5r!&Vv|K08oOmumq58x6?MW_k|tAhRBiu0Db1YC3ILb%X*{;$iEEB zmBB-BWHXt}<6xAPSyFP6!#u|tomxVL(hBHiLC`jX=b;UZ4N-3Z&(&HprGkBLs~Q0n zHYn_alnI%&8jrv;NHJSpX~sOz(0m8U-rhf1f}WmZEdzsLb7aff!s%*I%uy)<@7!GV z;!~71wQuLKrw8Y5WlNQT0k|o>VaaaEscKnJ!*ZRfo7o4n3_Rm`?=Xm4E*)2cQc=QV z<_Ln1TLxXM<#NZeP5}*`CKPT;8ubhh(nbwrx4Bye-OweGXTGE&eqt<2)>vP8a3i{) zI@FSo`nq)l)B{=a=iy5aVDjN{V0!0WTMn?KN?=WVW;}&UKGOpTfIvJA07ww*@g$>& z6w59H)wGgtTK2BhiwE$bm{Y@#)Mz1)%X#I<4koF?Cujs@&SD-1}Oo$o(K7Qv=vNJ}aK6r@Jo)o&gk& zARto#JllTg(ztz5m9|Xwu7-iB4T5$617s9LAb{7ec3t$wG@eET8wC+K0x*wuJ1Uw; zs7k$GY<910F)8Kk>SX%XXX0p>X!x~ z1ky7p5~d=HDYc@M3y2|re0Es~-xtq?aAWn3v`6Pc8h}bCCimLOW@U()=7<)KQte|wvk)&@Kjj=`2;%-Y34mGob_7@hNC^OF zj`n*_@F8ffltTc>GkS~4N8UeI>z+|tEk+}94?;U((1v5#xjit%Cdm%J0K8atbjUfp z3g5oVgZXI01sKfn3`?$BYp8Ok-!s1mm~(*N8ZwKJ$30^XJ?hQ#2QGn}TMN3q)#(aM zx!jQJ&CN%0wsY+_0)_yP_q;bPa^`~&6`VQgz?218^6Ep3xAW@c@JQFde9vrL(b?;O z0N{^6^a>F|4R8c7@6!9woXXwL$?yIB4|2u`0EDtYaBaeH5;E5T4FIv&AQa$XsVu*{ z-V)6DJM3K_9T&8*JZo1sVASYknwu9dgh$d=S+Sh>gcve|l#anPc8Gu|WWe zJtB8REJ7|slmPUq-Zjn97CtVx_Di-AA-D(RGdeZKJN7!D0SK|TlhcvF5UdyvatCbp zm?pNchk%%S@rxgWQY)c~9a5D839+-{lkgFu=vUauHdQ|874=W+j> q3@yjD;UtX;E8&9Z`u}tKxB3mG3@LUlZgF@30000;qIh2nA^jl$z2?1!HDm%CuRUW_Po_=}(>M)f{^!AG z!3se0`ad@51`=svzcvvIcK>kmG%2cX)&4@Vonb0zh~)&O_y ztFTx+5viB;K>gf}`LHZWeUS)&fvc6O*la!@gXb+`YaHhQf?%<<!U*KY8mpBV8O|q@#jW9OwX&%_7SI zpTGQO;N@Y(5F-bW<$xVWPB9p%$)kv!yY-MZ4!{=Qcb~k(tCp0sK+plI3i24ijV%o* zE6IRqP*li>^Zj3Y_$E<~Am{*4aN8TJGJO903(V)`WdpNeG&%r@b8-qYWCq#(fA#tm z10jbHl?GrI;u1r590S99hVS1Q;0~F-?l4YA5aj@5i$H92-y=H?nSJ}gL!9Y_BnKc{ zjLjl+aPaJHF#YD+KZ5CiCVV02%fMt%L(*H-0V-u%kdUITjP` z09*iH6wt*1Fn}vN(!~MP2nDLN2Pkm}*$%)~IMLMs)N%+#4tVnN6F3`!Xu3K8ROleL z2awAGx;Ov?kV{5Fr6koIpe!SfQOSVB-q5Q}h^@s#j^$)KfSO>`0izBWb-;i-004AH Vm_3~FW^Dif002ovPDHLkV1hK#svQ6T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a0fd2a259e11f67131a467468b427d12838c96 GIT binary patch literal 708 zcmV;#0z3VQP)@i56Pf*jZWG``6i9 zS=rH8X`zXU7A9&T4UY(iz=1jQ9n3Me?A|Rz!X)JOxZRoGelz=+7c(|vfb-*B@80eba2C%K^h-Ksz`4>|%BLHhKdwU@{8-TT(?LRa2Vr(5; zo*sBt#V6xBF#@3cTLyJtEia03EY>6PUoAI8c0CjPce=Of6<T1$L$HX-tz09;k1HpfTFqpj2P2m0oKx~pxx~L25m|M z-yhP+IjtX+QbqtebK2dYjpccExZ?rPQuGC^4o(YzLAh+d@E|{ooFEMVz><^4Ax*md zLbZe=6+l2LKsc6d+$E>7NB|xjZ4R-ukqwFyN_~7)`_QXtkxC5};7ZavU&2}d$Si~K zB6OPVAT?MC1OT(s3!y+z5@S`VQ37BvcD-7~38jG?!7ATBBF~f|=NwWsDS403DnJG2 zJCyS8c6&+An?nrEcyS*_lVF)6b1@JRl#U;2wu&+ zW}phd=-5WTsLRU;x_nsBjhKRygfue(;rjsH7oq}d0c4}A6^>gD38e^xLt`bWaz8Nu q+3n+7Xg0c=vB|6_0+^P~9N-Th5@h{fAfx{P0000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcf3155c8d92719bc18eebb6a0960fd2472250e GIT binary patch literal 546 zcmV+-0^R+IP))kKl$Mp+%*Q?PR z;(>!85n6$wsl1YDw%gJjO0_XzF0^Ht`OTZxW%oqIQ3}A#)p>Y(|GZNfz+uf2*B9;Z z?y0*rL@5BxR$V;4ycPQG|MvjqUnv0Q?*(7g0Z_QDh7g_J-vYq-W@A6TzdUinhfZ&; zH=#5IOtV<3jR5M-vio2(5jA61IJS{cfwMue0n}uX{EMzpTn6%{^Y|VH)s2M(fFxNG zqic9zIPg;Ip#~?|3ZNKugYJ)-bwLKicmDiajJ-)T23Z9i2n!%9Nw9eLAwNL`%3gqR z01BXaV_*Rw34tIPt}zlSKJ;ht+S4;vymtGM8uYuo&;pLwp@T{)3J?s z41nnMM=4*ZK!cCZxMSTpQL6xTAuFINqISCKSs?&&E|j36NKV&e%&dZ(vjO|RASGpi k)6Yf#zZF}6EkNY}Kf^Zc{}jfFJ^%m!07*qoM6N<$f^XmLWdHyG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png new file mode 100644 index 0000000000000000000000000000000000000000..07591aefa479bf27c3baccca5df0e51db652db0a GIT binary patch literal 721 zcmV;?0xtcDP)OxpA=AqB2wal2oW1%pCO!sj{9wPF6)c;Zt)+iOmm*gX1{M{zM0)yRZF(}PvG_5 z)8zf(=ar=q*lul%`TINVbi=qM!Np^FQ2!0cx7QG0-NDO{X~f87k$-i)U+S>e|hgQ zH35k>imx>wWjOoNQ(@(S8jk)fo&bj6CfR1Qs=B?w{0O|=f04X9_~fi75sMCl6uwV4 zcoCQsDF7(GcQGC*<$%y2^3#EL3G&g103kQ*M%o`l6%CFKR4T|Q)x^vM-n@F24vhA>|FxgcBAV%$E~Q{Wsrbqevp+C;HoV*9u1U&cQ1dc zYPgoI$#h^y*d@!C!F5wE%s~FW&qT`z8Np!y3ApsV9q~+Ofo-j=dIl~&>9r%ZYwq*G z^3OM-NuBZEzKjG2ZJ>z{A5W$Ro{B)8$UJQ6U&ns|s$ppG@?hYu00000NkvXXu0mjf DiZVr!)xN+bB>IJDur6SY@LTf`}r!x7RjF~L^;((s zJ~YGQFWnqpPm>q?SquQ%3OV^D>Zx$!x!C{oK6JeSITgn$xe)+_>ZM@&c58DM#94`3 z1yDek46XGLq7Cl%n`d(Y2QU*XK#4qW-dBop!)i1v`2y^wagd* z$&1DOB&kS_px1pbZVRdg0PD8r#`_?|(4C-K2hdlx)f)%qpuM|$YD}v|)!ge_Z%Bpd zoq=`LDMm4{-`W9L1y_pd&}&uY(!_Qo_r<^h!VgBIlNKPVLabS+Shfa<0fxWq0D}yN z!TbOSCT&GEuoD364&QQ|lwD|SRp?vyCuKkl~nE<#20f0c){ZSkopJBfW$F~1=Cl4W<4KD&f0wj`&b@G*?8gn6^h=`ST z7U*X{Nv!rW>6XNMfciZON>k>uKqi%eU^h-Vxesl@P|EWId#nLq6)fWb5Klj!dNMh~ zsn__H)hX2h*)N7kO00?pQG%)Qi~!PLSa=DMpYb&0cBz)@-V5h`DLp#7T*&W(fAhED ce*haj0#Eu~lv%ubfB*mh07*qoM6N<$f*MXU+yDRo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0b84050f35f53fd35b5e1d21e4ace160740977 GIT binary patch literal 595 zcmV-Z0<8UsP)I5<^ET|x8(ZWU0rd_)>{e}Kt zt5)sWv??f~C@M%74N+<6h@WAe(L0R8z`XO$m~=p1Kj%L8+z&NQ5$I@ddvtPf7nAvH zBmf0XrTwk)==`A;7$On?Rf&_?9Y}pP5`ZxJ{{W~xPBoQS3;<;Ihm=**R9VwUSFc8( zMhp#5F6FILQRFTaSr23qOHySB4WQ)G_Nfhi0+%5a02;9IWm=0!R*{sT-|SF(oPB@X zjDHS*pm3mJd|Qw8;Bh=Vk-|;EN+;ZTcK+#tl&XI_&4y*oDvl_@Utx zce|QN(bw311ak&=%dZSldjJ!`StC;~u?v3k1vtHYj5)iWg|!QJFp6G6aFIz6a)1}l z!Opr30tbxG=1iTP8FTPRrob8CzWQNpL>Bje6Euhd0dQ8;x4LyAJEto$3IyO~=h@AR h)Spr*fO%-)0Kae~_ZM@otxW&`002ovPDHLkV1k)m`T+m{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png new file mode 100644 index 0000000000000000000000000000000000000000..1b766541908f73d65c44b875dc460c25a034a0a2 GIT binary patch literal 564 zcmV-40?Yl0P)`mH=Z4s%9)`gCq&5Jb?ObQ6Snp%-iuCHB;w@o#K%8Bz+;vzg2!ng5&f|1(KK%~<~j;Pi0MJ-@nN zm>GbnVgtw~7gcSe?A|x7~~D$3T!kfU}bW_x7%?xY~T~x7g4}i@*iX zd#O|+)UJr^Kp~q}9p_8u8$cN2J*zRkPGSRqFuC0iY&DunIs(Z;3{#Z80I(2kb-jqm z2KHn15Gx3s5TN^>sR(RIT>MpVcw{ za`p1M-F5szOa@>faWZIgtE`@_ciopcme0Z!nHnPi2oqwmUeD2P&;?qLXS|?Zr~K03 z3&0?-u{0b*Dkuh#!R5*U5~PU$-dyYRKATZ5udR{$Q7jJ)Kw;wD>grFR{*It45LPG) zl^}#;0UGTBoZ~1&d|)UXxzbhy$Pa;RPa9T&4zS2%P*gub#%)cGhxsZ70wCW?>;OVY zAnNj=9`8>nC*+Y#Mg8wH2AD=bBYo4?9ky-?Tj%&&>dkE$7mf1Tg}*kZw|E0Mo_lVp~8tjP0GEJhv5MI+eqkKW z)%@~143m6oP_7z)q5qku5HLO*^wM#FATm6Tb{^-s0VD+HQ$~O#!=Be}p;f@?0EFrs z&x$%P48RawqF6Up)Sk6{AZr;q2hiQ-m-N+_HoQnC?y4ujZ^b+Qy^#mD#FqL zZ0I=vO52KY{=aJAmhfKI`Zo*Dvaa7c9Ra3Yu%4vVFOvWO002ovPDHLk FV1hLbvB&@b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d6e3b2d29e69be6d40bd974078198d6a0783cd GIT binary patch literal 358 zcmV-s0h#`ZP)%Fc5`Lh$3Qf6hUxMIyrUm|Bo*IfQn#25TT1y zM08M7NJ-kebh#t>mX_preZ5{TjeD|4H0A}{=L3ZW zN@BO+#=z-vgDhR40UX%+nocKNFXx@3m>w&cPRBm|AG*w%trB-YnE(I)07*qoM6N<$ Eg2OPB0{{R3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..001c3604dbaa6937080971b29ef1540b02d39755 GIT binary patch literal 558 zcmV+}0@3}6P)h6SrDNkft+dj1iE(eL~#Xt8`!+0^8$G0!@*oZhj-+@p%G= z?So3d!)OA%(=LpkrVz*bB6*&F{D>s|v z9ZzTG7YdxeCV*qU_zGgf9zdb>RRr)oJ#O!sftU+Tz*kSonTU4s{lkeddC-bYfMc^V z0X6=L0G?d-3GQw#S9L&3I6eW5MGkxriN7L%6L2Ezld_)POH1tI7gvD7`t`5S__xai z9HCvXwgBz|ZTWnlE|B;u0%(#@7odoY)N)S9Ydi(US`Kd#x}HLsm`s0+NMSb}{k(h_hTSQlszlWsRJI?}J2R7vbwG{JeWzT}9Ko{`@=I;~EE%0UVI-qAkCVU^%1aO6+!B@lxK$W)W w@PH65p!|qhCB!A-hYq%d{5+TV=jGS&H@1jC77~7Z4gdfE07*qoM6N<$f`Dc9{r~^~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab5916b2d9e605fef23b5daafa7dd33da3f0945 GIT binary patch literal 851 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 N002ovPDHLkV1mTnD82vy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd8f8fcbb812136e14a2adc083469f0e0c62dce GIT binary patch literal 1879 zcmV-d2dMaoP)Px+5lKWrRCt{2Tg^|~NEH9MR2zrb4RO+RAx)rl#e#^o-D+1As~&plvHe?n?Wu>V zRkf?_hd{tePzVdCsd0cL#30exgL#wj#7XSL3Eq$21su=U`_0Uo_uf1!h!N&ZlL0_B zoy6gB3x95IDx+@udQ=@mfowX7(%c*Xp#JX7SlYf8X)i-!fBQ24z-ctFvS&v&`v8#7 z<$T+Y6#;-dKvmNsZ}-FRzxlQuI|9ay*yw=A3)AeVe&%_Os%^1d04Ns>Hl-)rm1^XD zWJ~S7rt}1W7!k0tXDhQtiYvYyyBVn+AhsQAJ7C=SpMa|#z*XZvPe3e`plk(>6R{w` z$fRIoQrN240D#qZZ@9TC;`RDLq$dLq69QyR=?QN3ig>nsk2$RioH|a=`eBHQ4FP@@ zn;%>YuG8EVt-EK-_n6pbFT!G>1Vu-M;IuA$&0{}D293lc=y0^k1%r{d8H*LL zTRj1A((zo(-@vH@&)`MjyZHs(NFs<^EEWWi**j~bn5t=b@bfQt@$!|jW4Bj^Xv)ec z=5GLSiR$M3@c$bP&%0O`Vne{9S%j)-a2gHNzwAT5nfAOV!zF4muAG2!!C>cV zhF@77RyHuDCp=+p85H`Cf{ZIC;9SjM(JTT0D%;z5yMCa|8Y#A0J%OG~crGyj_=L)X zk&(!J@7w>C5l}7|3;;}F>A(GBMFGTfx`}%0i~)e2Okn0_y2Hk&l>)fi#A#jdYc)S2 zWK)G?aZ4d%chh3%9;phRd?|6!{@F`nao^T8GcUB z$BhF{77?^nv9a{%R{%h5YZZWdH?Xp2E7vJ=Vp9FqW~qm7F78Rca_4G>M|SR(3>cXd z9xqHYB4PPqndNgi&oy;rdz+InYou5=bGF;c5DCBk!!#!XaD4!C=||p=ekuI9n!&u8 zVaoHTPa?a81>7Ty44I$qFY@1M=~XQYrMbC|rFa#nT2@;J44RZ6CmobD4JF~7NXVjD z>{#~0^evA=M4&b;3koSC0DRw^I!?!(x(L5=`mGuMo`jS^gL?mQ4FK?+Q|mv-AwXlI z36T3cS2MUy_hjXQ!P>X1DIC?$eDid=mfN#=nOP&niuoI!`}|YK>3LRD9T~$IJIl9b z*x_*ti)Im3%fj1^tTWr|4Ee?3{Lru5j@?wq-v-)oxn5Zxavchl50fd9&*j>}UmmeC zxDFueOMLc2&~k&|Qp@v|;1?_nisgr82K0BWW9JS7ZM%QaRX|5A;I4vhvk#zi3j{%s zayxcY`M7ZqdKRf3FxUzZg|Au`Uc7wOQ-^p65Y5V72wILnf&`sSk%Tby0C&c@V-+B< z(y;}CCK!cDL>d%w)>uCh$f$D~4XkbM2Ff)asSY5`PEJbLx|AmrWGg&>`h?NUZ?1j{ zoM=53C1}^0ICUI2t&330Sx>qr3@OD)RrRe)!aI!yHdjA|$}=7d0h6j4I)4vvlbOh| z65A3<5QSgc+zp*%J+f1PKucK^zS~Utfk+UOBqvoB<$}S)Wgm3U%NScgMD*R&o0*{HM7aKb zl~Lpta20B~V6c@vTM<1uQE-YYM)@5ffrrJ9>a{@H{iuF6@F@VeBc?I<^ zHr@;2^PpoIDzq+##YKhGYi|cFCx*%acIpW&!}2KtC`;D&|(@6<2B(C?BmXt{q1{syMY4hz14 RCn5j<002ovPDHLkV1mTlc)|bx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png new file mode 100644 index 0000000000000000000000000000000000000000..793db233c3905aaefaba725ef68e8234c6de1467 GIT binary patch literal 1701 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ae45f263368ead73b95a53c7d13ebdf035a86f GIT binary patch literal 1844 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json new file mode 100644 index 00000000000..7ab03e564e8 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "we_open" + }, + { + "name": "bazaar" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png new file mode 100644 index 0000000000000000000000000000000000000000..141a97768a05114c34d8a8002e7e4f3652ee6f65 GIT binary patch literal 969 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|Rrl zr;B4q#hkY@4`vHHiX7YD#Hkvx^nzH9vm(3WhoJwg{#80nqDvI2UikhI|0BNV=>?@J zP2Vo9Uf#vR>i=?Sz=r_M+?FjGS!WZgSNuNvEH&MHx97IACCtYAoy*dUj4R*IHs73Y zem%j`k0GK@m|@yumWHPmj6`!M96EH@`niN-S=skvKIhi6EcnbXue-7>`tx=}u0Iw( zuIcTyH`it_7}lRn-LW_lwpS0?qshBxBx*2S-u&Wu#;iCNm~5t}bO zY2W4Bmu{sp)`i8pzAKG)ahb51M{nr+V_R6j?_7A zmE%~k{p5^ym9qq+eTo;}R*<#PWs<(dbd=Z5*6!dm^X{Wb%9qrVHI6BKo}m`laDZd| z^8=kPHK*)JdQ>iCyL9FO%g$LZB-X#T33oitQ4#fxUsXTq`omY37&p~jdE2sYd+1I6 zQpv*^5+!nzmvA{ai*+BAdzw`w>fgVZZPf)^9+}Seyqf*ok2JQkUwC2NpIPPBAR)an zyFFGvxmnj>c7ejYl5hWkRxf+6sL}U9<+^Ml$M#u?`yJ;zkf_x=S39w??PRNbn*^`+ z<;2+iylRfe)t1?cI{s3eT{7%)Mi~8PwCJ}4fpDy|Lk*EKq{;9HM6vlkyo>-o}I@y2T zev9Yb9(q#o-l`ja>g$NBHNU=9KJ9dD?ag(E?PT;Hr`YXXXMCTp{uWzviIT#fg`s!q zKPz7U&#^7u&fwJ+zekEQ(ij%ETyOqcTk~_r+?yv(_n9~T&gMZR`v#r4Kl|UN?s!un b{D=L}^XakdGFK9Td6U7@)z4*}Q$iB}fit%l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff478ac17960c58e3e43a170a991cb1b72df733 GIT binary patch literal 895 zcmV-_1AzRAP)Px&IY~r8RCt{2S;3CtFbp-TO~nOOYKqzebL9U&YB*30MM7Mv;m|oO?s{Cuq;1$i zT0aR1wXtJ6uASro7!3b4R?kxWw%hfex7+A>(=_UwRaN!;S>_zP9}Z8kHMvsB0SP=1 zbLEyInKJ4?=G^dH$^ryBqd6bal`0TPlxWUhE|+g(^E?MWmO3Vle`XMVFI6Dn<8%tX z%bW{l1$7ib1F|j4<;F2Ajvy~~XmHncBi-xux(E211v~?$$fEqx;`nQcFa=#b$pL)6 zEla5Ddi1WYYuJ{hDl5&k6v0p6ZMPE(lNRyJImq)Ix~_}TCw&SyPMU|;gA{g;9)=WX z3h^_bDIGGj@E(rGqxi0_YdE*9_)gN#ZJ25|01H5@60VHafy_B5ybsEp+ZO0p0D!r& zbpAPZ1CRhrRl=3=AZXw#$TLWjL;Z7|=XR@YP-T+4lj1&GDVJNK&;IGe-^1}nw6RXT0btl4;C!M+@0D~Icke$ zvxHy(Bt;l)tx)|Gh)q4u%DXRO5QYHoA`~hvIMJik|CczoEfn4lneeDE(pob_N~!}C zbk%7er|G)%NIOTK%FrFAwm|s(1F!%9OzXvuoYxLMvG)NX9n#!$Y#+`7RN=X8haXoU zfg4XVDRXYt-kr;F9if0pHgjL7ufbK|6Y^CEtv<@}mPAi+T!-WgzZbwZ7P=467D1Ey z)&;0RbMEt~^FkNt(Fy51K+ge^{Kx6kZ_6_JlZdrnY=cW~S^~~P*L5p&;+gUQ)9g=j zA3)PhGca`4j~zpGr@9kJb|r=>ETta(KD8=ccn_bq+c1`|B<@wTWAjub3ji9FIX5au z`~4oS*Xw93moK~@diiFv0bsi~T=kTju%y@GXkciS(Qw|2X&;Z3f2nJ6fUy%2v@30` z1xq?!E&u>OvlTWNmciKJ)C!Fq24jbZ=f(~TFm@P>9X56tVeBx2vBSm=8$0|^j>~cw zI~;(q!vPpOjDL(BHg?$9VPl7l9X572JTMl<4jVgc?69%J#tsKy?C>4N4jT+FgD+_r VmqnHZ*HZuh002ovPDHLkV1ggxj!ysp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b346516b2946aab60d47e81b73c0400cff580c GIT binary patch literal 972 zcmV;-12g=IP)Px&hDk(0RCt{2Sj(#8Fbq|Ppb{_b%)ELQmrPR!M zf6XV5-ZjRMb8d8yui>`kB0B?+;#%v8QBt2kKQP9u?hB9snSOm+YiEJV-F>1!0G`k1 z3AMMRq3nT_O{-1;=iIERNkHnqUav)G^e5nbCAY`KYzhY8e!q`dAk{WE0)~`G`4o&X zGo3Nph^CFwN3aQ^u3`#^exe(Ta83q&@@`5m(SO@xjabZpuImO2Hyr-%=G5O>z^Pc!0X(X8!83K2Fcz@0B{LP1p)U2{*L5uiQXVN2wmJ> zZc_~YrKl(?oTG3leBGtw0$;@n1Dnv|M`MLy6H!@O{A*a@Pib+yyND2x>Mq0zW7_hE zCdjCf2_LI_gBbCJ zTWcqu6xL?LZnQYZ-mLKEw0H?tn0M_`*o+nr3Eqx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png new file mode 100644 index 0000000000000000000000000000000000000000..cb9e52edf37669c090bd7b92303b2724eb711032 GIT binary patch literal 834 zcmV-I1HJr-P)Px%{7FPXRCt{2nZau0Fbsy(Wev1g| z=k{WZYWscPPoGOEroC2fHG;Ez;MSlu5C}L8d)B};crXx%J3;t+^#GrlWm(>=!SmVG zz~Dj%L_}Ynk1PwpdpuGzWFM;OO{bV&3$>u~n*c&K)! zX*vxu=X`Pw4$t#U+qQMtBl=to+&}JfEeL;V0RY1=9E0s0JO{I{Ep@pH;rF;rZiCy#a|jsstA|SskZ6&G!&ut# zz9hz|YJk-?=X?r+W*2_-2Ehz~wI8DcP4%q-bCBaaFF&rIM0yIe*sTp5;;4OBT>)~o z=Xs`_^KpOMwrb8o(K(oT?i7M;DSt~J5IhJeA44rTO(`H}8~GMvR0qk?24$tdx~}T| zJAI7f_~qcF(X0X3zId)(?bU$qB1E z@5_1|$D@7AOy1c6h;HrzrIe*~pu@qv5JJ;gKq3!otuzHdIwWVmM+oJ60IpL? zPc1ODfJm{E?Ovh*e5SDr$ost_^^xnRT|g7T76Am9dE|cxp-BkU0BC0bEL|+KR&fFl zLjEqmS=aS&zE=QwA310BsBN7E%oSjX9CEFPl+x*Q?Ig&T{IV=v{aE>5(}vqeVWdE- zVDY7V^)3LrGH^A!`@Y{2LG^fOy#@ohulJydAo?Wg`%#30w2^*Zy%wAA$(jzx9~ z!U%a`#0w)t|GzN8egCzE5xHu-Fye&~9WRVn2E8!iIF92uj`PF$2WLCM-qwEZy#N3J M07*qoM6N<$f`HtNwEzGB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png new file mode 100644 index 0000000000000000000000000000000000000000..09ad4bbcd4126c792df3dad622b50895a65fb806 GIT binary patch literal 653 zcmV;80&@L{P)Px%M@d9MRCt{2m@$vTAPj}yoo=X9Q6VvA?En8s89PRbs48Xa4JYRu$0U&IZt44` zlw$J?m=FVm5JCtcgb?zEd>l3Gy6)L(bGzND#`{a(mP1Be*F8_C)BJmyCIEnLlXhv7 zK6^qXcx~tTwc}0GbZ8PjTMfL`u>w7$&(`YN;A{NtY1^Y|#$@I73dplZN@?+X7>4=T zu9g^}6!AcQ5g1zMIPgoX_WZ zHEp1pzV8>SB!QMLLbk6C)FKljX8^Fw{hA9=)oajmBm-*tzF&y5D_#m-x7ohhj~!!6 zOYLp2`XVF__qLc7taEu!n4JW@8?0ZC+7B*G)5lP061K!`-T$}7u(o^S9SI(I;d8jv zrd8N~)&vN7V^|YBV#J!Dfi=MbtO>Fv$eJK)f~*O$CU_jy1i_jhYl5r^vL@*J^Px(8A(JzRCt{2S<7ndFbq9Yx(Jv+z{@QA|DV*QmxjPF;9a}uRYq3iN77DgxH&L% zrmZg@gSn?e2$2EwY#hf(N%}sHBb;*^CzRlvi{x-{HukcN@ny{L79fBGX~G=VHk>agLeq3KkvY^2vHQ2j-M%L;WkZE(wQYp(**B*F^oA% zy0gRCmvip6rT}kg95uOUtu3~`+KxeEC<;ocSSyc%r{mg&v@VbfDVYWuuY2pU>gPZ|xAZIzTS22_XSg1os|q zdEd@CpmY+=$)~~yJU1}4c~KFRLioVX&(Ewu8f3^GDXLmGsF6cyn`@t&HYf)GP*XuV zgDa>N!Bp?f-3Q1sK9|kc;IgG-c;V!suOV^(KMc_X`fH4VwKnoBe@2H80)?KIpQQ^9 zibCF&Q~4}mt;Mn|NrUCu$x5s#mQudvIltx6>Hy`x9QW6{0C5p6-k+76Qc{AaiS{Na z*O9qjYIUWkD%}Vjz7{UV3MghK6QDPiyKyjuQ+3l{)%%nqNy3uW*F#%9d5-81Ijs|6+7I583x#W zKx=lm1v3nE$_}5!3yQMpd)s;1v3nE!Vb4$hJjAl;a1Er&=EV_f*A%nVuxEW l!$7C(@Wl*YxNzYtd;^i^d*(9Nh(7=T002ovPDHLkV1jzd`@R4G literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/meta.json b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json new file mode 100644 index 00000000000..67900194216 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by ladyayla and MaxxOrion for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "junktire1", + "directions": 4 + }, + { + "name": "junktire2", + "directions": 4 + }, + { + "name": "junktire3", + "directions": 4 + }, + { + "name": "junktire4", + "directions": 4 + }, + { + "name": "junktire5", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/meta.json b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json new file mode 100644 index 00000000000..caa105acab9 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Ported from Nukapop-13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "torch_unlit" + }, + { + "name": "torch_lit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "wall_torch_unlit", + "directions": 4 + }, + { + "name": "wall_torch_lit", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdd6e0323201567cb3bed6b77dae60531359788 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zB|KdmLn`LH zy=9nn*g>H6q2kvtvD+LzRgGDpc~^e&*>(PUq7?l@D6Hygo5?#RgS<7`K3dDKpKCMx z@jq*!`I>2>FFaFPMVi;`l>49Y=6?M5#3^?=^UoWdkSdK9J#D7jF#Yw-zJ7U}C(rBZ<(*!svu`Dy zuli$j?@7U(ndg;*t=~lUe|J{?yye8#8uPpA)r`LuPCQ*<+!}r6@}phMsz(=8-C8~G rTi*T?70>?jJ`~gYBM-5Kfg$3x_@VWAeZIfE13*Hau6{1-oD!M<z4vsFLn64liATVvV0(7b~If?{e7`8xL!Ac6l2j0SQMSk&M%`WwKJOncS!VP~QDLB~8u#<}$Ka`ZDdqK6* zp#AMlDirPjAiIq`Kr%H?N5|*%(y>WJ(g6AEI_+$&yAdeX#e0A<06O2^;VG#~X&%6F z#1%{wKn*~;uDkbvij)9;YR!KFfYuwEoemCw3pZk5HGmYzw&A`2pa@kZ48S`d?g9TC z2s`j@2)Z72z4#nn}qmWfT3hADt97;hf@BW%j%5R0RCFGBM$FH f#E+lKFamu5oZ;tC2LfhH00000NkvXXu0mjfBW3CY literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png new file mode 100644 index 0000000000000000000000000000000000000000..d629bc00eb5d8b2341abbd8498e1e3cdee9218d1 GIT binary patch literal 764 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 Y1IwE{)uxKVgLXD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png new file mode 100644 index 0000000000000000000000000000000000000000..da1078bd1463ed24f306190099e7f515632a0d2e GIT binary patch literal 908 zcmV;719SX|P)Px&MoC0LR9J=Wm$7ftKp4e;Ms^bus(5f3L9JA=Dv&^+0udWh7Z{jWnE3-)_!Ia8 zii(89fT~2TnxZrr9Hqetsbq%hcbuKL24N=hmc;Shz32D6`+R{l)>z|zhxIQO?S!qw zybfwM0PjC{m-tE-@cLnx>~5)LBdgAMKG*jaQM@FiQ~^T%?#o2~)^MwUa>4Oj0DAoi z2i+43z%Glt6Sfk+>2WlOQpAGO=_O1j4C5J({aX;Wl7sGvb)ziuSI-~tsXO9ubOFFH zo-vGPOJf^umBY~m?d?sV1P3}{E0K_yBt@uKDgcz?fMCDv{1*AM-G=^NN(OefEYA7^ z?gV!ke)+g^j0hXXGxjPzpSmNUWCzar1Kz%Ty7JyIp0OADym%03awy4x;~!OaHpWC& zowNRcH}^NW8QcZn`{`Fe^@P#Y4hd?u+7)F85KE8eP*=Gkvg$(q?aF^ zCn=k<5D|dxXwq25^SKt36)$rEEkKvx^}|s2@*;BcDYB?nDvZ6{=}WLd+3t8QqXP1s zjTzBZt;h2@OeeWxiy*t;+HJUqVjRz9XG0A>I!}N|KY38IbzR%rzsg{iqX-r#`^`lq zY<|Q7@k& zLNZYVDHA~3Q`hQ5r1rYGp4kZnHmE?z+e&XQ@0TExL>6#7SJk>%(L!bJWB-;WFxN9t z7{aVl^V&Cdg4tYxnw`1_5TNGu`V-wV4o4Rpe>=Cp=!84Bw-QLdx6Q*v_E2eB3+d#G zDDz0xaI5-S$WsEcLQFA&_V#9q9F)bY&VD9j9rGQMD!Jj&r(k= z$jyKroN>e?H-FDV(HZfN{+O&PPf)Y5L5|D-b2Q&i;YR8DEJmOLW2ux=L iMZ{~YvBnx}2z~;ezsK{NHghfj0000Px&lSxEDR9J=Wm%(r1Mi|9^jsW98WFJh>HdYZRO0|u)3T>5JrC!qWUiRF-t><2P zZZDB~L)#LyTCKW5phQGfVjpY)YrG)22WO@>@j!q*R4VVpjA!P(`R04y46wrvJN)0F z<#m4D`ZQiP>2?1mcitu_q#G|^v|<3eZY`bUR0=V`Pk;8e79tmT`JxpI;vkBc`60u} zJWUEf(K0Y~9RTmn-&%wQ@amh>*wl4Nyeb0ToiBw1QN)kGzS&sBp7>$K!AkNViU^_z zyKXV_!%aCeD6AgxFGT1+CiVaZwYkTJ!Y_ic1W&0^&WCWT=Ne+mk5M^1l`%cfLZC4pi=A5vGfnVMXWxHmSWq&#>ZUnZsm+8%}B4RZxg{x~hcNLy00 zYet!_H%1(BZUkyZnXA6XS<99mR4(ZBT)A68un4D8z+FfmmCa=YoJs-j&L@Z>tT>=i zn$jpuvFjE^%bA~>r{{8U>PTTCvC{8|#cNz7an~Dj{rCNH0gFOZN%j=CK=#gn{QnbcT^#8; zU$hKa7l7O&ON&w+!CH?}K@7{?BF3fP4JxcH;7M-Df$HJ1m)onr>;8?_^~Q2n%O0_5 zs1gv?%mIN_Zh<6H;+{~EZ!BO@$f8?BxR(*{u)_{J{AchFIH<+x6fJ2w00000NkvXX Hu0mjf23^cD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cd2612a932f69f24da73c278b4edfb156c73fd GIT binary patch literal 798 zcmV+(1L6FMP)*+SV6{36 zq~J-_E?!xG|%)w|9ERm!I6%fQYL%>&*~QDgZAX@*H4} z%Nq|M@DC7a9AYflln5YiJlJbiJ{m^`Jbk$6Nf?4qtIr;Uwg=vL_4Y$=OyX&1wjr&c zR;QaSM*Wcd!aBb^{bwQc3MXD8L#>y1dX zbKkjoN^V1945S&y%4I>Kf;9G6BkHwD{SU90#VNKDQZUT23h}~$GL7=ZLFi zMp1;2wkT9;y_pU`2q&1dG}XUk;Dd4{Hqo1OH>4|JU_285gkVE;Gw=D)Gb6t;0i+!$ cg##3+Qy(FN>ipE53IG5A07*qoM6N<$f+Fr@)c^nh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3afcd2e1e26c7028877da6750d489f2350297be2 GIT binary patch literal 647 zcmV;20(kw2P)pMiy zA?V;m5B)i5intfq#1*MSl9#iCS%yXI9fAjq2eczec4Y6Wr01co4G=K)s z02)98Xn_9(aGpOJ@avCGYtnzIHrM_X0Orw1Sj0l>qTTDud$@*-dQHr$KoNks7a&C> zNHi9%0jtv$+mRjFN6XW)FaV#Gn=zD5L`BuKWQ)|`eSB9az50rR5&(l>P%$1DhLn4V z^6!MAX!zA!HNZhQ3|c?{ys&HlnF>T?sAOW(_N;C8r{1UZ%__*iMfg;%OobUnv1~^6 z5rwVDa9Gpdc!2<5elj$QruJ?3AMWpD>)a#!tO(x#G;376FiVsBFv2r=f2?F8&I+!(^MK@M15*N?q_sM&Zd`|(P1fW^cjz@hukSqq6+#96< zsUmYO0G_7u=uSb*EJC*(k3&L~9;5#I3@OC(WH#w!ZAUInTT zj?=pXgq-ruR|mlu^_I9eJCqTmT~ejMXTj)j;k#Q?LUCxUd#naO{{&0m1LZa=^3W=_4yaXc? zPs7B>OR%vP3AIBD5>g-)B1;rd6IC!!QH6Zh`QsbccH%l!7yrw>w&Q!gbM8IoI7@cT zDgjD>5}*Vq0ZM=ppaduZasxcwemtyJ?znk>aB4xl>gI>7ulA|ky>TS~82vr?Ww$GL zO~&Km*+yVP#t#Rd=LVSz0OMQhO>6i1Q}^RAjRy~{^ZnSKKieG=9W)E3@EJHcJGVyt zmIYRIb0WaCSqMk;vLFfr;Ax}2YAcl`JL#S0em@mpBe*x&PsXd#%m@%dMm)5hS#9~I z3pHY18)d;!>!-U;JD|A%bn5+dL!0ZX*6ICqh8@sIdmq2JedqVe6#tz|0buB;6+z&sUPjfQEPdk@IVI~dJAX2yB^_#a2qWvuld9c=W zDHrc-@j|2eAn5?}t&jwf*$aSR1SH8glE-X~4lf5*5M&b>A_(sJAak{2fh38==$y>i zqLtB-fY`Voxw(Z|6oEzOXCWV@%6A#_Q&?RzO@#sQUd>8jm#4LHDbLbEBA_yj!FU0S zEB?(;7$ECQ**8i=l73ehKyAB|@a%A$A*3cXfdaSi2)M=9nv-kQ4aC+EAw~fGHohJNRCt{2mrqL@K^VqID)C^EL`?7!DUk|7YY&Q0p`chO<{Jot zM^F7Uo;(VLegmb@q98;NbI=wFYKoXk*n}hmJyaUD`;5NpJ3Heh+1;RreIVJ{$?m+r zegDm7P&~0>fEXYKhyh}N7$63S0iHj=``I@(j;Z8`Ja05x@_5~>iJzs)K;Hn~PLA8} zre4c&$!dsx$p`@BFOy@Ue%ltKi5JRmVoCJ3lj%sdlLVO%40E|y&QnCaKN52(gfI?Z~HIEqiH8s!9~ZT2gG$Q*z8J=|9{>cKQjm7r6#y3ASY5Kq)?e)+7@nC*i$b3p%7Pdp56~A( z4ajfH2B2Tqj7f+r-~awi;DrQr4^dO1lI&D+v}Jda2C%ucExmw}qq>Lq+mYWBdADpN zuU~l@Jy5#1GraimlQwTM&SP&X$^7zyz4N1Bgf;@;V!R!dFaNl6e(t0k@FpQ(5W>3E z7HcaX>@T|q8pNZGNG~6A%w;Qf+ze@3HY;h$rLF;b74pU8rEDhcj!hL22>^^ENmCO! zWxjEB7ea5DMhd{68V0$m`8#D|WWxEbMh`$PMXAY_Y(4yjev;_0PeuCQ&>LUpyyHF3 d|IcZ^^&bu0NGgsX9asPW002ovPDHLkV1nUUN#6hf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6dd9648c612f339eabb1c5b8fa4a5944aa3e92 GIT binary patch literal 724 zcmV;_0xSKAP)`yJ+%l5K7j8ac=Y7c zc=9Ot4kCCE1O>5&svxws6myYUOp$siO3c5_#7(kE6RL=^17$bK?#wr{Gm~_R{jw+k z1)u;FfC5ke3P1rUfNudXLy%8xIQULNkjvxxO58#-WG-i&1 zh?N6SnoUe{0~84|jwsMkj z$x74(fcht6VvTFIQZgh$233qKKe!$bgf9Xzg*XQC7WIuaGDra7IRsULdw`~O$c;*& zjHv_R03bZ@N|scjSJZ4MHvpEk4FRfeM+J>aw;cjtetAx+(-i?)90oC}N#QvMv~{2- zKoY3}AFr>gOnL-jxTv9sAPC<}C%huad+4cDc&J(Pp~1ApB|bMETfRNgDhP|fC?W4G z7;|H7g-1Yy2&@8lm>I|oQv!|>vE3pP7gzTT5ZHfqdLrH9ivXP&iQewAWIzIi2|Pt& z-_)O3*z4H^fV0O-#4AwJw;K~BA%UXr2X)IR-vurJBx0sebS*&EiiX85iCX6%7PRi^ zoKeLAfR`MCwT3SfHuMfqxTa9j=NE+6dYg?U4gi$z?e3W3L%q}B9*XA}=W{C-0A&B* zkVBwsASfMg{p$Wz zdg+s80W5$8umBdo0$2bGU;&H)6!Md9E|cQx`{&ojeW&)o=i}3V2_pbMm%qEJ5g7Pi zyW@jA0M$5@N)9#vbr2l^sK#YwFg%bP3cM%J#CR)p6@qN0-}@bG7!iZ2+A-cSK&k2w z;`~^9p>$sldje<2fBq%eOZU}R>O@_60EPeoPgJT;9ER-J*KVfjz6t>G_u@8mA0DAL z-5(18E0;LK1IUAHW|+aKMxknm4WQP!DzzGlC*g{KS|w!L08;0FE-rZtLwwJ_mTH)p z$p^lBez^8QV*)^^0!cQGwbJ=8PJ3hLy3Fs1)G);YI4j*G3i%0R@bfcZ`LjX1Twswy~tMDf0_MD?~y#jpU z8sUP+iYMoh^G5%(^=V#Q=nCFvtFQ?Z>=}@NiCehptz&1Q5fZM^;M` zVI`Oh9+42};<~Z@JAqBB;f-nsA;9EfP&yhQ(tiKPGbGh}t?MV%g(^xR4@hIlP7HHL zYu;$YGo};(zzTWg5keT?35U!{n}o94H48Za$T+*-hXBZSxLWpmwf{%``7j0`S&uW^ zjFqCvNJGJ@#RH~5LLQLTDaK%YZgGk49q#W1TCH&aiEZxNIFHviHo2V6N}Kd+ZPf(` zAn;CeLoxyY!2`O<1qR)a3@QK+wPUF=wQ?=MXUGD)0d?#?+zPU)2Y|!QA3N*p`kD%<}n_ZyAID+|f_c zVloDOJ)#msrO*MeG%$7^WGVA|09XbvKEDR{;S3BQQvb&X&3gRThMECcT43#q@#;kR zZ1g~0&9QVBiv`d6(Xcb|eZm0fq+vZMca%7eeg3`IYIV=PP)dNp2w7`oAfCuF8>6e< z^k91&_TDzHL1@eQqnD*@qD95~22XHb3UO!2nS9 z0n?b>RJ&hpw7df5{^5~#kKSh4Lg&}@yWl?~KZky6nra13ODCp!Z>JnHhUa0Db0L7A w=&W2}&JaYzdFTM+AR?N*e*pmyz`p}{2Vxzew3d2`B>(^b07*qoM6N<$f(-@O2mk;8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e8d731635d8c1ea654e7cece13c5f7777403f0 GIT binary patch literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_3_ z(9^{+q+-t7X};cv9R%9kb*chX1f%zaEOGS@XQLeZU4GzsqF(@@=?qo=i$=ZJHrE2BrwS_7Ijkg#ga_01In!x7p zZP%1(zRs!*yz3Jc5(EV1)K|xZ`T02-3f1!^a2rgr5?~hD>*{!mYjOC+Iwgh*wuXNR zJ7&D*U)Fs&(De~V3%_#K`*I)o58tisUwgi}@LSFz$(`&C%R879oNChNUJ!d8CnQ+N zbxvPTQ?B2~yyZ=wgowi&W(SUqoV9F>3)MID?Nz&b$G+>E@bU+n8QOPRhS{;2USa6Y zcfMVHd0zBB&)y}{VN4u5ek}T9)2ET8wCs}*V@&M*+E@c&D{EV??$;k;l45v17@v8+ hrDlH$C~zJ`$(yCOU94hbR|UohgQu&X%Q~loCIC6dt(E`) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png new file mode 100644 index 0000000000000000000000000000000000000000..762f4164a322e5aa126533273aaa45107587c806 GIT binary patch literal 491 zcmVJNRCt{2mOo3wKp4hfvFM;kQna{4#8^R499jfFjiZyF#>vr- zAvn0Xw1a=9#)#NOsb1$G${o2N!u!B+*SnJU_x{OyDbXK`0T_S*7=Qs7 zfB_hQ0T>_`z(H+i=vQ2^?hZavXT7LTSIxVb!T?}gu2thE$`t|ESsJh5vD}mE!U28) zGJ(hqu;7%a+sUTjEqb*NfV@jDO~PyiVAo$A7oBRnJU2@;r5>yT{3fJN`30VD)wfS4M$0-%DJ h>VJO~GXMkF&=-4yrw5WDc`g6|002ovPDHLkV1mrX)Eoc+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png b/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9bff64e6c509db1f0946b4b38c770f3a8a24fa GIT binary patch literal 586 zcmV-Q0=4~#P)>l_~%Ey8tP-JCO^ zqf`6+r5djbb_P_bIGFNLDM{8yfbwXa=28V}ju5iGsh;3G#AIqd)MheYZ&2tA=mfEu zB_pZ^Ra8*FV{OE}jwq3mO&kmSOw> zt`N~IV8ZqW_%9I@(MBa1#MyG4BAl@R3CUAUI6vIrv{U;|kHVET+^3(2)ZAu$nTzO0 zyYO8=S)iZuP`V+Mv|Y(sJjqCpxf!V|!J>}LT@c{T^-|KX%*S=8)~Rv5PCtrvz=Hed z2^o;ml9DQWbh~tL`6&S`qRK?cYLb*{X0k+&;q`9Z1?hyxt2XG@d1IU8iewTu{`@Wi YKV}jnA6ewCiU0rr07*qoM6N<$f~vm?wEzGB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png b/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png new file mode 100644 index 0000000000000000000000000000000000000000..e6608f1928f86c1c6000579316adb175f4f9454c GIT binary patch literal 2503 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 ZfApV)%$&$p`}rmT%WJk~wWg?qe*t<&8k7J4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..adc809dd334f27c4e3392a728e152a186dd46914 GIT binary patch literal 1070 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 IM6N<$f`o2YlmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3dacbc7b505f0c6778d71b58c426b86776df2d9d GIT binary patch literal 1237 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4073d1e558ca43e5729785ba7b4f4fd0f578bd GIT binary patch literal 1382 zcmV-s1)2JZP)Px)AW1|)RCt{2non!vMi|DQY@Lf@f@KuDY?G}iP2I-nt-X|#KuNREJ!D}+4+*&i z+Dni9B0aT`kI+JM*us`jDCAJ+WtVl_I@^OoHidYF6@sG68r*}K@ko|r{Tca{8vP)| z9?gtr9=)1*A4xz?PEJlvPEO7(WrlhH0I;{aGgzop66@cxOejhb0MKqV@%YIRpZA@_ zel;SNWsd#DWpQx{<+2LPGEvqlcyNDXz>cLtfS%svlf5x5C`!@x7l(3L9sWko007Jt z6`Kf!m}8ehePxvoR5rby!7l+O=8b9bq8Pt6)2a%Je) ze)JHQWukRG4DqB$MFfZ|JUcr_za3*`{tPSgXXx}B==2-d_-qY8u(RChH(blb`ap^z z;Kj*sU{{9D|Gzk4N00dyxBciLI(^`E``A{0*at9MU*q4|u~9$v`anv&z=Qi6gR(aA z0&_*hwVpF8bf(GdI4f6_qOFdY0QK}P9zQvnNlgT>#AJxSF%l;->9}*!PEsL2S*w7# zK`|v}`MZH2YMY!N`= z$Eo20Q2FtkoSYm=$aC?ieErq_;KsCU+xPcB9E6@vDjtuA<-2b`ABgEVyW{-L7at9L znz@om0T^>dWuh^gM5YCZ`@{;!r~u+!C2&1+ z1W1BR3gEX3ge8*#$mG@w5cx$(S$;eWm1-51W#Zru17B{BA3tpBSXV7ns#O5b1N9jx z0%ZDeYGPdiGW<9-u>_Fe$HTz#0KZ*eDtUlRKOTkF_1kFw-3Acsp{yUNeOo*T>=8Q? zA^3S85nF(1Uj|OvttS8c&Ku#|hrR@4`|&8uo}Q^F z*wk@jvOFLdw>}dLB|s8>JPJ#1mR!p}{NUZteT5Pr2|rFv=C(ohl7-h>C}9`INCNC{ zsBp&w6ag~*I5n}hK^cCWn%H?jTt7}tq)R}iAEzc#9w5_?Qx o2nf9k$oAvZgcd-yAI~A?KOCxMsv$xt>i_@%07*qoM6N<$g3;@d#Q*>R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png new file mode 100644 index 0000000000000000000000000000000000000000..35e169511a452d65d97c2a6b8bcc36d0b1e749a1 GIT binary patch literal 783 zcmV+q1MvKbP)smr^x0@ku3o@ zbNq-LjB0KDgVBHOeCbn=Dg6V$JQa_*K2xkUL{Rwx@MF#^*R9Vh0BAUI6adsl zI01q1cEi{c04x8o(U2D>CglB@nTQHuHNJjzQfgXn%XnS?E^ghK-dqlps&!+6d3ovb zq`Y@`+JsP_fjRE^xu-2-QzuW+Z(b0dNeGCZ#T-F2zI+xO4OL%P-jSiTZ~yQyuj&20 zjIbTXO{UI{3pbEX6zKmzyuViz-Y-#`a|3&?CC|~Gt4bJsT?ODMT*zeTdu_dG_$Zqd z=(8pv|He52+2uo^2rz_E9c_Jf&+j$fCCG)<^oSS_jqWk)&@7e3+mb)tej$oXC zY+_Y$F()d8c~{WpN*6?FY0Z3JIGvWZ5m>2K=u-E(CmN%p8KsD7fQNh zz^HLOevoxNs@nkU_PD7!J|w`3!dcd&^mACZ6XO5? N002ovPDHLkV1gmJXNv#; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd4111cf39284eca502b284c26fbad6e99752b0 GIT binary patch literal 548 zcmV+<0^9wGP)257c?RsF_7R#BSQ4u+^l<-+<6-eg3J`To!!m6&&=-5 zp!j2B00v+H24DaNU;qYS00v-y{{=9gnr_kfw0Jep7l4)3H7Qbmd=Q7ZoDzZfcw$Q5 zD*f2#m~={or#1OnjCGm|57d~x#>0MXr+vso$beJ!B?Af8UAfdF3X mJWtzazE1%CG6rA(2KWTud-(*S1hxGD0000m`WjP;~4PMyHM) zBBGC#-yrG`5_EBcD5Q%A14%^GDCjut^RBPXF0-w=TM^6yGBb<5&u`y9!o$>vVGw@icC%6f>ws*y3a+;pMby~D` zOF|G_9{b^0aIe4|@L5YpT{#At0tBIeWYD6L=!EZZ3HXeRvHaN@7ywyVNejvX%+VK6 z%9#!orW;)HnKOdYK`P8p04$yYHsv&{Qs2Tbly00@d(ac}>S&e-cxt#9C%G62IyyXJZ3y?kOC zL!I0=EA}oN$UADm=CJ_uA;Qgm3?PaOfB`T72H*>jx(^kFf}%_S0000Afix=pq2GhispP!{qIb%RbeN=g(iZtTEoeq<_5?Bofy85u)V!r2S(9=71d$|4EK$q_G;s&8zf>8UUF?-o=8 z5I~ni#?Fu(F!ug~T3!g-=hjlHp8gO+V0@k&S06u3lobr%6mtf$Muy1Td7tMCVKq2B z!sow}7xp`@e2|DR0^-@04iG=Sf8$z^I&uX-{tsYnu;T@7egtGui!>sFVgwOZ5!ZCvYzoES zU?DbIC>ElHHvSA*k!T@XtRjnMS#~i2F^EkB6*Y*3sD)P7d2i-SCbRRAk6FUPePNh; z4nxj!?tSmQsi7)M0Vn_kpa2wr0#E=7KmjO#{|{g=(k<}*l}rb!0?;1rqN~gq`K6Ko zCdS9bS@MuhGg)7{F9~33dPW@XZunZfC;)Wb-1>o1i9O$oy8>`w2*qJK_L3)nRSR=7 zqM;$TBu`JzMt*s9J>Ue({^g`6U;ltH21F)(MB(ls+wW17mw;pI67f=a z0$}P<@ZkG53N|*$+|NH31#heL9~T_+jNllD%rHgGK(5mxIz7MDJn$-W>C9ySojBc& z=2)A4!>GA@-Y=d2I0rtBMX9B|mqxW`XDeuUZ-SHOW^e*=p0)O+YWNuc4YxLNk4{-aVnADa!}4}?uS{~0K7Ej6OUo? zx21dWiU7Iz@cB+=KuC002ovPDHLkV1mE^ BC^G;6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5c41c7077958e0decf41f80cc70993b146ed34 GIT binary patch literal 667 zcmV;M0%ZM(P)GRQp>Vf7PA3!WM{KXI zrT}B3qg*zK*54mthWUpTV0bkUo&b~Y$I0;ac8s0nPwe@@p<#Lk{S5?BtsDX1W}I+y zV~xg5z5q1{ATp4czgGaL)z?;HK*T-~+hV)PY+X;dgUg<|HvnwmQ)%e%dRmVK=x*J@}u=iOz_0RK{CBGFmCb$nDKhYDhF2|@RfH<|R+{Hh7`h6`d zbC6OE(ff$?$oIV%^E`zDP=S>9C@{~|Guv&pNw&5qb6}Z|ot^iYGw00g zLF}^`00UqE41fVJ00zJS7ytt>6~M~fYhI_~AiHd1_5PEYJqMsIUpfQyJ**~#n+V|E zofVH|&1s`1%8gzpGGs6+v3Z$AOz*$yrdKrlJ{ zm7nj=i+!+B1iZSt9&+_4xWoWfE+flVgVoX9x=hhJ;ZdCZqu{0j;KUTq6i(sS*9I;u zo<`-x8yRSG>8u#BK7?Gz<2T_%42Wk=H6f9AsgZmTI~o{7Ls4Zw-IjdxP` zd#?|--3`Q&+SneT_@Sc(QER|LMncfGMmy7wtKW41W%R(fHcl!=0GRIu%MRKN*O4Vt z(8>+P<>U?$TL?fG&t(o{ZLKQns&7*~sc)^2`}IKcS3ED%P@NeQ0Vtz5tz0hQ>7$2m zs?TJbV(cr6P+-5G>OHT%4kAvk`xY-A z0nment1DXY?9!D0Ou=y6vGj55hJ^s)j!nh^w?+wn>3t3X^R!fe>d0oSM7moOS)qJwBBcWUoFLSO;N3s1N)-~5%I(gBFPnyunV%(hZMbq@go2qC)DZ`r^3 eTW$dUD}X;*y9<=YouqL90000Y>^(V}IuA-hB*I?i+K8MA9=%+4%s&QsIOnW=ey@5gga4gIqefC5ke z3P1rU00p1`6o3Ly0FD917RK3aG(o&NAFn z$%I&M#SipM_l|Ff`1P2(B{wn!KyU<>0fM1XYS)5nB^=fvYJ+}yjQ$cpXGa?);+s_O z@d*gPZ~*bGS8HJijy4dVfnFlEpUgO#gOUKlp&oW}mZqthd9l9F-O+XSS#JfTwYJea zzX$jXxT%3@1rW^dtrO2OxNHZi0wu4~{0~+6b*8ca0|Oyy^fcuG(xUumiIreYR0d#n zt!WB?tPvPhz_qgzFZd4oA$y|`e0z0`Mh3g+g}2e@nz8|8`6Y~11&XZ*i}nSY`8CEC zmm`)CrU1xTPCaBCKrInclS%@hbg)`+#?oq^88-_XiVeviw5EHa z|8qcX$g~1hzQ)ueL*u%X3vgCA2C&li;VKMnH~X>xusLC{AX)Ze5UbX>0zh!=3s5$7 zN)m*qhZ#Zawx(xHLd`RLeS)ORy=z>4X%!4TL1_UjeVU1 zn%}DjcPm=}g_g{SlH=*({8Wdk_+exvC%vvHKqaLB{vF^0jB){1vRt1?00000NkvXX Hu0mjf@}&)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png new file mode 100644 index 0000000000000000000000000000000000000000..897e09bd7e5aeb8a2e32cfaf0ac1a6a53a916a1e GIT binary patch literal 616 zcmV-u0+;=XP)b}`=qP2m&(UpISZdyQ{3f7iNVpAK zm6RTd471?H+Ow-ZfZ#A?;_%#~=?c4lX` zbAD&$oHM8KpCth#fCP{L5hx0hKy@O>RYx<6XiC`}>I`H(- ztU>Q<`6|-yvjJ+so`zoYwVr2yN#%k;#_1Ra>LJH(&WuOUNc|%K(pc<=*~yunlgML& zBja=oU@Gt!c|3om3CH4l z2gtj6VUru)*AJjo>U@mSkG!{QW;$la|diK%Y?HENsd6->-c@#2zsk>qm}SY*)jw$o#$ynm~oh2=oEJ3;`k&XG#1 zU1Y=>PcLPE%V*IzeNRSHD>YY00bs3tqwz~6ZUV(`UE@b!iH^pKiEa|-ohzdNVE-ds zDotC|TifWA2}hM{5SoGIMDDH59~=>?dy8r+H07*qoM6N<$ Ef0@?kEP)5H@yXJ!15Co4U*7!)p&j6+^u%k&c^-qo>II|?U^gA_r#GTD3Jcjq72vM3`h&3xll}3l+y+^V`oAQjvmcLs_1XRKJ z>Q;tQ!@U}vg#ZYl;9PIN*USK-r$uW`dNfT)g#Zf#ppMzD^FH-^s0A^M{Kyx8@LE-~ z_rYt_icq~;p|cBkb}v6i_}N=4%zMNd|qn6WVqe3tasjcP8X7FNl z08zafo^|zf0U$&!MWGdPF_|Ky03+A?GP1{Zz5!IDs$od24UFS_o~NO{+t3Z~h+ORi zb>uSWU=B>4%?&Uqc!t}rIjDtl$!$aRCY(ic4v`^mXB ofN^6s1=auhS8M*AOeAIlK=n!07*qoM6N<$f_VGv7ytkO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png new file mode 100644 index 0000000000000000000000000000000000000000..79c5e850d7a9155d22a48ee57f6eb54184b0e244 GIT binary patch literal 785 zcmV+s1Md8ZP)iUq~iFX+{i z2hW~8c@a-~uowRWK|OmFB4={6K(i(~E=Xt66gPzT01J2*4u1{OF zY=Od)aawpXA0UsmD?l`9Q1)q>=MaIQQ)uj`MaI=jw6FAu7RbB(bqEd&hH0x%rHw|7 zy&^raT>L^LERy8@V>*JwiQu$(h#z0q`iCm4^=Mz#k4XOiO<##gz#axr#oig8Tj z!DcibFwjJ$v$Ow<=>-Bxl@!McHcDsl1C=t`HNTR;NT&C z{;g5x5uSi|>;!dpv!7CIs{$+l5#spQIV9cKjcZfZ_Q+8?M_Puea#mRz0KAYeh`j)D z2P&-tl2BLvBb8L&q$Nu_n4G`UoKKUQv{7qA{$>)wL1HDv+Y=6&FJ;WZ%4R zyGM8sO6>IaGrMKGSqFgh0uu30F}Uvbt($74P-uY1X7fAUz5hVv2AY#>+c-avsKr*I zO0XRPBt+-a3eDcT!{Uqc8NvyC^-P%!VKZ5hNRA*|7?soa=l39x(GSSsX_* zgkei>U#mIH%dzYU;PJypYCd{A#=?#IS4y0Us&IHUPXKxIBkye7IA*P`tO?N|iyPx- z$*=kPBm)Q_rZ3O%J(6%PlioW32{DjKtBPVB3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png new file mode 100644 index 0000000000000000000000000000000000000000..c5126efbf880b3a93571f19e5021937d6d4ed1a4 GIT binary patch literal 501 zcmVf(ceAr$XXuX=00KY& z2mk>f00e*l5CHx^K)ka4<&q$K7&NQ_ki0e9CMQiiI0!9(NFGP?#P$Fe=u0dBDv;%GP6<$cs|q~b4~p(} zZN~JmPpw?P&Zkm;O=Nv1l#}7PPIbHhAkpjd@W*)Bm{)+RV<;b0!03*u zF#yb9ZgUJptQEld$!TMCYrD9T=v1}_V|UkA=C@*Kp_7mgO#rlWEC5Of2-^m$ r6I-hXAg+vM!uHhxX8}x;+QfbXK&rF;SL*T800000NkvXXu0mjfu9DUI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png new file mode 100644 index 0000000000000000000000000000000000000000..52b69f7db4d038b15ae599acfb1062772eec3bda GIT binary patch literal 542 zcmV+(0^$9MP)rzgOjUEMM2L}?BL+Js0E>v0|osC+UFo8oR{}5xf31oKuIotp7)nGNyz~H zu`GZEumBdo0$2bGU;!+^{|6{dOn;>b(7kWui~$h5Fj%Hk>UnSwN&peOR2-(%Vj%bo zWDp!4AMYJyzY-vI>O)>#U4TqdFL`;o0Qqu>K07LIJ;6&Q_6%?nvl0t{40sQ2ssPoo znpp-OTaDoKio>|GwMpB%d;L-f-;mrVkHG>8zWP8X`YR3_%jMNgljdiq$W$x<(%1E0 zS%bQJ8wnsF<2+aZOvDvBI6l)ZA=Kj*pafW&sZiA!rTvq0N~4X{W%An3IPF){BTsr91{( z_A3Bk5D_T+ts~<%p&ShLB-zOX0D)ef+CSQ(+A;-*yN2>r1&r#dY6HLw<|fxr%rycy zJv_=yE-VI5a;!|wfJ#wg&~|ruq5mp|Mk)?vp&o#;j|D&q0bzQ;lFUtX1|TktQNs2m g0cQbpgPP3!2F}&vANsUzRsaA107*qoM6N<$g0K5P)BE4g27ZT#)60-Z52dA|AQWS z=|9ku6!GHGi->sgKk(F^yot0Z)HD=DdT>2hO-Tt$XoG1{sTYa)PJQEayPJKpiHfja z*lgy_n|Yu2<_Byq{bMBn2|xmn03-kjKmzdp0ptr)O~0*Cud27VRyy*>064Id&QdDl zDBDieBer?93em-}rY(pF0Kv_`W^fkzAymU@fk+`D0XVos@Z;r>LPP>^=KhR>Y*7DT zMng!{79eQD`5_<^gsT7$5>%lp$1toK5?KShe^UzWlkOD}fb;7}LC6lr4A1$?V`4bT zGKeaGz>@5`T7j_O#b*nlzWECi8bn=8odRGt^Q7*(qI#>chKPMIMhYQX0!;k)!9%)x z{}J80bBkWSTBXI}it0lf_QJ%tvY|bDdrm<}?t@4Ge{g{+M+_q!xhD1f(BrNLvtH=7wKsBNRR6)?+(65~M?KCPDz_;H(;$1Q)< z>g09J8%RXssL&9>hrkqBVqT#lBXFN!C^2w(AT3jyItxY%<6>lZ*8A zHp<$+YXDf=shMeg*4qgi(7#_g27oxLcG;oyHrZPNL;e9k#8+_~Nyh&KiaSLTzt@2@00000 LNkvXXu0mjfydh5d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png new file mode 100644 index 0000000000000000000000000000000000000000..d80d352f7d156dda7b8fe6ce717e50814c77a74d GIT binary patch literal 707 zcmV;!0zCbRP)5dfwga9Ex2oM5<03pEr14xg*soHIoazVAl&0Nck0dQa=o}@^^P_~0Y zk=Rx&<%tGItA0U500^!J)`PP!4xt)G4MYmz3BbW6f*)^(6v7jLGq-2#WP>`R2@67^ zh5$|n&JF?TAY282ke~`pxrT1lkjOW{&u=-`G3i+m0T}033PN_cX88JtN5ycGZ4gxe zfhE~BwE}Lzvr7xEzUgNf3q(Ck*9E|7=0(jPS=Fktx`=%+M+za@0xbM#W|lrof267R z6SVeagO;=FY7BkY$1`KfhW^{hcM3xC9(V%SgLBKl00X^zK4L+kN?eV=0Izyl>7eqD zzW;BxYzS_b9+-t{EG*8`P}>PbIy-1?GXMaD$z8wlR|0ciw>#M|-%G9l$etG%NJZ%N zSpEL5tmh~mk6rOEmG&nIgC_O!4RBKu z17u!|h_(TKO$U(fzh7TZfa8-x)dsm<`usouMt7q25=bD;N0H5q$M p<@QIkvs>{Ga9a{T#X%&Qe+Ej7J$RF!3s(RD002ovPDHLkV1mQMFV_G7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/meta.json b/Resources/Textures/Structures/Decoration/world.rsi/meta.json new file mode 100644 index 00000000000..1920ab8b628 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/world.rsi/meta.json @@ -0,0 +1,249 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/ffcecc82f28c796f8eff92ac46ff0f5e0d9b1ab6/mojave/icons/structure/miscellaneous.dmi", + "size": { + "x": 32, + "y": 48 + }, + "states": [ + { + "name": "mailbox_old" + }, + { + "name": "mailbox_old-open" + }, + { + "name": "mailbox" + }, + { + "name": "mailbox-open" + }, + { + "name": "barrels1" + }, + { + "name": "barrels2" + }, + { + "name": "barrels3" + }, + { + "name": "barrels4" + }, + { + "name": "barrels5" + }, + { + "name": "barrels6" + }, + { + "name": "payphone", + "directions": 4 + }, + { + "name": "payphone_alt", + "directions": 4 + }, + { + "name": "trashbin" + }, + { + "name": "trashbin-1" + }, + { + "name": "trashbin-2" + }, + { + "name": "trashbin-3" + }, + { + "name": "phone_black" + }, + { + "name": "phone_red" + }, + { + "name": "pot_1" + }, + { + "name": "pot_2" + }, + { + "name": "pot_3" + }, + { + "name": "pot_4" + }, + { + "name": "concrete_barrier", + "directions": 4 + }, + { + "name": "concrete_barrier_1", + "directions": 4 + }, + { + "name": "concrete_barrier_2", + "directions": 4 + }, + { + "name": "concrete_barrier_3", + "directions": 4 + }, + { + "name": "concrete_barrier_4", + "directions": 4 + }, + { + "name": "concrete_barrier_5", + "directions": 4 + }, + { + "name": "concrete_barrier_alt", + "directions": 4 + }, + { + "name": "concrete_barrier_alt_2", + "directions": 4 + }, + { + "name": "skeleton" + }, + { + "name": "shower", + "directions": 4 + }, + { + "name": "toilet", + "directions": 4 + }, + { + "name": "sink", + "directions": 4 + }, + { + "name": "scattered_papers", + "directions": 8 + }, + { + "name": "papers_1", + "directions": 4 + }, + { + "name": "papers_2", + "directions": 4 + }, + { + "name": "papers_3", + "directions": 4 + }, + { + "name": "woodscrap", + "directions": 8 + }, + { + "name": "brickrubble", + "directions": 8 + }, + { + "name": "cardboard", + "directions": 8 + }, + { + "name": "pallet", + "directions": 4 + }, + { + "name": "pallet_stack", + "directions": 4 + }, + { + "name": "brickpile" + }, + { + "name": "bookstack_1" + }, + { + "name": "bookstack_2" + }, + { + "name": "bookstack_3" + }, + { + "name": "bookpile_1" + }, + { + "name": "bookpile_2" + }, + { + "name": "bookpile_3" + }, + { + "name": "bookpile_4" + }, + { + "name": "bookpile_5" + }, + { + "name": "bookpile_6" + }, + { + "name": "foodstuff_1" + }, + { + "name": "foodstuff_2" + }, + { + "name": "foodstuff_3" + }, + { + "name": "foodstuff_4" + }, + { + "name": "foodstuff_5" + }, + { + "name": "foodstuff_6" + }, + { + "name": "trashbags_1" + }, + { + "name": "trashbags_2" + }, + { + "name": "trashbags_3" + }, + { + "name": "trashbags_4" + }, + { + "name": "trashbags_5" + }, + { + "name": "trashbags_6" + }, + { + "name": "glass_1" + }, + { + "name": "glass_2" + }, + { + "name": "glass_3" + }, + { + "name": "glass_4" + }, + { + "name": "glass_5" + }, + { + "name": "glass_6" + }, + { + "name": "mine_sign" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png b/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..e67ecc5e3704a532c9db6851b61427d7c890c146 GIT binary patch literal 667 zcmV;M0%ZM(P)Mp>I8wY#1~%6~wi%`@eJJopck zcp$YNHsufSfaTQ#iu?mgC;$Z@1<>9WFgiRHss3^79ZpWq97O}Ty1s!9Pm8H9E9onU z>F-bo{jV6Pt*J4{ZuU0j{P6bm$L4drjYhV);uSsVx+zvHCot9J0~tMEKl8TQTWuZm zB-Wfiys!+J0FrbDE_U!`K=0@2Zy&`6AYle* zrT8m0L9n!Z(m_fE0gx?1(g5U8w)ofvD5Odb@C_6Q78h^?Pfq{<002ovPDHLkV1mO& BA5H)O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ef027d27401b5700df592aaf3306920fc9b002 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(S ziJmTwAr*7p&b0Lxbrflf7v^?O{L#f46|j)Av(?_=|3>?UHV;onMovd=XT^|ky^RJX z75zrDZ{EFmck|}W9-sF4J05ydV^{p_jgbwzr4U1r3d0i*h7%JRCMYv1xHCEQu{6kV zGN4EVbN=}9@9W=d&(hvLJU?5y;?%J#TQ})14?jQaZSJ3b`FlIn_U_r6JvDdD{(`NR zzw08U_lq%Fzt)eQ{B=t2%IwtI$y-{Nh*`M!Nhg2cc;ctgzMQK z{BZuN+o9KvUp(m=X3ZZv@ws1<wd0Ls%y4=Zu*;P4J*^@vVLDMi@P%CVz{utrUHpC@jI4qezn>CSTHI5%ZrC|ZWX?e zwr)RZnZRQic;O6Va(QjWoGUL%Y=>!#+CZp0_OdeO|Vob6&+*Z-MtL^aMdfK%c#d#_$}aJcVDZ(xdL N@O1TaS?83{1ON*rMXLY+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..73d59a10f32501afa34ee45de51f1c43919ee966 GIT binary patch literal 1036 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A)7 zeV#6kAr*7p&f1@M#X;bhdJvaO<0OGVmaYz_35xFm$83^&KR-Wx-&f0zcRA*X11SQ88vv@8rHHHe>O5+v15L4P}Pg zXG@toHI%2%UwwXeb@fs9zm=6ce@dSA?Q6WQn;V<7(N}x>ECv%v9=p1V8xm{$%{&aO z`O4mf*z2#W3r)WGzGl<3ZF(DHO8k5qo__l7w)09-@yofwE7z}&c)81S?QsR)Ddka0 z+(j8H=V`g-OkZ^B#x_fHmK{Gn$$tBuf8B;5c&p0F5}78|&3$}j*MIyh+<2?P(YfJx zznqE9g4gSwt0~zw9P_x_e%+ufXi`bp*&(k}y6^eFBnu`zM({Og=GF%>2}(jUFd^UOZv65h(YvbN-y|oMgEr;-6D<*><7VAL17K=h*+c zeonqRc%zglV}{cX?@vFnt@(Z*nYYLC{-ONTAEIANBK6JJvTS_&e)=}nRRdGt(Wcl@^ z;(blm^`_LB2>X0peAe=-jPhx>T0RAjuOVwQcdt6?#Xo_2W8ckZs?!WN%Ncy}d0+DH zzyD#+;~_Vmi7&VL&-ttP>gwsoUvE72B*iwt=T@I?ZcT3c?XtT?`>!Snw|?Vn~@QY&}jtl~??D~)a| zKgS!*X3r>{^y|6mALUaMBI4?c78RdaD72ukIBAl(q1iuw0Yr{qILFC&z*3RHLY;*H hBfAhUxkLPc{=LtfGX=Q*ZvbX*22WQ%mvv4FO#mfJ+{gd` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png b/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f250f41ecbabb407b20e87ebab85c8753a08383b GIT binary patch literal 1425 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone.png new file mode 100644 index 0000000000000000000000000000000000000000..928291b65efd16e82440a7becad6c0c5a9ff0b0b GIT binary patch literal 1239 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(C zPEQxdkcv5PXM6Ya1d1I0-?Tv8%FtG&?d1!JS$s-~rgFk!VrpTBoRSV-3*YcbbWN^` zn2t`0ijLc!DpjQu70Z|O3i|kS&UBlx#cKQOknruV-tD>?YWrl~{iI#*7Qedld;fcD zOYZ~=B?caMmWGEN3FfQ4hu2@B^|Da^UL1|_FW&>ynep@!(VHE zcYm0_NcX@!+14zp&0Nx-Dn;MDk8eHf@HPA9vAxG9+X_B<^OO5(c=@`@hrYl2AKaN4 zJTWJm(_w1-e%19n)8^m%{HR>kmRIXSoO_3g>kX?p>z}o;T`}f--(I!kYaZMAxcwJ4 z$wx8dRi>3)3u|3)zen2rL8yZ8t;8wc;Q-xuVLGzA3cx1$1Zd9(OtP`+n{<*tS*O(a0q^x8k$hn>+hlx9%l~tAp~L-L zJ?CW0bg7)r#S&Yp8p3}bysB06^;oQo%*~aD#M}bDbqcVbHnQjQk9^>xZ-sEj}I){a+9;Nxa_axx$7_J+A0jPXQF>|$j^-%4SV|glaEGy zVUhY@JoUv(#}=`KXuIx*&d2xOoNpDmF(M>WMsgg zsvUAqYOnBGeQ#TiL+HHehg2djC^}eg&=%K!c;lpSo=>f4fcK)!%1gfVdVh&l)Zw;b zk$C;K+LW_y{+{6e!*ySpSS6YM9qy2y#W0ieb^hVC_bwmYzxfPb%l$tW>Ke<}&E>et z{6j2ldoj}!=LuggPq*7~r&m7I{c#D~M!}~!2j90y^5wEBu+HD7QTZ@lzTW!o{snvv zXFt5!@a440BbCm(^X1=KHt;(*e)L>mz54Z~FovkGA1$uoK9LK&K0Y?qp??gLINOONudf19}9|EEXGhU%tiOdm{(wUs$IYt>KL z`@OLJ|3`SL-?yjn$!~>r@4ffxTW!?u-80<}y^)RLa=6>i=ioAhm-qe^x3|Yif0tZd zU4Hn;Wb>&DC;y$swBvD1wp;3--|Z_VFTTI;ov8H9@YxFK*>_IX-B!Gi`f&F$@o%X@ zEx7V1Cy4l v0XUKISN5a$k9NWO#xTxD`UxHT56DkY@i<;5T|E(4QZabC`njxgN@xNAABR2| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..aa05c3fd31d0d02ebb9701d6f296f456edb0d1e4 GIT binary patch literal 1327 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(C zhn_BuAr*7pM*HUryNmo^$PyT%>ifu{ReMcTOVFKwz|LR|m!}uJdMyeXn1$H={<8fQ z_{%oOLgDKLxhjX1SLA{ij|Qn;Su|zI?K9tBY5X~DkvYe4MV14F9E=4rP7E^b0u1QfjZZmd*i`Ow+~0afPvl-5_tf3> zi#PoVn0_{X-;T4}?6a9Bg&hd{*17WVk6)LjYlU8^RN1{P;@HdL^w3u|hr`&lnJxt! z2s0C$cQ^csQFeEo;0E5EM364uu5C(uba?^hrf@yt^LQOT>rO4y4%_6{fUj42Yv^?XZ~=lv$SJ)p*Wvp9+Vq1SW&TVV z9}eFP{QC6e7xsLAf#HbKUWU%h8PV0L9W>l4kmRb|SiD}A@Vdo%enG^b49W0A6{ z5B~S7Ol{Lze@3B@o!h%Q%ljVnE>sM0`@Z;7u_UVs|Gb8%+N;xJKbvf{yBOy#S8wd2 zzCfMP?(@8VOCwbozt|QOc%8R%lyBAg+kH#?#GmWiy_r<1_wvoHTGuq4dJziW`z4_kjnI#?y7Zf(nTzKSH zcd2-Skk#dv$}4SEJ0e&v?2Nzhk>_fb=+BzC%8Y&T6Vwh}ueHe0F%V-+`J}DA{XwPN zv}w~mB9*=2c9(AsM*J@**@RNF7C<@)fLW9nw}8Ej^yoCZHwUu6EwvgSX&QSinTRe?P{ERNC&$?HDV zAG~|(roxNJXUEUZmH#Auqqw(eBCE)^zSsAaU$LE-zTlL7Xa8i@n#!G1GCZ;~ zx1^SzVmZ(hJelIt52(M|KQYqd2{i;#jl*A3 z+xPeKDwn2}{uib;_}g3EdhzVyO`d7Letv6zeeFrW?g#&b#RETWzcc^XBsYJiU$ysM zZMU8K_wO5JwSCUvOeg-lU~=hreBpz4Zj5o>>E+Yoc8jas+vC};@iUe)V_orT*{OnG z(W?^Y@Q4+eSnyT%Ba@ImPz{v0uvflQyrNa{Bhy_jmAC^FD;lS_r~PqVJn_?F QUFVdQ&MBb@0NL1YNB{r; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png new file mode 100644 index 0000000000000000000000000000000000000000..87403a190f202eabbafda4133c2ecfd649c09453 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_3l z)zif>q+-t7%NN-X1&FYHFc!M$>{>Nb<&tw%zsTR0fl7N_Cd(3R z%M~_C%de{C?_Yc}<v;A#^QvX+8iMxxw`V-D;X~c$a7RsT!v~igy^DVYF>lg?IJ=15 Yh9N~bUSs*&Y88-(r>mdKI;Vst00DM~Q~&?~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png new file mode 100644 index 0000000000000000000000000000000000000000..e925a7f1f4c6df108bdf1430b771c4603ee057c9 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZnt_2) z(bL5-q+-t7%Z}bmjw0+I)UTX$>ruhNqx1G{C*pL5=qpR6H#Ij z;dsIcJ z`B8E4GS&NLYZyM}IDR}|S8?y!*<+knt)`dU%DQ|z$?xn<;gzMa#wx#_w(ViOGxyC> zZ#})&?TjLyy;z?#?|%OL!MUewo1Pm!|KfD+Aoh<|&3u2(o;!1hMUWd6g?Y*S<*UXYRbz{?nt@=WKXhbu_L)78&qol`;+020oV AlmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b9ae782f094f4bf8987d87a47419d157c2fe099b GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!3HD?)>PyJDb50q$YKTtz9S&aI8~cZ8YuYL z)5S5QV$Rzu)?9}i1lS%3+B7i6FA?FE7G%j5WXXT{a8Ij3$5sUvU7aIAi#U%+AL&U^ zouqKHy`{DO)J@gTZ_nht3MmAdg8~xN6YO3b&pUqdY5w;Pv*+G#*Ec*Z5!!x>ukyI| z&xfBUzc-UMk@}|5cy#sMeI`y^2h^WGdi_>$`!Naollp0ozwg^Lcf)7C51QS(4pjEN z$>?GFarm9`FRf|43XzYyHH1$oa|CtdIOZ~li}(j@-(m7Vq^)K%_kTvE3ZIvDpBV&i z>b+>IJs;4sFvEA-U$2IEj+>88Fz@WvxhapuhrnKbI@e3d~d%F6$taD0e F0stP%eLDaE literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e594848a8f25fb48bfa8ddcdd88d2134c9a43a GIT binary patch literal 494 zcmV|&wV8oID5m z0|*fm3gBmtHx}oKnoqlHx@kc{&B5;43NfFWaC%>5szm4(P;)fO=F)I-UUB0y>V!L1 zZfmf)z6@P3a&U1K8X^<`EjeaR%~Sa#bUr`e_055T4}x)o!27~hg6l0%QeN8=i6pez z4(K)GTbyYx9)OajLHXehlyNV~R=d-Sqb&O+9st}}tvB6yabd{|&h^(D-8DRjEaLtU zHGB|O!^i+=NMFII=F9*$wvA2ieFFvw+vMLT9)K!Xg{b;}e?+tmgVtEf&jm0Hg4LWG kfY(eYfG9}-2{3YiFOQq3v$gL^#{d8T07*qoM6N<$g3k)nZ~y=R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f665ca9125edfdbe0bd660bd1f43dd6a32d791b9 GIT binary patch literal 449 zcmV;y0Y3hTP)_~_<99LcCPXN1>m8fVe(Ae=?kk@8mrfF4B0QhE#Y-Gt#^=9RQ1C(Pq=5`|xc5&#xh@mY3Jo$jp=rkTcM*P2j!SFLkXn!Wa rC}PZfs>u8avJ{gFkQEGIz{COXrY?}O03*Kk00000NkvXXu0mjf;(NW# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae15c9ee503d77163a5c31b47870ded014a186a GIT binary patch literal 475 zcmV<10VMv3P)EU=YL~tEr=iRM6eQ&E3Dq z-Oa&WK@f3NJ6UQ)&`H#stxKex&b+g)RVmWDCKTm;A>{Hd-1qa|yCbn+#9{yjU;qYS z00v+H24DaN_#XhPfsM1Aq&=FHJQr%`biiXL|ENH23)2)LGK}TM%?WbPb0FK*MOK$6~Gxa4iHj zT@pY)VVgSd#ScLGT7_Zt_kKvI4gKbH%Wnkm8-%X8F@ULAtN?L|0T^K903RP?t{Io} RGZX*-002ovPDHLkV1ims%WD7t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png b/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png new file mode 100644 index 0000000000000000000000000000000000000000..59447400c372e0475e72fdef8b061f854bf56406 GIT binary patch literal 2280 zcmbtW`8U*y8~)5BfS$IMC&tjJ2fbqju@CIzbi<3jWgP0S(G{&-$@#N1G5c7~Yv-n&bqBb_EjA|&XqFD*UcobQ zbDP85=$XXD-EVZy66%3w1+&{=rtET9zLfBF=nk9B?cKpO`gV$eyZgDi{t&-0sq%V2 zYWI0`(sO0VQ7kNQ#Z@jvM)og;zFprDjteQf|oY$GUaBOPh zPSB;u<3tWG;yQm?Oz)0}-0OCqVbQNVm(pUsKE;^3s=TZQ46qAOu~~*YQEpL^xMr5P zJJPGSc~d1_Jj$`Bh5~=DNtAf3bl>=j5L>c~3CV;^isap$xxU5e=JoTGi6b=~CDKz| zn6@`TINVOsE7R_Qfjz&s@Nnu2o3wnrW7>cO9%mMjoU})a9)2&W!>()WY!K(e4C&9r zB&?+P(m1PgQK*r{QyRZ6+oio_e>y~TuUNtGeyLG*%`Je=XUHaX2wSF-1uah=1ZRkY zW$??|?9YF;gzvfJ0GHwk3%N&Z6FawX;hkjr3@D=BonXn!EQBh9GkMQ1AQ>G^2^H?&{ zjV#JxkmYc9zp_nk_n#zdQu&S5p0o1j!=M+~B8WVrB$Z4)8;hlWJxKY&_Cq&-<~CI( z#b0noKHC)rK*#S%C*Yr_T>?Ghowv}sdw>=B9^&?i;y7Y95u*0vVl5_prk!_Jy`Bi9`iTV%CoAeY#hwN|06Li9w7GM*^Qh+?Vw_h&(k}UbTqx{f-2B8($y}QJY*iP zma`~8TefJBtP>+jJnZZ~!C9igW*JN`FLhLTm51g9C87^eV@U~Pbq6XN6eDyc%vyf3 z%uwVpRMN?_xsS9ltwDTb7$v5b74`lxpXRA+ut4vL@wE)OR=rq(Cs~21up&L4XXjO^ z@9M?nTnn0A?$SU4tmg2i0fg1p9~>mFlOb*|JdIJx;$22p!qQDlr`CJWI2AR;7%EaA z;(blON8CN7%@BCGs>mxIOoX+yL2JLf0iUC}B+!@> zS}wB)TXWVlp;%R4N{HJj=pmhv&C^tULn8laD2Ns(H8Ac>c=t%p@@(0=;SRh^M$5M; z@kPnI&(DNxy};1hsV5<)TT!?x!bknl?q3YN?tn0)+;I2uK_FMJ`k1Ub`PH}|Am$J| zmuKBpPvOd#W&aGsXxz4w&QPcO0YAgt%_B>K0rWD+xu5Q&U||<_wP53Kf{J0(Enmm% zFY3B0jQVDKj7~{(K}UV=<(q_Jzn`x8L4UnoVvRSuc`9`2rF0gKCmi2okT$;bp(ystEN8syk$l}r$uUR8u1~%4^B>kW z3I?i^2Y3=gsFehz)^{3xWS}X$$QY}UH{o$w!v3sG5ZZT0r2xq_t*X_qG*ksHNmxye zlMH_ieVeZH!gJzJj}rK?4nv5zv9}$A{`@7Hfq?R}4zjAsX^-s+bP1eq!E zJ`e9nO_ixw|5jUI_=q>K;aE-)^}AcNjV?jzqJ7?)aH*=b9y8;|Q@597AhOjtRl!1D zr}~OW6{2GO2~`*QfT%b$I`klI!1!WGN3npM{+2nk7_?C6@9oTX>rSYmso9|t4$xUVb@a|?)!<)v;KSRbtmHClt!e)s8LO@ zD_1u_3o;pa_+`ZJ38|hX*5PQhll&y4mD0bx2t7f1A=HErS+80+STxV!w2PX*F$%B( ba9jvuv~oiMg3a20T>#Xnb2d+`uqpol9j@-O literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/shower.png b/Resources/Textures/Structures/Decoration/world.rsi/shower.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3f561f9d27ad370cf52e05328c50e9de44eb08 GIT binary patch literal 794 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq_>O=u<5X=vX$A(S zGoCJvAr*7p&OYxQ5-4(ff8&3L7Zz6*E%lPxHhBSurW8 z=-92Ker0KQlFU;3hhO(iFW0;7p7{RU(T8U&t6kQ{BJyx3*%1SHjHi zuf-U0Q?@olf3B6OvE^A`KbP0}XU-RCsh2tp&9c9L@15Ez@TKN`TE;)A-}Wc77s&7Xjtx|A*zj{X)1`M8L`#`0p6;vry>OD_ zj1Aw4mnW4nc?jo3^z`oL3)F0wGOO(>mqsghLtzX9QsAgZGt@WwX8CVWiDddw(Gy-N zcHq;_rMZRwn3B(Wzs;`Ia@oYPr96Hsn}3Z!OW_qR4O8xwq7Gg*6T@^D9FcNa+Yt1c zZ!446L(I@N=mXj15EW7XXThV5#*M%KMonJGBDc=3ysu(Q-uKUSJ(^qzAAFi0&YyFr z=GPz9Er%b(@2wDvQ&;!Wo+!ZL@gdj5{-fX};iXQ(*%Jg7w7nLO}j5P-oWuW=6Ybj$MOc=0$ZZ2Ab_P#ZKbLh*2~7Y+ CIboUr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/sink.png b/Resources/Textures/Structures/Decoration/world.rsi/sink.png new file mode 100644 index 0000000000000000000000000000000000000000..ab89eea0ad0efbe3cf8a2652118f7bc31b5c7042 GIT binary patch literal 1241 zcmV;~1Sb25P)ez zFJHgQ&)+k$dDD6sSl!=Tx28`a4TzDYfq z=i33{-@ez~V=Kv!R|HT@OPn(TgI*e5@!2_B>w-elAjB~x)`K1A{3^xsbA2ds9)%Y} zxcVIN37@wZ7|Lz7g3~1T1ECAb}GNkidxsNZ>>RBygeu5;)NS37lwv1Wq(S0w)?Ef#VE7X}jKOq0GG- zvUEBF@I#|6g{@CbHLu^gyQEBDqZdKLSIYpY!4-%{wH0e^P==DO%d=JhnLdA3lxdCQ z6O+wk48RMh#e4m3%r!-^E{|AhgJFx0hK*j-NSpzzw!-i1sKNlcHvqSYl{OgN;={TD z{E9?f+(*sM091l!{qD{l0c&kA=@uXTQ#v)W`aO3V#2fRf!+V)5@mV+na8KO0ddY=_ zETTC#^~AaR#8Y6rqt04~?Zps3Ll52nS3FotmPo zG(zDVeVe>+tc!rW>CRds6wZ+qrFl(W93N`>4SEpNS9{jjIv`zI3$nD~xEddD@t_9` z95`$Ee}|who#iqopsr*VNTK@^5Z@B!kbun~i3V-*F_!YZVZv8Aiu(D7DwX#tpVq+06Z!pd`<|N~i#95Q92y-B8b~fz)?SC$l9aMiD z0U!VbfB+Bx0zd!=00H2C0TkAAIx|1tIKRERQpKanKq3Glj%a#vT%|_F6z2t{bT<&* z0Eq4%9IMgcA$y)N03WX}cDtpOXQ=dK*TNr>>mcsM_1RTAZ6s z27o+M2V(ik>avA;sMeAJa3T1fR;ro*^Mn8df@6Luqe%g=x4ogO_0$lg=k)y6t21KH z0gl*C3J8i3K?$zqva@O`J?hn-u>k0M1Z5r|W`wL@s@|4$QO(+6aZ7I$b~{3N17Pz> zscgkKV!zv#vPNp^_G{pP;99$s#F_&LV0ZMX$-jGU#J&VgaptQv3(~GoW2NBo?#Xn) zw8nbLH9%4it=dvR+J!fOOg_2k!pwx0DJU)olnI*#?B_)4K=u>2F1!H{kai<*!|V&T z6SO5rMq0?&LAQom+V>$x5xpUatK_van6Pk~X3h-ZnYd*ri z0&pQ{J-3+LXys7P00e?rkIfXOY(BD%3k;*a0T42bqEE^iV7@N=8i1RVg1q`JBrcF5 zpB=HQ_kwmeXPrI3j_9LG$9wec#RMnll%Iar*Ege{&w+l#p96dXJfVk0E$Zy000000 LNkvXXu0mjfnJg;; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/toilet.png b/Resources/Textures/Structures/Decoration/world.rsi/toilet.png new file mode 100644 index 0000000000000000000000000000000000000000..912bd547b0ac817af8239bf657a5df0ba135f3ce GIT binary patch literal 1267 zcmVPx(tw}^dRCt{2oWF0|Mij@tG_-UnV9OLC1NLYMkpma-(7|yh(*RFc~rgh*2w$JX(MWlA;7;$*2s>V~^zVmn@n-`F#KZHt$Tm z_jLDuQ11*d48t%Cb6e5!OzPZe&x_u8@Nt;y-c?h}n$Wq^p6_?s*xAwn02h~T;@rrb zxe7*D%bL*8*Kv5z3SB!L46(DN2d~q?Ff@L6&_Y9BU#_Gjk!gS^^eLb8Ok7;LIO&<8 z>#C8t1sr#Vu{FhZb0fI++moMzpQEb-0LIo7jyqeDh~<*GM>p&BxncO9E-mY3!-&nZ z92)=v#ckWg#Pe>v56D~rfUmerX%QN4HVjyf4ckt3mN$vQK48_j^#;hb1)|V?7s=Wp zHhT@+xPPV6(RtT za|KL1Pur~5=VGe+{N<})oD4(bswfW>aDtQz06@2I!Z7sUMW1?fo(e1!1)@r-rnE@m zD6rdV0X;L6=op5M-Bt_dqtQ}@Bg!nt7Yc*N5064V;P~OuBDcv!+2wd41Dy0s9K&A) zfB*Fd{`vO}e!Tw!0N{Ky3M#{8LghF`8o)2dMWdheOzd~s!S9C$Em)3?L5}<9Hh^ur zFbo~~g%Y6Qq?8UFu~fKV_EV3q=8yGQBKreL1Xz0g6_aMdmAE06_i>;wtlq zg?zwu5^}nG=?`8k$HsqW=i=XGqLeeE=MrfYbBvxUBoRK^DoN%4Kr z6kIt20C6vWm1mI3Z2>^;3sxyPV;F{E7=~dOhG7_nVHk!f4Gl={!cyVPPae|rt3|u8 z2$c>#rIDrIT0>u#HW=+}>B<~@N+V0Z&^JTd&5ckq(yAfTZ;b{3;Mt4Uc>8_?@!Bdt zy1acq!m}5zL)StpprNl9ZZJ>@%dunII@BN`I|#8#$n;wSfN#EyI|(cKarFwsdJ8J+`L7*`e!fQkr<4*6o|~Zr{YyUw@IN?PF^ia@tAy zX+UxZW;A>N{~wMJ$E)~X0b=+T<%!BFjz^hzo)!~YyfGj@8WX*FRV`|=943mmm1VNV zoZ!Usw7mPd>i-h43|XaNkUF%J!bzEDgo;A40?Df&P1aNe(z>&6g7P9N$;vPc!!QiP dFbu;~%@?DUijL%QA5#DT002ovPDHLkV1n5hPI>?U literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png new file mode 100644 index 0000000000000000000000000000000000000000..32c78882f4136f6e54a0490645b359b33ae033ad GIT binary patch literal 623 zcmV-#0+9WQP)~h)fH#3>x2E{*{ z1+V}XzyeqR3t#~(fCaDsT>&I!rrhDkF!}Xroz`6bexUCF5XQ>lu*vB-yKXlS+5mFY zk4}l!a400Ak&s}hiCENqc&Qjc7-ay$5XJLWtC47>TB9;xkMo8ZL1+UYy@-(aEip2H z;Av(fF2co*#i`&c`T<*p{7oMOLJv-ol)_(xf=2M+8Vv*$j)mX59RXmUHAj3@zuL|KLT3#zzIbDE%YA)nej|*G#kGXB0Azz`{<%Uv zM(=y|mHgeEZ8v*)>xpNM4#jo8{P*tx2%MfbMTR0HVrDeziOY8XTo`002ov JPDHLkV1mVx4we7_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ebeb9933b44c603e96c823565f6f811e4efc8b GIT binary patch literal 771 zcmV+e1N{7nP)RRM$`2yCv`BQ-h1DX~KPaXk4W*liO^t?HXiQw_YRq}b8E>95lbNX~${ZNxy*DrK z{O-LkZ<2lTmz4sf04YEUkOHItDL@L40we;+=f+&z2Q!1F-)gj^T-hA>BLFbZ9y@B< zyN#w0givuoVgZZ}54nsQLgZhX9f*UD;{nEjhztO8n0%<#j4?oP0f6Rg>ntrkeh~^2 z82}5@lp4x7=BmE0d1H8vF%7=;c{dOu5`bNI8n6vhWQCc)xGqmvS^5It!!V#3F5TAA z!;odLvlX;SLjhN~e?_sk13^##c0Cd|F`c0;O_ zb<>9VMB!Zf5*OuwImVwXKQhlpNA}Cs_IEiyH7#>j=H%-2o3VeEc>pkF3D`f7IpXzE zBHUNsypqY2r-W@lRLU!o%b%4b@&LMZ_BI?tnq+VYvKoQ8I@PoAKwb-}T%R z11JcicKTf!cgE{-ady`2M7knt8z0+y;G3D7^cV3j09tF6dUw&fH+H{Rlnc`{GMqgj zQ|;@)z2ctCLjn9`muau&u>lmsZ_~f|*X+Ln_yOsgt6-*@Rk#2E002ovPDHLkV1f&e BS_J?A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png new file mode 100644 index 0000000000000000000000000000000000000000..828a44184ee7c59002801ae28dce9bf76af460e9 GIT binary patch literal 685 zcmV;e0#f~nP)n^!#vq6MK) z(N-@CrdB*CO3kcJm~1!6###i)gOFsC?EK!Jec8p}kF5kK0ZM=ppaduZN`MmJ{{XaG z8xx$DtIP4&$!T|CE&vpxJ&nia*xlPP_k-)Z_`PobCKI9%fGtd0sZLYTf|0 z_w){4qv#06F#@ny6{au%Ct(^?oE~wU;_MB4t{|EQF91x04;fk&S0VM3qIO+qguDT0 znscu8tmR1{ybnO_9fbk-v7JLLO1(}q7HlDa;X{agO&B_QpCzu|+O7I~K7Rmyv|g`G z(n6^aGm@0GH*3pXT!ZM*zCE6~Y!yE80Q; z2m5Uk?$&C}-1qOpL>1ee4$pAbPUr&81%UA0cHLaRjNYf7voX0W&*NMGw8^hY>haj) z+lM(L*V^5(#IRJgWxMk41mNCoc>g-Jw6qnoyAeb~jkBgIP234!oBn(lcAS}_^WH-& zmey>tYzhGM5ap!&$n(`lM}pDnl-fW2>HxcLH5Y!;!J0Oo0*D^ay1 T%Ga%!00000NkvXXu0mjf*CH_w literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png new file mode 100644 index 0000000000000000000000000000000000000000..368852fc2350a615d0eae4600483a11e5ea1432a GIT binary patch literal 617 zcmV-v0+#)WP)0)0+pDMN}&@& zOZx#rU&ss37bnD_P$BuGDvp!h{qFAB&SA1=ivSTI0z`la5CI}U1o(ddlk?LI*WR#~ z-{0O%5B>}Q!5LWRrcckEAzA}4bJ}LL*$G4|0A`M$4D71}uAv~`0?;u6YfuFl4g2|T zxmpKTqY(hk-q-8$o&XAiF@kqBF8~6M&(h*9%`=0&&KLQ0(02p!x&FUx6>2L0r_78Q zBQPq$s`x5Gt+cfY0LzY_b;Kar7Hc8Fy#R22JWicCRsvPALS(D74S46~dXf>QsT~f0 z_TKiD0X2w<5Bflh6!1$&Nv$SI0AFw}E&P0?<-E2;g-Sp`og9s_m$zjF!Ye{8t!7LJ zYJ?f97%5cDDPXa3Di98UDxYI2+$!B?d{37t0YCkw$zZl{+R^DawvZgNI+s@$wFv=6 z_lXLCDxFR>`=;P{4=aezs3DH$vqkBLnkWH4q{polojnUIgndtgY4&_h;W`x{gxzSg zr*I5`G9v|O+68^fx&lB5JGTXJz6I*aubJ6xTETSON`!<$-%t&H7uZU1GvX3{xPNqD zWI2Wb(26zeR6`*&IPZOD3g);U1TRC~NKg?5VwTW_1+!!I@uSajI3fhiw@I}=jJiT> zFPX2uu%@GXCjbJ0Yho+nJAif$5EAg$0YWVT>>c0(Y0IjK(}SIi00000NkvXXu0mjf Dx|;yk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png new file mode 100644 index 0000000000000000000000000000000000000000..b878b22d526995dae5a00bc3487e6e0ab319052e GIT binary patch literal 569 zcmV-90>=G`P)q$gGRCt{2m(5NBK@f!3#488~PbivrGEv|E4Lo_{YN9A74j??h zO0594DMdY9AUk1YdafDDiUGC&5%02v?yYz1(4b5-KA)9X~< zm-A&YdVW3m6#zINUJt7AY`!Q6La1FqS^-?1_e(|%L*yTeFNllbU=6qnL?Zy4pLM&% z`*>10R>SXv!Pryu_%vz+ss+G?8o4`H^Yn0ilPXC7b&e=~tZ8r{q)9-n?1TroJWvrqw#-t&I{ zaQi(oSQi~m3C!z3i;@AV3L5}$kSabpz^06h_qZa_9t@&U0e6f|Au-3ed?PK+ltuNE zJO#X&8!Ctzm4GTyA-XwWt5(dsGWVX>2w2yqU_yYm=?n!@GN&}}bUa$P)H&Aay>-q* z0ELL=upu4LAU#fjHYT0ZquUBVASzoeEVc4E*5gTMFz&`Q@r zOvxLWD%%0(qtAeD>YWx4T}Sa@zZ4s{j?C0#twsPys4H1*ibu0&shCwZXMN>^Jv! z_tTRf1AsV%b#D6bR0MGp03)ZZ7wdx|Is-6rh*CJp1g<%dP5^WaVHH)7(QwfG=8IJ} z8=U}_tJQ8y0ENLA;w4rDz=$W;bFGZvL#_V}^WwF~G}GoWSBan6ze(HT$2 z>;UckoVXuYnuQR+&-h#$xpRl`=iFB^1MXD!0ydhjqf96fgfUhC74<+u02S~fRwHsN zNk9E(0V3g4A4d?8aH@>iF5nB=+rH)ktTRqP&m#R41JG35g`@pIYdeOM0MBo8w8(}Z z8eCIdKufLr`?&w~p9W9}b>fa;nAb?TUwH3dN)^un_`}|MAD90{m%!cV^9U{Ya23(EtDd07*qoM6N<$f&`H4Qvd(} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab01db6716d21130924b25d138c830d0ebb85950 GIT binary patch literal 524 zcmV+n0`vWeP)5F%*VVaN$lyMMQACFfO`~K7!!F$50f+XA(it zx2RyT>du9hF1oOI$$*ri4lZ4dIhmdza}jf<2_oc&k~C+S|I5iqG862NrnpFTa_I;oEOUvmve|gTtDInwwDaS1`rUQ)y+cXB2-Pskv2dSeS)p*Ll!XY1u(G$j}JZb0IGosk&X)(h$W!< zs#Jt(p{aeUISC+odu5(Cl|nRI?M%ELtjM_a48V*5Ag^BkNw)Jd({=#*;Sjb}yt-EZ z^;vIrfw6FC7C=|H48h`DJc70Zu)n**j!sT9W7PDM0c2`fQU~w@2-tp|PB)2;zDwu`U5_uCEHlkbZp5H~^YmUNmKYd+$KDcp~CBMU|ES+q2`tLd-6Jm_3{UQPfSU z9S$d9T$Xa39Y6+9Rpr7uG>uU$sf|08mtc zxC_v@OlTZ(Zs(&ED_g9&1i?Zayniqz%qhl|08qDg_lc3_jb|Ldq`m?Eox^G5-Qj=$ O0000fM8g zgjEjWT~Ms#zuwbjg;p=tu_~lXT{scC#~W8t9T6B#m<4n zh55wfOW(a~SUG@NqY0ab&CLDT>dfEtKz+5IS$~(X27n9rY;LU6Q_yPNQ69}#IsoiN zBLd*+@}f@|`)I(@03ddDazxi_jV)UBEYNw|ur7f&K1u7r?si`eYpD)If<4>y(4o~* zI2S;X!2repzttG|^bGi}3>Oc8!=)+&od;<_J$~shQsRM>#&5<}CD13FdfYm3M_h!R m0CZg6+;)Y6w#XX;Z^9qQ?XMtv-ydZF0000PyJDb50q$YKTtz9S&aI8~cZnt_2a z)zif>q+-t7sT;kR9R=FHJ6zD4)73HIsz=b0%ZL1gJrC?@b(NAoY1l>TU*_`7pKm;I3?JI;8q06)6Y}q`EvyRjZf$7s~HtonpbEZ=w)wCw~~lTm}+l+pnQvB*>*GWU(@xK za+pH}-;3M`E%;hsFVsGD6{AeOUr)I1be|R6j-4zLTB4#$uLQ8_-+6D@5Pr&EEw#>N zq3O_ITWW|IsL)*#ri+lKbYS?UdpU$T>Ksw O3k;sFelF{r5}E)cq^l|b literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6bfcbaf6b3b54c36988d90df3cf8e4b13bd5f0 GIT binary patch literal 465 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..72f5a15231cad854072150bedeab4bc982dc1b59 GIT binary patch literal 540 zcmV+%0^|LOP)b)RqX+lEU|djSkBD* zXhLjzp!f%PX%66ROx%+9$Z?C&yS`Loe%t5xuFO$KQ323IU#fE)`W5zdTg_Q#QC=Tl z+X}P=`_TUZNQtM`)8{u(DVCz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..2aea809d943558045eb68c2ea8ad0f8b0a36d54a GIT binary patch literal 483 zcmV<90UZ8`P)^g&GnN_G7!(=9^no9$EdR0C`JqDr}?Zevik`WwW3KK&vJ@CYlCau~t0* zlmX8V3*UbJO!&#rzLc+rK}%)8^NVAm`pZ5+Z2(F??)-c?^5UviDg)P(3*oUmGeO(5 z|AxG-!8Z`~Q3(iAH491r>wQ=k_{4b37RF18D+7?x#B|Q1@Qbs{^osy11K{e(=$sd= zQde9VAZ@DYrLxryP^Y*QfNdgR&O7uvhr@8p3s|9lnfTSF!iD6?j*@#^1ixjceJlPK Z0ADbv(Ejt}>>~gG002ovPDHLkV1hri(#!w= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..04bfdc1aef2748c711f3c78a9fab9108c002130f GIT binary patch literal 254 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a7551aff5986df1f7021236ab0193e60ee15efa3 GIT binary patch literal 5588 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json new file mode 100644 index 00000000000..3f29b07f084 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "original sprites by Mithrandalf for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba5dcc89629b486b489f8afc2a0ac2ed366c27f GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0L@+;Narq6c7*)92^`T z5|WsZkddCApPye-QPJ4Y(AU*9dGh2BpB4T9l`@tD`2{mLJiCzwph#_&!%v3oMt;US#13y~q-w%fThFV0PoW zMG-=G^~G9b!ZJJ64yPX> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..f172eb6e1a2577fbdc11fafb369aaed971ae5cc5 GIT binary patch literal 394 zcmV;50d@X~P)Hwl004kPA0q==SD?=v)MjbHffKdkwxC7pkPzlk*0iz}1 z$aMgyR|JZGlG}t(y%akD1Ym7KkR!}(jqs{HdH5W-T}YKSA-Ho1Y!AW!$Y5BblNfLi oNiSIrKEBTT20Rf002ZWfPFODcb^rhX07*qoM6N<$f)YQKI{*Lx literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..cee2ab578631f0265342703a351826febc447dd1 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7e+r z#WAE}PI96|g2AhXKz1Hp_8GHo|5ZQ!;j%ivVbD>=_xJatEf7_(;$m@ik*uiP(Gm3f z=V|jrvc6lGO|D#(IFsAk5mf!@gJs*}D CrCsX) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..994cabb2715f36c188da2638753e45aff2cdb308 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*^E z#WAE}&f9CgTn!2WtO>2>g4Q+{gto7r%98tA(LdmV;3~m8$3&Qw_G~X&c&>d%#mp`l z1_lr2fZ5-E75_}I)@52S#r0q2k3DPF)ao3le3O;tbSS|}neE1%B~xer`BfRFI@82X z5oi$|D5QUw42 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..5ba5dcc89629b486b489f8afc2a0ac2ed366c27f GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv^#Gp`S0L@+;Narq6c7*)92^`T z5|WsZkddCApPye-QPJ4Y(AU*9dGh2BpB4T9l`@tD`2{mLJiCzwph#_&!%v3oMt;US#13y~q-w%fThFV0PoW zMG-=G^~G9b!ZJJ64yPX> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..af64f96c3e2af8838598f52b50ffc54f4e2efd52 GIT binary patch literal 1009 zcmV($f9(rjm=^OM?^w1vq zm_78?=V$`O0g57kf!I#vSfZ$1{)u8|mReeJ0+@*x$N{f0Dk@D zr&_Efg3yN)DUOdv5K`jopL6)W-#(Y7snTb&nPm*X@4x+ApPZbk-{bMH-S78(ym;{= ziXv6|Xmo<*@>=bG|J}6ygj`TSa~7Z(@wouH~V==E$mb%5FH zGkAT6^jO(+k50r!gzFq$>{`nSt{oof@)K! zaInrc#sDl9F<#BysFyPNHGPI*fYCQYBx|9b84e?q1SZQGmg1E`0MDjR@$T|JxUSpo zWkrdr`Aw^fH2=uv-?!&x09aO&bdMjOQtWe;;l-xJ@p!DlVcR_lO{Kzfvsh3Fvew23 zfd1~}UcZmPAE;zoEMpZC+qS{JYKqI2fH6x9pufk~g8{_5gqqJkP$vwj*(@;_3=mQt zp64M5dAY>WVisQrGpS;7wjs_`{dz?hQGN0Lb7Sq6{5@aj4)PAA7$(=%*i z3_wW<$HH-b^k_m31g@^G@#M*bDq^cn9Y!IJjzU~s&JS#i07!SG#mV;m{Txv=q)-G{ ztpqV5I7`(^>8SQ4^#N^T1c0t}jx{?=GrI8x6mPl4rmCp^H4I8zbYNoyfIsk% z&=t&yCWXM3oC?t-nbYgRaU7NToC6F_+ZY2-kwY!}^<8e7IBN!!zT4Zkc`yJTFl1Ix z%;Q_n+uEp&=u`C zJ#|WL%1r22C?NH1tM1kXy5;~)yiEC8wb`c3ZtkI&ZHxinl8S~Se2yeZw|_^S0MK|% fjNU(De~J7LPDJ+f!GtgH00000NkvXXu0mjfYa!|g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..95c3f82c11fb827ba02375dd835dbf9dc1d745e6 GIT binary patch literal 793 zcmV+!1LpjRP)Oq!VJo-Q1b^CY^K7z2|&ijkw^r z1aJx962SihU}-UUOxbR;qE>JGvwr@0Y$rZ8QUDY#rvrl74CDAXXNpd@%bD)277Jfz z^ZTlQQ#AmpkUwr5gLPWKlw}I@9uKB%4oFfNrBV^?RvV3GM@voW0T8`ZxhT32-%TU@ z`XyH1yu*{n%lNwf9gmjpql6*`gJXRFC=5{e{R=1-3Y_Oek+aS2WEPZnM-G4(@O$TB zm*?Q%pp4I7*5UDp%)-jbQ`Bn}xZQJdPC!d&mLXMod^D7+9-`OlbM>`K8D&XAAh;+G zWlTQ+WvRjptZzi{;`uYY|L_qHAKa7gHxUeYnT3UGSMg(8JqS%RK$4?AQ`P0t=?pk$ zT%1V(G=wIjNlQ)IW?)Jl!a_lkd+)}qTZGr^1q?>GXWi)a2WT~`%#vwhV)OtOZ{0v5 zkwK@^#ok^C2EzpIhVJkhv9KH8;p{(8o_m+Prn(UP-J*TwqNppazYwR+7~t> z5nj_xh7`0HklhZ4M_jeygwdZ-UMDZ857g7I8Gy3)Z+zQCIQ$B$t8cM%`zFr`P)vrjuAB|B**(s5P^s6n^U7y!F-BX*C^^pUJZpT!ea<#^V|1UTJ Xb7VVoQ;FeT00000NkvXXu0mjf0uE(( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9b907af64d5b3c96f7022db2616f1bc5dc8ad0 GIT binary patch literal 654 zcmV;90&)F`P) z7aIOZJ9Hr)6=HU?|sgD-gD}~ ze~u}@6krPQPk>Y^WuCt;7K;K`fIkIeN)U3;k9Ox6Ji`VM%mFUN=a?V~4+f?!?iWS= z02E_E5?@R&AQ)2ceC-8zh7Ax7$t+WkM}QQN@bXn2cW$pBk%*(){>2~QsMUtY?Y3O# zBK!Cuh9eWRng*XFWApt6e}J(Au?tcBsMXNxo#4sSXINRj0iN-f1CglA?4O_4nEmz_DR4+Z**7 zmTpwgKL8clNxzTy#W~QXuvPfP#k;$a-CjSnrt9N1a3}-rF zyK6vGMb-%^s2FMfsTd1eANd2Qii~JPK|q$E>tzTo7psZUs1LWm@7yx+Wm<+;t|plM z<4*Ybi;mft>I?uiqTz7Fgem)UYT>Le95@3&4y?c3KsNix9!n-u7C??a04+g#H{9QY z=o48F$i2=vcOoJOLg4^v^(LB)1MKcr?Qur{C|XBds4?G!X!GZxa{wevnNvUL4bBeA oPAo&y5@{TECLZ$o7dRik0h1HrZ;2JF+W-In07*qoM6N<$g2zTE?*IS* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..42c8042f278721f768de2087dfa94a6c2aea7ab2 GIT binary patch literal 498 zcmVe$m*{NTZ z(aRSWpVYmld*(4w03bjG+rmSP>s1U;Gz-E2 z+F9uH>v9^10iZMNic*_YqisJ0W}q*1eYLY_w(u)3fcodXJ3|k z+lwe9TY@vL$55S`HH0t#5MYW)-^2iDnszltuU<{;^4JXQoBw^GoPYUb#Q`%U4xqdn z6Di*jMNw)W%24-bKneAB#cx6?2;zMZMalFSz71f#UY}`UKlg(GY};mv^L<|o0PJvM zGV5(iW9$`l13=eCQgityrCNi5A4Z8d0CPI3#D0Ac2BWi2k1?;J0G^&-uEt=*nE|Zj ok_4L#YGCNY4Zw9>+~G#pH`Jk+NNfO}Q~&?~07*qoM6N<$f@fCBF#rGn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..d358d38b07574909f2d3841805da075187a2e283 GIT binary patch literal 548 zcmV+<0^9wGP){)}ku?E^*{ggly9YA@y4>J*WP@`|-ss`eW<_>;&ut{2u|s z;cyiM0WFuy(${P@%V*_>FHKV#jYf^F3IO@j!#(+XZCVt66GG79?UkS5pU*OWK0CiK z-PT+Hq5_Em$N}%*h()YKoBZ`}h`_sB7oY$l@x=#Wt76T!+|Nn?QV;Tm%$Q6{S!Ti& z&Zhw63J{}wLbS;SRss+$qW>yH&jPRe=7n&|fa(LC9K;^wW%4Zca%w_!J-S~fFV|=9 z6m+{a2$;{==(XQ?rI-Url5Afkyz5HYh*$%7>a? zUtLzFVJ!j_ArMDUw8buKk>GmalWFfs?&sc<&05yVv z$z(!d7_tR9EE6rdn0DvrD+I^P+SX($v!gZLH z$Z=6o8L3qOcRG*VRweS2!~HTNXwob*p9R+U0gv)CuhI>RvPA1|gA1$#AhJ9*xfx|< m*L>Cj#^bTkEw?rSb>S0ipx3%;!k_#A0000S!S^b^kFK;C^FWkIOgJi zE6@j?(-hk0UC(#>18}Bm0YWWjsn=>m2@!#zpv+_f;uWALrtM%CxK)+0Nl)H?#v(8j ziPMh?NWn)1Bx49jUA!NGBuQZF`-TLL*F5JJpqZosW07cy7QpgT7|tI}!!Mv9&a3XA zm!beF#x9_u;0P|uQjeSU3Si;N2vD%+c_0--0Kq7tTOe@yJAgH-G>Am_gT%^Oc1X;v|dr-}do002ovPDHLkV1n=%gjoOp literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..65432daad84481ff0972d2dc7dfa784d977a9327 GIT binary patch literal 454 zcmV;%0XhDOP)ga$xaCHGq>w5bK32aD3rMeV2Xwq?tc9E;T@*@4-f?7#%`X{2(Un z`A%htw&UTkpB?~p-sn-2)irx1D|2@!9YR(4MJrnX8EF7%0K8UJ)O9=41(=mIfCkV2 z{|7+!Vwo9$z6muzrU12y3EPfAeo|$Gnk-mu@+LfYyz~HAWMaD?^fDt+fb5kY-^f_4>WJ*EfR9~_wC|?O&4dn#H zAgjpLrXJeZQA{ufXf;eByMj|D9_$~bp%Av=|%7w;Gj-em8#SP ztokmV`k%3%WsyEL0dEqdfS)$10wJz0lo8;NIj!x0fFcG=E?{LlX()VFokttp!NKo{~#hP6nJ4iDbVTmpdVz6f*_ zXIF^k@@^?9W!SWoS&r#Nf`ib*zxw+n-rcV_t>E>(i9=dqCf|l9f6g9YTOwD$u&%i!ti=d#Wzp$PzvV0JnH literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..4384fc083d4022408a21e98154b8adfcd5c208bb GIT binary patch literal 526 zcmV+p0`dKcP)@lIYo_{nQ(eK8!{o^pMMgrHTY+tY-l_lClul7bZT%IB||9uGMRu=GxH9+o*%#W z*Lm8G!VohSqrYWB__EDpXoe8Rii)bF2E+<58Tty91!c>x$tWADI}Y@FJ*Bap@3R>t zLxaHpUR@U`!DW;TZG!;zhXY9*m<;I}!U{y3cI)hDHoI4SpV5)ckPIO##LA*oGL^nM za6(ZrmmwP}S1il3cI2@ck|9yerJ#sbs#I~_M!`iZY6Lg-t z=`HNB8P=AWrYSui2R>{xnM!Z_TDzZ3pu><1A*?heTCy3EA=|bej;W_#h|5w=WoRpO z%)eb?>-Lx7K0awNBtywl6O6+SEX&GrY-8V<0VC03$QQK`Lt)tjabjpOBt!H0{Kgp% zZUvPg85)g7O5+xb1)Cum!n?s~b)@H_?MB*9WwaiQ4I_UMh3W4dPKvo7gjx*AP`}+s zg?{s}_|FuTM#Y$!217FR_Wtp3%e5H*ML8YA8D*443J2# Q0RR9107*qoM6N<$f>nm#IsgCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..14e73e6aca0d4fcb04b89fc6a16bfd04116af012 GIT binary patch literal 583 zcmV-N0=WH&P)Vl&T4vY*gj{ZeIi9c{N z#4q3jTwF}-B5n*0=un`MAm_EOc?Ar;w+xtYms{@ZIq#nL?z^wlY0vDC&^9|Hw9O6) zZL|NIP#A^_&+}+LpXae!t(HIQIAWvGh4*P`WyasaTD>t{5X)Azc$DF-RRsx5%l0 z5fwE~2u_MgoR3ew$!oR5nDPltr^=aiu=YyUQ-;H#7*oCvjmOk%HVZLx`5zvisMG1t zrGHNE8My?*+A>XMQQAXv4Euk7cU$PZQVhF>(&ew`jZUdees+doAA7SN%%f{w5qS*> zFzgl5gh3D}64QS~uWFKZySQTUP z9E&mR?;(fM{-Ku|9$OMD@2Op2SP4Nzsv{|^LOQtlzT#p^C)DrvEn=Dkvv>c?egQ{* VuL3hYPC5Vp002ovPDHLkV1nhz{D}Yn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..3002352395a859b7109e7784898be358364621be GIT binary patch literal 414 zcmV;P0b%}$P)Nzl1IaSSN8=EBkoq4Yv1y%365s3?l9Jg@6|kW!}Q z9HIRZ%Ijp}oWD({aPm|R3i*oWvzgg`f7;`x=a(R?<)Dx(8w~I4IgMN%iuuGq?7qlD{x{4KQ+ZL8+ zIVi-1Wm)d7Wf|U_S}rO?Utuo%dwoeR&~i~BUs1|Cm6nU;7hgKkE1P{woB#j-07*qo IM6N<$g02g-ZU6uP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json new file mode 100644 index 00000000000..42ebb30c440 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 36, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_open" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2626c910f3768df190a2a41c26ebd6eca4ba6892 GIT binary patch literal 538 zcmV+#0_FXQP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0k26!K~z{r?UgZ4 z!ax{?dp$~9n$j{GS0#~<7#18^42FMToc&iO4u(IV1HZzM;7G#kW*ca2uf6(JPXjl! zH++VrPeP9G8=kxzeL-tzXlOVxM4U%wI-R<3MEcK&ODTsJ6{8ZmuHO|!aq=&Le&u4U z=p1zFe$of!o}{!_1;EB*Cg4 zmW#CtE@Nz7a2{fRWhH-dF;_Ai4*fLC?kS}c!!R7wK(bt{EAc&#!Qadp+Ud0^6}3P@ zmWy>IK^W$aZNEc9NwD4GKGd>Y1qk2aMRBbYlG~<<8%UNb@{uz30PTD-4I@Ae1RTi4 zu9D?)$v@+G3q?p?77LCVNS2FrEpV&lujp&}9{Yw4pb1~v_-tV7Xjz%pp cHXx&EUueGufw4FiA^-pY07*qoM6N<$f+!x~YXATM literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0446556ab04ee615032656cbf3362746196f90 GIT binary patch literal 630 zcmV-+0*U>JP)as!Jq$YNp@N`8C?!M?)mBzi7Fc5Dti9Xp`lnf)t>@sp`_Ak>KX%?3XWQVP zr3t|A_ZL~lg~MS3cK~9(vb-c;TdaLjdzX&Oxt=jEhDBBgCIH&pW_Kz2obEZPHMMub z$NP&E2Lb_R2u)K!n_s7PWdLGMt5|qpekL=3p|w*sMGgEgJ^Z8&a8imtzn#ziGV{%Wa2AT(03kHohq9~b< z4%t|ERiI4*tOkSm5`+}LX5Z!fV6PQ;h-nJQ+*UKaxXu0zK)J|7FgeB*`4LC;@nRyu z7XW24JVL9v9}2lExg{d8TKLwu0-(^4hIqa_YUEMcYG86^QIR*dlV1UHq&5XX&L5=K z`2wIKn;SI?QJu%li7Nmaq8YskYJqSC7;sNZEglL6Ix5GM`!ak1a2Z<7Z}3sHMh&;S4c literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..81d17e6434fbc0364d4cbea2e27a8982ae7f4a6b GIT binary patch literal 647 zcmV;20(kw2P)9%AU_Y~l#DaJ|rECs;i~}NV0N`!}CnI>qm@aVzAYWLi*VD*? zTLmz<10cJy4ba`$&R)!4-qklrx2K!b6jaIgnx%{Mrs;wcIdW-RQ8d)2`A^q~u zoab{w0NT1$dU{?ru6J|w90V>L?yoZ!gaLTHGL4K)(aF)OIrf&bA8=eka$rE4p={Pz z<<1gIKCBwSA@s{DBy(ptQBk`9d%h{x#_Exf5M1!d0oqF~iUH6w*Jc|zfGuZDI^+Q4 z#0gi<0-lhl5BjS_p-{*eJr)B1yLY!%3PKbk#{ft?SPc8M={a-tKLWrL40WK8dPXKF zl}d>N;6g3nE9S)r^85YN+fhaJb=6`4AfM9zrO)ev6FCOJUPlu44~?@vf}#lFf-9JB zRf6IGc*Vm3WVN3Qg~^G&T?YVU)o^HrBuOH>Dhhyq3*f?U&mr>jLKpx}Ltg)_%6G#x zfMha>Z@Z5~BEjqp1m@{rZIPXjg%piODH4gu#^1REV1=-bEiCU8d{)ymSyfecKg%r; hcAm5S&R_q}=o3wa-mx)Ge&_%I002ovPDHLkV1g=R8{Gf^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..68d500a1b9ac6459a4cd28d82e90dd5f8b60acdd GIT binary patch literal 459 zcmV;+0W|)JP)zc7AL6`{|ypL3fe~Bz#WMpb-Fi89|*@m$nUwk+?!kuGG;0; z75G=cahw2KUDszw1z4~w%OH}301Lito`?Nb`;|t31xt&0n9b#Ru%>C?x~^D(=yadf zYH;7}@*6~ka{(4^Sr)8F^Wn8u-G^SMLAL}~XD4Bc!3afoOdu;#1t>-z6Q~{-zoExK z&BP_xEiZ-bU@UH>QlHGi=cE#}MArcXi_c#c6cv2m2azOZ0JopAQ2{DamjER^&x42d zHI2aNd%%M!;R5vwJ8YZvOI{5>dN*_eSus)I@!88pAi5LEn`_W-+|dd|`Fwi;kt76G zmkZ(OaTXA)gj=NyN-?s%Q-RU&3BJY!@dE5?7#%%sL$W_2RtFIF_V?e1uwE>R7r;Zu zk!c31s_@ZcIC5y3LJlM`0TyH!M!@>EZ3_)%`~c>^jqbWBm017)002ovPDHLkV1oGq Byx{-< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json new file mode 100644 index 00000000000..4573bdcf0ed --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_door" + }, + { + "name": "closet" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3c1afb16458aebf0be5010b355e239447ba94f GIT binary patch literal 386 zcmV-|0e$|7P))Zp#i)!oA5puz;3_S4;YU|0@ox-3W#<9 zCeCNzEuVoCRSWRtmSw?-q6KB5^%`v3)(^k07*qoM6N<$f}!P_r~m)} literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..7f97f96245845c5981a5b6aeb68f4486f7309633 GIT binary patch literal 709 zcmV;$0y_PPP)Px%e@R3^R9J=WmQQOFK^VrLq$Ul-ZHYw-%e&kTfLgVVTMPotf?yy!c#p_I+pG=f~{)S>PWl zCele!6f;cmTCK*d&+VWniuwH6Q%^iCT?YXC)EYE)RbB-E^m;v1DwUX`C?*erne;QC z&CEOA&juX;KyrG9w)+DsCjt>?0l1Cr=7;Sq9JaTpxn1U{19Q~D&bv+Sr@O@K5SyBz zhHm8+A0n5xppJ|K9DROIbLlx5r@F=~&j(1S(|EJ7;fN*TT@1$(60LOrz;G-%;sAg> z1CLkoTmbGTD3wZ{??+6AV`*Y&ixa)wGq?cE87Rmy)>PHp*EHO{HOnn#*Qc*1D9ADj zvK$@&0QNNvbJ-OBbO(<3&1+J?2uqdaJa*e!bO4sww;x@R;o$)iamyf?UGmM}$+C;< z%_gl83VXf$6%qxx@*&*(@sDuDSiYH^ozWpMd17vWyT;>A!so88^%r<20 z0=vQ-%|ZZf6FY?6)D5Tq>PG`0C*jJ2)xbW>ImU6^u15nPD*BvqwrpUgUaw!wBHY=m zF^d4Px%+et)0R9J=WmcLJ0Q545NH7$gMTp)Q6qYlIuOhr0r`a_ep(!?%JG-Z2(iw+%} z{U6$`|AGT!?>Qg7=iYN3 z+~`KvUAMd}G7O{hKf$xvtZRJN1%_dCo;{u*9t~p_iloNJFbhQhf?5oKcr?s@?TBW* zN>Gc@tXBcp%GX>W2HcWANJeSatC)o%!|_3tcsM>tC^$eo8m4h-5s!uyj9jynnQ?W` z5kN{NmXiN45)iiMK`o|0r7Lc71sIMG5(x-W<6{6cPAvc?CKmu0N~TGq(l!?W%tBFt z_62aL!W=1U|p8fyJX?p1v^p2LKR4aDQ%5{q8;8B{QeaLL!w`umIa%Kf1=g?FC@3 zoM%)|Qm_3`&no$xtvB>03hoLV+V`U23RBkYy)SH7?0yDl{ARkrdq^?Z4G8TjrP z+fxa8CGY=b5CBV=nLmlW$rC`Y_3c*ITC-4OF7rwqNGVO9qSGj_l$r4a;JE}s2rSED zb7M{Qg^Rj3JP&e)HBbzUvvVEDOuB5TctbkxKLB^Si$i`}~4>d7DHk z&8VKFWaci7_s;+_v2;LoyxsxStCE>>ys{VN=@2@pw+sM}X1g6zn_X1!PV(FbdV|Sc zP|4?13BW%6yd;PJbYOR9{nCac-H=z-3xp>C8Au3$5Q34B6~28~vkj=L_PEKl4|s~= fA}^ok*H^y**q#RlpPV>w00000NkvXXu0mjfw$gDC literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..24eae0e5887043481fe62dfc4dfb9c9137cc2927 GIT binary patch literal 628 zcmV-)0*n2LP)Px%E=fc|R9J=Wm%nQhVHn3h`9Uf~-hyclgiJY7w9O(FMIqAO;G#p}wj1&n2>t`k z0R@NR6alb|HA3S2~5-E;`C&oaPXAi`O19&F3(*9 zpt-pgc>TeXfqx}m1H*XxE(3Gdt)T!9%Xbg~vI%#8DZ`E>-x9d+SmF$okKckf5Q)Zn zHpi3a0t5FLaMj#g3mmF6;3|3c3ILz0Zvr(SyQ}qcw+nn&mSwf4Qj^rS`hT8NsZP)I z+bUMw*)yTJaQLu~8-w!hceuUBl+8AGn$zO$$_;M)VHX@*>|<2VS>fu%DB<(H3o zz_BsGPGf^~#vr9nQ?J-cu&;r;_a1~?I3U4p24Z7^@snY88XJ8NtXFKd8r37g!Bc{p zw-$XHMI~<;04~kv0GOE1N%Ja&0Svf}uI2_lGf2wRTbA`#{s&ZpXr$k$7OW7^;%UeL O0000Px$7fD1xR9J=Wl`(3=FcgMA8!v_?m5srHTp&aD4BbKx;9EGGuaF+Wcxi6o1B47N zziu|&dsPkA zXzf5FC67U1PvFM)`D{mE;`=-=mwX(L<^|Si+5t38!^HQ^3jowo0`O&P1W^zWhT&k1 z_9d(i2Rj07+y0KAymt4WXS8*oEK4VjA|9qwX7jmuf&XGeAkTBh zxImI5-Dh0`kY$; vp|u0@bh=xkRiM3I?Fsk}@P)ZZ-Y}qnS022Y)*z3GzD(vluMlE1R5G8f{@uoLV&l;26RMuq8311GY-f|2w+IW^2-7U zlF&Z^;90QBs;(4(L}^u;mh;g_OIjZfcp>3O?&{Zc(SIV{UBE>-Kiz)PD_RIKo)PpM zF%GQJ5!LzKfy2?ABGx^Qi!$0WiK-F+!^CnipVy$Idi{Rk4f`8gV7DD!deoc%0000< KMNUMnLSTZ)n*1XG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb2a2fe68bf0dc1b5b517cfb91200f59f89aa5f GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D7etm z#WAE}&f96;Tnz?1F2P@;9tEA4Xw%@XRiZiXG{4>^P2Wt@OI;_^5*9ouoLg(B1T@q9&9_pbpG~C30wcZn|XO)M)pOD zX#?8@1}TTV4CZUqW9-+y-KOT(JD*WuLi0K=-|737$Lu{mG45Px-8l`0u7w8jbp?GE z^FIGj*fEc>L86t>)mo*vux_P2L*x$)cBh@q4B6e=wT_;xlBvjWZ#!jup!A&{gMe1d zA;wE0Wd|a@>iQg&HJEnZp8M5J=1m5(1o!XGP+0k>t!7E;f%xdEbIh{~j_}+N-oPO$lMP ckbS^>-QRoH#^awS14Dwr)78&qol`;+0LKPRZ}dX+P38JT0F`ACy#sCAsyiUUFr)#T5%Qx0+#&-o b0CK=DYKu=+7&9An00000NkvXXu0mjfMYoMj literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..ae50afa7819effe7bfdcc157e9a9226e5f1f1fc0 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5gP^C2V@QPi+bfQK%?=W6i3!VCxy3RgA06BA zkx%ZRbcNvMFCuSZE->%-z#?~0`3i5Q)1m_&m!}vV?$G(i{pGgA&ET;{4 z4*$5m>8zUPXgTizu8m@Tc*r6lf@;hjBO zh(*pI_08Gue`6(%&jNBTeEs`(Lc7rAjV@pmjfA#2|l%;m`1 zT+g)B?)Kx4wU+bcH5?^u&zH?r*^@cz_H&);r7Vs434b`Z_Iwt%l4@hzv?ktHK5{aP T%V!5*h%tD&`njxgN@xNAqRy4q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png new file mode 100644 index 0000000000000000000000000000000000000000..973d3220dfe8af07b9cdba08bb17de0e74fe4cab GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEP$F z#WAE}&f9B-d`%7ltQQV05LKLb!@+&O_=3kGcRGdN7=Gi5VHD2MG?!@R6>U8sCB68l z&mGRQf3i;US?e39v}`Ec&`=vW&G_kqWtmL*4A=Lp(mL_^Pj>!1H4B%E$9KK2F5j6T z@FM)dtmB1$qWrU!r)T7rMPFa{QS&szz2Ey6)H7Z(Y2CH1QK-D%ykV=@yT=?dinXl$ zsg76QGF|y|kx@pGaZ1pNUEbF}G90?_pILcsgb3@ZcXzhgFswCQ<<}O_HX)az*YJV0 z%7IdeZOk&0SuC2E68`7iV3;G=z`&xwz?j2V!KCSEJI}12VFS>=44$rjF6*2UngBP* Bb>jd4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0e5b04f6b37c7488c9ded74ca1f18c16d1acd GIT binary patch literal 368 zcmV-$0gwKPP)UoxB!vLVkx(pdu6h#yS0XdE{3_w%u3}~80mSvG`+Z2YOc!10GTAcu70i&G(2>$?- zM^#nv01$#>@E$c`0C60@e`&iN2Eg;YUY856e&;%t01`j~NB{}&w*Yr0&SdPNrPpu( O0000?_T+sX9POa39g*$-+}}a}e|ck=MW1pU|6vB(gYE&|!Cnid zFmd_4cMudWI=6-K^ri(n6qd4RePeiUYwooMPaLc?d;T3S2bL0uP%>0KN z8?H&^&v?GG{=l}}-&|W~bnXA&B;+n<;42)^$hg(yn1}QQuIhh(>zFiBr!y89%N$?? bp$}{mSNln?k#4jF`i#NT)z4*}Q$iB}B>QOq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b016fa33dab2fb5273c916a666c012147f4a9b GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5@VcjqV@QPi+slqzO%5Ur4;@`OmY5}V$CUEt zPCRq$&WQ_7JXVh7FQrPE_%Ezeu4q>Xy0~$sz&$HoIWL3zY0u_gO>R@{GBTA7Gig_` zTpLq9`T0-YzI~SxTpw27`=x5%K{(-VNs`=3?It`9JG4$0; z(Z3@7Vn&V#lR_@C`92O|z8u*VPx$7D+@wR9J=WmCXu*Koo^fQna*aT1YYU1V+%_MLlP|h%Vd*p-&J(CYG4X2&_dZ z&1gTu^aITYgE;rjJ%lNOXIH u698yLMVh9y`7CEMNrIht{JTs50000Px$6-h)vR9J=Wlf7!gFcd~lL-tY{jAL4FnT!)$JQO-+C~2R!+4>B|F`2rFAPeDO z@&xS=5~Rw7)D6v|Gf9{G^C8_2JRXnd!d#h`>1_51FdD}IG_^RM`(V~LwE$pMme$On zB_PX5vy_e4C%0k1&Fyt>0cQQ(Vop_5tjf~L8Fm$}*B?$S&C-(xS49PYR2r%DUO?Ra zlFk>5#xYSC{A%DSf~3+kwQ#;*U4Z20i_1VFppA(f`x?s^N5N)v?v&x<)hbl+)jOF$F` tmWcPa<=^aBRLoyrocUi%4{E)kefWp@#GXb-y#*;f`}>Mn_Q>^MRak=ALtZbN*c2U@KMx z5CKF05r6|=r%?EV)zVq|KI*sa>oAi2aSb)<^_Vw6agXUmopsvQ;&Cd;5}WbR0J8tq zk-^NG2>{0$WeJ+iFV{VQO)G2!^}Yx6A%LtplMaAJ?SmXLoP3rICnbDE1OPohRqZl( z0-yv)+4$#|En4|}j!H6B36`n#0uT)Y8@>bFlH>XUK;HAfyRzu5pXhS;5<`^xa-v z5*#*}{KZW0?uQ@l%kcs;ppxi;$xQ^D>gO6zDxXjQenEO3Z#Bz*i1j*(R}O$?>5ojB vhC#Qruua4$1_BJbt(axm(zISBScU!p*rw>IH|dmv00000NkvXXu0mjfGKl$X literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c8e710cc3856c80e2f9a542777f40706abae7 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^+5I z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYtYCJN1q%f{X*ky@{BQbmaRa^%W`}9PhXqqC z6}Inq@&DZ0YRPYJZ=8AY7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a45eab7ae1d2895ad22357dc45353ae36c6a84 GIT binary patch literal 339 zcmV-Z0j&OsP)Px$4M{{nR9J;$U>IP)h|GyeNdAB6{23Gl|GvFsFtGM!Ko^&nlY_G#K6->NQOz3706pb8p; zQ3qf+KuA)aCKll`7i%J9|NVgmPQadxapnT_Y()vc=OGjaAeUUU2!#trw^H5AQ7{Td l!6+C7qhJ(_f>AK^0RUIAQFFI$Az%Oi002ovPDHLkV1nk#g(d(1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d43e1ee13a5cf023ae3db70deda1fbdfed9cd6 GIT binary patch literal 415 zcmV;Q0bu@#P)Px$SxH1eR9J=Wm9b01KorKmh6>W5XQ`&Cf+z-yh+=3r2hqVr@DK3+ba4`! zL@E&_Ac-*{xy6V`>JSS(le7wHD|o-<$b0YJ_vN^}02~g7!};$Nh98cP4*KG%497Hb z7aH`vxNI|;#qULxDnYl?%iTajX#$V|w3)b&yV5V2xq)I0^7rXahie3YJSDkq{EW*I1U}yEaoNlxlEH145~m$jy~0 z9MgbALilb7%YBEGG2X{sLfZ?VYic4My*@MRFuJCuzHJ(rgJ^(6!qoV3y$pO<@%qC( zY5cvPx%97#k$R9J=Wluc_BQ51%shS*9LHX$V+I2|{ZfMINhwyQ3xv>>AR14Kmdzxe}1 z5W!+yxH4gy#0Em+!Z9B+X@?|T3|30wVoaFZnM~4bbTQ9n=6;-W-gD2r2SP$ZLjExe z?!o=_^&!AYRtDg#t&>T{=XP#bJ;4`1xl|HjMg;-t7K*CS(4EcQOlt1n04W&~$z=ef z$9q(?3guEs*c0_LJU%`d|8M0k07%Evo_)9PJ)l`V^vs(*6M#Z(iI&lE1jw?lNKXk? zvNF-%=WHlTzCqo=B}t~y(0xU?#T->GxLmx&SzDi8f<$tenpT{cu_TF^NRo^sy#(+T zADbTO}H`{U;?0J^<}*)O4@Dtvf@nkJJ}UU$#?1Kbz1H7@pL4XW_N#+PjBD+4UA}a1wp{K6T_v>0N}-| z*F!($z%Zw7a`dI8*c18p{y1B>;$Gh!;W63Yk6;8B$gJwZn{>Vj$WS{9A@Z* whSkHc3ZD6aZBo;UzQO!#5ra}Y8g$p&B7=!Tv zSom-*d;nu&G!k{;!dOzEDQ2Q1c5J8r8HPm>V!%1)GSlAPxosJLV9_tRxqoxc`Of*y z+z~io3<(Sg3<(Sga0G75%^l(#QRB34lnsbYjt6#LX>N1A5F6|3AvuBcBBatOC>rcz zD>emxf+;8V#H2!N?a_V6WphY?`^Hy-eEzGqUQF!K9377e-(9+X7fPG&h4bommFA2- z24d0Zs`^yvzFU~*RNJQ8KeYI0xX%H zU6p3cg0_KsO?yh~V$qP0F(8?oB}oU8Kn8SP+7yZS1s)Vq0$4hk1a5E)%qkEkVlqF0 z2=qfcYf+ZtKxjhzZ}G73}=HL-vZO_mCrP{tGC!M2xkEv9_Jmvjzw5an+OGl6VQE#WDq29Wk6ubYQ{Hq`K!zs zCT>3V*81m{U0zk1I-lYXZ&&&gIA}2qYg<(~b0JE5(;4@kERzHGo@KY{Jhd}K&@AtG z$7pxw!2-N{@%$(W;O%-5Kx6C!tirV`3VhjOeSyF|K)amzoDPZf0<3-1A(^@=IG(?~ zB>2I-Qx`b_%HGMS+^`|0>^cLEB$xrK!5bo3ckaF$4clagKCH&B<8L2gu9Uqh;0M&P z(##Nz6fmuWzZOJ| soQJGl=ue7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..d7f5122c4ef7e8089f259dc4d995b79b492b5bc2 GIT binary patch literal 364 zcmV-y0h9iTP)Px$CP_p=R9J;$U>IP)h|GyeNdEuo(H#^8&mP}oFtGM!Ko@7{=7Y0;e*J`Du$Y_* z!-b<;8Kh*@QN)%kn2Ta33o=Jgn4dvV*cinibwgu@_isNks2ie+69Vtweq?a;iz28F z#R2c%eq=bXZ7qWUKL=b4=KBjrZ^FeseEh*+Xl~1(pr*?3;MQ%1^Cu6Z=wV=BfchK~ z3NSqmUcvYsfDOP5Kn4Q*91QnwoMyOx<20O)4xT-}$?)v)O$>2#z(i05jRD;p@c8BX zfpvhaxFB&3(9+STi34z%i!~8``1phB4v>4qaR743MT=0tmZeb~ zASJ8LASS0mb&DAo7~tk!x&4AB=8u9=FbYP&C>RB!U=)l3vH<|e7g!ht15yG20000< KMNUMnLSTaN?v}^^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json new file mode 100644 index 00000000000..2f6f3effc31 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "register_cleanopen", + "directions": 4 + }, + { + "name": "register_clean", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png new file mode 100644 index 0000000000000000000000000000000000000000..7e03d84874ed68e82032555e6b005fa9a4b44af5 GIT binary patch literal 1320 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe959cdde50e21771edf4f934c2f41209be1574 GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!1`AIY$B+p3WC_;A2_ijBfd&^E1icnBsG9El zAE0*i;NIx|fHy}97)}%gYAUh`7Amgb_$5v^Yxq_oCU{WA=s-naBo-_?^>xzoknuoWqzpv@v zqHx-A+CiO`jT72L*;LT{@B`-378#RE)B4H-1HK4Ma^j0kCHl0L$A)L!RB;Y(ImMk@tv@dHBAo7Qja zT*#cWvq6Wwfnl47zlKyt5d%kq3}b4LtU|OM7aL!lvI6;>1s;*b3=DjSL74G){)!Z!23AiO$B+p3WC_;A2_ijBjch#uQtB5BL;mxp z8pT-FPhL2Ag|jxF`~4D3yOy({qh*)CfexmK56ukg7R<3ORt#YgR#|>rxW}qVk)ewzB49D|42x|7 z42(6u9G)#=-n58;Eg{g+@4{h*$Up|B8;cl4{wO$ji6oRV=&ZO<+_YzwiG`{#(~mEV z#f)|A4GcvZ5116<7cr;AKVo|E^neD`zkvn^8X6fHY$aPl|E;b%0SqO+)CkWsUtb0- XAe#e-LEuvGWDw=)>gTe~DWM4f^NEM8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a5facaf85f20d35d4080a3be01cd942f1a39e0 GIT binary patch literal 478 zcmV<40U`d0P)Px$m`OxIR9J=WmOXC5KoEsrqBOt}kU&_GBcwDOfhv;S`2rLa_yBHQ(Q*JND7b(- zTS~!lvI6;>1s;*b3=DjSL74G){)!Z!;1N$3$B+p3^|Vx3M3>6!sr$zFhNFqk zpxoexzLMUNg1>)cS8#l7ShkSs@a*aDCH&-e7)UWWE3h~;%v#9s$(BQahcSiy0+T=q z14n}lW2%vYHQSPz5e?q*o1Q8(TxImiDk@-CSk4?^Bg9?sa(DS_!9;ci=9J?LvX8N! zxN6Sjc2Gltb#a17Pg9@)*9#sA2?no-TE2fu4m*JU;Y*G1O!M_+&;qhKfEWZW1y2T1 Mp00i_>zopr0J-64;Q#;t literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..5391f84ca77ddbce183710fd68f589aebd82e7d0 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;3iKO$B+p3WC_;A2_ijBfd&^E1icnB6jvVn zAE0*i;K}y)fp3l!Fq|l|EKFp}RFqr6@%6yv@^}fky*1sBIM(oOxH2W(qVBI^bAP8) z$dsZDPtWMG&DeQ@FQMrYGh0C$gT{^(lDr0=+x$2hVz|6|t}rb)(yq&!P|9#3X#!go z^NgJ?Pni<)%0R~6UT@#Y&sa5;x!G9IX{HJD;=l$Tx5Wt`Tp2ko7)ed2wdZ1EOh{m0 rs6SUM@lWWj4AAv_sS%!OzP=1vKsE;ugTSTW$so$p)z4*}Q$iB}hp%R6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..c4598c550611e03c69a52aca6ee30bf19411f5b6 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;AT%3$B+p3WC_;A2_ijBjch#uQtBM0!9V#^ zjn>$ewlAoXPzaL`<1DUp+>mBjn8;=unYclMBc|%lw1*c@Zx4{mYw*8+vi*JFnmktje5nzhX}-P;T0k}j5QD&_;K?A$)78&qol`;+0CJ>U2LJ#7 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5611ffbc77c497b294b220c8f35677d8d655e74 GIT binary patch literal 329 zcmV-P0k-~$P)Px$14%?dR9J;$U>F6XU=)mk0S1hO6oi_o{D-kupSnX(J*oOwunC&W3;t(dU|^6F z7iQ3t6-Ji&|LEmgf|ldcckF&raXf%H#<(t z3G2J{AK4L11ieFJfHexXoVmrozyJwKba4FoLxP5qq7SPBXc+}C&%wZG6yS^k1_nrQ zUV4nkcG5yT=-CS^z^4yA3NQ)?SQ$VFVDlw0Wds8QYFU6a1PCQGT!2vMy#4wUBPy^u z09z`i2Eb|W%00000NkvXXu0mjf>H2?# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json new file mode 100644 index 00000000000..30ddccec79c --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By patogrone for nuclear14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..588072ac79a8412f7484c26797e34928fe664a6d GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;1N$3$B+p3Y!p7s zsBpS<=goySubQ{V*DtbQTF<;~&Q8{4D;aBit{gDA$j1<=r>@5%x>Uxd>ZjNnjwU`1 z)8L=_xFPFzlgw5Y&EXCxkz~ay_YazoYTMhvp#uWAoOadhg z91SvzsYVLcY)fWFG!lvI6;>1s;*b3=DjSL74G){)!Z!;9*Y}$B+p3x04;YS`2txjW-9s@OmN0vi{-0 z>fR=Ifn8cxp7QKhX--WmxxA>`X2O*%CjBm+fg-Mf>z*C_c-ZE=ew^7s%kV2YaRGZ? zTfO={&$!f6^WwJL)+5so81RTVEy$c@5zYSI_T=5=Oa`XM3byeX9=mfhn6ZZ;*J(}X zok}aFIJ2h#44aQj9N45|+4p$HW4W8cedkWd-RjSO7;qqJHml1bF^#_T*y~OYPJT4f z6aQh|B=$$jQIR3)Kj-g9U5oB8EHW3~pUz)?XT>9+clc5xJkxxA8MJ_G4j=}BOTm*t Nl&7no%Q~loCII^Id13$n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..d81f521455669db90f2e583599c7297ec1ce5c4c GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}ot`d^ArY-_ zFYo3(puod&!TSiChmZ47k)9JGYYy^x%xesB;d>Ii(B!*T3;$ec1|_9M^K&1&ax7e{ zbH*~>>TJZjz415s8GQ9OuFw1Z={Hl_9)XE3bJot4dvz!LS>CrD4w|eC59V0QcX4E` zO?NwAax*w>PUdC(3rRh^3_)JO>(1}me&%jZN5=|lhPk`Ugt96N_5mHm;OXk;vd$@? F2>?)IPhbE5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3c39fa352053c89c854ba59ba042975feda15b GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!;5JVe$B+p3x04;Ym=$?kbJr_WupG4B@#(?3 zJs2QmV$&`EfS9}6l*Nl`CV?c z>5?gI!u~zCZ{$7L#`Ih!%xmklsw+|7Pbl`znENp5TxG<;vkc2lNfgJm@L!Fp<|_aS z@5~BjHelQp;q~%j)NSQMtG+A`Z8z%*&IL&0+)g(gD6i|KbLh*2~7aEb8^uD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json new file mode 100644 index 00000000000..ba4bf0a813e --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Base and icon by patogrone. Others modified by Peptide.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..73a2329c8ee4725a47e6c26b704728525099f257 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}b3I)gLn2z= zUf#%iM1hAjpmxw17Z$~q{m#ifS<^Z~mKh$CNItW< ZmZ99ssQ8kwwl~nB44$rjF6*2UngCW%SegI; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bc24c52867737e8ad751d0a5130fa0f3ed19ba GIT binary patch literal 285 zcmV+&0pk9NP)Px#*GWV{R9J=W&@qa_P!PuPe?WK!R(X@;G!{#a@NN;Ckk&#_*upy9dW&3Q3wsMM zASg%-Dx`cCq7YU{xy8<}9KPXW29#1tDW(2c&=;6ynFsh@uY+lp`NQ!@RaLJ&=bRU7 zF~*RHa5|q!L;$$9EdY@Si{-&I6di0EuG~5w^P>08P_it?lG*mkS@`F#w;F z33XjRN~4IM&4x5hJNZ1%JDt5Bn9pYZdC4dYxwb83Sq4Q>c!0xxkHj%%IDGAl!jP}k j>ixw*Z>3U7sek4UqEtBq_^&+y00000NkvXXu0mjf+y-@r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png index 386dd0845dae633519168d2f9bad47ec8cc15614..c0538c846bf2bff6000a47f5927818845abcca0f 100644 GIT binary patch delta 404 zcmV;F0c-xy1)~Fy8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00CV|L_t(oh3%C)Ps1=2 zg%1x^Em5tcrYu+;s)_}vVrHzm@{c?754vS^7$TflDJoJV8U|9+CbkpQ0E@rHlJC7f zCpUfo4u`|xa5(;%Gur^OQhY%Z4)4MbkOr{e&uYXpZh(9iu2-l%Dc5W*2 zX#g)6pDgYLWB4>M#*G~~T;Mk`cVOgqCSqI5*a4YHh!@d`0hvf+%-DgyLfe7&ZhySNY#d_wsrrN`y46K@0du@AMAilT}yip+};EQo8C3L=bQro7-QDFTyVti zK*Xb#_dxGT34ahm06>k0c%Ekz&9Y35j4_}z+s;7A{9z6NNL~|L8vG9ld2#$p2q73< zj~eUs2J$U(!C{we=14f-YICfoAQ$?!Rf*-BHEvr+Z=l=*J!;=vZA8?3xn>pPDQK1hoBUr%zE;<~4}5jv#BDMs4Ve*#3Gays}M)(wdO0000t%v;{LU`5N4wJl56wk=zK z{N~LSM^7BPaie+h>ZV1j>gFz;v2jcLlGVLywro6mVbZ2ulQ-|4vUTtFE7zxO-@o(P z&FMQ1?z(Yn#;(J=Z`{85=FN&zKYeb+p`%ka?$~qv)`2_s7aTab z@X)Cv51$-;^mNJ5b4!n%KmPQ^$!9N@pSbw)&!3aeUp@c%^Z1kJPrrXZ`tZr4FJJC| z{5WU#;b~j;oVHbxl?%%%;3^A__OV0wS_>v&M;QurQ43lTY>j16dEbxddW?OOEGw1DWT{?9uZ%pIbxqF)zPn*2Cd-dwR)w5@Bo4mVy>hkH^`C}T_ z&#!k#m=Ie~Fd^0>BO;?BBEuymWJ^3xjH8Z-fkES+V@DXC9y=t`(0Z_e@rk9&4ueDu p2WDq)Mn8to2KENg2h4?q3_h%Pm|1o9y#jiU!PC{xWt~$(69Dd+s{a50 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png index e7d29a347937d6044f9dcd5ac752f4b9a974a40c..a94bb6a968a898d36bf405e3f7deccef1bdc50dc 100644 GIT binary patch delta 232 zcmVorfVG#fIgfwAzK1rA6*FI0v7K9K&2=QZuSCdgCI;g7hS}030?9M*bE9EWf4f+6t z_3&;!UdI5;CQ|^~-A-<9JRCV|I2+Jf6Wa~xHf1?qU;+a`x?xQLFoD6YEUK#B=Csyi zN%pc%(b?J!6Bxp%<}LSe1Hk2!zH(=|Zy=0nr}1#NaJ}DiuF-1dW?cUB7pU^y`DnhS i%6r&(-BJi4{5S#@5z`yvAv@G}1b5kZX6 zWmH7I0cM8QnoEG0&HF!3005=Z8B!3BTNLh0L01m_e01m_fl`9S#0004bNklL*WaT? zL-=|Fp!ib`<F}WVo1*gd2C%lighTUJVNFim1ZY1 zipg6dvw{1`fNit~6@k5dPnq8hP`uN&$=j;cYFyUT2jDp+#MqagFDhbL>2rnuV;zyC zGoaJF*`&)~H>aAqLs)KCRFrY?sMS2@3r)Wg;3b-m@FtTC1FGv&ECk>Q972?=l1}~_ XDZi(dIx@!@00000NkvXXu0mjfPgKT3 delta 247 zcmVHor^|Xd~gVcx!_I!!V48$^J#tG+)i&X__(s$hV8* zII4uVZM)Wyz_KhV0$V=ni6&qI3F{O%=TH=dN~m*gFAze&JaEq{0wIL8e$OWWfWGga z6(Ay%WqH}qbsg%uMpaeOx`=?8F$}|HzxO^mXe1yayBDVr(cw)oGl&S@`^$b2iJtS5 xeYX-Rcj9L}{u7#j3GAjI9TQanW>yV<1wZ8QIHkw`E;9fC002ovPDHLkV1g;>XGZ`4 diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png index 10129791a7c8f748758bf50a950a1b746757270b..e189e1addb6ee8522f1773e4451d6b06c700db24 100644 GIT binary patch delta 238 zcmV zXmHV?82m}vR0|H?Z%T4ba?ecyFbwl!Mz%#U7gwQGsIl~e$Ltjw&sGeD6S*ylT7I&)e4xSX&~Hcr_YKxZiheI7$lXx50xXh3tV z!6HByws>l7#x}-2P23NTllW`T#{q!mS=zes^*rKyf>(SF?Niu0fGlOJu4@fl>)wSs o0}zqVbfzUS`_!_-?0;ez6drV4S8yUJB?SP@(wOHNeczuF9zuB5w^I@iXxP)Px$qDe$SR9J=Wl)q2HKorNn#f~b89B4(GF5EzJN8nFzGA0iEnI;Y|DJ&m%`E9v+`Cn@(_ae7dptY&rn|7ZGyxUs~> zDiLuQ4WzS*weDb)c=ZzLtYS$dxl4UWBmKp2yqkOX$KSo(D;#788{EOepX|!6K3j)9AxlKYH(>8@N)g zK_q!0?$yy$RS-2*6*yoS<`}$~fv)SgE0+U{ehx?O#O!uDXlZR+UStB#*6I!L;$qG= zye$s=UxB8oLOQEhpTm(Ww2bFk)m@1suROaf=ZFIy6FReC-Ao{ojF#38{JdV4)tQfr zfu|xO=z2_}?|a_*Z&<50eCs@0ZD8J0L7rG>z%a*=h&y%GdCPU9cQ~A%orDtq`uSa% e-}UG}Z2kbcnwzFm^T$^J0000Px$P)S5VR9J=Wl(A}qKp4mWin~M1Ac2s@8-zQ-N9d5a^hruPmG(Va`VfToNgizZ1fyl|{_xp?A9bmCoEdL!x_wXz`7XXm5_~3?b z#XA6Cl`pluyLerx6i0*{EC+yy5PYoH03f;_pbMu0Na^F#^B}P)j4s?NU#e&B(QE_x z9RbFZnb=o&OxiwoJei3w@K5PS82BoLODRRwY`W z5IQVLL=aBVR2#^W|F!D=8H_F zFE}^OPF(_~e#$olmL%f(=2oyIIqBJ9u~_~tUk15)*X}!khX4Qo07*qoM6N<$g8XW@ AssI20 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9555b7b10dd53d7d7828ab744617f4a7fa96c0 GIT binary patch literal 513 zcmV+c0{;DpP)4ZcKoH$R?j9P&D2Nw(5E9T&P(&|&iRi~DeuUsb z@X{*w6NEP4p~DS$|CZtvKCL464l zmk5y8meT`;3s~LUj#+^K-yrC6A6Q5nd!ahsXuATdj(h^dF?&-Wo4> zd~~QS`u5)cl|wMr=+Jn4(%ut-dknl>06vglTZljqXmk|Q~de(H0$fW>)WQdASpr1$aofU?K{~`GSYpu>bA<%6G00000NkvXXu0mjf DpsM2i literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3c8e710cc3856c80e2f9a542777f40706abae7 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^+5I z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYtYCJN1q%f{X*ky@{BQbmaRa^%W`}9PhXqqC z6}Inq@&DZ0YRPYJZ=8AY7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5eaada839480a2587c610228630908f812788594 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}vpiiKLn2y} z6C_?X2+m$Gx&3{8&ZGQ!_DLtsoo)WS+;83y1trb)s}E|e&5})LYp|c0WBh%8#|DFC z%=h-CI*7SHSMFZETt)aPgIG?}_WZj^2?4>%8hzoi6B{}+rt`bfQ~>}0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..1ede687689c3957ddd31415929ee9cd33825da05 GIT binary patch literal 398 zcmV;90df9`P)Px$NJ&INR9J=WmBC8GKoEw%mY|4A(==AWB7%k9gi;R$4?zz;hQ6dH4?+)uhf1a3 zL5Lus(i#(zphW_~dQhQjlWHMt1^2t{&hGp_!_F*7Boc|_zmpkW932{i;#L{kGE*1& z%6oR+5HywVhw_CS*QYnB8>m!kKpAKV``Of$CS>jgl%#;4jZza)-x6i!Ujb=g#DM1p zQxQtaE4&WdGO1K+9Go0a#l&svYP^A->r-?C+N~x#OA2?d5xdnr@`W6o3vqyWen6>i z(79}oS93zFv~S?WXki~O zgzj_1M#6YcZqT8s^xP&|LM)DUs|gT$XJP|d*pJ=Ubrr%s=<2WU#PRpqaMlQa^V;V2 s0AM|QNnPl1aRq>Px$-$_J4R9J=Wl;2C+P!z{MmQulAYiTLfYJAa`mFR+f7g3Ng+5Q9fmkHb0Uoa3E zDB{~5CMD?{jQL__YAH9gl_}_C^&zD7Hc4YEs1Nx(CHI_r&iCAN?}3Pjh=?a<=BD17sCQrC$Ir{d$#h zsf?lPl26=kvLYFM*2$H zOU%#uB{zu)#F^=7K}-^$6)6ZFq@a3Vz0Z=UG0hGynu_5vA|2{I|sh*?9oh203gP@W{s(r+`_3BTUY z9B^Mk-EN|4YH-3ZO6B$-3gX_Q__|_A8`U>&+u!BwFOn@Wl?MhG#s4iQNzLjct5_B* z?>9NH8*MwluhJn|WsaJ8j1Z0XdMux3SzBWN<0nrnKO_M^gz%h*J3P9TXDU`Jr7dy# z&64*C!SdQ_>($0PK7ZJf_Jj)P#?bYlTsql;Igib)`fl|ub-PK;JPykpE&!Z9R_*V; nwu9Y0-*uzp?;jBn@hrIoG_b(&dtM&&00000NkvXXu0mjfY?1?6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c59bb7ae2081c3fce22cc26558f576cb59d12d98 GIT binary patch literal 644 zcmV-~0(Bl(j0hvTj$lq?&Vd)p2+8()GbVEOT*Y&hK1yTmk-Ab$~iR9iR@t z0gQ}}zGLg?@z7X`N5R!)t@-doD$SjR3LhRem;(eRz#s6#O*Fe$b~)iIax&Ytu1@Or z&CNh06hQ!PjbRFoj?M~DZ5e8t`v)pEtX^MH8-5fZmPlp+JRZZf96&gCLLB2=N}kidC9AXil<}+y&`Zb9XGg z+)%L=j-RdO9>9u4$ti_^Y8Er7T|{Qmr9evq3PYBRo>TuNCUP77^Naa@WMiHCt*O^d zZShqc+}paE>=ps+ zxiPa0a$4cmX7CQyTeO;4Z?1jwBL;!_`}lTLO#JwBcK`pxKiB=`FPIAkWod@WIOrO@Vqlou XZXWXWw8mnf6B#^R{an^LB{Ts5oP$^q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5c44ebd1f3d049157173949c39b54ae700dbb89e GIT binary patch literal 347 zcmV-h0i^zkP)Px$6-h)vR9J;$U>IP)h|GyeNdEuo(H#^8&mP}oFtGM!Ko@7{=7Y0;e*J`Du$Y_* z!-b<;8Kh*@QN)%kn2Ta33o=Jgn4dvV*cinibwgu@_isNks2ie+69Vtweq?a;iz28F z#R2c%eq=bXZ7qYqKZLM>k3Yk!M|T)5Y`F>-`@r;v!O+~6K|xKG;lZuj4ChZCM$yB- zz`!7-r_I2?pu%ur%SN~!2d`lK4!{Or1|S20e=H35j~{2afBZOvkHwg0m##8AyL1&p z933zbR6%1f>HrJ}XzA$F#3EegVoih}nEp`R0a7@`apnT_Y()vc=OGkZkV`IFgu;cR tTd8j5C>RB!U=)mkQ7{Td!6+E|003vWPwQ5NV~+p;002ovPDHLkV1gBrki-B0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..2af808afb3ebcc5ad35a17e39ca9f3f030f38e7d GIT binary patch literal 283 zcmV+$0p$LPP)Px#)k#D_R9J=W&_9a8P!PxQZ$NkkRNf>xjm459d& zLIM(l3MteKBsA# zM`#eRKOBhTxYwU$Sub<&1E0&KdtNd1eQsSxQ50UD=kD24olZy?V#ed&xvB5-wb{JC h*c*&gN-3rO-VfV$IRv0U^F#mu002ovPDHLkV1jrfbFBaX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..ade5f8427e31945b0bb3fcdeef4f0a49f3c4da10 GIT binary patch literal 700 zcmV;t0z>_YP)Px%c1c7*R9J=WmO)PwK^TS~wybn^X%sER12wqVLX1YBTr~U;4`Mue^&gqw!8;yI zOz=YVQjo+%h=fg(RU=EGCD`4??G_KPla>;83)PE#FP-UrGw(CseA|A|Q%^nh^uMd` z5^D>m<}3dKK$^}>-!1ml4gfgPQ>=daGJ6r2{!WYw`D`&XoO?7!tyaTxeuXg-XyvOF z!bF0^$v~ly&lU&86-FoSwLG{nJOaS(&UVZ98*8i0Am>6v0Tc@PY%w!74#1}QEe0>- zj8OpW(pDrye7A&q=tu4yrv{!FhOsbl=N9(Ki6*CJfc6^rSp3|w&@|0?;MIAX$H~AtAkEVv z!N%I^$!8#gDs`1?stuVTcm=-iWBshid06$~iS?v{5Sn}*)<@R>0J1lS zTIS8Cu6Yfa6-_$^>1qvxss{-)O+yF`J*h}TJ*l+(AEZSB+l{wpEC5wi*{klOdR18i zVFu2sfxmJEjqQ>g@9u1)Cl!Vp4uH%?sMBx9r2%~3r|br8uUXj*$cW<_X#Sn}9t?IB zV8ybmS=)u3@&T%Px$Ye_^wR9J=Wlg&%Qa2$spwOKNESZNDt2ZJew5VnF|q+5snk^a3P0uSAS=(4Os zWVr}pQJFP+(?W_mr0bPj1rhXnE@Qua_WeA3*+3u=2>v^PAG~Y6xnKJY0k3oQ<{TH<_bWt8rVuZe={7wUX14X)EGKz%-M(6^(=$NM$J6 zHfh6Pej)!VG(9omJp-&4BA-fx{FG14%(8oM$f@g+HVl?m3&djzn%0l1sz@F86ifSz z4nGMJ?j$=lPOyGHcXW2S2ps)n1DsXL07R7-McXEkNTBzr&w)Obs8Xe9+i3A#%9Rsj zS@tv9pTNP+Ch1hhD|3#kILB20dkN{QL!`uItudci1}^Xv*}& zHQ;$e?)e4vvID@L+rV+!e*?ZYAW0I}Hw^${kr3M(h356%%T(_qbS1!^+we0|AP@)y bg1^HfSpIjjx0QM&00000NkvXXu0mjfPqV)~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c197616dee93a0c7f24ae2e5846e7a588db172c3 GIT binary patch literal 736 zcmV<60w4W}P)Px%nn^@KR9J=WmS0cPP#A|Fx)s)Tix&5XM3%tJKnw<9GZ7`;dEpoF>zNo6F1#}_ z-VF4@IAvzR6oIj^4Pos<*WpF!VPix(nBK78%}&?1=Y7uG-#L9@sG)`$>ZWVt8qa3V zU9bHQ0FiWQ@j-5+aR|VP7GeF<*X&hbg8d}U%p`MO!j-2hG#U+>=8+d8fYvq)59U%3 zKLDA`OfnZ%Mwy(QCtoNqmrnEg&1zTB^W`OR56E?Z{1qbLC;77%FZr>xO{H38E}iE6 z$8}=S2#Lg9bX`XdI^;Kgl3j2C869Ks@e?Go{%U9c_gi4+Iu&5QTmm2*iIOiAn4X>{ zIia5gOz4CoHS&c5iCCOcc@Is~{7mf+VC(xA=4R(bGGn)fv0DQ`3rQmGwEU#gGkkcr z+B45Z^0Nyv$z(E@8XpyZOrFBri6wxu3RUX|m?Z;%V)YoqxZDH2Dj>@;N7gX_Q6<2) z&+DhZj)T z6E*B6s#p%DY0_x6d*W)X0los;w#BxCGuL}7)bRRs>wdzK*Evllb zF33PV;Hl*VP*oL0QN;nIs_xjU3b-cRv;58J3qY1-s`UfpW?gu|tH4Db_$RNRUD_1m z{c;H{BoS+yK=*MB^z4pn1K74r#d3PKS;caQE3OAR&xv17c%T4lhGAs)EGSnFk!9Ka zIY41+r~6aU*7@fuO$=hSSppuT@+9(7W;0?uG*BIZ%F$}+NnP}0t0K8 SPM^L20000Px$rAb6VR9J=WmC=ltR%0O}l@?Um)rXCu^#2}+z6fJWr(MgY z^NM6Eb4JpdOhwkl2bXAv_;l3=^Lx1uj=THu-FM$XMn*5l75=$u? zz|LP2Xw}QH{ooPdrxAyJ$#C=)fP78|u-$gAe|gQEN`c9E%wTZLVP9ehlk(~v)*JU} zZZrWTK)qHKzplBWQUG8vpX2?9Q=-r(3gOiE8E$uIJzfWh-F8o_*Q&y8_d-ydfoCt@ zrdMhRlZxYD2$OtH=jrno*rgKnS~X4%S1tgszw1(Q900tN0Bfa?O1Q5MxVgMMRjA4Z zg7bNf4)!Q68B-EJnXY@~0#ZsX`tpr8-44YigX{Vn-bp~kagx`Nj!z!0E-3E<36^EW z_io+5yj^1OF#_Q8SwKz*g3%D|EM(`krzy`sg6DbK=2o}iAHQQ|@fuO+GntGDMnjq# zO^mAxzzm+@Wj43ET5D|_7j!)^geaKByXu6L0?7oB8Gi-<0047(dh`GQ00DDSM?wIu&K&6g00IL^L_t(oh3%A4YuZp4 zhMx?>uv1tiGh+-(*U=6ng|?TY6usH+>HiS=8~ho&krvryyBcq1Z-$i_VzmytwMs(I zF4U0dNi3V~&GOzP=lj0*d*AaV=Rk}YF=E8{-=X*yg+f782Y=N^6U)1KYPDKGGq6bP zCB$Lz@X-t$RgQ2^-Jqtduu`dD7{=0s>-9RtVo{ot8UU~?YiS0e;2F?$UG(T-7zX8X zd8s0;R%<-bN{9hn*M)7{O5$xo_(@Lz=_e?aN>3sVlT$FA!2bS6(QIA+N!H>dXibi3V1t_*>naQZ&{ zHIfzss9VlNR7Kr#a2l!?qZ`eQG+^7dvbp(Q0I1JHPp6ktw*|MR%F4Fzw~6G28nA6! z@lU`Rxi}3qC_LGvGjhkz$qx>Z@ha>l2GK(B$9kK)Q8HIUzVEiJw{9)#u=OY;3%niz~B%Z1$Dd-Q5Wl`4^m>eWla6ioS?Coh#*s)e^Ju zWnfkuBs3G4BALvIgM$wMoSb~)?(QvB$V%=+=d^TEAk>Q7r6`F?Pp%5PCL zaQS)n*vXcHdyTfj$GqD=YA^H_Oq#JSR!vl?R^d$mivtUrc1bduaKS!KvADDlMI{|3 zoddn|jb=N{PT0cql>6uGudH)@E%qEZ6uaR=5GVh^L*3k*Pvtqp;tXawyu7LUK6F92 qc;rfl%-Ey)Ih#4B%-Vb2C4X+G)#O5(IuD?G89ZJ6T-G@yGywoZfQ$10 diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png index 1c11bc8942e213b6ce32fb8445d789012b086eb7..4e3de205d81cb10c8d16b708178a85a54108c394 100644 GIT binary patch delta 256 zcmV+b0ssDn0+9lc8Gi-<0047(dh`GQ00DDSM?wIu&K&6g007HLL_t(og=1hC1*2dT zjDk@xz}^1gkyk|Nme9<5Ej8VB}$B_+QW0lhP@$1+r!j?4vV^Uz_5X(tA2Bd6Ffa%S38E-`_wGH>_TbVhFE7V%`0!EO z*$`P$NJtQ+KzQ`%G0_DPF1?Q)Jto$OQ7{Td!6+C7^aB9%sW{eBv+H~S0000%CO0>}iA8Gi-<0047(dh`GQ010qNS#tmY4#WTe4#WYKD-Ig~00H_*L_t(| zob6UyO9DX@J}bL~(b8?R5-Q4Qiy{n>kRI%<-_YOc-}L4ZJw<93-Jl{P1@jVGTCBM3 zjLzcF%w8bvWxto5Ip6ut`DS*QT@n5nz5(BWZ@@R;8{isUQQ}U~e-4siO=YPfbly ziPft6*Td5$mVb8P1Wx$|h$4j~zT zeSE|G-Z+(rVhEC|_nJz0tlvpi49fOeTLb72s_GgxA&u}q5rmV>+qRjLU=-iF;xFDU zMAE!}2lVeYUK!Q6w@Sp}XK&@mgtY?>TCM?NLY8GimVd|0oA47rp%cFME}X<&0_j+uO)s&hFf9&xS=nBQ)w zb;8W#=UjoyIq`^#L{{t#JUl$&!?+RNViw`W-SCJ@r!)2j5YSchoYuYWeT6x#MWL~t~TLXzS4Gb~{5AdS>0h@~LgG8O0WdHyG07*qo IM6N<$g87UJDgXcg delta 364 zcmX@X@`q`HWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$h5fKQ04 zyq=Uzgpps7qmMts;e8C^;^J{Veg+15a&ofD%1SOSPTKY=VFfl~Vxk@%Zo2xKwzk$l zt+&N~h65>~k|4j}|7f88Kf|N_`-OngoCO|{#S9F5he4R}c>anMpx{PN7sn6_|F``Y z`I;4YTp15`NzeZKe|~JHw`=Oh)c)NU=iDm@I{MJ}U(*xwrqw^01owR38h5cpfaxn^ z$c&_(U=HRlO!ny=6YkiY*E_}-;qhtmpNGa(jeoRf1u!3o5Nk6_75(HDzDOe{Vl#&( z^V-D??6Y3v#G%YR&IDF%!@j10dI{zkEr1)1~z%YOz3Q)8Mr z;K1p#7-B5w0-s)gVc-(rq`KwbK77Y2&O~*aNCcw}z(@lO3_rNzi{=in<+Eit{NOOn zEYtp@&2W+7BF)Sn1*2dTjDk@x3P!;w7zJbj05gUon@onGtN;K207*qoM6N<$f;LH1 ADgXcg delta 216 zcmcc4_>ysgWIZzj1B1(wu46!ou{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g{fKQ04 zsER;HlZ#7+xsjiSxw$z|xGw)eFOXs@3Gxg64+0FE_b=HG6yYrJh%9Dc;5!V$jK}j= zqyPo|JY5_^Ed1Y|x8`eb;BXE6a4_)Sb{&=;tNW*pG~J${n9k*4ZmE!O#ALA9{&!(x z@+IB}@wYxOv^Z}2C(Q6^UAUW&$GxknoYO=*xLoElUlsmQD&W1QeE$}p(F~rhelF{r G5}E*#AWP=} diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png index cad0a0f18a1620abb893a548f6f3c51a8a369033..06b25dfb7e6121894a0b3b123544956915e7e1b5 100644 GIT binary patch delta 677 zcmV;W0$Tl!0ySS*Shde(Iv{r>3TmJBQ|E{Np(Rt}vPCqmq69SZL5(<~a5ePl8juX*B; zjRC&H-X1_vqMng%_n7l@Xf*akF4a4z9EwE+8lZFF6n~yW|MVR3Rhs=oE}s%S#ROmA zTggYZ7v(X=M^(fK=JRjJJx(Exl+?u4`oS|mhpnbCB zSSW6DcLxaU{6efuYJ9m$;>38lax&p^leB>bToe2q*_xK%H{lN;BPaIT@EVJGrt8Eg zZ*RfN8-J%Y3^UlkFgm8?>y~dgOxAQJQZ38l$7%iGYhd-^ZQtaNRV$F2#1j|F0RQhs zXQ2Bgf36#W+$5g3<>h~gs%=C#@f^m@(EpJdZ$18)ry)gEfF-DgaJX|%rpxUw2LqIDI300000 LNkvXXu0mjf20Te5 delta 253 zcmdnQ+Q&3OvYwfNfx%@-*D)Z)SRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$Jz$e5t zBRxGJARsXzp{AlDKR>^*p&>jZ#KFPA#mT9!t1CD-c=F`QK(%%s-28zQZ%L3}@P8!0 zVEaO;4Jg4`;1OBOz`%EyfuW4=Fyrz36)8Z`a8DP<5DWjeeU5w$3Op?3xvU5O{olJy zQ%%OhrXtmE_R9$jzZ2L`@=Yo=xLM9*aDknl!zJYF8D|Tz@RX&+6MdI_t+Q66@ zM?}XCK~R^DojMd5k;mu|WEd(z9ilF3^g~D!vKADAz?@y)x-&bw+gMl!zn9&8JMa5G zGjC>DJN&U401bfu2QcFAE#tj^ut&b;rBAqj%G6YV=aIO$vl#;Pba}z;w95%7DOXU9 zM8xwTu?m11|8WcE7MEaeYqjQl9RMMfa>~8i=~m*WBi(bq3eFN3xn`EVbNqQfUaf1V1SYF!zpKp|UN5I0NZ7PO-v!3yC=zO0FtuLBCCL7d2Jwm zk1tgS%MX!gaTY{78J=_iyabGifEX2KJ4eF@>_gmfosJFfV8W9gEjB;K;00000NkvXXu0mjf DFop-C literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2fd123bcf2b8fc8fe40fa0e12c9653e160712da GIT binary patch literal 632 zcmV-;0*C#HP)p@+}F#4 zKSoYKPQd>Y&=Rispn15V+8*Q9J6ztxvI@X)>>phCi~_1FLlE%i*$xEj{>dTo0*(W1 zNdb=i+a(wn9)X3K@vQwd0jSivPt61VfMY+8#=&1+DxGcZ?1EVA8tR%lVRv&~;vlFT zt^zQ~?)I@gudPozpG1@Oi^_d~=NjrmFgh^>&CPAn9tvBD%t|)m>o4#4h%9gUSOH#v z!UlW#93dEZdv)&1{y+8%Nyz-lB9s*s*tWQ3NoUAjR+K>i)(>x^qP4wITKDu1!QEX9 z))tqbyRR35!H}Ku>B%u;53KH;YP@U@sLwD(Bp;lIG`93M5W*|p!%z8 z*B)?t1*X8FkEb5UR05TlgDLfBVRQlIiimFXI3GmgfZgHa-D6lpDL1 S*Z*b!0000IqP)U;Q4k*?2(;A|k_@Fp3W8375=G!42s(9(pmQIh zPtb?x97MNHK@cPqWkFq{4vLj%Sr-1;6oSBE1lnI{gx zKVu+ZAfW#Q%*UfmV#jAA>RKvP;i*z~lz_*Py3V>x1w>>&1VTP2)qXUe(r9W#BH(eL zkQ5cubqhAOwqbvF$MJci0LcT{bVW4-URiUaPZ}H1g)StPA)n8|)La5Ck|&y9dHd3A zI}W1&r4G?)Syw&;`VdR2n-C69==ShE7F$$p6m)j9r`kLYY=N}^8xV3<2%T621_3yL zqmsMz0DLG7&5u4BBsnHV8y_}?%Mr2>fPKnBdj?3^5f6o$E^elkxLC}?@xdXitgk^Z z7}jFw8K60?ZeG}QMgfxBWw?fjfL9+%%8dy!w@JuQF=X(%o&i!)QV}Px<1n28fQGJQ zY=1ighr@0LPS5Y5R{hrbyuM-hycDZKz0w{&n(Hq8sB&2f@W^g$eSI#g2Z&Du^cfT} zKIvCQv0MfLBq@EEdI}PQI|EK`0UeKALNj310+yTyyPkK{0^Z8*i-Ns=rUF{! jaX}B!e}Bsd0(y;Ka`y{nQS!$T00000NkvXXu0mjfqt)}D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json new file mode 100644 index 00000000000..cecaa5ed225 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wood_crate" + }, + { + "name": "plain_crate" + }, + { + "name": "plain_crate-1" + }, + { + "name": "plain_crate-2" + }, + { + "name": "plain_crate-3" + }, + { + "name": "army_crate" + }, + { + "name": "army_crate-1" + }, + { + "name": "army_crate-2" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png new file mode 100644 index 0000000000000000000000000000000000000000..19aeff684c28fb5d7454242d43e172d0d2b54113 GIT binary patch literal 533 zcmV+w0_y#VP)SY z@T`J@kb__kMT(I06s(O6wIV|8Bu?C&Oww)@n?qh`H{I;K^X$$n)DR0+4v+(63*fl9 zGsfrL?e$(^Z@FF7}aUS7ZTUnQ_5&&s$5I&d8 zwP@b9pT%m$oXHS8P}E~803^Ax9)jn3{U^Bf*qwZLW5JEB4P~92R4#$+cUCzZpI=-@ zeekOi02q7#WWP}peSf6w@h3fiAg3n>(cIAUl{L%d;`f*W0QH02P#rb*1YIW!`=jgl zi9K*@by)aV5728E8X4rbT6gXp^}uT=*FOdz3y;he^J^9l1psy$293mh%ZVB3iSvjz zsRD3w*AcJ2+B{3;vUq#{&`SN{g^6S@Xj1S>1z0hQ(fH)JK>*I_NR9!B%~~~p;=B|9 zOezQCE;xEl^aQDYDgctw-#Vv&Yq>IjpY8UO0jPA7QxJJGNm2l~0G!hSNlMJkD*$j@ zvguGv)&30%lLZ-p=M1 z?zc8p^7SSC6mgPF6hOyudO4^W1+>FZH2r$+fOvRLOClHOI11aKw9j4(08wi=2+%p8%|(bQFt;lLpj>p->dcX UQt{la2mk;807*qoM6N<$g6lr&i2wiq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png new file mode 100644 index 0000000000000000000000000000000000000000..40e261ef695c4df07b1dc4b87e3586c3c5d43f34 GIT binary patch literal 559 zcmV+~0?_@5P)Lrsb`V{2e*V6zO|)XsltUag$S@w@jU zJl|hRoYT0iw-QzZ#e80*ouu4A`1tAtLUF)pOu3f!-e#o$aNTz~rk$L|9ql`j1aVtJ z6pc9prBY4{A8}DZhjJPw#~N5QGy^EWgG_4j5u)2420Xa9;5CMG?`Z~*CwDei!`}A# z+9oy6fSOyiW!3I!G(Fa+W&lEF8v@|;XM0Ulo&Vlf5xWK`?5#d3-3j>Sb32${oE79q?{#|9gH$cN53NuGhfXROUp-%L zAP$GChpHg{x^_7&Q04muCd$RUG(}og19YgmnQj3dA2UJ(tTmqAtm~v7YJi-Y&xPZx z_4a_80=gxa2I#qd*KWXsEo^is^*{G>jeY86Y|spF8^Cp#>P1A##j(|RR9-WHaG5m# z;I>zlQ#rq@KgtmWhn$-Ts{w8;v<9dPklVq?mz_YNN40b5Q8{SEssURH0?gVAW;iU$ xd88C@qq!azT>G&GCgDkl6=SphkZcXC1AoC06yC4%yTbqg002ovPDHLkV1oU?^ezAZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png new file mode 100644 index 0000000000000000000000000000000000000000..5f45c1ec8b4bfd937fc0afa41bf4b37a777f0b2c GIT binary patch literal 473 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 N002ovPDHLkV1fbphoAre literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a141d00a720c56fb9ef0593d927ba041bd95818a GIT binary patch literal 349 zcmV-j0iyniP)Px$7fD1xR9J=WmAy*CP#8c@MOqqYEpCRiS`=DE1P9-tbdl$^n!FMsd%!+(QrqcgzUy{RXtvt?e18EIjo^?V*pkE% z>(xg+0s!7(xqq%jU~qAcWp(5PEUU9mT!zRc)Z|@8f8(Q6i0$-cN3i}}HL^;GkDyG# vTm0^WN(8bbDlL#Daaf?TRjeg|KYzm=IBb%_O`%l500000NkvXXu0mjf%U+Uz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..be8c7964677d0de262245ab0f0dcb143c0a17bd4 GIT binary patch literal 289 zcmV++0p9+JP)Px#+et)0R9J=Wl(7neP!xuLBPa(!C8$SeXm@Cn9zp04uA6H^FCi{9<%5Jz(cs|d zs9d2zE(o_t2)vC)8qPNz&hmf!91g%R48t)0OqOMuI%8>CCP|{}x~9$s04z*P$F^|{ z0#sE+E-+~z7D6{tk_V3%8`yXreBYl%VA6n63XPO_l_hrDExEv?fk&QOvTXqXtMz(* zfp5|@wPqKHh0tmk&~+WImkaqHmPx$X-PyuR9J;$WWWJZ5@P?u*rL*kC~~i#-p8d44(2Ra%t%lX0|NtAML`}e|AizZ z;e2!l5Cd+WJ;tzZ#~y-?V8JIzj>Ry`i3Ln#*+4~r*8#-DHM;uOPwz7zM;}EFATomgEI}hd-0rPN5Dc1rk5fI2uVni6#_6otRrwn0l7JVRJ{Y93vfmOsX2hE4iJ)% zWO(=DIm6?ZZ^$xKR$PSP#KjxrJK)iyM{xGj7o<5tT7r1X85r=Sfh*VVl4LPDu+Z0_ z%mLC8A`I_8{Uq69m>y!IZ@_Z_P6r4I@(-*7C`|*z0-WUlEDcCYh>&C;sp)1k4Gef1 zz*`Q`1K>=A??3%y5aeSgBPu>JeEas9atFXH=V4=IIC1d?0~Z%BgCHL}0|Nu3e!#}p zQPx$pGibPR9J=Wl(B2uKop0+mPj5dES?Egg7F#bdMKvOlC{vkyFxOo?TGY_kQsPY22ZB4^>D^Cy@AsghqN1YWf9KU>fw#SPzdnAr#Cg*w zl*p{(d>w{2i1>W^JbE<$mXm$K_ya0iG{F z>b24WzCZjV%?tp;ev5CjFHaW$cMe_k&r-f68O>vq~wnz9}vGU2{icwdG`bN4L{N zWY_yjDZ&Mnr4*jKM8y8) zt>2@_4k;0zcHkV>hI+L@#ICm&DW&p#8tqQV7wG}db#^X@qQhgktPS@HxDLM-PE=7* b@l<{TRi?P7{T6z500000NkvXXu0mjf(F^3d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e6a362cbaa675591d13384088555aadc73c303 GIT binary patch literal 387 zcmV-}0et?6P)Px$JxN4CR9J=WmN84iP!xr~h*GFns031tokS1>U0nr1ada0P{C&<24uVSu2MbC% z7(r5-L_!O#25N^mNJ?6h=yG2MbH@ANy^nj(Jv=B?s#K}}E=}Uni}SOn@3{b6UR~$D zu^<7^_gq@-4#wsVr^knpa)4I51Hj~?|0{$D0Kop<_Mafc031Ic_JM8PXF`Yp#1J>P zcRW~jW+y}e0P3|$?l{B&V0Iky5F$CSzP1sW4gE)bFdP$xBTkMESXy4iw;$C405py7 zy5k1`EJ^_6$?=0}C(MSf#sl-(-7<+gR0zQP=Y+vYIe=<)g;y`g zJWqN+WDA~bD_-x^b&NewuT^A6&~v+5UME0-2ht#t9uP^wG$qrqY3S1=R0fcQNG74u hDDJsk4Vd{4d;wmYl;oVvvs3^8002ovPDHLkV1jj3oPhuU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png new file mode 100644 index 0000000000000000000000000000000000000000..be8c7964677d0de262245ab0f0dcb143c0a17bd4 GIT binary patch literal 289 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 a)WMzaThoj7t~s>a(Ev6i;$UrX673(0EVIV| literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png new file mode 100644 index 0000000000000000000000000000000000000000..b2aacd3c56706685ead88cc0afd4c918e527de14 GIT binary patch literal 626 zcmV-&0*(ENP)Px%EJ;K`RCt{2+A(X}Koke?e@i|n5CX9)K_k@NoZ#pFgfp z7CE#|Q5HE4*WWZ4v2rwF6KbyH5b9|20OuB*C6wO9f`Cm;C4 zc>sVm2zDUmzyElf3q*2&8SZuve6=U>&~~`DU))RqUx`csdl?*!Cn$^D`#=y85fKp) z5fQx`qScxt88%v{oqJ}3bT+&5qEaNXCunG$BFmi1;u&2Yzz?ian z{Q01BKg*_~qeL_Sp;B#q&~eJL8s%kESrkHpJ)ykjVGP5xLFSE6(C85&9=^0i=}u)Njw9eonNf21orZG zc7D;^-dwNc2XoLOR0_Z5^S7A;fd4xiv?)27gBF|qN4O-u48F!bH( M07*qoM6N<$f;rO@w*UYD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png new file mode 100644 index 0000000000000000000000000000000000000000..c53f7e21a50a5594a4f84a2d5eda0233163646ac GIT binary patch literal 1015 zcmVPx&u}MThRCt{2T0L&tFcf|%atH&OBnS`<^ax#Q!;9c6cnLCf$YDAcT{;(C3@<^P zB}WJ#3LvaWfVTJs?T|i&l1Yk`o~#7sHyM;nK7Q|?6o7}vMdL~}_?fZ4)C)axu3T$s zTpfT`gLPz?qlBVB}gK1yiofGLFzLI!2wmNvWQ1K28`DG4YG4$D^Bi@6_z;P!=45kO7OM!E1AIFj|w=1yn-qAD=qkTYUX8SbKRU$Sjb>kx>EG z1mNa_*-ZORSyixqe1Z*u`Eo&LfhJfJ5X@$f%wxzi0cBMwpW{0epbUa07@MK8;E-nm z7U}v;FvaF^TxT79njv%}Qyj3h5>q#7v;fyOmI}!{1{O!~aKAJ9Z!(Wzxk};Te%DBy z_#2gHQh>1%{C0QO(7r9GqIaH&hD)`7=b1RM0?Zz^f!JsPI5~?WDE}{LLRnR$t!y%n z>y5mn#T@_uELSPy*>|JdHnKSN0?9nq`Z)Y9t1#egsizDMasIa!&U2AKbAvB?(X5BX^;{O)ux)BTk zUP*1INLgkVXe&WoH^#*Qe*OG$GQPRFRlXmDuK|ndSiC(ho4g8Lq*&DfD#+;&%VWw0 z2D?En4vk_AT?(tfE_5ltDGeevH@AKM<^-8ctN~;#2O%RNTuH$1Kieza5z-XEjoPGQ z4-XF~)K|vTSJKqq1B@kKBM1&DdN45Ac42)Wm$ySoY+1gVfT0zid>R7)&V^4GaPt(s zg?vI(p9fHCZHzQUIj6i=e>pm}08_&gfIrT8nlm-zz19R=QhhD&^;-9!FXW>%YK$>= zgMgtI8eAO6KW;$Co2QTyQ4>%WoJ?@j7a2q5l+XOBFiIih`a#6G=Tw%$0JMRSx)dG@ z$`hf!Z1=fHwT0XW4VBN>4B_OibwQp9*zdNZk^n#>pWFM7i(@NZpmHa$2c>0sFRnVb-x7J07R0l6PsEb?lipGoBeIGc$5b1elS- zNx;jh`m4Rr@73zS3=m!qc>dy8ZISi$P15*24d5g|Q+dv}6(IQ;Erbj($UUG>0}PUY zJ~0tsMvjR9*UkA+Wj24(cI^-_pD~wai12#Az0i+?J`La`0E;h9&&*?@F9SFUK;bYy zx>Z}`YMJK#FaQXsj-O?(y}G##dQV_^!Zo zW^;E}UrXRV#+@s;FD%ywq6wg~QhAh^u$FyK1Dcy)2*G9uLO{Wjvp4m9DC<%_gf7hx z!zi>5#Cl2RX2^aJLe01LQk3rk%n!wXd|w9R7vr#3V4O^yyr%IwH$(3)E*dQRl$Y)g z;d5gc&#wj9a&38SXDgXKV$LCg1W*Y~xY;fUYcL!n0Wu^sTUpG-Q24Lda`!(hzrOw$ zlsiV2q+S5ZGe>`TNK?$S(prmCqk?-2S9MyXSGYWrpnR06EhQ&6L!6xPCS9@wxQ;An ze8mlokdi^-)1Y9|zLsQ^BEp6*zU_UZ4PFB1N&pxSr6c|Z*T-1to+a|RZ%&3NAoq_D zqPxMayL#8o4$nw$+HJ&vd1x?O?zXkP&5%}Xryhyh&%vs^=3j1%QZ^}b3cQt|uN#9W zeEIyTasT}7JLh=hX;?w)SlqrZUEYN@Qljbr7i1&Enn1IGS%@^t+GDrwLrAd-Y(tv? zI-Lo^+NB}MWMwI>3?eiLcM|aR+vUNK&hV(HtO~U-$W!4y4KPRo`ou&4FSK7tYkv<= zO1?c0$SHcbF|i9P0a@PWl-N?fnty~O;G!l^pGJp=~?rKJjkOoZIqaMkAU3Q(dgPrd6HCKLr$V5Kpu7H zqEsC~`7{YGQV6Af5D`14mVDkqNGrZd^#Uc}tOL4QP@dhD01cEYU$7bCeG_1#lzjgH`q6~9<+&t* P00000NkvXXu0mjfh*ibJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae719968cf7cec3a657bca85cfb0b8ba068d5b0 GIT binary patch literal 1183 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9F5M?jcysy3fA0|QH- zr;B4q#hkZuW4)yvC0f;w9h-Ed=H?Nlh$W&?dsYN|JoLZ*B6ntY)1?62ZHtzKZCPqK z>+G?&=T5cd8aSmbf3Gs{bA{lw*@x5S&ArQVZg!;Wf`tqZ0vHN37%W5>WVjgkSQ*-x z8k`vqU=vPOIq>L{*Mj)@=C3Xmo`1jk@7#V#)gw!uoSD$*z8d`5Pt!jO! zuC9AEFTOQA!QazJ^XJ-Yl^XHUckkTkcsBjn^TU5WJ@{j6{On$@uEWBB4!?g+@s)`? zOoXS(>+PHTCrk6p|JjQd=B;_?&X^riU*L-M-g9IWj->+Ov7_q|AC!)5*TC zeZ$uSXQ>rThC&HD=G#r5U2G(uu<>3;-|jf`Ro$LXchBoLn6qARHow8D`R~%~93o?1 zP0O3Hes_~l=|;~P{RQ#+ZqzW`J+gL+_O)Lx)uuf2o>;T?+WCx+wfDu(t`A!k`0wUT z*D3d3p15|T{qtXu&w^*3F-N>vKKtqYw>EQMXFpqhB*V_ZaKGr+%agPx%cu7P-RCt{2o3U!+KoExignIy|6KrL(pcVKL+*rpo#!bk3qzHM8kitdY;<(17 zbecRuKoW>cCD`ur2D(BT-CD8<1dX+4%~x5nz&ro0c4lYBz{t56dH|YH9!g#e0e@$q`1n5#ekFxVc`JWccoR3jipr1pufZ006wD>BZR!(B^6~ zDe1Ecf@T$54mqfypp^gsqZB{|0kR|qFhT*`_a6Yh4LX_=LWTqXj2{(OlSw%@ru_U# zK@bFCJoN4lkDb7L^}W3ZLWQ*`tc9wNog~Ctn)dxuy}%X;x(5z5HJF>c^l=rip9Qic zhtV^{t2OseeTm)$aAWTO0hSfe79q`lqj(?D9^fV*2|9oK2FnV_k{t1B-3a09>;nvO z0Oj7| z8n%Jl-rbi*&+xR_biQ-j)P{zwEoiyd|_>;M`vi*3L}SR-bYT> zBt?Q0)*@amj@AlquGf2gJlvjxU4ZuNt01Ve#oNxaWW1Uh7(J`+J_7(-U6EaYFw)q) zyf#9Fkv>=_pqL>`a%4%4U45Twid@xYHUZq3ca2w5gU#bZXEwt~H{QYBKd8}}3${(r zjsEERnDOp&uJMPi`-asOxh?CTMS%1Q95eXO#|O(;z3|0AC6>Eaw1wajz^i6y3YO^e zDey)B`YQ`i&3+i^s=&%Dgf{|^pO2Rd0Ko3$6+pdtGK%2M9zfjQ-Iu_=`{O)4dM5zT k^&UPZQUpN|1mO($3q7a^m^x7H7ytkO07*qoM6N<$f-pKi!vFvP literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..f5588e0a1792b2dc27cbd48b85de42bf110fb68a GIT binary patch literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfwaB7y|SFNr-z4`rm~12e`j6NvN=`n=K^IIuBzp108(5fL4Lvi zVSr)N8J+V$QO*L7$YKTtzQZ8Qcszea3Q%y5r;B5Vh5y=#+$7wP^Z&^g zoS(5ayq)*iB9-OI#hUu|19eVJ74H~du~qm4o|?HxWTtjNw&j!1XRJ3~b)1+Y#$;#w zs7J71nZsY}2RD4vI2On;&1&9$Evccn;LW~;GUpD)IydC4yIpcK=HwrXCv%RxXK>YE pn(!!KM$?HYJXx$xwhVjsGd_4M)tK%-X(`Yj44$rjF6*2UngEf0iB6YfWgb3@e@#(v%n*=n1O-sFbFdq&tH)O6x`?O;uvD#zjk6TU$X*F%k@6_r+?)u z!pjuWp8HIz?R2}Xe_*Qn?uX}_1pk$Z9XxY#l?>A@f2P)>p&pz0l{Z#IDHbwMxWW}- zF8JoyBhMG@x`O&dmTuU=wRKu&xS0Q;u<9co znL!^W3Z{n~n#lC`eN(cz*wTi5A{OlTzsGVLvLAmZeXEG?oea~C9eIyakBfK9x64fa t5zFBe#1!O{(iOm_!?Idor(jey=dGs<@_rxn)5$1w#jy>|s zXuq+oVz$t>X&*jMV>;9*@Zk>k!QO<zHo;HMJkpvni9IgDhO;_TPwi_5<1bmrj3-+kNWG+VbbbP0l+XkK4J?Uz literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d79b683f982fbaaccd0a1b4d19498819ac2e1d GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpl>9V%xON^woPb^-VhKl9tV>vbVQ?KNl#&Ao9rY7m(sA3Gxg6 z4+9LF&gh&6igFfsL>4nJ@ErzW#^d=bQhboF<9#X&n= zwGv;m+dnVbxe1-RX!a*kq2YX=aEH)`Q@R;5x1_w_T`0ck>Ed~Uda|EF&5EuZyvO*q zu|Uv7EKHA>nrnxW%F2dr(NpxxbSez z&V|g%U!1&taGpB6>-oO>x1NPv$n`s<=_9FNut#8%VAOAh#3t#KM^}Oxf$n7RboFyt I=akR{06P(Ud;kCd literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png new file mode 100644 index 0000000000000000000000000000000000000000..e1398fe96ba019cd94f9cc484bd4e4ada940b47d GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpl>9V%xON^woPb^-VhKl9tV>vbVQ?KNl#&Ao9rY7m(sA3Gxg6 z4+9LF&gh&6igFfsL>4nJ@ErzW#^d=bQh z_IWYOB)TllM_+x5NBrY9eQwqV7df3YMO{)kH|OXibGFQK=Ge}6aKW19Z>kIOop*3P zRQA$isZ$nl3iMo_5EpEq+|$J2?;?6Jy2RLMKhpil>5GVz#8b5O&fxIi0>&@s8D&_?sDl?AGjC z*bn($s0d0r__42GPScB-O&klwXJj7iDG;{OuhOwFa{Q%QcHWxf_0;kSyU!`jENI-( z%$F{2Sd!2Zw?fq3(ev8gZ-1|u^*7}e3;HFVVrhKXI-%L%n0VM8>Dc?1q9cG#W$<+M Kb6Mw<&;$TX@p&x( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png new file mode 100644 index 0000000000000000000000000000000000000000..d464a1094c5c42454d30ddee76a011f109d60508 GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCilo1AIbUfpnRWR0spZ@@$!&|9&n|3B$yE z<^Mp6wEYu89EvVUQ==U$HIGkRV6er>?XOMy zNr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6acfebacb69b3fd332e6c50571fbcf48e4e54b GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil&0(?STfpnRWR0spZd`T4(NwLnlq-Are?CtH}&jrdbOq-i10HnA|g8YL2 z!vMpkGdkyiqMQXDk;M!Qe1}1p@p%4<6rkW-PZ!4!3;&~&0{L1DI9R7|6RG~st#6Va zJzopr0LKG*LjV8( literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8f967c9dd188ccecd28c971ada43cf9b9d5d6a GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbUf%JhohUx%@_j4IEr5HNvl9tV>vbVPfiZ8H_+W@3EOM?7@|3d*o zuz!URNU*>ovY3H^?=T269?xHq0@C2=;uvD#zjdOc&=Ca=mhg!${>SfWmgEh4SatJ@ z>d6ZMu0OUg*NX`~Oh3-4nfhp|yMyJzln1>F#gBXn6mL7tvh#GCi}0HM1h&Jj4mKVe zA5^$o;Z8?GJCRPG#_!pMA>TakU?R{eQq5;OKSc!dMq%HZkh=d#Wz Gp$P!3@O6^_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png new file mode 100644 index 0000000000000000000000000000000000000000..430139d3382e020bbd6819e7549d1700d19ac168 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbUf%JhohUx%@_j4Kab}4PU8>1=3&{>zXY)+NEy**I2hUrcxkm4>0 z@(cbC2Mk{RjGutQoCO|{#S9F5he4R}c>anMpx_!$7sn6_|E&|fg^nn2u(EroRQ+c@ ze^|gi)FMx9@5WCVnw;}DJv`53`7ctEMM;g(f^8}Hks^ubl^o@ZxeslPNc>pvN}=Z- z+h!NpfNkOu0XB13j_`|cGr#9hiDP*vqWM)b=u?46NU-zO!=5{~6dr9-4C-Gx!S$2A zV*1sbV_pYpzeI3{?eFzCP_QHF-~qWlrp^CZHbj)){vLh%4%dw|a@^!t bTElooPVRR#+n4`9cQbgp`njxgN@xNAgv)*> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png new file mode 100644 index 0000000000000000000000000000000000000000..34f2c4373f2acb309017e8df307789f470d9cf5d GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbUf%JhohUx%@_j4IEr5HNvl9tV>vbVPfiZ8H_+W@3EOM?7@|3d*o zuz!URNU*>ovY3H^?=T269?xHq0u-F@>Eak-;eT|JBi~^I4wml52mkl)c#xN?^YGcF zRmGi~dOSHQzew-X5jgNxfzyRIC6#ltj7~CV&#eZ*JlRPHL)qV-J}|$nK=_h(fUZiN zvcTdOQ-V9zXu1fbIfkmO;xK=B>0~H3SxA6Oa5*t@G7s~>j%HZkh=d#Wz Gp$Pz)O?cP< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png new file mode 100644 index 0000000000000000000000000000000000000000..769a962390d23179f128a07bc666cede0f3ad2ec GIT binary patch literal 737 zcmV<70v`Q|P)Rkr13 zTMfXy^^`9DohxgU{g|f*H`lFoWQZCEJO^I_w>n2^0OE@w{!#xxqk%s{cT?sQZokcO zP-F&k3}Oo$4lWy?_2~f$r5}_`oS~Qzs8T=Vxk_E5&DDrC_8V8V)3XIOGE-HQfj}_G z5DiVEOUd&**Xs5t99Uq>K@ET4H!~o;f@V|#AP~`DpY{reL-Xh2F}5fNB&9%bWhFol zKmnG_||O+?3I<34vxr+U-)d z4Iw$}5eRh;1?G*}7=s`y(hGQc=XO*AfPnUf<6t%r5z2smKnYH?Wn53E2EgG1Nd^Gn z+y$8%mxsz=>w&EkI|AYv;Mz)rKGZZTm9AQlifv`|6wA+nfZN~lse1BJwax)fzGY$|*SIxqwz z8Eq>NglJJ?#|CK)#$iiXB-liwMAoqH$d(w)0$-B(aOO-qJ$C#vKkoC~d(XMs`##Tm zE-gGP#KO$h%*e>d0)H^@5X{%$CNMRD@q*v+OqkZC9Q+g6$jGv7ts%a3v9vQXG6nE~ z`y;ZhE?kumHXYm2&M&C53NH-$?B{6n6Ofgi)TwUACFD9!Z>M5Kcj(vN3qO`P>0Fpu z%HV!3Wxw=5yeSR!#~0l!`BMS=zv_-r(if@A5?DFBa-lX zBkK(bPG{#!{CuWQc01Gy*UOd|1GU89_cFHAs;s~a?SA9s$1Hu~XsXV;h@?%n)Jz*eGx;8j1A=t_8cW6UjDoab>&~X2?k|zRR(TGQp?m= zb{w)Hpp_4S&gWOQwcahtNU(ZvebHF0e!%gO-xHxfB%PQbhq)#e`m3 zPVwY)?V_YHgkh6Acq!GrY}4V@IosI&bCYRmg3s^xXPS@Hys2Ks_|_PCGECbTs7falD6|Q}m2BECw8`e3rT@ z<1EbXay{c$85p3cpaa_{yeN}Ol+9D54KZcKb;ycEUSbYH;`urKcf}64{|Tz~Z8jB`hsTa!taVR({BERZ6jIIR}9 z$Gp~_Wg{P0_AXCdz;!C;O$(ZrCW};`aXF+W^A`+0(n{mvZdtZ|Av3KmmWNTpnbIIZ*Qgx*bPnJFy0QZHEUUxdJ{Er z#aWjoS0IB$t}C-6iCPU}G*nAlLCAuIj}4@$iyZ`>RIy~HeWCSfz{=&#PMO59kcAj6zDx-&AsOJ5Fw^JM?;g9O5QI-=6VZ=vuQSw&%p$M*Wv12KNJ=B;Kd)N%Dv!hdvTuWd_ zj_|~r7L*`aW_Dl3Ik(HW=`09Qt*yK77h;n<)M9jI4Lf}33YS$Kk7;rn<5zAa?gK!9 zLD6b&y*e9KpcU51k=1#>8x=`TbD*u+!5i19ze5mJelz>+0R3H#yfw>SzizEWe6B%A zm!*06+BrG0#RsC6$j6&0aXM<(3_J9)1o~FOx{a-|)urKImH|NkDN>hq{fIto3cdS3 z-Mby=(jdS-+YRspNPgg6P2$Kn>M!n-ZvryW<5K=R8&5bpzL`t_$Lw9O9^VGQZEBT9 z>%9z}21pJ7kvni($$lh6n-YJ14TR_DUK)$wODP{;#a^tK?YjmFzFL;6fvN)G}U`ewTO8j&(8H$XmX=dM1>h2fOmwLF&FGc9yB6tS_M#z^&{j`YD{M84u z(BP*`_tVGms%Jj|1^n}N>_ez|z)Rm;8E_`%V=)8ku?>ok)gbP45>Q0ZFIW1d z_y4jn4ir#5C})-9D05RdlfbWxFL)QOms&`Ju%7UO6((Lm-1CK5uvY5dl$PJj{U%F# Z#N_*qPO3eukKq4>5k4p^usVQr{-5#)O#A=< literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json new file mode 100644 index 00000000000..e9ea220d55a --- /dev/null +++ b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/BadDeathclaw/Drymouth-Gulch/commit/63d5cc6913885fd4b481b5ffcc980726c2dedca9", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "burnbarrel" + }, + { + "name": "burnbarrel_lit", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 1, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb1dd3887c28894a4faf51a2f88d63898409624 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}PI96|g2AhXK=vN1ge#0H)(e(eKHEQI2hZW#<%cAS4mssZ#_g>+6cD_-WuhA2 ziIboH@h9KkTiE&V;$rs#OCVrN)Xvbixw` zPEW_S;^q0qF}r?oE|;>+wPRBb4!vdZ;OOV?6}s$<6ZT9wQ+>;#K@4oUgWDJT!;`P~ zR6Nam#UQ}2v?S)i-PQeDiVtj7&zC6anR3uX&%tA!68oClC6f$Kod2_bN)Jbzd()MR oM;Hy<4FUvt_QoLma)pgy$90eM43Re&FC&zBAX2FSMSH-Blpz^Z$q1 zkq<8}D!0Y{<}(Vq%Xng1^MTdV{SB@(JaK&0!Kz}(aI+|Dh4M|tOGSJi0Jb50sWvdEKpP#$$?1!h^?93}0o)kIwHnX34NkqART*2%n3-;s%CI*HIh9D!i TW{o;v7%+Ic`njxgN@xNAV=jV> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png new file mode 100644 index 0000000000000000000000000000000000000000..e1df54b1528d9319db8f2a4830ec2d70c94a766d GIT binary patch literal 312 zcmV-80muG{P)PbXFRCt{2)4dA9Fc1LX6C4}@ViD0IS-Lnlx%d_iKB$9lA%#v3 zf^`W}e-K3|A}-pCB*cJVAi?Fb^pYIScloKqpBn)PKmY;|fB*y_009W#446*F&$4XD zm~*bjg%I+~*d1o`MJ)&b7mxdG85i3VN^C+@( zt^4YZcn3sQWgk^npl^BJ0Qj`079HYIr~i+1RVmb=;pSQ^*`2buie>clC^KIBWm8D91tflbR0Gr|W literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png new file mode 100644 index 0000000000000000000000000000000000000000..1df343df5166270cf22c09ba4b905b6cd0660c9e GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq_xX z)5S5QVoq|RM1sMqhCucntAs0z&W9N*T~+@dZDl=}cpdj9nA@NnaxHw+V= z>fhhTe)&Y3Fq4993qv5EMfo#}D~i)BuIj|^kvJE2J%sVH`TF|{`1 z{xq=JTi<-}1k2Tl;dyr!++ke85Rh@OhL4+bmNml^1IGwwSI#r#WvwbM5my4=G}PYS z*3c{wZj#_VV*!iDRucv;uYf;xd(S%vF}z$HCDownl60CefTKaimt(>d?u2QNwYd{s zGBTMoRB%7#YY=rg!VtuzwMf>%$I(Sk;S}SGR&Fzg%aa7c_#ZGYR#o)%c5-3}KgFIJ zzbeH!swt3N;4MSaCZ%0ft1J_O;`x=Cdl?w&;;UuOt2Al@gN?z{)z4*}Q$iB}TkLvq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9d2d3cc88945d1157647edb990df3ab976b1d7 GIT binary patch literal 358 zcmV-s0h#`ZP)Py1t)QFbrdh)&ltg`!gj2eCJ(yxN4=q}AocCI6B(9lkFi?==?uIYz(;7y%^x`@I7JaQm`wao%<&Q}=4b>&pcsVDJrC}WXI`Qdscppw z$LzKnvg%L@i11Yy0%artgiofkeA{v5)KNB~R@3Gy$9Kw#sOJscn>@!C}7643cO+_&9`&mIaFFpS>V&lU*}m)0g_3l#df>{ zw~4y{UkQjJloaAI2%y?@cmyb5mZ(JMDvq20>pdU?Pr*+G7L(!s6z~fC^j|=QtqAe! zKkYI8uvt$5rr4FF+1o7iHzZs{rv{$wSg}?o#Zuch4x2Fk7w-VBii0 WzGW=qPvK?&0000ztNa1yLuArfL!NX=D*zU4u$a9{3nmk#_`4L}3X0Q?`oWID@iqa}@>(+rl2x%`K3 z0WdixDT}M9QVZf}2bSX%x^4LM0GMpIS%VjhKfJ6u+5nOy&XeJZdB^X=evcl&G_CiE z#WvJh0d!2tJHn9zU=rCyR8{3g#FB|l4zN93;BiYK82QTm)&h{1{{JFrQ?Gzo$u}bXltWUJQN?@J)Oe zr7FK%oy1`P%5t+>8WOeft~GL$tOmH~8OUA)fC`EM?EiNyHg5nN#0P{k0ExD{pi=-I zK3ss?ki@C~r6DRpngvo9AO~#bGX#c_lj<>x|zWG({WlaNnFq!3{TY!UJfK~<7RP-n6A-`wg*PtYB_gFG%7EAj0!p00%&mqkn-U0adSt z2u&{10{8?JMUDL?-3ef^&4nbu3OC0jG}#aXz^XTl*ghFxcep^UEZ_{Vy5IaKBHAap zhOF=`ghPo6z+Xc=1KZ6Was`Q;6{i+-huRm71eb(181<0v)C7|E>-XMEG5~)p17H9Q zfC2cw0Gk`@$xj5>-P)a64{Cpuv>1-c+}a)8vz$%#<{Leqhppk!lQQ+N5Ti%!ti#?%S{ z=-<~}?`sYhv1fv4j4(2x3kV{0;N-L>Jwh`o;T7=nTaUPaZfU)Y?wfZ75d@X?+mHu= zorS5=?tlm)Qw`{Zpyz?K3v@!TbHDx~`h=k0VBUlV;2q=(->o2WdF%iH002ovPDHLk FV1jmRznuU8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..aa13aedfb83794e7c7f3ce3d5a74cd4e267736d7 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq_xS z)5S5QVoq|RM1sMqhCucntAs0z&DR+ zrJM89#>XN2!R$fG8Yj*xsH?kQXta=J*!1V#;cy9^CDI&J$lJXvV?jpvcCwK!BmLA&Ff!GjNy6*Y$sJf5EaAnQxWQptCB_WJE(p1^CmaZ|cQ@f(FZ zMiW$DOqMlvoZ``9Zo_5QfvjTj2sKnV>ih%7`cSa5tU(8;9+W6 z#BfYpWQl>`p`d@A-R1#D=I^U$p6;)8;AO+*=lTzHomR54<)@m!1LX@7L*SlT?ma5A R76Jp4!PC{xWt~$(698lLi%I|h literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..ad66f69275c1524a89dae654a0039e90d9096747 GIT binary patch literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq^m5 z)5S5QVoq|RM1sMqhCucntAs0zi}@t}@O50g{Fgu3{`Z%eirY4Fp4nIYpE0JlYZ23o zxS06k3P+D~i^mteG*WiuD+mhsp?~@u*K_;ksG6FCHX^0R8*dmXa-MMu`5}34&+ii-emu`-(_~KSp{CtWf!%YE0Ik_D-R_n)0SnSL{^z(jWR>CI*%OHk0 z_68nTzZ?SwA?C>S>(-qs`25VbKtu8LK?aM$eFufAj#x1~kSaq4{TFCYjJ)|9@79iyHE;3yYl$ysIa(e<{$v44$rjF6*2UngH$Ob=Lp@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png new file mode 100644 index 0000000000000000000000000000000000000000..fcec1e456a778139abd83158f9c898a26b90bacd GIT binary patch literal 432 zcmV;h0Z;ykP)VQ!Pj5=UwIzU=X2xP#m5Wg%CfV9`2Y7kc!1Lp1RVe~%urGUK|jC8U}&t1sTd@#t_bJ8dG`^npKJ$! z0Lb@`pTEJBFfv21&z)i*2T+s?o*mfBV40A_aD2f$f<7hN0iZa)`RxlZ)t4_=9e^%| zE3QHMDRKY^TzK{zg%2uj!2nnefUJG?{0Y$(lI#GimB||{r6QSNXtoDN9Wd&EQ3nhw a2LJ$lvUFu?pV(Xg0000VxfVB06J%qbsnK;q?_c`_ z#giZ6>xvBQ#en*O;6Xj(q%VJNUeY+PcTcHdSKaLEn_s>DATeuO=G9qGemmMn-(LBA z(T^uAvul{vPCSz_L9*L%t6f_(>jKpS#_M()1-Y+^vtKS%I4!z$UfHvT?Mz@J85qn;di5kN`YTU> N_@1tQF6*2UngAcNN*DkD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/storage.rsi/vent.png b/Resources/Textures/Structures/Storage/storage.rsi/vent.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0f46b81217e3918c7aafe571b06982933207d9 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DA@1m z;uumf=j|nbE(Zq@whw{VocS8MHx}t=>m?pG&GAv(mZaw}MI-HxXGBf@*Q?c+|5O=k z{oDc62?Rg%4;1eGce4A?fp9&>SG$x_<9s5`OD>tc&6D%KGJA7ow9||)oY&YjubR#L z{O-z}HA@;cOIyr3%$Ap{(7E{O^-ZD9Q&ji%EWOT{FA6b`f#;3AU&`j76}v!uPgg&e IbxsLQ0DNXosQ>@~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png new file mode 100644 index 0000000000000000000000000000000000000000..c7365021975270cae5b768cba57d8780f37aa1d4 GIT binary patch literal 1389 zcmV-z1(N!SP)LW=Y906oaJGn6XuDjn( zpO?v^C1YhZgd!W%t$hRfkAHVT<4SUtPJfh<+1dLiQz4lOpyKV_e{+WMd}e+z>h$ud z(}nG5d-~+D#NcPYjP9eoB{|U(Cv!0DC&6o>5y+%>i39D-T1i!VNAW9kp@CR@#>WpLj zmsu@{Q2A?_M7QLtz$Ad#k5vK#0oK;mqE*Ad*w4+{UV9b9f`?BbnT{6380UB)NCKQj z>C$-wyfFG{XqnK8QYTPfcNv*7!`Kn<@aMZpXO_YTSY=MZ z@vWE_3Uc1zdE1D_kW!uf_irr%P{-&(-#!DA8K8DM{|yJH($uk>YMDLoQETu z@Z{sJAI5!5_0I65o-%sBcpsg?C-6Mmdj6P9@hCy%+2%X`P6##*pf=d^UyZhJ2FUb)_!j0R{r(&NKtb_NfI^!+JckDb~ z2BwY&*OJTE-+q^C0tr`txFXYnY2Sz~m##9wPx{Uuf%+s=3BImg>}l6gYCa_BtYJmu^g^y--7-= z*zp^RK91If&L$63Rt4ahmN_g0KaN@gL{(y_hyChg5`BCBccTt500000NkvXXu0mjfrFU)y^^fTxZhbA;D7Hr(~x@mV=|=%}pTz9wtk71_FTH)>;r z*tG)C%CPQq`(at`{3cVA4@J*s4j*x!pDtgLR(KC>EOw0m*2U;Q zPdxXc`wef{JKj$>mjIj`NQx!hhKn2)lB`UC7+fC2TT_#XlM@Csm) z2*3sS5{zx*TVxurFj_AS+Jc%W`qJfLZ2%U>^(P;`FDITq8RY~kP)q=lLlOZI>oUFT zrn&Yn(q{=QLIVpVu<(U%=e=XHueLCLKlb#q(R0K)+@0jFEMAS~!?m58aI?XEVLc6f zjmfwG+s@ZUlgGWEfA}u8SWTKj;Ikm}E@RudIUc?>5fCG3fYt_iK6l~RiH~#c+?kyV z7rq>e1fc4A@X6-=(eIV;zFmM1dD{4dfB+<}Eyru^Exh;5XP-I&;5p1Yx*dhUv%TZ~ zu#Ef-1A_F*#y@?HaDRONR4NHBl8d&`@tFkf*%W{tMQ~r&IRj(rq>E7S0po6Y!rEQI zJ+;LFErfkm6ls~6pg4Ac=*xr#bXWdxALJ=~!wWQ!yYP(GCm<5;Lpb!~ZV;QzS$U)1 zN)TgazYGMrxz7utf+ZkpixuV&Kzl>dt^uO!i}|-kw=E=wU}1 z5OoW7di%U8KIBy6&3&OZh$~c@?Uvq4IUO*nnbCiZSNT3`O*5^BcNPw*3 zC#lBwwE{#xwa*A_KehCA?Ed3tdq>raox75Rtg-c5C=@zKwn&(k6V|F<>m}xZw79ymblrVp zG4v3vDxVP`uF*aALL>so1FyYw$bDb@;FBn@;^j)fTXg_SLLeQ%m|1zL9gBrY0-vRR&T)gsT~ z#0TFWSIW$vg-C!b<;oy-h6u(^n}g42p;6=_U-&oye(BsA!(WAl^*23^L$ch5k)=_Y zSrORYicoevY5l-eUpMpv-`@lWfwm?OR6Y;T?mntr2(aXVMpgr$s4yId{jx0SD^}3Q zj#G60Jjk5{%UGt!LPjxv9^?{Wm_*88l=JVJ{}34!Y5}C;s0EOUqw)g$3zpwB!CV)+ Qg#Z8m07*qoM6N<$fHO~=!Xh1=O(kAy?b|)HiEO=J5kFHX&P$C3a(fBNhRy?yl>r){kyI0=x!kKdZ3-+K+;>-&etwAXCWR(;2u zPtQ%7M-U>3!140xW7Q-C2;krWJ9q?M{rHKpnT+o})s0OW9qE3QO#%QSdr(J$j{q6G z3$EZ9M<;&_5pr7C=zX>-5}Z>2BL;~hvp4pJ`vO}H+Tamjk3KTFjnch4)Y$qq)E8<~ zK|ldKU%!8?Q@&L4y=L5C`erBzrMt80N8CoJ4I)?sBa<2uA`&BBLqfE#M?qu*L}EH= zMSuVq90EoTm|a++-JNYOKs=7;`hU3g-~k^2EPpwgNQ9e}cZLK2L<|B154FUKfG`>3 zIgkLjY)(!Q0186zAb}l4D?9?=?{@GQ{gJT(O^kI;Ca27EP=H+=F%Y!DVclHA(@Bzm zdO;I>3cyWE>ANriB07I3KbvOckqej*ehgbXfQX|ZZS-HmM*wR3`Nd*4kj#u3{qw?h z2?XCz7CaDe0aig&@ECmwTpu5$0N4#&D0LLk>J>SF zZFwBLtN76*eTJ_P0=Q^F67*!f{l!xO6yeJF{hFre63g$=0;dAd3or|r`nuQeV+`6P zVIsNmlhV&-6x$$x5r)*ObehSb04N~}uDQ>>LMVVqP)`5=se^>hKNC3qxEt&OM8TsC z2f%e){ec8@g0!szfKV3zc)qj!!49+5lwg=ePwyD{0M|i1tN?S3ve5^eb%1mMl)2mk z013_u;c5(HskO5xyD+n{s-dwI-6xPB->`Rr<-eQSsx4k5yoPhg)>RmuWx&ZYyLgWg^z7-$aU=*Mv z+Xb}2BcS(dZJU1`a=CzA;ho0?pn{tA{Q-^XDi zo;%m`6~!C_0Vw7e2tYB%Kmdw41_DsbF%W=aj)4Faa|{Ham}4LS#T?rbVB!2+v!B;&}Owp<aPtQ)PM+hQ?!12XPi%yFW5P-=8CV3FguRWpBkrC}Z`SoWsJk_0$(f(|wM6gZ)j2J>3nZ2^PvoA2C!8P~-n4^zO zZX$d78>*CF?dS_#i-JG|@O*v!M~M>ItaeSgLHcN@2-)vWI6vYhLTwOaK}IGuBt#@e zTth-MUyp*w1cbzNauopqBsma94mdG)fnILB@Co8^a=iD4yG|a^1mN(OqlrZLZ1tWJ z0e}$w0OS!ZkrE&*jPV>q0BklVrwD)u0(pqQj^ZkO0pRZ@d5r$hSdym3yp!qU>N!M! zSsXDyTH$?3y@scg6an>uOVAgL;Xm^1%& zAj$JoaFsk@Erf96$o5Eh$mC})T(Z6ydBRrtbt7JHG{`0R0^r7mhxC;o2%;Qj3$#T9 zC(9bOl4oUog)kXXUdbE<1R?--H99-3MwUmIy&rQwpU($;U3QJI9x!tNfF5BclTpVm zMS*n+up8Kr^&+CyE^+|V@|e7>`1!M1RgqC&b5HIpBLWZ!jHy?8hHsqA zXmcM#uUx&Xj*&OGomO|%1xz5+A%gc$5yu~QgMrkR-W#lVLUEmsd5$LOt(&*iIf$bZ z_~x>4?xeHy1^% zq?nMKpA<1Ef~^!TmLsrBjKLz{IG3ZIFgI5r5y~W3jM6?qhPY{ek1(c&?I&-J2ASZB w<%n;UWf(-P8>TrQM1i!#wztbijbJbQ3kcmg(c2q5i~s-t07*qoM6N<$f;-l1T>t<8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png new file mode 100644 index 0000000000000000000000000000000000000000..91b49aff4225c9bd6dcafcb1e927ac3f041601de GIT binary patch literal 1476 zcmV;#1v~nQP)AFkrgw1nyX?HTzptvRtE+p9 zXmYd!5KWGj0HVp!5V|KTRlVALf55#POcNS<%3 zEXv>B{R4sL7C(LvgJY)y*B0hKiUa-A^8NR73k?&ZCIQZz94mG8bO(q_(zyZS^SHOZ zx+Ip1Kb1(p)f+eE@7>$C8YV<+0S@%{1;_(iyLu%#9o@NY>KOOsITHz@01)EAy*uLg z=t$|+qmim zhKW2!Z~q>#IQLm}wZ$P*v}1w&gub^*xG z&CIJH>l2XznEF4610(_+10;rv^~p;L-`7IpOxker0B(Iw$|M9~u(Ri%@9-`I;`vW& z|2*T{3#X%SvD`g z2!KgZ+OP_M1|T{gJaNkDV@X&)N|>bK?o18EE4Bmf1!H_so5;o)J?RvzN|I{yk02Ab^f)R@Ns z4k8W^c^_~R01ZaNL0%FmRwhgYBqjqZ^~T_9E>B&}U0tQRsUfOQP*vwuJ%Ek!DyljX_%L7uvUsz6tS zO}sc#)4BjBkDMMr5F?QFc^b{fc5ZzVK}Udm^|>^ya2JKp&noYgaASG{kZ9?Nia@cUwc40 zPQzuAh%JC?t*?D%wQ?}JT^|1!>a;!&>m$;Wm9anqV6lWeAPuClKR}V!uGvJW41u{o z>I+f$sF6lmoVWmmwlPr{DUWzlPvrT=WF`4IaNK60_ z=U5s!t3)93z_CM{<*!W$pGb9!%;D>oD+ga6i>#t90r;%0V|^mv1?P_KQpcrT=fox^ zLRPE~Bu#d};V6TwXF6(;aTVJj;vL_$PuZ9)IXh?4j0>S3rm73KuW?iv}e e(puxI6@LJxX&M>yL9hz|00006#`0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png new file mode 100644 index 0000000000000000000000000000000000000000..22bb887022e0280383c8888742b019fb1b023965 GIT binary patch literal 1453 zcmV;e1ycHnP)2$lacbpt(Gn1JlbIv`_%e^y) zso)q0Kn2G@04g{J0#Ly*5P%AffdEu+3^S{pavYc1{bKwBx z1epY2;=`3P4W0NYcKpcj2$f4mi(O#u|Dv`KEcm0#up1x9} zIVH&5JNLA3Aq$ZxKo;^N=O)ay6oB_{-M&eWA3VfvFH{k{0!Z?w&rZ?j)wXqfZDWg8 zJ6&onuju{psWJTuL8K7ap1Xc6Xc1xpFnPcw58{ny&uOSsvOd#Td_~8P^}os$0f3MZ zf)l|KK$7>tN1n0y@rxEhhJ}mhyMq$J8v+1r^3CQ*dy%w+H*?jo@af-K0$q=tlu#E4@^i0=7l zh+IHOgj1-92_VUVFmk};>{V*5yfFmvdU|;KFAtqOU|}*TPpX}QK&qo|9MEaN-easxudWX;s8v)kV*VTpDGeHnU zJIp1}=Lk-gUFs*#_F|n73?r&#W`H~s=QRfU>j@6+y9hA{pj-`2jp>o)5$4*D*l#o% zvAQl-jW8c@a{yqGk3JJZN%V#QR|6la$`ReD$pPGw$K;Xm;VONO8huSx2^U&FU^PMj zM&``ne`!M{L1XJTuZ;`f2w%pJ38BbK+e^R&FI5O^hU$RIWSO46*rL_tCuY5mv6Dp- zN#1mc5wPB{@TgAvjhFx!{rmMpbYuP$J*BeA!mI&62)7Le;0}&)2$trQ z&|o=WvGrBEfF0n1h49@dLHq1mDr0ab7#d6>GQ?}9eMYMt_D0glCJ=WrV-{f z0L}}D{}5u{MXV11K(ahNPo0-_YARQd3IyH7d4gApkkkPJxp4qPx57$Px$&`Cr=R9J=WmCbI`KoG}&vtF<2A^{R=K+2)Y5l$Qt+z>Cqp-&H*DOJF~}A`?#v z1cBkU6P})&l=9i8AaDD`&={oX5sWc#aRCqRW5wXq<7-k? zV=W=NdAl4VHbiWQu^|$KMU*_am=G}miXlxB(hnnw39`v_Lx5|FT?7JJw6X*dfg}SU z9iH+@GmM1W0Vqgzh#LVI^bY<$dxdEjm3%H=9^D)Oz|rAhX>0~EOWp-y?KLnB zBce3fIALdiS#pt;r+6!$)px<^aLJz7`H8ldq>b-RY)I7X(!K(*D=)xpXmyPWxp-27 zsM-~aiqeE&(1*`w-2v(nR4EwrTgPYwxcYL&8@G6iUHhT7=F(~S;9&syZ`_I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..504c12ecac9e2ee52d7032aac8f874034d3ce34a GIT binary patch literal 419 zcmV;U0bKrxP)Px$T}ebiR9J=WmfuRlFcijrNwa~>8%0O)M(_!|6!-2v!oX+Hl{xf6FRWeD9xqy4 zXWKRXBMSC|kdU0_`|_QfP#7`dzeCk6++E*D9EFV=SVy9hBahqVvczW&eRO|y>9~D0 z;`p7dHq5*!iPkP)~OUh5P?(x1tM9~vtzJZFjMe-EV`S3L?C&5 zC?!iNuNVb*c@Ih{($_ci{OpT1t;u$y006XCe_0?W-}NFn>E<~b_&!Pa(M>=a1evvk zIVH8>wa{wPO@KAijMPQ|cqpV`hY~>LMoZdSm|F^R;yu!VP<=It2il-THT=2*KO>+;l{7|8E_}qnQtO#ga}hF_117QMk_Ghn zX+HsRutp8^=u~0wDlmy{JhiicXcb`Q^WLI53s?+g(5m`(Y{ZB^flm&dU2})@ZTSEI N002ovPDHLkV1l2Bxj6s; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json new file mode 100644 index 00000000000..b03441e364e --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By Peptide90 for Nuclear14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closed" + }, + { + "name": "frame" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb8f484ab900958cb2108157eb7eda929a24399 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}yFFbTLn2y} z6C_xbSvPFjbm(Ie^X30*)~w+H0iQ2rCv0+?|DUMYWtA{*+rj#c^Y;fFdGV|v%-o;n z^vhQaueYz?&~^DNV|_t{t2z6hj1K$BwH(7^r_B~1I$ri^> z9h#7o@TuNGhC!S6d5pzj3k5z0cIHP6tMAvdU1L0vaD{O(pF}CcU6}&6sGJ1ZfW6t) zkG0FTH5M~4Gc!A1y2>rlx1d_eV^Px$!%0LzR9J=Wl}m2aKoEw%>TcT-AcBHs5jMbz9jly!dvF3I4uHgxt8fqYEFj8k z0@5TBLCO$6x{HPFj3<7~!!u&R{8G7Ha(C6|a+ezpI_Q6w^ga0W@|BJWtXWPV;1P@! z9yoY=cGk-0hJt*Z9FJk3@VDf~VXuC18kx>Hg8%@halGV*KXW8#SvpYy0ThCk1q;>1 zK7InZ;-iEqzwtfAUI~zX|F&=*K0#u%8-;ps6J!D%26b;j?m zOH(#l*lmhfcW0Q2-&g>|IK&tf!TSP#@ssKSAlOM)O!1OWW>oF4>4 z>}~++Bub-6v<#zK5{dLS*X97pi|19)(&8d5eHGAlB2~eM^*eaW3hYj!0OI%Wmd2d} zTwGuCc{W=MVlM#Cj*jl`RUvapYfkpz{?H!00000 LNkvXXu0mjf%&_WD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png new file mode 100644 index 0000000000000000000000000000000000000000..c345cb331c01172975c2d6461b628249b6d4f9b1 GIT binary patch literal 408 zcmV;J0cZY+P)Px$Qb|NXR9J=WmQ72;KoEwX*^M6sg*JE*PoBK>fBAF#eM0Zj&?@v`+ib?eR!y5G zyGbJo=7nX$W_I?OcUTe_H0Zxe>RvqEKd9TRg9%)HialLj2#>Q_B{*r?^n7<4mAp>5 zduMABMv^dnTO5sP1OV7B4>qp7E54Kh1wYg;s`_CrN8q+#&mc`}oeBaJ3dQ`TvMyrE zQGnUaU_{W>3Ym;CUlE353Ih1kEP^%!n7vtdp}Kta4{1uV-gE=dZ0@Zs^E9#4NW^vn z$dhvbOztZ%fR@@R3VbG4*BUIY1+dq_E)K-xjhEQ(s!vqVfy5oyT0Xc3i0BqX9o7M; zTMK$ryaR32;x_!c13v@M;+6yf>`jVl5loa@TNyDRy*ZFLSG}@;jIU1vaM|ME%h#`Z zzXgeN!K$MHHd%(5j8BH@3^3K6te+qM9UC<0Pv`@NDqL)1)Qz410000dR3p6mc|AGYE{-tg8W|E8_i$Gw_-~0Fa0mC&ATM-%1lVhX-l+> zm0j@tqik5=F3Sh{%#ROPJ&@;H{o;AU{QYd#7<+ooFu!JqNw~sTQhvbNEUfKx&Ke#& ztyllqk1%eyRB(Fk>>lPv3?&8%d>33-3A?3n^jHDaDqm(acWDJ`-+XRfQqA#WRt0#Gm?DiT-g8s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..d4424fe40d13404a2d1c5b2dcc046e9dc0010d27 GIT binary patch literal 713 zcmV;)0yh1LP)Px%gGod|RCt{2+A(NaK^O<{zf$7x2qcIm4??yGMyOC+B&YH^Wb9@WQ#+Il8PbxW z6oNyCP7lPPTr*@S9nz4YTc!?0(L6Cj3B(WtySiwQBqR=+kn13kN+^`eLwoJ_1NoMB z$M-%yh5I}}0_R-ly59S6&V|fAe*>q?qC&9*7Bc_!yl_;m2U1rrmiBj6-Ho+SJ71fgfk}3!HbZFzLC( zm)(ZcUc)BU0TJeg$rBix7)5fK!Rr~ZJFkJE4v<;&FLi)a0rsr^AHBv&$ChMvH;P!FsytI0AS^Fh|YzFoDm^}5JCtcgeXSIiO`=)o0^C) zH}`_{Bbo7$Z?>=%)dHZ@VJXGE=@5y_{azPN8q zi}>P_&~;rnbX^xLX5jTp3sW;|SbwzxlP7u+0CqmT#hdk(Qr&VpHw1vQ`US=&MtiaC z^!4Tm4qev;(7pEVx~blI7yyEgD#{h$`7@Vb#sUD~^G6HGW!8)3QWlL?6jnahod~g5 z_u6}8eirAQtG*bSpGEoTdZ;fWV{5zZ__q5Mv= vYNBz{f!8zA7gfCnOb8)_5JCtcPx%qe(q(etH)7rkBGB{Xq zkb?LJ$P2-tTpb+T0)pN82N;sP@;Zp1AVLa-(hN;Xs-g}mcpbv~QiVdfgrtYh2f}fX z_qe+}`SE^pfCSFD&~@E=aL$FyIR68m%te)L2P~5X0I*CJm2Ic1lj@}hG8fg34zad+ z3?PfJzXE$V*yU;Uj#LG#tsWyfHjlxZ8lEMdgT-6jo>$LkG8Yvrzu4b1aMC!#>D4tx zLg)DOxhXYPze!aJ+|`C60hoD)aA=_0^XeJtSIx}D#l5Y79eY$*d>TWM0G>R4 zq;v&HDOi4C=HlLW|I}ny+1~-u{@egU2qAl0sc|gAvEWfvCmVMdL z?YLAb+;1rsgqbtEMRyX&D7gVuy9FSOlg1f}>o%%RT{@0a@-2{JLAa5enP(l1rDTwK zHR&$K(ig*lv(?dGb4qSN%oxYYM+UoGLh~Yxm@zIr zmXaHgP9|WNO8@}7TtYgT=<|#SA%qY@2q8oeXv8F)<-_>`~!H&IQYVtFIa}7Z>|`2BKs0*xxfyZ>)Iz_Bm%@d3hO{ zuIqwjvRHU$BRV#Z#kmbwd>YZnf>v*=h{d@L06=kbSIKH|4|EPi0&v?)U(CxBG+oyP z&_4D)cvHjOC#$+}mzj%;Z{L5x%rg|%ZJ2q617{1(i!|(VshtS1O#9e->cvx>UR`^w z>ZT^c;$h$iMndN}aJIbG%@CKCmY{LYMP=JT?dT9J-a_-|6~du`Tdk_+fC(Xl5JCtc bg#5*Coh}ZLx1}eY00000NkvXXu0mjfCqGr# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf5ea455534bcf508a005cc8f0f82377b48509a GIT binary patch literal 775 zcmV+i1Ni)jP)Px%!AV3xRCt{2+P_O1aTv$(ceECNMG}Z1fmW=cmmw6q7-=afDlHTz7q<=$CE&lH zgM*8IK$b#r=-$Q2r9uo5TN2ZP9Fi1EXp2f3F_0e$hfRkxLFrPyhQx#C1>p$XeR;kQ zPY&*r0|n7&wC44Co1bVjT2oo)Ht15hD892xcxncK@YD?Po!yoe)lNzc$Q~HblxSX#xU%H(qA}yJL{q*~d8Sy{)dRZImbA_{>GASY~tc6GMGwtLthTn#S%J zMAt4YJpoD$Ffw`GzIhLT$M=+C$-4Ido9cxNb0al?+)%1j|0e zwCZ6@>2bKz8k;{pbMfTa3&O#B%CWp98xZiji7d`HzuzQ~vE)x+VQ!?>h~(;_tVtsM zQ)w?snP8^{{BFqP0T-IHz-du^0xa18Ba;W9R4jAytNTW=yru5}t%&6-UhfYC7@Tl;R(sU&8<#^{(&c`ZveU_u`!ok{|bP9>Sp$2(k+5JCtc zgb+elj3qO{|FtkTQVaOq7@0g*kLw#HM#p?i=;PRymzQgMpTCg%cF5~F`#&cenLO_{ zzFV$Qjp!We@%hTqG^=Ydyv_mvzq^?y*oKFPYr)VY&mZNRFF;;Bxxs2pXe7r_&kpU5 z!RFC6;A!RwT~H4dw)Wl4w?9|cVw8$yj?Y{)7O|S#Q58L;;dK_Mm?nBiLwj(69@6Nk zW(kHSfxit1h9>E$X3;}h^W=(Y;&m3#LmIiGYDYJtVmn!|?ZgtC7Vk3DXJYK7IQ;SZ zT80>jM6TZh9(pb*mM(DEd#@c;|8x*S2qALYktYev(Wv+6~%NQRyZNav{d~=f{cujv<%Zs z?*+~a)mQ9VvMhFL!ts~?8;^aj5OO+P&1B-CIW_n8*-1fKb8W64xWXBgzwN_eO@;&f z%Omo)iR-TNEw^%P|I63?gG0gTQEEli&iw_EZw*VB!#_I~zfC_cf2*oOrfEfPhUOdSZU91CU2TM~@g6qkm)J}U-vMQG^VKaFdiF`I7j(Rt00 zI`Od2Wf6uA9sTvUe73(y|9oJjVvv~Sw9+e?fw^9L*8F^ze`DL)KLuS!PJj6K^Q(Sc u-Tyjfg{2`M-vrLR9HF8F0*mJTWHabYSr8~be-L#$n literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png new file mode 100644 index 0000000000000000000000000000000000000000..da0b0a35ae363c858922988a44644f879a389b3f GIT binary patch literal 504 zcmVPx$vPnciRCt{2+ObOlVHgJR$E>+PX=zAoIj1J6z^0mlh6cx=#i=23C`!trENCc# znuHJ<`U8Zfgy00P|DXoLHkATfJ>qSMyS%97Q<6`g-|}*B-|^jd?;YH82M{R{F=TyX zOLFHy>GoXOF`zO?#1P;T0l$fv#bxNc2tJiTmI=ALjiFv{pw_ez30JXq`mS^=Er}Q+ zQjo)~m^?kNYkeEA161@<2Pi!RABvBj?aGVYk;!PqG9i`;$s9o2t4~BkL_|cSoxXk< zvrKsMh`r>n@**hZ0o^tgGd$a&@ge17X&GZNlIvh3r{$`#19~WwRn{w?=7@-hh=_=Y zsI$J(V?%z{KL`A_vt{a;yF1ajlN`0y)^zD*((dbmJ7-Q@97>i6{VIH+hTI zMAWUNeAeC1{V*~)mPI@fMXhOjYCI7|;r_p;-@eoid^Z{LTl}-$eD{0000Px#c1c7*R9J;$U>F6XU=$2RpeD-mpPP;O zznUn|e`Gc}W--DT+-%Hb89)w@=I3O%_4*4V0|NsC3%Ufo0Smf-p1c@MEqw6mJ;SH( zzu|l)n%YJL7VQ!P47dX@Dx(Ll-Vdw;kZY<@Fd7O*!H56=iwhSxuEM~2 P00000NkvXXu0mjfA{{=M delta 327 zcmV-N0l5CW0pS9WBYy!XNkl$@dFd9z_wJ7wEX0ozRzDmS%ft&kGOO&o)6Vgl~3cXUT4z&b+v+y&8 zSJ1XHa2_d!9RCdY8mk+xz1nB+-AS{-MR(0Md6vga_b$6OOp6Sk>S`4(?r|uhi79R8vw31)lpHJ7 zr-c9Sa^iS%kn!-5()E4nKAIf?uNo&bw0sZ$azph@f%n|Y&0<$h$X|U@Zo>4s{fDr~ dexYksj9Om>zDE3OPX_ve!PC{xWt~$(699J&heQAX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png new file mode 100644 index 0000000000000000000000000000000000000000..02b39be4e5b9367fb3b04d795b96dee679affe43 GIT binary patch literal 605 zcmV-j0;2tiP)Px%7fD1xR9J=WR=-QbKp1@yr!H<5ON^YLG`QG79g65wR5}QPb#PJ#2f@j|!bx!G zpiT}}5IPhUC#7^y2VJB^!NYh|baUw%hkEIy`O!;BJM~SM`@Z|$yYJm4Q4kQ*sd>{Y z_Hc8n1g+N}biqgY6}txuj`@S#>!79D6953|sU@cXbWlKaIOb^k*5;u#K04lU3)cdUkMgTE9?{2L=k;_VNXcLVxX(9iz}5|YFN2i&`yUI$FK2;>>D0Wr zygiD1_T8G}&s}*DafodP{BMXK6abiLE_a($Q0yub*UneMY-ZPC57?gVE`PJ>?gUDdaleAf+xEqn6 zRh}DHpKC@N&CS#Px$2uVaiR9J;$U>F4h3>eV`oZZ9!)6&AdJ6EFEiNbMq5C4BoOq=1Gy*^DW=Q?xlsKWFDkMxq=b#tSh7#z(dQn>frN*gOIgNA?ghV8Sj;8o*^ZF#u}_-~-6f z^XfBpaabt9q6azDD0Tq0pvESS>^N+E7@$fN-~+G(iA$a;4#4F*VgS}CXxn^=F~tFU z%Et!8cyZ?xY~~>Y6orDZP5+HvT_wihWP@{J+6?a(*TL<@@ENU3LuAWG!6+C7qhJ(_ gf>AIE7#J8B0Cg~O@A8K(*8l(j07*qoM6N<$g6?XEMF0Q* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..a3db90816fc2cb1f1a85de2dc952a8ae476934f9 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCikt0(?ST1!J4o=WKL#4^MH>tMb(Y3Qwy4b^}PUl?3?({|5nv&HI<^2a0eO zctjR6Fz_7)VaDV6D^h@hGd*1#LoEE?PVf{uWWdAHtorx==`)YCx{ow+-+2)dlf3e= zs(bAN??Z|v`wtlH=HGZxh3EKMwS`K?$zp!9T93?NU7gwD`Ci0^iN)Ys)3t=2n>kE< zLZ>=(-h?IaNAD4}`4H*k`a<|SLwQ#EhyGbje4e$Oho{RqFIx9gOC)MRcFZ!)XG;th t-(oS2zGkqWNn{1`6$5-iT+`3}7mRKC{^vjYoQ=M5OP$@r{|7RBTUMRopjYLq2UO*CTKN!= z;w}mD3;quW3|{_>pMb)g1s;*b3=DjSL74G){)!Z!rOlo$jv*25Z>QXz)vUnN@_HTn zlfUv6>c%TsU5d8vP5k4-Jo!Yt&7M!wO&K{pEV6i~^-25`yKL{T+*^0#SH+9{-1bZV z>T!v0!U>_jLd1TaUN&F7C()kqQ=QE5cf#K{oro{8I&b{*L7(9p@dJ$&DIub%YVs`q zCix#RZeDc2Ak*N@dIk|il?%6+H17T3b`X42axaSE=&t{K4sPD%vjU!6XSl=cEzFa3 zBcAa=*xNG`Z@F-Pco5G}AtF?~#Oxx|mtWcpnm%f84bJ}&+%Er?O|QGnap?L6CW&vKr8X?sbjDyktCPI9vua!J zVOE1T_3_MEr*z8QKkanie{jPc*^||?{{51g5UurjXVAp=-rR?udu{z|&fuA9_d?@S w>%-Px%G)Y83RCt{2n6XL&K@f&##m0bzO$uK@IKdY%kRsI;DMH{xt3cY+9#{yM+Ez%V z7!ZpTsVoG2fq(&D!6J=?aF$~s8#kNXTug4=6aTNHavvV_>BLV;b@J|tXAUwHY zmx9BqqdCnY=~rt_r}_`~w}tY*sf+J+BDx6Nht-0&g|-}*bp=T7yjwI(mp@Zo>cG?DAXAB}iA-nvUj3`nH? zc;;bSyc8uO?Z;e-l4+)KomgBQiFPN-H0fKvRSCGf{XL$%6ZIa);xr6qp0&lh!>?F( zIG*aaDgpQIZ^bf6=FPv%4t+s6w#B(lbBm_^nANzPyG#Y}r7sUhKTtWg#aoqNZq3s$ zU^Oo1E>i)1)BlETGe1GiRv-A*SF42&*70v_0gF(})7D*LjLXs^%adA)*2TBJ+8!qF z=C~~VvOTD+U|sU||KkJ@0}?byGUMvzOygDYt>1ezAEq8xlfyJ#mAw7u(gGGCFC?yY zimER!gue8%{O6JYdA(hKRX?w{dsWu)Z)^djC=u!nQe^bdk48*s<9oi|bM*DH@U7n+ zj)i)I&+6gj?b&|_`h0!8EPm7f%*6JH`Sqf|>^@gww-eFjfiN2Kt-o`8&Igkhr~0Gv z9=%uSmiQw&vFj17P?tFP|e4W!shg8YL2g8_q-H?td1 zh_k>WvY3H^?=T269?xHq0uEak-;s18xLB1mj94;#x{{KJu+wJy^RWIYd?U-!A z_}gVk*!~yc4Y^nCH}Yvm-z;Q&eoRN+VUDYOmk~pE&xs=iJtl|Q9^4ANSiq%SG*=>g z0@Dti%?W{F3YP7q49)Wx!Ai;WnBuJm~CU(`d@F>?)uHM<@CxU22(ba zvcF+@a_=5zLiqw;|0%~du&?_#g&~f?>?d#5BnQC*wO6G6tm@%jvDLmN?Dv&M@xP2K aukl-|3mI-Ou)7EJ0E4HipUXO@geCyso`Gfn literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png new file mode 100644 index 0000000000000000000000000000000000000000..d7907e3a4191f98475d02833dac3bc1f23c070d7 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`c>;VwT-SM6Udwln_qPTLY|c2<2vS!P{c-a;*QC zd&AD^Gqx$G4k(7X*!*2uBw1`}pvSeuYu+plIYACHQHKY6R1eKOm1J{F#EHW}=HN1> z6}gOIeGEoihYakRm+}huBphYAupx+7^|_gR7GsfJjk9OtzKz|o4RfOZGAT?x%90ru zv}C7EkHPNfC#FB5pY0q9KzPgg&ebxsLQ E03g_ec>n+a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a6d5a5188ba9476f43f70b2bb1f7edc3633fc0 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3-p)I`?e@QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`B?5dxTn)4}x?1aM$_rBrRive)T8s@$jSPU2Zhx=#11XM@Aiv=M5WsM+ zd2b|8jI+QavY3H^?=T269?xHq0u+4c>EamT;r({%FXJN|C--0Ws~O7C)o_s_4A&6dbYZ70dtI@c<{HY78e-TaYQR_UUhPl z_BG~+BL|~qwm;R|Y?V5#@miGQ0_F%22081fnY$twqBt^Mn19pNQh9f2mCsQIzaEBL zK_%;$-K?2ba5h}|$M$9lV}U)>h2uNfKkzX;kNQ?9qHsIo{8n>@JS)bnbqopz-!M4b zXZU0(HFdc}L(rOXMA8U_0^fk|6&iroHbmLiIYs{HeD)@YG7R;_P`=8 Y_^4K2)9ZJZK+iIGy85}Sb4q9e04{fulmGw# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json new file mode 100644 index 00000000000..bedad018567 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 32 + }, + "states": [ + { + "name": "workers" + }, + { + "name": "bazaar_on" + }, + { + "name": "hotel" + }, + { + "name": "private" + }, + { + "name": "we_open_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png new file mode 100644 index 0000000000000000000000000000000000000000..2e18cb26129c607df809dd40a9ba0ab6d841421f GIT binary patch literal 493 zcmVPx$r%6OXRA_E^ooWjYWO zOs2D=$8%13(B177#mzdC>Fj79(gZxeyyEiWlj3TP`MN>!BTazG0H~N+03#F7Yu zK@=zOgHWmcAgr|uU1yW+@>Tcv)$$Jf76QKo;3w0ow4CAV`m1d6X&~&q-u=$=sTfOw z$7cR&e>ua~`HIOgl@N_pg4KWy1zEMp+T;KaVXc0Zt2c4v)v>SgvyJvCaO!V>Dsmhr j`y5sUz%UHM{6W3}$ww5&pPx%pGibPRA_u5@!i@rH-MU|{3fremdk{B5 zxVU#vmslJKgxbJ8f>q8Hx{)_JDR#80xQIS5){b_Eo!On8Spg#>9~xn*U~%(6HYU=S zUq7#nZ1`+4cyaSUSDO%bUrn_1XY(6a0A%6>Bk!%Bi2mGd@%(rT07$c3cr%yypJf2R zZC%E+z0+k~@-N?i;A#`%{+sA+htUoIfak|sBr<@nVgNuQ1585o;`y+ZFO1>$KxI%O zgSzdjn9?j4x{SyCujg8Brw`Ub05}@rH&)1r6ug;B{5waN6RBDkJEf1FQw*L3 zfND1+T3b(pZKPQ)N+}6D#VbyI^bF4Wi7r|O+nB>(JD@9W-zp!PK^#C!P`NrDW=^C? z>>!${t4q#RA7_y?%LOe#VrPDNYhv92-pr+P6<`voda{SDB(I1G0Q3VgkrG}JcUE|` z1kH=;xm;C!ZSRgjLqNY2>1amOhg+&Stl8JriQk6RGPx%9!W$&RA_cRP41A8~)pGVIJS%#qpsQ-Fqx^RrK#&ptC4jtW`(N4f-8 zm#5~c*#U#$D05%ifS1=doE(1`D`=aH--}uwZ36(HT&cqKeDu1V#M*G0sMkuEOjihl zK3vZSfS4`E0f@aOU&=-M08;bQKIJ9E&$+vAX}_DkMH=e05_;WER5%qU+A?CnqA%qV z_tWxIBl42F0V*0!6O-vGvQWJQiI;^Hk44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`1o3GfMVl~Ys<4Gq=O)ipFRDJ(2hR#i<%NQjAviH?qri;IhokB^9m;1v>= zRZtKU6LWWW7Z(>76%`c{7It-Ym5`8-l#~<^5fK&^77`ND)6dH zimwM@Cnp&G0A3UD&P^>E{e%l-F0+)*k+{HXB zQ=MY3r%rsnDnag7AB*?@0t-2R+tAo)UZN8|KfPnp`{_xckOklMI9FTt>)JljMTyL8 zdn<+J|199IT=xFO{ufLPZ|yUtpX7f1u+U}q(Y*N+W?bCtJUgYTAoAFQ@Q!U~f)2PR zcWCXXy%4b=X41FC93}2^Sx>2E+A|+~d-@pDJ_W62-8=i<>C9Lx{z8h+wnUfv!ZsVt z3&qzxuPn^{{hecr{=DBT96qzFzur~8u&?I5(2F1PtZeB88x3^MDF4&ZNuBce*p}tL zZx&5^{WWcKoYl0>sV(P=G9PL1Jkr>5$t=P#&Rk;i?tecX+^CoqkZ|*EZeyV8F7~K% zm$`XNx4o8MrPTS*Y**KTuZJsUyH;{8_7z_%(BXeCUC^ZWZ7Gw#V8z@6n`gHzuGACk z(6u_RVG;IQrlBYaLEj?t^)Uc>h@8CH-b`1$t zLod$@&k{B@^~aqFeZktS@{MT)lk4Z0NBV0XtQOa@JYdvUtiWo-E^@ZG(_zno;IM`F z-Uk@0YZ5u36<~5+mFZ(|IK%S=dI{{4iw`hWg5A*g^medZKG(k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`211o(uwCNPP1Fi4j$hyw)@D<36-)RhGJ1^@s5pTR+EYj6k>(=g_J1(Z0h%+&=h;rN$ z5%_uW!Ifpfew%hb;+|u|njcb-b$JGZaEQS{bF~|_6P4PU1qE`ry(}5Hob*)LciCA0 Pox|Yi>gTe~DWM4fiWyog literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json new file mode 100644 index 00000000000..5dc376d26e3 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By PatoGrone for . Screen by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "keyboard", + "directions": 4 + }, + { + "name": "screen", + "directions": 4, + "delays": [ + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "VDU", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png b/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..889dc80bab32d334fac722a10749421d5161d576 GIT binary patch literal 1305 zcmai!YfzF26ox+$P$6?|4J)sertXH6W@d`6g(gyIUZOP8CUf(arCn4|G-(pY4ZLi& z=wgkVrlYW4(h3bJS0&BLO0r}jB5gHAA=FQ~EVKJ#`?qK2yzh@Q=ggdE&K!F9!F}e4 z4F~`L%<&<(2!r<+GT#(#P!cUM#b8F65&QN4oMGF)008znt^ zOtgu7&vKt!C2kUUsZW{2Kz$v(?uwZ1LA#UNP+=#K#wgk5M`bVcqGOV?nGP;jt<9P& zEDd7~VJqnrZq^H*9(@u9ByRC&vi-g{^FFD z?(G17->EQwGo5obW6|vtr(G6vL^Xp3q%W4HekFM{ zyqcP2tcAsUo|%=rR=3G*;uPvX4^QxZ9{S!7G>tYM|EnIhCuezm23ltL6Q$oN`f!8(uuQjAss<7u8Si(Xxl7 znSfGg@-LD9(a-tlvH`|!Nf(|yO@g3fUzdmJu4|mDb^~Uas&` zdRl}_IIuIdVkWot^HkIYJ}+s*p-}UkPu%6_T5H%gDT~N0yabyLym>-xf>P-4lDM+t z!0jZKphd`GI@h28!3Z(qX?tW>;uL~DByo6yylI=ut?IsX0k##y^!Ei!`tl{wj@0sn zx1s6}*%8z3%%X8#ptdvTfyqNF;TSv60E00YCpK@Dt9$@ZZv549wuQMRv^2jy-##KU zOg9X^e0*ziACyxyc^?JJ8A`Pkz7nK9)zQ+%7kz0JiVxk)fE(*P*-onZ2_z79ZL+&8 zfE%ze*zI+?QT0t=)U?5?czfJwBfwC0e3W>}L()&CW8-F3lmlFnbW2u{uKBz-A)Sy{ z;VsxyHks{hk(C@>)O_0Lu$-S3*hHsb{3iHKOAB5+s4Te+CjHnbvJOW|v66n_C!e^Q zFG;M6V4a%U!9oKVBKF3WsFHMMUDD!%Bo;}TjiANU2yp0KF*aiyJFZ@F&9_+d&X_KXS>?Z!A=X=iG)U3!V=npzy?}W1 z`f%*!Ib=`gfISvo$@fG64z-+=;KGL_Iq4e-XgI3}*fHl!-O4ZD?)L}30t)m?&-h(Y zoU@Ua^EXm+sQGu_7c@JE01hZ)Nmcrc4;$LxD@VHHMjX zLpHMt^tLOIv*^CV7^Vi@_J=EgOOrr~T6`9|*?GNS?1H6q%bON~EV@)oTOJk>?nKom z&-+8#fotX{Zt!&L!<6V&_YhMs$D%+MGjx%PyYU~qU0r&kZmRfR>B0~P@?s_3D(vM{UEPw^D09pX^+2p|uJQ`06 z#sHvZX%pGwy-Q(urB1`A?a7Vy;6qqTUsu`yGPs&tT5ngTUi(Iu;7nc+`^Ev(%GBf# z5(1)Ht4I6j64BZ$Kpd1vh}T;69ryh`U1N(%9A#CfUFLDBNhM#?b8gvVg|UMf!zU_Bw6`41IPkEg;~do zbM)8%xLAgRzV?N*Sgy1#B5eR}P>%lNf4~A*01J?(o;3xQ5ibYG$N&HU07*qoM6N<$ Ef&ku=PXGV_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..107156f2872dd469fa9360b83ce46fe3517de564 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0t4( z#WAE}&fBSm{7nu#t%ixBJ-dJDM|#Nk#6--M_?vmkkDR(TUIF2-5=F_#y`519t_sF?&3k&3cky6Qh&1+FvslW)E#2whtNeFVAih)$?=Gz0QK-L-2)u4u<|+NNeiwJd2K_}M4?|}-O<}m5`nyaZrfp$ubaR=X-nP$& zPcDDv&bi_4RWpft?OS?!-*pY#>n;g>Xq~d?Y>h2v6Ug;K3`Hso*t`XjQ256Gia(&f z;TLnvj=iG)`2RBQ>$~#jiLXJ8Y1}UR1Hnt|6?9Sz_8eTNc~Aa9x5h&@dLv_o;T&Hzg_DeSVr(B0+_#HF=AG{3c5!F-5d|SE@GO`* zPkoB5L&)3yQUH?HTABPAzX}klz*3dv+%o}s{bAxhq~H7ycZT6y+S^OE<8hYW=_T%L7ofo*W+!?gdb?VM_I%8Vb|+Y4&F&raSP%yPSW z>ErYpl6Nofb(A#_65zcr@Mw4CgY7JHkG=hR{%gjMKC6Tp4m-QAjc>%S&DNP5VBW(z zCqAanPDW;GfBkdQ10D{te#OyGY*AfsKt_<^SqFoGJ4*wy;~dfxRp-WLMc!S*bYVC9 z@|g!u-YSYR-Jx6YZr`E!xn6?l!mC*ytYnJuT#z1IzF9H&ks?JGhL0e?-SW{+7G|`P0w#=5Sx)D{8GO3#(RMAA5i9<6i;k>_v=Q z0!+4OA4)CqIp4>$WZPEZy1R?t|G%cM?}P|kG_U<+T7K^@`=eK!k-$i2@O1TaS?83{ F1OUR==|lhk literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json new file mode 100644 index 00000000000..64c4a8da70f --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/be7a9f24f2bca68f07e4b0b086dc03a3eb9f971f/mojave/icons/structure/wall_decor.dmi. Wanted goose poster by maxxorion", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "clock", + "directions": 4 + }, + { + "name": "calendar" + }, + { + "name": "calendar_blank" + }, + { + "name": "notice_sign" + }, + { + "name": "danger_sign" + }, + { + "name": "wanted_poster" + }, + { + "name": "cross" + }, + { + "name": "exit", + "directions": 4 + }, + { + "name": "wallscreen", + "directions": 4 + }, + { + "name": "wanted_poster_goose" + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..2fca121f942c9a26d4a747db75c3ddf6c5c39471 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}&fBTBe1{Bp+$@9`2vO{r#!1BaxZSs&=!kr3{5#Bq^Wl^X-+g-_es zeSGx%ZdZjeJfCrCYt@8vSD$q}*0O|)a?_`ch-K1c9)U|$8$y9}PLelF{r5}E)tYkEom literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e18cc520dc22996b022d2cc256b5ea28cb1828df GIT binary patch literal 1312 zcmV+*1>gFKP)Px(+DSw~RCt{2n@wxmNF2r=8$k#-7(oMdDvb?h4+ifR_Gsq?=a4|Y!5#`Nlx06s zDGOcL?@;I-Hmq&=Sjg7kLowJRnjZv+XvAegwRHf}!6Wv}P z`P>HT^_s|!V-S1|IyyXX8DjvZ!U3RKDTDGk=U|NC?CcB9uWkSUFP=Zc%a=ckGPjQu<5S(-T^Y4GL2}FkOHZ^{pa1!*#?{Dz#{RiZ88vp=jG!}Wp$#G-ma})?UP>#7tG_s0XXN_ z-P;%G;CI9U1@Oc-YE=NhwS5cIv_xZ9Z75BQ`P>Gol`^)~O#r}YryGkPh&h0S1Awk; z&;ef{Y}*mzdl9znKvnZ%FQDrhFsaWpA>PLU5dab&OcUoedwsE$eoT~$ODnTe&|C_{i|5avs(I1aWxI43!CBt6 z9U=PS(u&3JfyhSe6f`%ON5PqgEK(*ef`im*ELMlK+pVi2MJeC+nJ3;f ztyzOa*o8^$3G>8LewGzWA{uf};GDxSIxtNukv-w)@W3@q3x?5|(M4KWvE-c$?e6X4 z-TM!4CT9ckA!(BFAIe(Lbxj=h{x&guiNjGk+w1oFK5r0lba>z zCprsw<7S?_lcJRrs8@$UPF9*L6xkIT1`UHnCh0gqy&72TYR%fV10a04Bk{VfC1Mjq z(2mbAI+3~n&(4ztfU~nNz5+^#t2B}ildh@^=pf+KTb@-Px3=P+C?6eq+~Ml=FPk$+w{+93A6-S0-H@> zczN;FGa_+5oy=$)e$vriM;go5`ko{HFCv4ku5Y#)5kPSy0xWkx6h4(EL(C%jy;lWF zBlvg@L~`FhlqLsB-_6FVqLKg-LSA%#es&;@$&aZlwl)DIw9O8ko;ZauJSL7E976$3 zBY^C|V?eieFQO}SDFcrPv7?bj1&|C#Z@-Xv4RpI}md7?GfUd9yY_GQ!W$bqUFiS{q zY}yTt2xKhyGgB1f;sEB2qKrBYs3gEZfu84(3g)kKviEI$1lWe-FkV8OTdt8Px$v`IukR9J=Wm9a|0P!xtgt-~Ec3#Ninu#^iG=_r`d-PK3%0elu8z(;U(cT{jJ zp+b-fV!)=5;&7LsLwnMsrs-9?i1{E(?#VfS&N+Vq6%`f#osF`?i}SM&R~Z1F1~2$w z!r^YMFjmew2Q2_1qqw}fF3k_HRd(nqLu3>H^|prau{2q|t%=P1SsO|P2$Nwzy{+-Q zZejAsD7IF1$bVU$uLOm_4ZEAZubu_sR)V9 zx?vTiBgk2B#*RZ;9GJ~}&UYNJQh*>cF2YqNCusCKTCV`HmMozkCTVA2zLZit9>)az z<$}L0K&*9ovJXt>FUux{g?Jp(*lv6o%Z~-P%6ze*A13L&#d%BNpdYO7Q@m&`&+Dei zU1gYLVx{$s?S@rxD*;8;%I-k63%aKny^d(^HL?8?TK$ZqNYD?KzFjIO($$6%~JiPc;(J$aLsQoB#j-07*qoM6N<$g45gNv;Y7A literal 0 HcmV?d00001 diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 87df8c1eec8..68b84c7fe2e 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -468,9 +468,6 @@ binds: - function: OpenDecalSpawnWindow type: State key: F8 -- function: OpenScoreboardWindow - type: State - key: F9 - function: OpenSandboxWindow type: State key: B From b4e9e44b0e2641fc5ea7936d9cdb5c156d3a2d39 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 22:46:23 +0000 Subject: [PATCH 02/10] Automatic Changelog Update (#1315) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 25ed44abaf0..efe7dccc2be 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8543,3 +8543,10 @@ Entries: id: 6569 time: '2024-12-10T19:13:47.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1331 +- author: VMSolidus + changes: + - type: Add + message: Added a large number of mapping assets from Nuclear14 + id: 6570 + time: '2024-12-11T22:45:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1315 From 0ed26cebf3e82c3aeb3d5d5096a3be6750cf1e77 Mon Sep 17 00:00:00 2001 From: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:52:53 -0400 Subject: [PATCH 03/10] Billions Must Flip (#1318) # Description Billions must flip. https://github.com/Goob-Station/Goob-Station/pull/828 https://github.com/Goob-Station/Goob-Station/pull/832 # Changelog :cl: - add: Spin, flip, and jump emotes have been added. --------- Signed-off-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> Co-authored-by: username <113782077+whateverusername0@users.noreply.github.com> Co-authored-by: router --- .../Emoting/AnimatedEmotesSystem.cs | 121 ++++++++++++++++++ .../Chat/Systems/ChatSystem.Emote.cs | 2 +- .../Emoting/AnimatedEmotesSystem.cs | 28 ++++ .../Chat/Prototypes/EmotePrototype.cs | 4 + .../Emoting/AnimatedEmotesComponent.cs | 28 ++++ Content.Shared/Emoting/EmoteSystem.cs | 2 +- .../Emoting/SharedAnimatedEmotesSystem.cs | 18 +++ Resources/Locale/en-US/emotes.ftl | 7 + Resources/Prototypes/Actions/emotes.yml | 23 ++++ Resources/Prototypes/Entities/Mobs/base.yml | 8 ++ 10 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 Content.Client/Emoting/AnimatedEmotesSystem.cs create mode 100644 Content.Server/Emoting/AnimatedEmotesSystem.cs create mode 100644 Content.Shared/Emoting/AnimatedEmotesComponent.cs create mode 100644 Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs create mode 100644 Resources/Locale/en-US/emotes.ftl create mode 100644 Resources/Prototypes/Actions/emotes.yml diff --git a/Content.Client/Emoting/AnimatedEmotesSystem.cs b/Content.Client/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..40766b4e13e --- /dev/null +++ b/Content.Client/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,121 @@ +using Robust.Client.Animations; +using Robust.Shared.Animations; +using Robust.Shared.GameStates; +using Robust.Client.GameObjects; +using Content.Shared.Emoting; +using System.Numerics; +using Robust.Shared.Prototypes; +using Content.Shared.Chat.Prototypes; + +namespace Content.Client.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + [Dependency] private readonly AnimationPlayerSystem _anim = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHandleState); + + SubscribeLocalEvent(OnFlip); + SubscribeLocalEvent(OnSpin); + SubscribeLocalEvent(OnJump); + } + + public void PlayEmote(EntityUid uid, Animation anim, string animationKey = "emoteAnimKeyId") + { + if (_anim.HasRunningAnimation(uid, animationKey)) + return; + + _anim.Play(uid, anim, animationKey); + } + + private void OnHandleState(EntityUid uid, AnimatedEmotesComponent component, ref ComponentHandleState args) + { + if (args.Current is not AnimatedEmotesComponentState state + || !_prot.TryIndex(state.Emote, out var emote)) + return; + + if (emote.Event != null) + RaiseLocalEvent(uid, emote.Event); + } + + private void OnFlip(Entity ent, ref AnimationFlipEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(500), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.25f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(360), 0.25f), + } + } + } + }; + PlayEmote(ent, a); + } + private void OnSpin(Entity ent, ref AnimationSpinEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(600), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(TransformComponent), + Property = nameof(TransformComponent.LocalRotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + } + } + } + }; + PlayEmote(ent, a, "emoteAnimSpin"); + } + private void OnJump(Entity ent, ref AnimationJumpEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(250), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Offset), + InterpolationMode = AnimationInterpolationMode.Cubic, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0f), + new AnimationTrackProperty.KeyFrame(new Vector2(0, .35f), 0.125f), + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0.125f), + } + } + } + }; + PlayEmote(ent, a); + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index 724cf8f2bb1..3ee94072ca2 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -176,7 +176,7 @@ private void TryEmoteChatInput(EntityUid uid, string textInput) private void InvokeEmoteEvent(EntityUid uid, EmotePrototype proto) { var ev = new EmoteEvent(proto); - RaiseLocalEvent(uid, ref ev); + RaiseLocalEvent(uid, ref ev, true); // goob edit } } diff --git a/Content.Server/Emoting/AnimatedEmotesSystem.cs b/Content.Server/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..cc4863d31f7 --- /dev/null +++ b/Content.Server/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,28 @@ +using Robust.Shared.GameStates; +using Content.Server.Chat.Systems; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Emoting; +using Robust.Shared.Prototypes; + +namespace Content.Server.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmote); + } + + private void OnEmote(EntityUid uid, AnimatedEmotesComponent component, ref EmoteEvent args) + { + PlayEmoteAnimation(uid, component, args.Emote.ID); + } + + public void PlayEmoteAnimation(EntityUid uid, AnimatedEmotesComponent component, ProtoId prot) + { + component.Emote = prot; + Dirty(uid, component); + } +} diff --git a/Content.Shared/Chat/Prototypes/EmotePrototype.cs b/Content.Shared/Chat/Prototypes/EmotePrototype.cs index 7ee958ee6a7..34d54bc3600 100644 --- a/Content.Shared/Chat/Prototypes/EmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmotePrototype.cs @@ -68,6 +68,10 @@ public sealed partial class EmotePrototype : IPrototype /// [DataField] public HashSet ChatTriggers = new(); + + // goob edit - animations + [DataField] + public object? Event = null; } ///

diff --git a/Content.Shared/Emoting/AnimatedEmotesComponent.cs b/Content.Shared/Emoting/AnimatedEmotesComponent.cs new file mode 100644 index 00000000000..fc8121bbe5a --- /dev/null +++ b/Content.Shared/Emoting/AnimatedEmotesComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Emoting; + +// use as a template +//[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationNameEmoteEvent : EntityEventArgs { } + +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationFlipEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationSpinEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationJumpEmoteEvent : EntityEventArgs { } + +[RegisterComponent, NetworkedComponent] public sealed partial class AnimatedEmotesComponent : Component +{ + [DataField] public ProtoId? Emote; +} + +[Serializable, NetSerializable] public sealed partial class AnimatedEmotesComponentState : ComponentState +{ + public ProtoId? Emote; + + public AnimatedEmotesComponentState(ProtoId? emote) + { + Emote = emote; + } +} diff --git a/Content.Shared/Emoting/EmoteSystem.cs b/Content.Shared/Emoting/EmoteSystem.cs index 1e06d7e982b..fea322e950c 100644 --- a/Content.Shared/Emoting/EmoteSystem.cs +++ b/Content.Shared/Emoting/EmoteSystem.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.Emoting; +namespace Content.Shared.Emoting; public sealed class EmoteSystem : EntitySystem { diff --git a/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs new file mode 100644 index 00000000000..b19e8c26a1e --- /dev/null +++ b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Emoting; + +public abstract class SharedAnimatedEmotesSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetState); + } + + private void OnGetState(Entity ent, ref ComponentGetState args) + { + args.State = new AnimatedEmotesComponentState(ent.Comp.Emote); + } +} diff --git a/Resources/Locale/en-US/emotes.ftl b/Resources/Locale/en-US/emotes.ftl new file mode 100644 index 00000000000..8efe738c94a --- /dev/null +++ b/Resources/Locale/en-US/emotes.ftl @@ -0,0 +1,7 @@ +chat-emote-name-flip = Do a flip +chat-emote-name-spin = Spin +chat-emote-name-jump = Jump + +chat-emote-msg-flip = does a flip! +chat-emote-msg-spin = spins! +chat-emote-msg-jump = jumps! \ No newline at end of file diff --git a/Resources/Prototypes/Actions/emotes.yml b/Resources/Prototypes/Actions/emotes.yml new file mode 100644 index 00000000000..6f34a4dc94d --- /dev/null +++ b/Resources/Prototypes/Actions/emotes.yml @@ -0,0 +1,23 @@ +- type: emote + id: Flip + name: chat-emote-name-flip + chatMessages: ["chat-emote-msg-flip"] + chatTriggers: + - does a flip + event: !type:AnimationFlipEmoteEvent + +- type: emote + id: Spin + name: chat-emote-name-spin + chatMessages: ["chat-emote-msg-spin"] + chatTriggers: + - spins + event: !type:AnimationSpinEmoteEvent + +- type: emote + id: Jump + name: chat-emote-name-jump + chatMessages: ["chat-emote-msg-jump"] + chatTriggers: + - jumps + event: !type:AnimationJumpEmoteEvent diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index 5ab790feeef..da413c339d8 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -46,6 +46,14 @@ - type: LanguageSpeaker # Einstein Engines. This component is required to support speech, although it does not define known languages. - type: RequireProjectileTarget active: False + - type: AnimatedEmotes + +- type: entity + save: false + id: MobPolymorphable + abstract: true + components: + - type: Polymorphable - type: OwnInteractionVerbs allowedVerbs: [] # TODO: define something here, or don't. From 39d250fb74e5da7d87fae08c662cd88f914d2df6 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 22:53:19 +0000 Subject: [PATCH 04/10] Automatic Changelog Update (#1318) --- Resources/Changelog/Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index efe7dccc2be..4c89d1dd134 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8550,3 +8550,10 @@ Entries: id: 6570 time: '2024-12-11T22:45:57.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1315 +- author: sleepyyapril + changes: + - type: Add + message: Spin, flip, and jump emotes have been added. + id: 6571 + time: '2024-12-11T22:52:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1318 From 946b7664763b8b823215a710743d74b4b0dd6a79 Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 12 Dec 2024 07:12:43 +0800 Subject: [PATCH 05/10] Re-Enable Clown/Mime Hardsuit and Clown Snoring (#1324) # Description Reverses one of the countless content removals from the old codebase EE was based on by adding back the Clown hardsuit and Mime hardsuit as craftable items. Also re-enables the unique clown snoring sound. ## Media **Hardsuits (renamed to Vacsuit)**
**Honk Mimimimi** https://github.com/user-attachments/assets/2d8af9a6-d17d-4a94-9f59-7b3aafd987a2 ## Changelog :cl: Skubman - fix: Fixed an issue where players could not craft clown hardsuits and mime hardsuits on the crafting menu. - fix: Fixed an issue where clowns did not have their signature silly snore sound when sleeping. --------- Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> --- .../Clothing/OuterClothing/hardsuits.yml | 12 +-- .../Graphs/clothing/mime_hardsuit.yml | 86 +++++++++---------- .../Recipes/Construction/clothing.yml | 40 ++++----- .../Prototypes/Roles/Jobs/Civilian/clown.yml | 8 +- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index d1976329900..a9bb8f1dc77 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -1043,9 +1043,9 @@ walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - #- type: Construction # DeltaV - Prevent clowns from making the hardsuit - # graph: ClownHardsuit - # node: clownHardsuit + - type: Construction + graph: ClownHardsuit + node: clownHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitClown @@ -1060,9 +1060,9 @@ sprite: Clothing/OuterClothing/Hardsuits/mime.rsi - type: Clothing sprite: Clothing/OuterClothing/Hardsuits/mime.rsi -# - type: Construction # DeltaV - Nuh uh -# graph: MimeHardsuit -# node: mimeHardsuit + - type: Construction + graph: MimeHardsuit + node: mimeHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitMime diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml index 4d9c55fbc63..a72a5ccc8c8 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml @@ -1,43 +1,43 @@ -#- type: constructionGraph # DeltaV - Nuh uh -# id: MimeHardsuit -# start: start -# graph: -# - node: start -# edges: -# - to: mimeHardsuit -# steps: -# - material: Cloth -# amount: 5 -# doAfter: 1 -# - tag: SuitEVA -# name: An EVA suit -# icon: -# sprite: Clothing/OuterClothing/Suits/eva.rsi -# state: icon -# doAfter: 1 -# - tag: HelmetEVA -# name: An EVA helmet -# icon: -# sprite: Clothing/Head/Helmets/eva.rsi -# state: icon -# doAfter: 1 -# - tag: CrayonRed -# name: red crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: red -# doAfter: 1 -# - tag: CrayonBlack -# name: black crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: black -# doAfter: 1 -# - tag: MimeBelt -# name: suspenders -# icon: -# sprite: Clothing/Belt/suspenders.rsi -# state: icon -# doAfter: 1 -# - node: mimeHardsuit -# entity: ClothingOuterHardsuitMime +- type: constructionGraph + id: MimeHardsuit + start: start + graph: + - node: start + edges: + - to: mimeHardsuit + steps: + - material: Cloth + amount: 5 + doAfter: 1 + - tag: SuitEVA + name: An EVA suit + icon: + sprite: Clothing/OuterClothing/Suits/eva.rsi + state: icon + doAfter: 1 + - tag: HelmetEVA + name: An EVA helmet + icon: + sprite: Clothing/Head/Helmets/eva.rsi + state: icon + doAfter: 1 + - tag: CrayonRed + name: red crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: red + doAfter: 1 + - tag: CrayonBlack + name: black crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: black + doAfter: 1 + - tag: MimeBelt + name: suspenders + icon: + sprite: Clothing/Belt/suspenders.rsi + state: icon + doAfter: 1 + - node: mimeHardsuit + entity: ClothingOuterHardsuitMime diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index ba0c0d6c59b..3036463fb03 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -1,24 +1,24 @@ -# - type: construction # DeltaV - Prevent clowns from making the hardsuit -# name: clown hardsuit -# id: ClownHardsuit -# graph: ClownHardsuit -# startNode: start -# targetNode: clownHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a clown. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } -# objectType: Item +- type: construction + name: clown vacsuit + id: ClownHardsuit + graph: ClownHardsuit + startNode: start + targetNode: clownHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a clown. + icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } + objectType: Item -#- type: construction # DeltaV - No mimes either -# name: mime hardsuit -# id: MimeHardsuit -# graph: MimeHardsuit -# startNode: start -# targetNode: mimeHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a mime. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } -# objectType: Item +- type: construction + name: mime vacsuit + id: MimeHardsuit + graph: MimeHardsuit + startNode: start + targetNode: mimeHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a mime. + icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } + objectType: Item - type: construction name: bone armor diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index 141f4d39b76..22b8cfd48ac 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -23,10 +23,10 @@ Piercing: 4 groups: Burn: 3 -# DeltaV - Commenting out the clown snore sound because I am not fond of it (it makes me itchy and feral). By "I", I mean Leonardo_DaBepis. -# - type: SleepEmitSound -# snore: /Audio/Voice/Misc/silly_snore.ogg -# interval: 10 + - type: SleepEmitSound + snore: /Audio/Voice/Misc/silly_snore.ogg + interval: 10 + - type: Snoring # Necessary so SleepEmitSound sound effects play - !type:AddImplantSpecial implants: [ SadTromboneImplant ] From 48d63bacf6bd665c8ff98e33d5da3a0e1e4ffb52 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 23:13:10 +0000 Subject: [PATCH 06/10] Automatic Changelog Update (#1324) --- Resources/Changelog/Changelog.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4c89d1dd134..81d1ee417a9 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8557,3 +8557,16 @@ Entries: id: 6571 time: '2024-12-11T22:52:53.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1318 +- author: Skubman + changes: + - type: Fix + message: >- + Fixed an issue where players could not craft clown hardsuits and mime + hardsuits on the crafting menu. + - type: Fix + message: >- + Fixed an issue where clowns did not have their signature silly snore + sound when sleeping. + id: 6572 + time: '2024-12-11T23:12:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1324 From 975c673d41f7379975e3d9bed07d29a33371b39a Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Thu, 12 Dec 2024 06:19:30 +0700 Subject: [PATCH 07/10] Blood Cult DLC 1: Make It an Actually Playable Game (Mode) (#1276) # Description You don't actually have to pay for it, y'know? --- # TODO - [x] Fix bugs from discord thread. ---

Media

![Example Media Embed](https://example.com/thisimageisntreal.png)

--- # Changelog :cl: - add: In-game guide book to kickstart your sinister activities. - add: Constructs now have abilities. - add: Rending rune and apocalypse rune now should only be placed in the specific spots on maps. Needs to be mapped. - add: Veil Shifter now displays how much charges it has when examining. - add: Cult runes now have descriptions. Also stating how much invokers required for each rune. - add: Blood rites can now be dropped&deleted. - add: Blood rites now suck... blood in 0.5 tiles radius. - remove: Non-cultists can no longer examine runes. - fix: Fixed Cult Objective Target selection. You can (and should) sacrifice your own people now. - fix: Non cultists can no longer use veil shifter. - fix: Teleport spell is no more a cheap rip-off and now actually teleports. - fix: Timed Factories can't no more produce infinite number of entities. - fix: Offering rune should now properly convert someone. - fix: Sacrificing body with mind now properly transfers their mind to soul shard. - fix: Shadow Shackles now cuffs the target instead of the caster (lmao). --------- Signed-off-by: Remuchi Signed-off-by: Remuchi <72476615+Remuchi@users.noreply.github.com> Co-authored-by: Raphael Bertoche Co-authored-by: VMSolidus --- .../ListViewSelector/ListViewSelectorBUI.cs | 2 +- .../BloodCult/PhaseShift/PhaseShiftSystem.cs | 5 + .../BloodCult/Runes/UI/RuneDrawerBUI.cs | 61 +++-- .../BloodRites/BloodRitesAuraComponent.cs | 3 + .../BloodCult/BloodRites/BloodRitesSystem.cs | 58 ++++- .../BloodCult/ConstructActionsSystem.cs | 67 ++++++ .../BloodCult/Constructs/ConstructSystem.cs | 31 ++- .../Constructs/PhaseShift/PhaseShiftSystem.cs | 34 +++ .../Constructs/SoulShard/SoulShardSystem.cs | 14 +- .../Gamerule/BloodCultRuleComponent.cs | 13 ++ .../BloodCult/Gamerule/BloodCultRuleSystem.cs | 220 +++++++++++++----- .../Items/VeilShifter/VeilShifterSystem.cs | 12 +- .../Objectives/KillTargetCultComponent.cs | 2 +- .../Objectives/KillTargetCultSystem.cs | 26 ++- .../RendingRunePlacementMarkerComponent.cs | 11 + .../Apocalypse/CultRuneApocalypseSystem.cs | 7 +- .../BloodCult/Runes/CultRuneBaseComponent.cs | 12 +- .../Runes/CultRuneBaseSystem.Helpers.cs | 6 +- .../BloodCult/Runes/CultRuneBaseSystem.cs | 101 +++++--- .../Offering/CultRuneOfferingComponent.cs | 9 +- .../Runes/Offering/CultRuneOfferingSystem.cs | 77 +++--- .../Runes/Rending/CultRuneRendingSystem.cs | 22 +- .../BloodCult/Spells/BloodCultSpellsSystem.cs | 16 +- .../Spells/BloodCultTeleportSpellSystem.cs | 25 +- .../TimedFactory/TimedFactorySystem.cs | 6 +- .../ListViewSelector/ListViewSelectorEntry.cs | 4 +- .../Magic/Events/ProjectileSpellEvent.cs | 3 + Content.Shared/Magic/SharedMagicSystem.cs | 2 +- .../PhaseShift/PhaseShiftedComponent.cs | 39 ++++ .../PhaseShift/SharedPhaseShiftSystem.cs | 95 ++++++++ .../BloodCult/Items/CultItemSystem.cs | 11 + .../BloodCult/Runes/RuneDrawerComponent.cs | 10 +- .../BloodCult/Runes/RuneSelectorPrototype.cs | 19 +- .../WhiteDream/BloodCult/Spells/Events.cs | 26 +++ .../WhiteDream/BloodCult/resonator_blast.ogg | Bin 0 -> 20713 bytes Resources/Locale/en-US/guidebook/guides.ftl | 1 + Resources/Locale/en-US/white-dream/alerts.ftl | 7 +- .../en-US/white-dream/cult/gamerule.ftl | 2 + .../en-US/white-dream/cult/items/general.ftl | 5 + .../Locale/en-US/white-dream/cult/runes.ftl | 5 +- .../Locale/en-US/white-dream/cult/spells.ftl | 2 +- .../Entities/Effects/emp_effects.yml | 32 +-- Resources/Prototypes/Guidebook/antagonist.yml | 6 + .../WhiteDream/Entities/Actions/cultists.yml | 187 ++++++++++++++- .../Entities/Objects/Cult/constructs.yml | 24 +- .../Entities/Objects/Cult/souls_shards.yml | 18 ++ .../Entities/Objects/Runes/cult.yml | 13 ++ .../Objects/Structures/Cult/barrier.yml | 17 +- .../Entities/Objects/Weapons/Melee/cult.yml | 5 +- .../Objects/Weapons/Projectiles/cult.yml | 20 ++ .../WhiteDream/Entities/markers.yml | 13 ++ .../{runeSelectors.yml => rune_selectors.yml} | 4 + Resources/Prototypes/status_effects.yml | 3 + .../Guidebook/Antagonist/BloodCult.xml | 184 +++++++++++++++ .../projectiles2.rsi/gauntlet_echo.png | Bin 0 -> 1852 bytes .../Projectiles/projectiles2.rsi/meta.json | 18 +- .../BloodCult/actions.rsi/gauntlet_echo.png | Bin 0 -> 974 bytes .../BloodCult/actions.rsi/meta.json | 3 + 58 files changed, 1326 insertions(+), 292 deletions(-) create mode 100644 Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs create mode 100644 Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs create mode 100644 Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs create mode 100644 Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg create mode 100644 Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml create mode 100644 Resources/Prototypes/WhiteDream/Entities/markers.yml rename Resources/Prototypes/WhiteDream/{runeSelectors.yml => rune_selectors.yml} (88%) create mode 100644 Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml create mode 100644 Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png create mode 100644 Resources/Textures/WhiteDream/BloodCult/actions.rsi/gauntlet_echo.png diff --git a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs index f02bab512e8..dd1f2299427 100644 --- a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs +++ b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs @@ -84,7 +84,7 @@ private void PopulateWindow(List items) { var itemName = item.Name; var itemDesc = item.Description; - if (_prototypeManager.TryIndex(item.Id, out var itemPrototype)) + if (_prototypeManager.TryIndex(item.Id, out var itemPrototype, false)) { itemName = itemPrototype.Name; itemDesc = itemPrototype.Description; diff --git a/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..881d8cc023a --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +namespace Content.Client.WhiteDream.BloodCult.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem; diff --git a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs index ed0f27bc5da..c3476c41d22 100644 --- a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs +++ b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Numerics; +using System.Numerics; using Content.Client.UserInterface.Controls; using Content.Shared.WhiteDream.BloodCult.Runes; using JetBrains.Annotations; @@ -23,17 +22,22 @@ public sealed class RuneDrawerBUI : BoundUserInterface [Dependency] private readonly IInputManager _inputManager = default!; private readonly SpriteSystem _spriteSystem; - - private RadialMenu? _menu; + private readonly RadialMenu _menu; public RuneDrawerBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _spriteSystem = _entManager.System(); + _menu = new() + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; } protected override void Open() { - _menu = FormMenu(); _menu.OnClose += Close; _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); } @@ -41,53 +45,49 @@ protected override void Open() protected override void Dispose(bool disposing) { base.Dispose(disposing); - if (disposing) - _menu?.Dispose(); + _menu.Close(); } - private RadialMenu FormMenu() + protected override void UpdateState(BoundUserInterfaceState state) { - var menu = new RadialMenu - { - HorizontalExpand = true, - VerticalExpand = true, - BackButtonStyleClass = "RadialMenuBackButton", - CloseButtonStyleClass = "RadialMenuCloseButton" - }; - - if (!_entManager.HasComponent(Owner)) - return menu; + if (state is RuneDrawerMenuState runeDrawerState) + FillMenu(runeDrawerState.AvailalbeRunes); + } - var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + private void FillMenu(List>? runes = null) + { + if (runes is null) + return; - var mainContainer = new RadialContainer + var container = new RadialContainer { - Radius = 36f / (runeSelectorArray.Length == 1 - ? 1 - : MathF.Sin(MathF.PI / runeSelectorArray.Length)) + Radius = 48f + 24f * MathF.Log(runes.Count) }; - foreach (var runeSelector in runeSelectorArray) + _menu.AddChild(container); + + foreach (var runeSelector in runes) { - if (!_protoManager.TryIndex(runeSelector.Prototype, out var proto)) + if (!_protoManager.TryIndex(runeSelector, out var runeSelectorProto) || + !_protoManager.TryIndex(runeSelectorProto.Prototype, out var runeProto)) continue; var itemSize = new Vector2(64f, 64f); var button = new RadialMenuTextureButton { - ToolTip = Loc.GetString(proto.Name), + ToolTip = Loc.GetString(runeProto.Name), StyleClasses = { "RadialMenuButton" }, SetSize = itemSize }; - var runeIcon = _spriteSystem.Frame0(proto); + var runeIcon = _spriteSystem.Frame0(runeProto); var runeScale = itemSize / runeIcon.Size; var texture = new TextureRect { VerticalAlignment = Control.VAlignment.Center, HorizontalAlignment = Control.HAlignment.Center, - Texture = _spriteSystem.Frame0(proto), + Texture = _spriteSystem.Frame0(runeProto), TextureScale = runeScale }; @@ -99,10 +99,7 @@ private RadialMenu FormMenu() Close(); }; - mainContainer.AddChild(button); + container.AddChild(button); } - - menu.AddChild(mainContainer); - return menu; } } diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs index 09e92b31c5a..081e0e04c6e 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs @@ -51,6 +51,9 @@ public sealed partial class BloodRitesAuraComponent : Component [DataField] public FixedPoint2 TotalHealing = 20; + [DataField] + public float PuddleConsumeRadius = 0.5f; + [DataField] public SoundSpecifier BloodRitesAudio = new SoundPathSpecifier( new ResPath("/Audio/WhiteDream/BloodCult/rites.ogg"), diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs index 76adc9bde89..63b1c08aaca 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs @@ -10,7 +10,9 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.DoAfter; using Content.Shared.Examine; +using Content.Shared.Fluids.Components; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.UserInterface; @@ -34,6 +36,7 @@ public sealed class BloodRitesSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; @@ -52,6 +55,8 @@ public override void Initialize() SubscribeLocalEvent(BeforeUiOpen); SubscribeLocalEvent(OnRitesMessage); + + SubscribeLocalEvent(OnDropped); } private void OnExamining(Entity rites, ref ExaminedEvent args) => @@ -83,19 +88,16 @@ private void OnAfterInteract(Entity rites, ref AfterInt return; } - if (!TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) // please send help - return; - - foreach (var (_, solution) in _solutionContainer.EnumerateSolutions((args.Target.Value, solutionContainer))) + if (HasComp(args.Target)) { - // I don't think something will ever have more than 1000 blood units in it's solution... - rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); - _solutionContainer.UpdateChemicals(solution); - break; + ConsumePuddles(args.Target.Value, rites); + args.Handled = true; + } + else if (TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) + { + ConsumeBloodFromSolution((args.Target.Value, solutionContainer), rites); + args.Handled = true; } - - _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); - args.Handled = true; } private void OnDoAfter(Entity rites, ref BloodRitesExtractDoAfterEvent args) @@ -154,6 +156,8 @@ private void OnRitesMessage(Entity rites, ref BloodRite _handsSystem.TryPickup(args.Actor, ent); } + private void OnDropped(Entity rites, ref DroppedEvent args) => QueueDel(rites); + private bool Heal(Entity rites, EntityUid user, Entity target) { if (target.Comp.TotalDamage == 0) @@ -234,4 +238,36 @@ Entity target rites.Comp.StoredBlood -= bloodCost; return true; } + + private void ConsumePuddles(EntityUid origin, Entity rites) + { + var coords = Transform(origin).Coordinates; + + var lookup = _lookup.GetEntitiesInRange( + coords, + rites.Comp.PuddleConsumeRadius, + LookupFlags.Uncontained); + + foreach (var puddle in lookup) + { + if (!TryComp(puddle, out SolutionContainerManagerComponent? solutionContainer)) + continue; + ConsumeBloodFromSolution((puddle, solutionContainer), rites); + } + + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + } + + private void ConsumeBloodFromSolution( + Entity ent, + Entity rites + ) + { + foreach (var (_, solution) in _solutionContainer.EnumerateSolutions(ent)) + { + rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); + _solutionContainer.UpdateChemicals(solution); + break; + } + } } diff --git a/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs new file mode 100644 index 00000000000..3d5e4ae44cb --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs @@ -0,0 +1,67 @@ +using Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; +using Content.Shared.StatusEffect; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using PhaseShiftedComponent = Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift.PhaseShiftedComponent; + +namespace Content.Server.WhiteDream.BloodCult; + +public sealed class ConstructActionsSystem : EntitySystem +{ + [Dependency] private readonly ITileDefinitionManager _tileDef = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + private const string CultTileSpawnEffect = "CultTileSpawnEffect"; + + public override void Initialize() + { + SubscribeLocalEvent(OnPlaceTileEntityEvent); + SubscribeLocalEvent(OnPhaseShift); + } + + private void OnPlaceTileEntityEvent(PlaceTileEntityEvent args) + { + if (args.Handled) + return; + + if (args.Entity is { } entProtoId) + Spawn(entProtoId, args.Target); + + if (args.TileId is { } tileId) + { + if (_transform.GetGrid(args.Target) is not { } grid || !TryComp(grid, out MapGridComponent? mapGrid)) + return; + + var tileDef = _tileDef[tileId]; + var tile = new Tile(tileDef.TileId); + + _mapSystem.SetTile(grid, mapGrid, args.Target, tile); + Spawn(CultTileSpawnEffect, args.Target); + } + + if (args.Audio is { } audio) + _audio.PlayPvs(audio, args.Target); + + args.Handled = true; + } + + private void OnPhaseShift(PhaseShiftEvent args) + { + if (args.Handled) + return; + + if (_statusEffects.TryAddStatusEffect( + args.Performer, + args.StatusEffectId, + args.Duration, + false)) + args.Handled = true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs index fbb800eb0ba..c07f56a585b 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs @@ -1,4 +1,5 @@ -using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Server.Actions; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.WhiteDream.BloodCult; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Server.GameObjects; @@ -7,13 +8,14 @@ namespace Content.Server.WhiteDream.BloodCult.Constructs; public sealed class ConstructSystem : EntitySystem { + [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnComponentShutdown); } @@ -37,23 +39,28 @@ public override void Update(float frameTime) } } - private void OnComponentStartup(Entity ent, ref ComponentStartup args) + private void OnMapInit(Entity construct, ref MapInitEvent args) { - _appearanceSystem.SetData(ent, ConstructVisualsState.Transforming, true); - ent.Comp.Transforming = true; - var cultistRule = EntityManager.EntityQueryEnumerator(); - while (cultistRule.MoveNext(out _, out var rule)) + foreach (var actionId in construct.Comp.Actions) { - rule.Constructs.Add(ent); + var action = _actions.AddAction(construct, actionId); + construct.Comp.ActionEntities.Add(action); } + + _appearanceSystem.SetData(construct, ConstructVisualsState.Transforming, true); + construct.Comp.Transforming = true; + var cultistRule = EntityManager.EntityQueryEnumerator(); + while (cultistRule.MoveNext(out _, out var rule)) + rule.Constructs.Add(construct); } - private void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + private void OnComponentShutdown(Entity construct, ref ComponentShutdown args) { + foreach (var actionEntity in construct.Comp.ActionEntities) + _actions.RemoveAction(actionEntity); + var cultistRule = EntityManager.EntityQueryEnumerator(); while (cultistRule.MoveNext(out _, out var rule)) - { - rule.Constructs.Remove(ent); - } + rule.Constructs.Remove(construct); } } diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..1885b42d222 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Eye; +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem +{ + [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; + + protected override void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + base.OnComponentStartup(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } + + protected override void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + base.OnComponentShutdown(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs index 50e92bf2770..7a8578b665f 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs @@ -27,12 +27,22 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnShardMindAdded); SubscribeLocalEvent(OnShardMindRemoved); } + private void OnMapInit(Entity shard, ref MapInitEvent args) + { + if (!shard.Comp.IsBlessed) + return; + + _appearanceSystem.SetData(shard, SoulShardVisualState.Blessed, true); + _lightSystem.SetColor(shard, shard.Comp.BlessedLightColor); + } + private void OnActivate(Entity shard, ref ActivateInWorldEvent args) { if (!_mind.TryGetMind(shard, out var mindId, out _)) @@ -76,10 +86,8 @@ private void OnShardMindAdded(Entity shard, ref MindAddedMes UpdateGlowVisuals(shard, true); } - private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) - { + private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) => UpdateGlowVisuals(shard, false); - } private void SpawnShade(Entity shard, EntProtoId proto, EntityUid mindId) { diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs index 09dc2b542fb..d0a1991a9fd 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Server.NPC.Components; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Shared.Prototypes; @@ -26,9 +27,21 @@ public sealed partial class BloodCultRuleComponent : Component [DataField] public int PentagramThreshold = 8; + [DataField] + public int RendingRunePlacementsAmount = 3; + [ViewVariables(VVAccess.ReadOnly)] public bool LeaderSelected; + /// + /// If no rending rune markers were placed on the map, players will be able to place these runes anywhere on the map + /// but no more than total available. + /// + [DataField] + public bool EmergencyMarkersMode; + + public int EmergencyMarkersCount; + /// /// The entityUid of body which should be sacrificed. /// diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs index c753d929134..bfb06c85ccf 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs @@ -3,36 +3,39 @@ using Content.Server.Actions; using Content.Server.Antag; using Content.Server.Antag.Components; +using Content.Server.Body.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; using Content.Server.Hands.Systems; using Content.Server.Language; +using Content.Server.Mind; using Content.Server.NPC.Systems; +using Content.Server.Pinpointer; using Content.Server.Roles; using Content.Server.RoundEnd; -using Content.Server.StationEvents.Components; using Content.Server.WhiteDream.BloodCult.Items.BloodSpear; using Content.Server.WhiteDream.BloodCult.Objectives; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Server.WhiteDream.BloodCult.Spells; -using Content.Shared.Body.Systems; using Content.Shared.Cloning; using Content.Shared.Cuffs.Components; using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.Inventory; -using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Mood; using Content.Shared.Movement.Pulling.Components; -using Content.Shared.Roles; using Content.Shared.WhiteDream.BloodCult.Components; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Items; using Robust.Server.Containers; +using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Random; +using Robust.Shared.Utility; namespace Content.Server.WhiteDream.BloodCult.Gamerule; @@ -43,16 +46,18 @@ public sealed class BloodCultRuleSystem : GameRuleSystem [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AntagSelectionSystem _antagSelection = default!; [Dependency] private readonly BloodSpearSystem _bloodSpear = default!; + [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly HandsSystem _hands = default!; - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly LanguageSystem _languageSystem = default!; - [Dependency] private readonly NpcFactionSystem _factionSystem = default!; - [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; - [Dependency] private readonly SharedBodySystem _bodySystem = default!; - [Dependency] private readonly SharedRoleSystem _roleSystem = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly LanguageSystem _language = default!; + [Dependency] private readonly NavMapSystem _navMap = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly RoleSystem _role = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; + [Dependency] private readonly TransformSystem _transform = default!; public override void Initialize() { @@ -79,7 +84,7 @@ GameRuleStartedEvent args { base.Started(uid, component, gameRule, args); - component.OfferingTarget = FindTarget(); + GetRandomRunePlacements(component); } protected override void AppendRoundEndText( @@ -103,6 +108,8 @@ ref RoundEndTextAppendEvent args } } + #region EventHandlers + private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) => MakeCultist(args.EntityUid, ent); @@ -112,7 +119,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) while (rulesQuery.MoveNext(out _, out var cult, out _)) { cult.WinCondition = CultWinCondition.Win; - _roundEndSystem.EndRound(); + _roundEnd.EndRound(); foreach (var ent in cult.Cultists) { @@ -121,8 +128,8 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) continue; var harvester = Spawn(cult.HarvesterPrototype, Transform(ent.Owner).Coordinates); - _mindSystem.TransferTo(mindContainer.Mind.Value, harvester); - _bodySystem.GibBody(ent); + _mind.TransferTo(mindContainer.Mind.Value, harvester); + _body.GibBody(ent); } return; @@ -132,7 +139,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) private void OnCultistComponentInit(Entity cultist, ref ComponentInit args) { RaiseLocalEvent(cultist, new MoodEffectEvent("CultFocused")); - _languageSystem.AddLanguage(cultist, cultist.Comp.CultLanguageId); + _language.AddLanguage(cultist, cultist.Comp.CultLanguageId); var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) @@ -148,7 +155,7 @@ private void OnCultistComponentRemoved(Entity cultist, re while (query.MoveNext(out _, out var cult, out _)) cult.Cultists.Remove(cultist); - CheckRoundShouldEnd(); + CheckWinCondition(); if (TerminatingOrDeleted(cultist.Owner)) return; @@ -157,7 +164,7 @@ private void OnCultistComponentRemoved(Entity cultist, re RemoveCultistAppearance(cultist); RemoveObjectiveAndRole(cultist.Owner); RaiseLocalEvent(cultist.Owner, new MoodRemoveEffectEvent("CultFocused")); - _languageSystem.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); + _language.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); if (!TryComp(cultist, out BloodCultSpellsHolderComponent? powersHolder)) return; @@ -166,16 +173,46 @@ private void OnCultistComponentRemoved(Entity cultist, re _actions.RemoveAction(cultist.Owner, power); } - private void OnCultistsStateChanged(Entity ent, ref MobStateChangedEvent args) + private void OnCultistsStateChanged(Entity cultist, ref MobStateChangedEvent args) { if (args.NewMobState == MobState.Dead) - CheckRoundShouldEnd(); + CheckWinCondition(); } - private void OnClone(Entity ent, ref CloningEvent args) => RemoveObjectiveAndRole(ent); + private void OnClone(Entity cultist, ref CloningEvent args) => + RemoveObjectiveAndRole(cultist); - private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) => + private void OnGetBriefing(Entity cultist, ref GetBriefingEvent args) + { args.Append(Loc.GetString("blood-cult-role-briefing-short")); + var rulesQuery = QueryActiveRules(); + while (rulesQuery.MoveNext(out _, out var rule, out _)) + { + if (!rule.EmergencyMarkersMode) + continue; + + args.Append( + Loc.GetString("blood-cult-role-briefing-emergency-rending", ("amount", rule.EmergencyMarkersCount))); + return; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var navMapLocation = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(uid)); + var coordinates = Transform(uid).Coordinates; + var msg = Loc.GetString( + "blood-cult-role-briefing-rending-locations", + ("location", navMapLocation), + ("coordinates", coordinates.Position)); + args.Append(Loc.GetString(msg)); + } + } + + #endregion public void Convert(EntityUid target) { @@ -190,12 +227,15 @@ public void Convert(EntityUid target) var antagSelectionEnt = (ruleUid, antagSelection); if (!_antagSelection.TryGetNextAvailableDefinition(antagSelectionEnt, out var def)) - continue; + def = antagSelection.Definitions.Last(); _antagSelection.MakeAntag(antagSelectionEnt, actor.PlayerSession, def.Value); } } + public bool IsObjectiveFinished() => + !TryGetTarget(out var target) || !HasComp(target) || _mobState.IsDead(target.Value); + public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) { target = GetTarget(); @@ -215,77 +255,151 @@ public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) public bool IsTarget(EntityUid entityUid) { var query = QueryActiveRules(); - while (query.MoveNext(out _, out var bloodCultRule, out _)) - return entityUid == bloodCultRule.OfferingTarget; + while (query.MoveNext(out _, out var rule, out _)) + return entityUid == rule.OfferingTarget; return false; } + public int GetTotalCultists() + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var rule, out _)) + return rule.Cultists.Count + rule.Constructs.Count; + + return 0; + } + public void RemoveObjectiveAndRole(EntityUid uid) { - if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) + if (!_mind.TryGetMind(uid, out var mindId, out var mind)) return; var objectives = mind.Objectives.FindAll(HasComp); foreach (var obj in objectives) - _mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + _mind.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + + if (_role.MindHasRole(mindId)) + _role.MindRemoveRole(mindId); + } + + public bool CanDrawRendingRune(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var userLocation = Transform(user).Coordinates; + var placementCoordinates = Transform(uid).Coordinates; + if (_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + return true; + } + + return false; + } + + public void SetRandomCultTarget(BloodCultRuleComponent rule) + { + var querry = EntityManager + .EntityQueryEnumerator(); + + var potentialTargets = new List(); + + // Cultists not being excluded from target selection is fully intended. + while (querry.MoveNext(out var uid, out _, out _, out _)) + potentialTargets.Add(uid); - if (_roleSystem.MindHasRole(mindId)) - _roleSystem.MindRemoveRole(mindId); + rule.OfferingTarget = potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } - private void CheckRoundShouldEnd() + public bool TryConsumeNearestMarker(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var userLocation = Transform(user).Coordinates; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var markerUid, out var marker)) + { + if (!marker.IsActive) + continue; + + var placementCoordinates = Transform(markerUid).Coordinates; + if (!_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + continue; + + marker.IsActive = false; + break; + } + + return false; + } + + private void CheckWinCondition() { var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) { - var aliveCultists = cult.Cultists.Count(cultist => !_mobStateSystem.IsDead(cultist)); + var aliveCultists = cult.Cultists.Count(cultist => !_mobState.IsDead(cultist)); if (aliveCultists != 0) return; cult.WinCondition = CultWinCondition.Failure; - - // Check for all at once gamemode - if (!GameTicker.GetActiveGameRules().Where(HasComp).Any()) - _roundEndSystem.EndRound(); } } private void MakeCultist(EntityUid cultist, Entity rule) { - if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind)) + if (!_mind.TryGetMind(cultist, out var mindId, out var mind)) return; EnsureComp(cultist); - _factionSystem.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); - _factionSystem.AddFaction(cultist, rule.Comp.BloodCultFaction); + _faction.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); + _faction.AddFaction(cultist, rule.Comp.BloodCultFaction); - _mindSystem.TryAddObjective(mindId, mind, "KillTargetCultObjective"); + _mind.TryAddObjective(mindId, mind, "KillTargetCultObjective"); } - private EntityUid? FindTarget(ICollection exclude = null!) + private void GetRandomRunePlacements(BloodCultRuleComponent component) { - var querry = EntityManager - .EntityQueryEnumerator(); + var allMarkers = EntityQuery().ToList(); + if (allMarkers.Count == 0) + { + component.EmergencyMarkersMode = true; + component.EmergencyMarkersCount = component.RendingRunePlacementsAmount; + return; + } - var potentialTargets = new List(); + var maxRunes = component.RendingRunePlacementsAmount; + if (allMarkers.Count < component.RendingRunePlacementsAmount) + maxRunes = allMarkers.Count; - while (querry.MoveNext(out var uid, out var mind, out _, out _)) + for (var i = maxRunes; i > 0; i--) { - var entity = mind.Mind; - if (entity == default || exclude?.Contains(uid) is true || HasComp(uid)) - continue; - - potentialTargets.Add(uid); + var marker = _random.PickAndTake(allMarkers); + marker.IsActive = true; } - - return potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } private void RemoveAllCultItems(Entity cultist) { - if (!_inventorySystem.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) + if (!_inventory.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) return; _bloodSpear.DetachSpearFromMaster(cultist); diff --git a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs index 188006e2196..876cccf9ecc 100644 --- a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Popups; using Content.Shared.Coordinates.Helpers; +using Content.Shared.Examine; using Content.Shared.Interaction.Events; using Content.Shared.Maps; using Content.Shared.Movement.Pulling.Systems; @@ -27,20 +28,23 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnUseInHand); } + private void OnExamined(Entity veil, ref ExaminedEvent args) => + args.PushMarkup(Loc.GetString("veil-shifter-description", ("charges", veil.Comp.Charges))); + private void OnUseInHand(Entity veil, ref UseInHandEvent args) { - if (veil.Comp.Charges == 0) - return; - - if (!Teleport(veil, args.User)) + if (args.Handled || veil.Comp.Charges == 0 || !Teleport(veil, args.User)) return; veil.Comp.Charges--; if (veil.Comp.Charges == 0) _appearance.SetData(veil, GenericCultVisuals.State, false); + + args.Handled = true; } private bool Teleport(Entity veil, EntityUid user) diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs index 8c500a04328..423252b6e3c 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs @@ -7,5 +7,5 @@ public sealed partial class KillTargetCultComponent : Component public string Title = string.Empty; [DataField, ViewVariables(VVAccess.ReadWrite)] - public EntityUid Target; + public EntityUid? Target; } diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs index b2ef487790e..75e21d68003 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs @@ -9,6 +9,7 @@ namespace Content.Server.WhiteDream.BloodCult.Objectives; public sealed class KillTargetCultSystem : EntitySystem { + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly JobSystem _job = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -23,22 +24,35 @@ public override void Initialize() private void OnObjectiveAssigned(Entity ent, ref ObjectiveAssignedEvent args) { var cultistRule = EntityManager.EntityQuery().FirstOrDefault(); - if (cultistRule?.OfferingTarget is { } target) - ent.Comp.Target = target; + if (cultistRule is null) + return; + + if (cultistRule.OfferingTarget is null) + _cultRule.SetRandomCultTarget(cultistRule); + + ent.Comp.Target = cultistRule.OfferingTarget; } private void OnAfterAssign(Entity ent, ref ObjectiveAfterAssignEvent args) { - _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target, ent.Comp.Title), args.Meta); + if (!ent.Comp.Target.HasValue || !ent.Owner.IsValid() || !HasComp(ent)) + return; + + _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target.Value, ent.Comp.Title), args.Meta); } private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) { var target = ent.Comp.Target; + if (!target.HasValue) + { + args.Progress = 1f; + return; + } - args.Progress = !HasComp(target) || _mobState.IsDead(target) - ? args.Progress = 1f - : args.Progress = 0f; + args.Progress = !HasComp(target) || _mobState.IsDead(target.Value) + ? 1f + : 0f; } private string GetTitle(EntityUid target, string title) diff --git a/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs new file mode 100644 index 00000000000..44d15e88521 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.RendingRunePlacement; + +[RegisterComponent] +public sealed partial class RendingRunePlacementMarkerComponent : Component +{ + [DataField] + public bool IsActive; + + [DataField] + public float DrawingRange = 10; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs index 60b889e7496..745ea042caf 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs @@ -54,15 +54,14 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu ent.Comp.Used = true; _appearance.SetData(ent, ApocalypseRuneVisuals.Used, true); - _emp.EmpPulse(_transform.GetMapCoordinates(ent), + _emp.EmpPulse( + _transform.GetMapCoordinates(ent), ent.Comp.EmpRange, ent.Comp.EmpEnergyConsumption, ent.Comp.EmpDuration); foreach (var guaranteedEvent in ent.Comp.GuaranteedEvents) - { _gameTicker.StartGameRule(guaranteedEvent); - } var requiredCultistsThreshold = MathF.Floor(_playerManager.PlayerCount * ent.Comp.CultistsThreshold); var totalCultists = cultRule.Cultists.Count + cultRule.Constructs.Count; @@ -71,8 +70,6 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu var (randomEvent, repeatTimes) = _random.Pick(ent.Comp.PossibleEvents); for (var i = 0; i < repeatTimes; i++) - { _gameTicker.StartGameRule(randomEvent); - } } } diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs index 023112a6ef4..fcfe7a65a02 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Chat; +using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; using Content.Shared.Humanoid; using Robust.Shared.Prototypes; @@ -26,7 +27,16 @@ public sealed partial class CultRuneBaseComponent : Component [DataField] public DamageSpecifier? ActivationDamage; - public EntProtoId HolyWaterPrototype = "HolyWater"; + /// + /// Will the rune upon activation set nearest Rending Rune Placement Marker to disabled. + /// + [DataField] + public bool TriggerRendingMarkers; + + [DataField] + public bool CanBeErased = true; + + public ProtoId HolyWaterPrototype = "HolyWater"; } public sealed class TryInvokeCultRuneEvent(EntityUid user, HashSet invokers) : CancellableEntityEventArgs diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs index ec81af67761..3e03ec1b0df 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs @@ -27,9 +27,11 @@ public HashSet GatherCultists(EntityUid rune, float range) /// The rune itself. /// Radius for a lookup. /// Filter to exlude from return. - public HashSet> GetTargetsNearRune(EntityUid rune, + public HashSet> GetTargetsNearRune( + EntityUid rune, float range, - Predicate>? exlude = null) + Predicate>? exlude = null + ) { var runeTransform = Transform(rune); var possibleTargets = _lookup.GetEntitiesInRange(runeTransform.Coordinates, range); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs index 0ad21e63693..013b8df6cdd 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs @@ -7,13 +7,18 @@ using Content.Server.Fluids.Components; using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Empower; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Ghost; using Content.Shared.Interaction; using Content.Shared.Maps; +using Content.Shared.UserInterface; using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -28,18 +33,19 @@ public sealed partial class CultRuneBaseSystem : EntitySystem [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; public override void Initialize() { - base.Initialize(); - // Drawing rune + SubscribeLocalEvent(BeforeOpenUi); SubscribeLocalEvent(OnRuneSelected); SubscribeLocalEvent(OnDrawRune); @@ -50,6 +56,26 @@ public override void Initialize() // Rune invoking SubscribeLocalEvent(OnRuneActivate); + + SubscribeLocalEvent(OnRuneExaminaAttempt); + } + + #region EventHandlers + + private void BeforeOpenUi(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + var availableRunes = new List>(); + var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + foreach (var runeSelector in runeSelectorArray) + { + if (runeSelector.RequireTargetDead && !_cultRule.IsObjectiveFinished() || + runeSelector.RequiredTotalCultists > _cultRule.GetTotalCultists()) + continue; + + availableRunes.Add(runeSelector.ID); + } + + _ui.SetUiState(ent.Owner, RuneDrawerBuiKey.Key, new RuneDrawerMenuState(availableRunes)); } private void OnRuneSelected(Entity ent, ref RuneDrawerSelectedMessage args) @@ -57,6 +83,12 @@ private void OnRuneSelected(Entity ent, ref RuneDrawerSelec if (!_protoManager.TryIndex(args.SelectedRune, out var runeSelector) || !CanDrawRune(args.Actor)) return; + if (runeSelector.RequireTargetDead && !_cultRule.CanDrawRendingRune(args.Actor)) + { + _popup.PopupEntity(Loc.GetString("cult-rune-cant-draw-rending"), args.Actor, args.Actor); + return; + } + var timeToDraw = runeSelector.DrawTime; if (TryComp(args.Actor, out BloodCultEmpoweredComponent? empowered)) timeToDraw *= empowered.RuneTimeMultiplier; @@ -85,18 +117,25 @@ private void OnDrawRune(Entity ent, ref DrawRuneDoAfter a DealDamage(args.User, runeSelector.DrawDamage); _audio.PlayPvs(args.EndDrawingSound, args.User, AudioParams.Default.WithMaxDistance(2f)); - var rune = SpawnRune(args.User, runeSelector.Prototype); + var runeEnt = SpawnRune(args.User, runeSelector.Prototype); + if (TryComp(runeEnt, out CultRuneBaseComponent? rune) + && rune.TriggerRendingMarkers + && !_cultRule.TryConsumeNearestMarker(ent)) + return; var ev = new AfterRunePlaced(args.User); - RaiseLocalEvent(rune, ev); + RaiseLocalEvent(runeEnt, ev); } - private void EraseOnInteractUsing(Entity ent, ref InteractUsingEvent args) + private void EraseOnInteractUsing(Entity rune, ref InteractUsingEvent args) { + if (!rune.Comp.CanBeErased) + return; + // Logic for bible erasing if (TryComp(args.Used, out var bible) && HasComp(args.User)) { - _popup.PopupEntity(Loc.GetString("cult-rune-erased"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-erased"), rune, args.User); _audio.PlayPvs(bible.HealSoundPath, args.User); EntityManager.DeleteEntity(args.Target); return; @@ -106,7 +145,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac return; var argsDoAfterEvent = - new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), ent) + new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), rune) { BreakOnUserMove = true, BreakOnDamage = true, @@ -114,7 +153,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac }; if (_doAfter.TryStartDoAfter(argsDoAfterEvent)) - _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), rune, args.User); } private void OnRuneErase(Entity ent, ref RuneEraseDoAfterEvent args) @@ -126,55 +165,67 @@ private void OnRuneErase(Entity ent, ref RuneEraseDoAfter EntityManager.DeleteEntity(ent); } - private void EraseOnCollding(Entity ent, ref StartCollideEvent args) + private void EraseOnCollding(Entity rune, ref StartCollideEvent args) { - if (!TryComp(args.OtherEntity, out var solutionContainer) || + if (!rune.Comp.CanBeErased || + !TryComp(args.OtherEntity, out var solutionContainer) || !HasComp(args.OtherEntity) && !HasComp(args.OtherEntity)) return; if (_solutionContainer.EnumerateSolutions((args.OtherEntity, solutionContainer)) - .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(ent.Comp.HolyWaterPrototype))) - EntityManager.DeleteEntity(ent); + .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(rune.Comp.HolyWaterPrototype))) + EntityManager.DeleteEntity(rune); } - private void OnRuneActivate(Entity ent, ref ActivateInWorldEvent args) + private void OnRuneActivate(Entity rune, ref ActivateInWorldEvent args) { - var runeCoordinates = Transform(ent).Coordinates; + var runeCoordinates = Transform(rune).Coordinates; var userCoordinates = Transform(args.User).Coordinates; if (args.Handled || !HasComp(args.User) || !userCoordinates.TryDistance(EntityManager, runeCoordinates, out var distance) || - distance > ent.Comp.RuneActivationRange) + distance > rune.Comp.RuneActivationRange) return; args.Handled = true; - var cultists = GatherCultists(ent, ent.Comp.RuneActivationRange); - if (cultists.Count < ent.Comp.RequiredInvokers) + var cultists = GatherCultists(rune, rune.Comp.RuneActivationRange); + if (cultists.Count < rune.Comp.RequiredInvokers) { - _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), rune, args.User); return; } var tryInvokeEv = new TryInvokeCultRuneEvent(args.User, cultists); - RaiseLocalEvent(ent, tryInvokeEv); + RaiseLocalEvent(rune, tryInvokeEv); if (tryInvokeEv.Cancelled) return; foreach (var cultist in cultists) { - DealDamage(cultist, ent.Comp.ActivationDamage); - _chat.TrySendInGameICMessage(cultist, - ent.Comp.InvokePhrase, - ent.Comp.InvokeChatType, + DealDamage(cultist, rune.Comp.ActivationDamage); + _chat.TrySendInGameICMessage( + cultist, + rune.Comp.InvokePhrase, + rune.Comp.InvokeChatType, false, checkRadioPrefix: false); } } + private void OnRuneExaminaAttempt(Entity rune, ref ExamineAttemptEvent args) + { + if (!HasComp(args.Examiner) && !HasComp(args.Examiner) && + !HasComp(args.Examiner)) + args.Cancel(); + } + + #endregion + private EntityUid SpawnRune(EntityUid user, EntProtoId rune) { var transform = Transform(user); - var snappedLocalPosition = new Vector2(MathF.Floor(transform.LocalPosition.X) + 0.5f, + var snappedLocalPosition = new Vector2( + MathF.Floor(transform.LocalPosition.X) + 0.5f, MathF.Floor(transform.LocalPosition.Y) + 0.5f); var spawnPosition = _transform.GetMapCoordinates(user); var runeEntity = EntityManager.Spawn(rune, spawnPosition); @@ -211,9 +262,7 @@ private void DealDamage(EntityUid user, DamageSpecifier? damage = null) if (TryComp(user, out BloodCultEmpoweredComponent? empowered)) { foreach (var (key, value) in damage.DamageDict) - { damage.DamageDict[key] = value * empowered.RuneDamageMultiplier; - } } _damageable.TryChangeDamage(user, newDamage, true); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs index 06d750bfc82..5e594808d98 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Damage; using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; namespace Content.Server.WhiteDream.BloodCult.Runes.Offering; @@ -30,10 +31,16 @@ public sealed partial class CultRuneOfferingComponent : Component [DataField] public int ReviveChargesPerOffering = 1; + [DataField] + public EntProtoId SoulShardProto = "SoulShard"; + + [DataField] + public EntProtoId SoulShardGhostProto = "SoulShardGhost"; + [DataField] public DamageSpecifier ConvertHealing = new() { - DamageDict = new Dictionary + DamageDict = new() { ["Brute"] = -40, ["Burn"] = -40 diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs index 19614e20bd9..3556fd9b23e 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs @@ -8,7 +8,6 @@ using Content.Server.WhiteDream.BloodCult.Runes.Revive; using Content.Shared.Cuffs.Components; using Content.Shared.Damage; -using Content.Shared.Humanoid; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs.Systems; using Content.Shared.StatusEffect; @@ -35,10 +34,11 @@ public override void Initialize() SubscribeLocalEvent(OnOfferingRuneInvoked); } - private void OnOfferingRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + private void OnOfferingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - var possibleTargets = _cultRune.GetTargetsNearRune(ent, - ent.Comp.OfferingRange, + var possibleTargets = _cultRune.GetTargetsNearRune( + rune, + rune.Comp.OfferingRange, entity => HasComp(entity)); if (possibleTargets.Count == 0) @@ -48,60 +48,38 @@ private void OnOfferingRuneInvoked(Entity ent, ref Tr } var target = possibleTargets.First(); + if (!TryOffer(rune, target, args.User, args.Invokers.Count)) + args.Cancel(); + } + private bool TryOffer(Entity rune, EntityUid target, EntityUid user, int invokersTotal) + { // if the target is dead we should always sacrifice it. if (_mobState.IsDead(target)) { - Sacrifice(target); - return; + Sacrifice(rune, target); + return true; } - if (!_mind.TryGetMind(target, out _, out _) || - _bloodCultRule.IsTarget(target) || - HasComp(target) || - HasComp(target)) - { - if (!TrySacrifice(target, ent, args.Invokers.Count)) - args.Cancel(); - - return; - } + if (!_mind.TryGetMind(target, out _, out _) || _bloodCultRule.IsTarget(target) || + HasComp(target) || HasComp(target)) + return TrySacrifice(rune, target, invokersTotal); - if (!TryConvert(target, ent, args.User, args.Invokers.Count)) - args.Cancel(); + return TryConvert(rune, target, user, invokersTotal); } - private bool TrySacrifice(Entity target, - Entity rune, - int invokersAmount) + private bool TrySacrifice(Entity rune, EntityUid target, int invokersAmount) { if (invokersAmount < rune.Comp.AliveSacrificeInvokersAmount) return false; - _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); - Sacrifice(target); + Sacrifice(rune, target); return true; } - private void Sacrifice(EntityUid target) - { - var transform = Transform(target); - var shard = Spawn("SoulShard", transform.Coordinates); - _body.GibBody(target); - - if (!_mind.TryGetMind(target, out var mindId, out _)) - return; - - _mind.TransferTo(mindId, shard); - _mind.UnVisit(mindId); - } - - private bool TryConvert(EntityUid target, - Entity rune, - EntityUid user, - int invokersAmount) + private bool TryConvert(Entity rune, EntityUid target, EntityUid user, int invokersTotal) { - if (invokersAmount < rune.Comp.ConvertInvokersAmount) + if (invokersTotal < rune.Comp.ConvertInvokersAmount) return false; _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); @@ -109,6 +87,23 @@ private bool TryConvert(EntityUid target, return true; } + private void Sacrifice(Entity rune, EntityUid target) + { + _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); + var transform = Transform(target); + + if (!_mind.TryGetMind(target, out var mindId, out _)) + Spawn(rune.Comp.SoulShardGhostProto, transform.Coordinates); + else + { + var shard = Spawn(rune.Comp.SoulShardProto, transform.Coordinates); + _mind.TransferTo(mindId, shard); + _mind.UnVisit(mindId); + } + + _body.GibBody(target); + } + private void Convert(Entity rune, EntityUid target, EntityUid user) { _bloodCultRule.Convert(target); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs index d051d07528f..91347bcdd95 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs @@ -4,8 +4,6 @@ using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.DoAfter; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -22,7 +20,6 @@ public sealed class CultRuneRendingSystem : EntitySystem [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly TransformSystem _transform = default!; @@ -38,10 +35,12 @@ public override void Initialize() private void OnRendingRunePlaced(Entity rune, ref AfterRunePlaced args) { var position = _transform.GetMapCoordinates(rune); - var message = Loc.GetString("cult-rending-drawing-finished", + var message = Loc.GetString( + "cult-rending-drawing-finished", ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(position)))); - _chat.DispatchGlobalAnnouncement(message, + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), true, rune.Comp.FinishedDrawingAudio, @@ -50,9 +49,7 @@ private void OnRendingRunePlaced(Entity rune, ref Afte private void OnRendingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - if (!_cultRule.TryGetTarget(out var target) || - !TryComp(target.Value, out MobStateComponent? _) || - _mobState.IsAlive(target.Value)) + if (!_cultRule.IsObjectiveFinished()) { _popup.PopupEntity(Loc.GetString("cult-rending-target-alive"), rune, args.User); args.Cancel(); @@ -78,7 +75,11 @@ private void OnRendingRuneInvoked(Entity rune, ref Try return; } - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-started"), + var message = Loc.GetString( + "cult-rending-started", + ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(rune.Owner)))); + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); @@ -95,7 +96,8 @@ private void SpawnNarSie(Entity rune, ref RendingRuneD _appearance.SetData(rune, RendingRuneVisuals.Active, false); if (args.Cancelled) { - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-prevented"), + _chat.DispatchGlobalAnnouncement( + Loc.GetString("cult-rending-prevented"), Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs index 76697c252a8..c69bf6abd4e 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs @@ -44,6 +44,7 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnSpellStartup); SubscribeLocalEvent(OnCultTargetEvent); SubscribeLocalEvent(OnActionGettingDisabled); @@ -60,6 +61,12 @@ public override void Initialize() #region BaseHandlers + private void OnSpellStartup(Entity action, ref ComponentStartup args) + { + if (_actions.TryGetActionData(action, out var actionData, false) && actionData is { UseDelay: not null }) + _actions.StartUseDelay(action); + } + private void OnCultTargetEvent(Entity spell, ref EntityTargetActionEvent args) { if (_statusEffects.HasStatusEffect(args.Performer, "Muted")) @@ -83,10 +90,8 @@ private void OnActionGettingDisabled(Entity spell, ref A _actions.RemoveAction(args.Performer, spell); } - private void OnComponentStartup(Entity cultist, ref ComponentStartup args) - { + private void OnComponentStartup(Entity cultist, ref ComponentStartup args) => cultist.Comp.MaxSpells = cultist.Comp.DefaultMaxSpells; - } private void OnGetVerbs(Entity cultist, ref GetVerbsEvent args) { @@ -136,7 +141,8 @@ private void OnSpellSelected(Entity cultist, ref ActionProtoId = args.SelectedItem }; - var doAfter = new DoAfterArgs(EntityManager, + var doAfter = new DoAfterArgs( + EntityManager, cultist.Owner, cultist.Comp.SpellCreationTime, createSpellEvent, @@ -189,7 +195,7 @@ private void OnShackles(BloodCultShacklesEvent ev) return; var shuckles = Spawn(ev.ShacklesProto); - if (!_cuffable.TryAddNewCuffs(ev.Performer, ev.Target, shuckles)) + if (!_cuffable.TryAddNewCuffs(ev.Target, ev.Performer, shuckles)) return; _stun.TryKnockdown(ev.Target, ev.KnockdownDuration, true); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs index bd605475ede..b0906bc13be 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs @@ -22,7 +22,7 @@ public override void Initialize() { SubscribeLocalEvent(OnTeleport); SubscribeLocalEvent(OnTeleportRuneSelected); - SubscribeLocalEvent(OnTeleportDoAfter); + SubscribeLocalEvent(OnTeleportDoAfter); } private void OnTeleport(BloodCultTeleportEvent ev) @@ -30,28 +30,37 @@ private void OnTeleport(BloodCultTeleportEvent ev) if (ev.Handled || !_runeTeleport.TryGetTeleportRunes(ev.Performer, out var runes)) return; - _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes)); + var metaData = new Dictionary + { + ["target"] = GetNetEntity(ev.Target), + ["duration"] = ev.DoAfterDuration + }; + + _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes, metaData)); _ui.TryToggleUi(ev.Performer, ListViewSelectorUiKey.Key, ev.Performer); ev.Handled = true; } - private void OnTeleportRuneSelected(Entity ent, - ref ListViewItemSelectedMessage args) + private void OnTeleportRuneSelected( + Entity ent, + ref ListViewItemSelectedMessage args + ) { - if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not EntityUid target || + if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not NetEntity netTarget || !args.MetaData.TryGetValue("duration", out var rawDuration) || rawDuration is not TimeSpan duration) return; + var target = GetEntity(netTarget); var teleportDoAfter = new TeleportActionDoAfterEvent { - Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)), + Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)) }; - var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target); + var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target, target); _doAfter.TryStartDoAfter(doAfterArgs); } - private void OnTeleportDoAfter(TeleportActionDoAfterEvent ev) + private void OnTeleportDoAfter(Entity user, ref TeleportActionDoAfterEvent ev) { if (ev.Target is not { } target) return; diff --git a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs index 5dc4ff3d653..b1aa9421140 100644 --- a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs +++ b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs @@ -28,12 +28,10 @@ public override void Update(float frameTime) var factoryQuery = EntityQueryEnumerator(); while (factoryQuery.MoveNext(out var uid, out var factory)) - { if (factory.CooldownRemaining > 0) factory.CooldownRemaining -= frameTime; else _appearance.SetData(uid, GenericCultVisuals.State, true); - } } private void OnTryOpenMenu(Entity factory, ref ActivatableUIOpenAttemptEvent args) @@ -53,9 +51,13 @@ private void OnTryOpenMenu(Entity factory, ref Activatabl private void OnPrototypeSelected(Entity factory, ref RadialSelectorSelectedMessage args) { + if (factory.Comp.CooldownRemaining > 0) + return; + var product = Spawn(args.SelectedItem, Transform(args.Actor).Coordinates); _hands.TryPickupAnyHand(args.Actor, product); factory.Comp.CooldownRemaining = factory.Comp.Cooldown; _appearance.SetData(factory, GenericCultVisuals.State, false); + _ui.CloseUi(args.Actor, RadialSelectorUiKey.Key); } } diff --git a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs index 1c97108277c..f34e9e3924d 100644 --- a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs +++ b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs @@ -14,10 +14,10 @@ public enum ListViewSelectorUiKey [Serializable, NetSerializable] public sealed class ListViewSelectorState( List items, - Dictionary metaData = default!) : BoundUserInterfaceState + Dictionary? metaData = null) : BoundUserInterfaceState { public List Items { get; } = items; - public Dictionary MetaData = metaData; + public Dictionary MetaData = metaData ?? new(); } [Serializable, NetSerializable] diff --git a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs index cf338a6bb43..439b09e7afb 100644 --- a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs +++ b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs @@ -12,6 +12,9 @@ public sealed partial class ProjectileSpellEvent : WorldTargetActionEvent, ISpea [DataField(required: true)] public EntProtoId Prototype; + [DataField] + public float ProjectileSpeed = 20; + [DataField] public string? Speech { get; private set; } diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index b0a9fef75d0..cae581298a6 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -344,7 +344,7 @@ private void OnProjectileSpell(ProjectileSpellEvent ev) var ent = Spawn(ev.Prototype, spawnCoords); var direction = toCoords.ToMapPos(EntityManager, _transform) - spawnCoords.ToMapPos(EntityManager, _transform); - _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer); + _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer, ev.ProjectileSpeed); } // End Projectile Spells #endregion diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs new file mode 100644 index 00000000000..15b026b5144 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs @@ -0,0 +1,39 @@ +using Content.Shared.Physics; +using Content.Shared.StatusEffect; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +[RegisterComponent] +public sealed partial class PhaseShiftedComponent : Component +{ + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; + + [DataField] + public float MovementSpeedBuff = 1.5f; + + [DataField] + public int CollisionMask = (int) CollisionGroup.GhostImpassable; + + [DataField] + public int CollisionLayer; + + [DataField] + public EntProtoId PhaseInEffect = "EffectEmpPulseNoSound"; + + [DataField] + public EntProtoId PhaseOutEffect = "EffectEmpPulseNoSound"; + + [DataField] + public SoundSpecifier PhaseInSound = new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilin.ogg")); + + [DataField] + public SoundSpecifier PhaseOutSound = + new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilout.ogg")); + + public int StoredMask; + public int StoredLayer; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs new file mode 100644 index 00000000000..6caf723a8c6 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs @@ -0,0 +1,95 @@ +using System.Linq; +using Content.Shared.Interaction.Events; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffect; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; +using Content.Shared.Throwing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +public abstract class SharedPhaseShiftSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly PullingSystem _pulling = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnComponentStartup); + + SubscribeLocalEvent(OnRefresh); + SubscribeLocalEvent(OnAttackAttempt); + SubscribeLocalEvent(OnThrowAttempt); + + SubscribeLocalEvent(OnComponentShutdown); + } + + protected virtual void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + var pos = _transform.GetMapCoordinates(ent); + Spawn(ent.Comp.PhaseInEffect, pos); + _audio.PlayPvs(ent.Comp.PhaseInSound, Transform(ent).Coordinates); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + ent.Comp.StoredMask = fixture.Value.CollisionMask; + ent.Comp.StoredLayer = fixture.Value.CollisionLayer; + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.CollisionMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.CollisionLayer, fixtures); + } + + var stealth = EnsureComp(ent); + _stealth.SetVisibility(ent, -1, stealth); + + if (TryComp(ent, out PullableComponent? pullable)) + _pulling.TryStopPull(ent, pullable); + + _movement.RefreshMovementSpeedModifiers(ent); + } + + private void OnRefresh(Entity ent, ref RefreshMovementSpeedModifiersEvent args) => + args.ModifySpeed(ent.Comp.MovementSpeedBuff, ent.Comp.MovementSpeedBuff); + + private void OnAttackAttempt(Entity ent, ref AttackAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + private void OnThrowAttempt(Entity ent, ref ThrowAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + protected virtual void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + Spawn(ent.Comp.PhaseOutEffect, _transform.GetMapCoordinates(ent)); + _audio.PlayPvs(ent.Comp.PhaseOutSound, ent); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.StoredMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.StoredLayer, fixtures); + } + + _stealth.SetVisibility(ent, 1); + RemComp(ent); + + ent.Comp.MovementSpeedBuff = 1; + _movement.RefreshMovementSpeedModifiers(ent); + } +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs index a16d8dc9326..13e51214e0a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Ghost; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Inventory.Events; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -23,6 +24,7 @@ public sealed class CultItemSystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnBeforeGettingThrown); SubscribeLocalEvent(OnEquipAttempt); SubscribeLocalEvent(OnMeleeAttempt); @@ -30,6 +32,15 @@ public override void Initialize() } private void OnActivate(Entity item, ref ActivateInWorldEvent args) + { + if (CanUse(args.User)) + return; + + args.Handled = true; + KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-generic")); + } + + private void OnUseInHand(Entity item, ref UseInHandEvent args) { if (CanUse(args.User) || // Allow non-cultists to remove embedded cultist weapons and getting knocked down afterwards on pickup diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs index b6dec321e4e..c1388994a4a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs @@ -25,9 +25,15 @@ public enum RuneDrawerBuiKey } [Serializable, NetSerializable] -public sealed class RuneDrawerSelectedMessage(RuneSelectorPrototype selectedRune) : BoundUserInterfaceMessage +public sealed class RuneDrawerMenuState(List> availalbeRunes) : BoundUserInterfaceState { - public ProtoId SelectedRune { get; private set; } = selectedRune.ID; + public List> AvailalbeRunes { get; private set; } = availalbeRunes; +} + +[Serializable, NetSerializable] +public sealed class RuneDrawerSelectedMessage(ProtoId selectedRune) : BoundUserInterfaceMessage +{ + public ProtoId SelectedRune { get; private set; } = selectedRune; } [Serializable, NetSerializable] diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs index 372ab866f07..12350917d00 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs @@ -1,5 +1,4 @@ using Content.Shared.Damage; -using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; namespace Content.Shared.WhiteDream.BloodCult.Runes; @@ -11,20 +10,20 @@ public sealed class RuneSelectorPrototype : IPrototype public string ID { get; } = default!; [DataField(required: true)] - public EntProtoId Prototype { get; } + public EntProtoId Prototype; [DataField] - public float DrawTime { get; } = 4f; + public float DrawTime = 4f; + + [DataField] + public bool RequireTargetDead; + + [DataField] + public int RequiredTotalCultists = 1; /// /// Damage dealt on the rune drawing. /// [DataField] - public DamageSpecifier DrawDamage = new() - { - DamageDict = new Dictionary - { - ["Slash"] = 15, - } - }; + public DamageSpecifier DrawDamage = new() { DamageDict = new() { ["Slash"] = 15 } }; } diff --git a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs index 293a32691dc..6b98514d44b 100644 --- a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs +++ b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs @@ -2,6 +2,7 @@ using Content.Shared.Chat; using Content.Shared.DoAfter; using Content.Shared.Magic; +using Content.Shared.StatusEffect; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -27,6 +28,9 @@ public sealed partial class BloodCultTeleportEvent : EntityTargetActionEvent, IS [DataField] public float Range = 5; + [DataField] + public TimeSpan DoAfterDuration = TimeSpan.FromSeconds(2); + [DataField] public string? Speech { get; set; } @@ -91,6 +95,28 @@ public sealed partial class SummonEquipmentEvent : InstantActionEvent, ISpeakSpe public sealed partial class BloodSpearRecalledEvent : InstantActionEvent; +public sealed partial class PlaceTileEntityEvent : WorldTargetActionEvent +{ + [DataField] + public EntProtoId? Entity; + + [DataField] + public string? TileId; + + [DataField] + public SoundSpecifier? Audio; + +} + +public sealed partial class PhaseShiftEvent : InstantActionEvent +{ + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(5); + + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; +} + [Serializable, NetSerializable] public sealed partial class TwistedConstructionDoAfterEvent : SimpleDoAfterEvent; diff --git a/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg b/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c37c9e903deb8022fa88f5e4742e804412df8f8f GIT binary patch literal 20713 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 XhX>toY!#r$Wok->?DoHaG91?j`v|+) literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index ff812155f69..aefe59920af 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -71,6 +71,7 @@ guide-entry-zombies = Zombies guide-entry-revolutionaries = Revolutionaries guide-entry-minor-antagonists = Minor Antagonists guide-entry-space-ninja = Space Ninja +guide-entry-blood-cult = Blood Cult guide-entry-rules = Server Rules guide-entry-rules-core-only = Core Only Ruleset diff --git a/Resources/Locale/en-US/white-dream/alerts.ftl b/Resources/Locale/en-US/white-dream/alerts.ftl index 5156b31ddb0..b7dac60bfed 100644 --- a/Resources/Locale/en-US/white-dream/alerts.ftl +++ b/Resources/Locale/en-US/white-dream/alerts.ftl @@ -1,5 +1,2 @@ -alerts-blood-spells-name = Blood spells -alerts-blood-spells-desc = Click to create or remove blood spells. - -alerts-blood-cult-buff-name = Empowered -alerts-blood-cult-buff-desc = Blood magic requires much less time to cast and you lose less blood from it. You're also immune to pressure damage. +alerts-blood-cult-empowered-name = Empowered +alerts-blood-cult-empowered-desc = Blood magic and rune scribing requires much less time to cast and you lose less blood from it. diff --git a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl index 0f7872985f0..92fbab3f993 100644 --- a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl +++ b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl @@ -9,6 +9,8 @@ blood-cult-role-greeting = The Geometer of Blood, Nar-Sie, has sent a number of You must work with your brethren to summon an avatar of your eldritch goddess! blood-cult-role-briefing-short = Use '^' to contact other members of your brethren. +blood-cult-role-briefing-rending-locations = The veil can be thorn {$location}, {$coordinates} +blood-cult-role-briefing-emergency-rending = We can draw {$amount} more rending or apocalypse runes! blood-cult-condition-win = The Geometer of Blood has successfully summoned their Eldritch Goddess! blood-cult-condition-draw = Both parties were destroyed. diff --git a/Resources/Locale/en-US/white-dream/cult/items/general.ftl b/Resources/Locale/en-US/white-dream/cult/items/general.ftl index 6ad4938adea..f3702bb66a1 100644 --- a/Resources/Locale/en-US/white-dream/cult/items/general.ftl +++ b/Resources/Locale/en-US/white-dream/cult/items/general.ftl @@ -11,6 +11,10 @@ ghost-role-information-soul-shard-name = Soul Shard ghost-role-information-soul-shard-description = Become the servant of The Blood Cult. ghost-role-information-soul-shard-rules = Take the form of one of the constructs and help your Masters bring their Old Goddess back to the world! +ghost-role-information-soul-shard-holy-name = Blessed Soul Shard +ghost-role-information-soul-shard-holy-description = Become the servant of crew and help them defeat the cult. +ghost-role-information-soul-shard-holy-rules = Take the form of one of the converted constructs and help the crew stop Geometer of Blood from bringing their Old Goddess back to the world! + shuttle-curse-cant-activate = Nar'Sien power doesn't seem to work. shuttle-curse-max-charges = You try to shatter the orb, but it remains as solid as a rock! shuttle-curse-shuttle-arrived = The shuttle has already arived! You can't delay it anymore. @@ -19,4 +23,5 @@ shuttle-curse-shuttle-not-called = The shuttle has not yet been called. shuttle-curse-system-failure = SYSTEM FAILURE shuttle-curse-success-global = The shuttle will be delayed by {$time} minutes. +veil-shifter-description = It has {$charges} charges left. veil-shifter-cant-teleport = Couldn't find a place to teleport you. Try again! diff --git a/Resources/Locale/en-US/white-dream/cult/runes.ftl b/Resources/Locale/en-US/white-dream/cult/runes.ftl index f13e72a3726..7e166e2b689 100644 --- a/Resources/Locale/en-US/white-dream/cult/runes.ftl +++ b/Resources/Locale/en-US/white-dream/cult/runes.ftl @@ -1,4 +1,5 @@ cult-rune-cant-draw = You can not draw rune here! +cult-rune-cant-draw-rending = You have to be near the area where the veil between our Worlds is the thinnest. cult-rune-started-erasing = Started erasing... cult-rune-erased = Rune has been erased. cult-rune-not-enough-cultists = Not enough cultists to perform the ritual! @@ -11,8 +12,8 @@ cult-revive-rune-already-alive = The target is already alive. cult-buff-already-buffed = You are already empowered. -cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end! Nearby location: {$location}. +cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end {$location}! cult-rending-target-alive = Can not start the ritual: the target is alive. cult-rending-already-summoning = Can not start the ritual: it's already in progress. -cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending! +cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending {$location}! cult-rending-prevented = Someone has stopped the ritual. diff --git a/Resources/Locale/en-US/white-dream/cult/spells.ftl b/Resources/Locale/en-US/white-dream/cult/spells.ftl index f0934d74cb9..52fa5939fba 100644 --- a/Resources/Locale/en-US/white-dream/cult/spells.ftl +++ b/Resources/Locale/en-US/white-dream/cult/spells.ftl @@ -1,5 +1,5 @@ blood-cult-spells-too-many = Too many spells already selected. blood-cult-no-spells = You have no spells selected. -blood-cult-select-spells-verb = Select blood spells +blood-cult-select-spells-verb = Prepare blood spells blood-cult-remove-spells-verb = Remove blood spells diff --git a/Resources/Prototypes/Entities/Effects/emp_effects.yml b/Resources/Prototypes/Entities/Effects/emp_effects.yml index d1096b85f5e..e386f902a5d 100644 --- a/Resources/Prototypes/Entities/Effects/emp_effects.yml +++ b/Resources/Prototypes/Entities/Effects/emp_effects.yml @@ -1,5 +1,5 @@ - type: entity - id: EffectEmpPulse + id: EffectEmpPulseNoSound categories: [ HideSpawnMenu ] components: - type: TimedDespawn @@ -8,18 +8,24 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_pulse + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_pulse - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu + - type: AnimationPlayer + +- type: entity + parent: EffectEmpPulseNoSound + id: EffectEmpPulse + categories: [ HideSpawnMenu ] + components: - type: EmitSoundOnSpawn - sound: + sound: path: /Audio/Effects/Lightning/lightningbolt.ogg - - type: AnimationPlayer - type: entity id: EffectEmpDisabled @@ -31,12 +37,12 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_disable + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_disable - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu - type: AnimationPlayer diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index 081ff7ef0ab..4b275446800 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -9,6 +9,7 @@ - Revolutionaries - MinorAntagonists - SpaceNinja + - BloodCult - type: guideEntry id: Traitors @@ -39,3 +40,8 @@ id: SpaceNinja name: guide-entry-space-ninja text: "/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml" + +- type: guideEntry + id: BloodCult + name: guide-entry-blood-cult + text: "/ServerInfo/Guidebook/Antagonist/BloodCult.xml" diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml index 814b950ead1..45e6217c602 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml @@ -73,7 +73,7 @@ - type: entity id: ActionBloodCultShadowShackles - name: shadow shackles + name: Shadow Shackles description: Empowers your hand to handcuff a victim on contact, and mute them if successful. categories: [ HideSpawnMenu ] components: @@ -100,7 +100,7 @@ - type: entity id: ActionBloodCultTwistedConstruction - name: twisted construction + name: Twisted Construction description: Empowers your hand to corrupt certain metallic objects. categories: [ HideSpawnMenu ] components: @@ -127,7 +127,7 @@ - type: entity id: ActionBloodCultSummonCombatEquipment - name: summon combat equipment + name: Summon Combat Equipment description: Allows you to summon combat cult gear, including cult armor, a cult bola and a cult sword. categories: [ HideSpawnMenu ] components: @@ -151,7 +151,7 @@ - type: entity id: ActionBloodCultSummonRitualDagger - name: summon ritual dagger + name: Summon Ritual Dagger description: Allows you to summon a ritual dagger, in case you've lost the dagger that was given to you. categories: [ HideSpawnMenu ] components: @@ -173,7 +173,7 @@ - type: entity id: ActionBloodCultBloodRites - name: blood rites + name: Blood Rites description: Empowers your hand to absorb blood to be used for advanced rites, or heal a cultist on contact. Use the spell in-hand to cast advanced rites categories: [ HideSpawnMenu ] components: @@ -193,3 +193,180 @@ prototypes: hand1: BloodRitesAura - type: BaseCultSpell + +- type: entity + id: ActionSummonCultFloor + name: Summon Cult Floor + description: This spell constructs a cult floor. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + - type: WorldTargetAction + useDelay: 10 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + event: !type:PlaceTileEntityEvent + tileId: CultFloor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionLesserConstruction + name: Lesser Construction + description: This spell constructs a cult wall. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 20 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: WallCult + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonCultDoor + name: Summon Cult Door + description: This spell constructs a cult door. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: CultDoor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStone + name: Summon Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStoneHoly + name: Summon Holy Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardHolyGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionForceWallCult + name: Shield + description: This spell creates a temporary forcefield to shield yourself and allies from incoming fire. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + - type: InstantAction + useDelay: 40 + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/forcewall.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + event: !type:InstantSpawnSpellEvent + prototype: WallForceCult + posData: !type:TargetInFront + - type: BaseCultSpell + +- type: entity + id: ActionPhaseShift + name: Phase Shift + description: This spell allows you to pass through walls. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + - type: InstantAction + itemIconStyle: BigAction + useDelay: 30 + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + event: !type:PhaseShiftEvent + - type: BaseCultSpell + +- type: entity + id: ActionGauntletEcho + name: Gauntlet Echo + description: Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack + categories: [ HideSpawnMenu ] + components: + - type: WorldTargetAction + useDelay: 30 + itemIconStyle: BigAction + checkCanAccess: false + raiseOnUser: true + range: 15 + sound: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/resonator_blast.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: gauntlet_echo + event: !type:ProjectileSpellEvent + prototype: ProjectileGauntlet + projectileSpeed: 5 + - type: BaseCultSpell diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml index d16f12d5c88..b6bc17a2239 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml @@ -81,13 +81,8 @@ - type: Speech - type: TypingIndicator proto: guardian - - type: Pullable - type: Puller needsHands: false - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - type: Visibility - type: ContentEye - type: Actions @@ -130,6 +125,9 @@ 0: Alive 100: Dead - type: Construct + actions: + - ActionForceWallCult + - ActionGauntletEcho - type: MeleeWeapon hidden: true angle: 30 @@ -164,6 +162,11 @@ - state: glow_artificer_cult map: [ "enum.ConstructVisualsState.Glow" ] - type: Construct + actions: + - ActionSummonCultFloor + - ActionLesserConstruction + - ActionSummonCultDoor + - ActionSummonSoulStone - type: MovementIgnoreGravity - type: MeleeWeapon hidden: true @@ -183,6 +186,7 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: Pullable - type: entity parent: ConstructBase @@ -201,6 +205,9 @@ 0: Alive 65: Dead - type: Construct + actions: + - ActionPhaseShift + - type: MovementIgnoreGravity - type: MovementSpeedModifier baseWalkSpeed: 4 baseSprintSpeed: 4 @@ -222,6 +229,10 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: StatusEffects + allowed: + - PhaseShifted + - type: Pullable - type: entity id: ConstructHarvester @@ -310,6 +321,9 @@ map: [ "enum.ConstructVisualsState.Sprite" ] - state: glow_artificer_holy map: [ "enum.ConstructVisualsState.Glow" ] + - type: Construct + actions: + - ActionSummonSoulStoneHoly - type: GenericVisualizer visuals: enum.ConstructVisualsState.Transforming: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml index e410a81c753..ad3b2a84728 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml @@ -54,3 +54,21 @@ description: ghost-role-information-soul-shard-description rules: ghost-role-information-soul-shard-rules - type: GhostTakeoverAvailable + +- type: entity + parent: SoulShard + id: SoulShardHoly + components: + - type: SoulShard + isBlessed: true + +- type: entity + parent: SoulShardHoly + id: SoulShardHolyGhost + components: + - type: GhostRole + allowMovement: true + name: ghost-role-information-soul-shard-holy-name + description: ghost-role-information-soul-shard-holy-description + rules: ghost-role-information-soul-shard-holy-rules + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml index 8195f4773fd..9580d2b224d 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml @@ -28,6 +28,7 @@ parent: CultRuneBase id: CultRuneOffering name: rune of offering + description: Offers a noncultist above it to Nar'Sie, either converting them or sacrificing them. One cultists required for dead sacrifice, two for conversion and three for living sacrifices and sacrifice targets. components: - type: Sprite state: "offering" @@ -39,6 +40,7 @@ parent: CultRuneBase id: CultRuneEmpower name: rune of empower + description: Allows cultists to prepare greater amounts of blood magic at far less of a cost. components: - type: Sprite state: strength @@ -50,6 +52,7 @@ parent: CultRuneBase id: CultRuneTeleport name: rune of teleportation + description: Warps everything above it to another chosen teleport rune components: - type: Sprite state: teleport @@ -67,6 +70,7 @@ parent: CultRuneBase id: CultRuneRevive name: rune of rejuvenation + description: Requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life. components: - type: Sprite state: revive @@ -78,6 +82,7 @@ parent: CultRuneBase id: CultRuneBarrier name: rune of barrier + description: When invoked, makes a temporary invisible wall to block passage. components: - type: Sprite state: barrier @@ -93,6 +98,7 @@ parent: CultRuneBase id: CultRuneSummoning name: rune of summoning + description: Summons a single cultist to the rune. Requires 2 invokers. components: - type: Sprite state: summon @@ -109,6 +115,7 @@ parent: CultRuneBase id: CultRuneBloodBoil name: rune of boiling blood + description: Boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers. components: - type: Sprite state: blood_boil @@ -124,6 +131,7 @@ parent: CultRuneBase id: CultRuneApocalypse name: rune of apocalypse + description: Harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects. Requires 3 invokers. components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi @@ -133,6 +141,8 @@ - type: CultRuneBase requiredInvokers: 3 invokePhrase: "Ta'gh fara'qha fel d'amar det!" + triggerRendingMarkers: true + canBeErased: false activationDamage: types: Slash: 35 @@ -147,6 +157,7 @@ parent: CultRuneBase id: CultRuneDimensionalRending name: rune of dimensional rending + description: Tears apart dimensional barriers, calling forth the Geometer. Requires 10 invokers components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi @@ -157,6 +168,8 @@ requiredInvokers: 10 invokeChatType: Speak invokePhrase: "TOK-LYR RQA-NAP G'OLT-ULOFT!!!" + triggerRendingMarkers: true + canBeErased: false - type: CultRuneRending - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml index c8ae0d6b3a3..0fb137a40dc 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml @@ -31,24 +31,10 @@ thresholds: - trigger: !type:DamageTrigger - damage: 600 + damage: 200 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 300 - behaviors: - - !type:SpawnEntitiesBehavior - spawn: - RunedMetal: - min: 5 - max: 5 - - !type:PlaySoundBehavior - sound: - collection: MetalBreak - - !type:DoActsBehavior - acts: [ "Destruction" ] - type: PointLight enabled: false radius: 3 @@ -69,3 +55,4 @@ - type: Icon sprite: WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi state: icon + - type: Dispellable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml index 23ff76bbc58..b27e3454213 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -113,7 +113,7 @@ wideAnimationRotation: -135 damage: types: - Piercing: 36 + Piercing: 26 angle: 0 animation: WeaponArcThrust soundHit: @@ -139,7 +139,7 @@ - type: IncreaseDamageOnWield damage: types: - Piercing: 8 + Piercing: 10 - type: UseDelay - type: DisarmMalus - type: CultItem @@ -160,7 +160,6 @@ Blunt: 0 heavyStaminaCost: 0 maxTargets: 1 - - type: Unremoveable - type: BloodRitesAura - type: UserInterface interfaces: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml new file mode 100644 index 00000000000..69a007b90e3 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml @@ -0,0 +1,20 @@ +- type: entity + id: ProjectileGauntlet + name: gauntlet + description: Oh no. + parent: BaseBulletTrigger + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: Red + radius: 2.0 + energy: 5.0 + - type: Projectile + ignoreResistances: true + damage: + types: + Blunt: 50 + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi + layers: + - state: gauntlet_echo diff --git a/Resources/Prototypes/WhiteDream/Entities/markers.yml b/Resources/Prototypes/WhiteDream/Entities/markers.yml new file mode 100644 index 00000000000..fce2225bc78 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/markers.yml @@ -0,0 +1,13 @@ +- type: entity + id: RendingRunePlacementMarker + name: rending rune placement marker + description: Marker for rending rune placement. 5 should be enough for each map. + parent: MarkerBase + components: + - type: RendingRunePlacementMarker + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: WhiteDream/BloodCult/Entities/Runes/regular.rsi + state: revive diff --git a/Resources/Prototypes/WhiteDream/runeSelectors.yml b/Resources/Prototypes/WhiteDream/rune_selectors.yml similarity index 88% rename from Resources/Prototypes/WhiteDream/runeSelectors.yml rename to Resources/Prototypes/WhiteDream/rune_selectors.yml index d63c81aa8da..5eb0dfc16a6 100644 --- a/Resources/Prototypes/WhiteDream/runeSelectors.yml +++ b/Resources/Prototypes/WhiteDream/rune_selectors.yml @@ -29,6 +29,8 @@ - type: runeSelector id: CultRuneApocalypse prototype: CultRuneApocalypse + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: @@ -37,6 +39,8 @@ - type: runeSelector id: CultRuneDimensionalRending prototype: CultRuneDimensionalRending + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index a991bf4035f..bed635c7026 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -59,3 +59,6 @@ - type: statusEffect id: StaminaModifier + +- type: statusEffect + id: PhaseShifted diff --git a/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml new file mode 100644 index 00000000000..a0e8dcb5d87 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml @@ -0,0 +1,184 @@ + + Be ware - this document is just almost a full copy of /tg/ station blood cult guide. + + # Blood Cult + + Even in the far future, some things are never quite understood. There are things that lurk in the darkness of space, + unspeakable horrors of ancient power that wish to bring ruin to the universe and to shape it into their image. They + reach out from the void, and turn the minds of mortal men and women in their favor in hopes that one day they shall be + brought once more into this plane of existence. + + The Geometer of Blood, Nar-Sie, has sent a number of her followers to Space Station 14. As a cultist, you have an + abundance of cult magics at your disposal, something for all situations. You must work with your brethren to summon an + avatar of your eldritch goddess! + + ## Objectives + + Your objective requires you to sacrifice a certain crewmember and summon Nar-Sie. + + The general path of action of the cult and those in it: + + - 1. From a discrete location, contact your allies. You can do it by speaking Eldritch language - everyone in the cult + can hear you when you speak it. + - 2. Find an area to convert into a base, usually accessible by one or more members of the cult, but well-hidden + enough that security or crew won't find it easily. + - 3. Setup a teleport rune, so all cultists can access it. + - 4. Setup an empowering rune and then prepare up to 4 blood spells. Stun spells are your bread and butter - but + diversifying with spells like EMP, Teleport, Blood Rites, etc. will ensure you're ready for anything. + - 5. Convert new members, or sacrifice implanted crew, on the offering rune. Combine the filled soul shard from + sacrificed humans to create powerful cult constructs! + - 6. Use teamwork to find your sacrifice target. + - 7. Kill the sacrifice target and place them on an offer rune with 3 cultists nearby. + - 8. Prepare to summon Nar-Sie. She can only be summoned in a few locations and the crew will fight desperately to + stop you! Make sure you have enough cultists and equipment to withstand their assault. + - 9. Gather 10 cultists on the final rune to summon Nar-Sie! + + ## Ritual Dagger + + + + + + Your dagger is your most important tool and has several functions: + + - You can draw runes with it. + - Hitting a non-cultist with it will result in you stabbing them (huh), dealing 15 piercing damage. + - Using it on the rune with erase it. + - Using it on the cult barrier will remove it. + + ## Minor Runes + + These are minor runes cultists can draw anywhere on the station. + + + + + + Can be used to convert or sacrifice targets on it. It takes two cultists to convert someone. + + [bold]REMINDER: One cultist is required to sacrifice a dead body and three for a live one, + standing adjacent to the rune. Each sacrifice will add to the Cult's total number of sacrifices, which are used + to revive deceased bretheren instantly over a Revival Rune.[/bold] + + + + + Grants a buff allowing cultists to prepare greater amounts of blood magic at far less of a cost. While you have + it, the spell count is capped at 4 instead of 1. Additionally, drawing runes takes far less time and you don't + lose as much blood while doing it. + + + + + This rune warps everything above it to another teleport rune when used. Creating a teleport rune will allow you to + set a tag for it. + + + + + Placing a cultist corpse on the rune and activating it will bring them back to life. Consumes one charge on use + and starts with three freebie revivals, so use it sparingly. . + + + + + When invoked, makes a temporary barrier to block passage. + + + + + This rune allows you to instantly summon any living cultist to the rune, consuming it afterward. Does not work on + restrained cultists who are buckled or being pulled. + + + + + When invoked, it saps some health from the invokers to send three damaging pulses to anyone who can see the + rune and ignites them. + + + ## Major runes + + These are the major runes cultists can draw once they meet certain conditions. They need a free 3x3 space, and can only + be summoned in 3 areas around the station (or have 3 global charges). Depleting all of them makes you unable to draw + them anymore. So be careful not to consume all of them with apocalypse runes or you'll never be able to summon + Nar'Sie! + + + + + + A harbinger of the end times. It scales depending on the crew's strength relative to the cult. Effect includes a + massive EMP, total blackout, solar flare and if the cult is doing poorly, certain events. If the cult makes up to + less than 15% of current players, and an apocalypse rune is activated, a random event will + occur: + - Immovable Rod x3 + - Mouse Migration x2 + - Meteor Swarm x2 + - Vent Crickets x3 + - Four Random Anomalies + - Kudzu Growth x2 + - Vendor Mimics x2 + + + + + This rune tears apart dimensional barriers, calling forth the Geometer. To start drawing it the requested target + must have already been sacrificed. Starting to draw this rune alarms the entire station of its location. The caster + must be defended for 45 seconds before it's complete. + After it's drawn, 10 cultists, constructs, or summoned ghosts must stand on the rune, which can then be invoked to + manifest Nar'Sie itself. + + ## Blood Spells + + Blood Spells are limited-use blood magic spells that dissipate after they're spent, and they're your bread and butter + when fighting the crew. Blood Spells can be created at any time via a menu when right clicking your character. + However, blood spells created without an Empowering Rune will take longer, cause significant blood loss, and + will cap your spell count at a measly one + + A good tip is to make sure to try and have a stun spell and a teleport spell with you to escape risky situations. This + will leave only two other options for spells though, so carefully choose what you think might help best for a + particular situation. + + + ## Constructs + + Shades and constructs are slaved to their masters will. They must follow the orders of their master at any cost. They + are capable of grasping intent, unlike synthetic beings. Constructs created by cultists automatically become cultists + themselves, allowing them to identify their team mates, and even count for the escape objective. + + + + + Shades are fragile, but being recaptured into their soul shard heals them. Useful if you quickly need someone to help + you activate a rune. + + + + + The artificer is the "drone" of the cult. It can construct cult-floors, walls and reinforced walls, as well as take + apart the station, but its main purpose is to provide the materials to construct additional constructs. It can create + new soul stones or shells after a certain time. + + + + + The wraith is a tiny bit more fragile than a human but has a strong melee attack. It can become invisible and travel + through closed doors and even walls by using it's phase shift ability. + + + + + Juggernauts are strong, slow and have lots of health. They can destroy any wall by simply punching it and do more + damage than Wraiths. They cannot be pushed or grabbed and even have a force-wall ability similar to the wizard spell. + + ## Tips + - Only cultists can know a rune's name and effects by examining it. + - Always be ready to summon a cultist in trouble. You can't summon them if they're already cuffed. + - Keeping a shade in a Soulstone Shard with you will allow you to use two-person runes by yourself, by releasing and + then recapturing the shade. + - Cultists often find a use for medibots. Having a single bot with a low threshold, backed up by brutepacks or pylons, + can keep your cult in fighting shape. + - The EMP spell and Apocalypse Rune are both incredibly useful. They can give you access almost anywhere, just don't + forget your crowbar! + diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png new file mode 100644 index 0000000000000000000000000000000000000000..3b09dd4520c7b0adccd5f14f688c7a27d35f4853 GIT binary patch literal 1852 zcmV-C2gCS@P);(SmFW+)MnzGb~mZQMW2QLT>Y2=S|yg+D3tAyeN=|>Ns@>xXD(Z!oK zOztjzQwPZK$RFtdXkNe3e*EMKiO86tD?6ll{pclk9MBE?x(>*In5(oygPQSq{@*fq z@!z8HSM_#kezDvMj~^UHfh>T_yXp4uElSe}P(7@Q?1-wfz5l}Ku=;&F(i8j)2p@>4 z$e8d|+CC7YgIZPlywaYEjEN8C7ma(VYqt=}vEMCxD|3Q|qrmq53sQ5}NQ6g8ghvgp zCc>ixwe$G#F+llk6b=jIvRP7d*UEaL{Q;m`_%$gYb3ZkAja)8Ap`cSN7SZsbbIkU^ zuZFIMk0Qqui$#J#C0C1oJF^;$-0v2CRRpNvlFMc(92O`Ri|8DqbIcnkU!Q*pfX?yB zkA*PC;Ty9H)-6`B)kROY@r_RSKrGEJh^f#eF&a2m&d1OtBmabwmp(9bMg!->ROpge znq4rSVW$qL`R^uvt2*FQJ1_^_xH?ZZo2785lYe~#z;^yOHY<95Fxmiful^}FO4YM6 zJ9(%MeU0$fD$(KJO&e`ENg1d34Tr(v>+)DDjgvw z-Y+ZncBR$<0z4+?sRlP&VR-~6!RB-zsDrPr?9@#Ub7(ukZ@CzmEuV;O5Lcb6DR}Gvmu}x73FQ_{+QLrYl3k z0W;v)1fKoA?`R@39Mp(KqbDDz1*wJ1faiLpxLL(l3uoxefMfi+De&sQqNR?@0vI|| z-mzKV+9YV{m(8UWzInkkT$uzp!FOB()apMR)QC+?7~c(e1FlSm8{tah!`=X4Z-7`V z<{00R1Ele42iCVX*#z9(5UUk6T@FgGI4HeheQT5TtxeXVDckrp#YKIy&5EFT{Fn2E zIbiZa2!LmQ=4};Hb7(g!f{pls<=u1@zO6zkA1tStt*UpXq9gTuAjZ4_F?}H9B-r}J7LvfcJSp}ZWICP+jsKj+hS51jRbBo zw5l=Y=hhnuY*l=03{O_{Izf+jT3Rwg84&m4NlOpQ>}hl5JkQxWb0=T-f0d$_9@3oxj^8sC#42YF@ z(lvg5C7yKs@TA*vYR?CBOKMU;=6HX<#oUZ)k9w+ ze*Shm34niR!)U`v%CvJnpqJ9}e1J4|Ng5hYp0q3XtLlB9iKX)a>Kb32-@C!j_gZXI zV{Y^Fy_Tlu18&EY)^~Us@bjxX8{CU0T{}JQws@iZR+lQp%?>{=3uin0e6PjP`2h2R zsU3d4*JA0v##B*_4|@Xu#9}c3p8atEboP9J+v2DQ%5*XF^S9&4j-L;3TZ{;p0Z(RU zLs%KtRo!|L94;qy2G3gF~VA1pv_ zKQATc;DWaj38@Ha1PJ^20>D6k^;NtgktBj1nTU=8xc9STH`#cv{MYebLQZ5n4G{=p zH0r)0ItpN+f4GR==fNzS7mV|9ClN$SGXC-C{5uRG4TQIqC4d`;4dH$fT~MI$YDy#rqwrcxd0cG z1m-;oDE+H;MLu*z0~7ajF95w~kBeNP;CbH_(8lbID8!G9wsmkpfOmwxY^G+%qhP}T z&Nk2xc$bk3ypVO=J9a$;)6>(icVx6(>ze|$@z8*^g(b+lN3!3L6k)TqeViwcd1%Fp zioo{y>{TklR`7G(ZY*9@+Eq+p z45sn@_D08((^i02h}#>fwZ&y-fLc0+)mjZowdO0S{^}*bi*+u7k?Vq4+S_{s1Os-< zu_O`;&LN28;v7NKH0C`OF$v;M^&}vyjY6q8fDuO{WU;a!)QTHdE;b$JCpTCh;99=?`T1n@MxF%FW?qLZngf{2-!DM)WL3z1Sq w_|P~@_Dz5Y62Uqsg1779f=cs0gz87@f80vwJDE89DgXcg07*qoM6N<$f Date: Wed, 11 Dec 2024 23:19:54 +0000 Subject: [PATCH 08/10] Automatic Changelog Update (#1276) --- Resources/Changelog/Changelog.yml | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 81d1ee417a9..9d9e8f7cb31 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8570,3 +8570,46 @@ Entries: id: 6572 time: '2024-12-11T23:12:43.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1324 +- author: Remuchi + changes: + - type: Add + message: In-game guide book to kickstart your sinister activities. + - type: Add + message: Constructs now have abilities. + - type: Add + message: >- + Rending rune and apocalypse rune now should only be placed in the + specific spots on maps. Needs to be mapped. + - type: Add + message: Veil Shifter now displays how much charges it has when examining. + - type: Add + message: >- + Cult runes now have descriptions. Also stating how much invokers + required for each rune. + - type: Add + message: Blood rites can now be dropped&deleted. + - type: Add + message: Blood rites now suck... blood in 0.5 tiles radius. + - type: Remove + message: Non-cultists can no longer examine runes. + - type: Fix + message: >- + Fixed Cult Objective Target selection. You can (and should) sacrifice + your own people now. + - type: Fix + message: Non cultists can no longer use veil shifter. + - type: Fix + message: Teleport spell is no more a cheap rip-off and now actually teleports. + - type: Fix + message: Timed Factories can't no more produce infinite number of entities. + - type: Fix + message: Offering rune should now properly convert someone. + - type: Fix + message: >- + Sacrificing body with mind now properly transfers their mind to soul + shard. + - type: Fix + message: Shadow Shackles now cuffs the target instead of the caster (lmao). + id: 6573 + time: '2024-12-11T23:19:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1276 From 5899f4ea5a978ded0362bdf46185f8fbb1a2607c Mon Sep 17 00:00:00 2001 From: Skubman Date: Thu, 12 Dec 2024 07:26:32 +0800 Subject: [PATCH 09/10] Pistol-Whipping (Guns as Melee Weapons) (#1335) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description Adds the ability to use guns as melee weapons and throwing weapons. The gun melee attack is a Light Attack done with a right click. The attack rate is slower than average melee weapons. The cooldown on melee attacks after shooting has been removed entirely, so you can right-click immediately after shooting (like in hero shooters 😎). The cooldown on shooting after a melee attack has been set to a constant 0.5 seconds. ## Balance Technically speaking, weaving shooting and pistol-whipping lowers your overall DPS in most cases, because you can't shoot for 0.5 seconds after doing a melee attack. With _skillful_ usage, however, it provides some key tactical advantages: - Preserving ammo by dealing damage without firing a shot. - Deal stamina damage as a natural effect of dealing melee Blunt damage. - Most non-pistol guns have increased blunt stamina damage factors to help with this. - Bypassing Piercing resists of armors with a higher Piercing resist than Blunt resist like plate carriers. - Doing the combo of right-clicking immediately after shooting deals a big burst of damage. Pistol-whipping also helps as a last resort when you run out of ammo. However, it's almost always better to use a proper melee weapon instead of a gun as a pure melee weapon, because you can't power attack with guns and the guns' melee attack rate are slower by design than most melee weapons. Shotguns benefit the most from pistol-whipping, because their ideal range is close-range where a melee attack can be performed, and their low fire rate means they're not affected too much by the 0.5s shooting cooldown. Guns have received throwing damage. You can throw guns at the enemy once you're out of ammo to deal extra damage. I think this makes fights a little more spectacular to watch. Melee damage sorted by group (from least to greatest): 1. Revolver 2. Pistol (+ Energy Pistol) 3. Sniper rifle 4. Rifle (+ Energy Rifle) 5. Sub Machine Gun 6. Shotgun 7. Light Machine Gun (L6 saw) 8. Heavy Machine Gun ## Media **mk 58** ![image](https://github.com/user-attachments/assets/d17bc1c7-7ec5-4124-93c3-306026f7a23f) **Kardashev-Mosin (Wielded)** ![image](https://github.com/user-attachments/assets/52132262-48ae-48fa-a72c-3df5ae6bfd17) **Basic Combat** https://github.com/user-attachments/assets/922998d1-0cd0-4fea-8f0b-365bcff3c12b **Particle Decelerator Combo (80 damage)** https://github.com/user-attachments/assets/ce62334a-13dd-46d9-9c0e-453e26bf1261 Combo: Shoot + Power Attack, wait 1.6s then Power Attack + Throw This combo costs 90 stamina which almost depletes 100 stamina leaving you vulnerable, so the Vigor trait can help you pull off this combo. ## Changelog :cl: Skubman - add: Pistol-whipping has been added. You can press right click with a gun to perform a Light Attack. Most guns will deal Blunt damage, apart from the Kardashev-Mosin dealing Piercing/Slash damage with its bayonet. Weaving bullets and melee attacks correctly will give you the upper hand in combat. - add: Guns can now be thrown to deal the same damage as their melee damage. --- .../Melee/MeleeWeaponSystem.Effects.cs | 10 ++ .../Weapons/Melee/MeleeWeaponSystem.cs | 37 +++--- .../Weapons/Melee/MeleeWeaponSystem.cs | 25 ++-- .../Weapons/Melee/MeleeWeaponComponent.cs | 20 +++ .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 42 ++----- .../Weapons/Ranged/Components/GunComponent.cs | 6 + .../Weapons/Ranged/Systems/SharedGunSystem.cs | 18 +-- .../Locale/en-US/store/uplink-catalog.ftl | 2 +- .../Weapons/Guns/Battery/battery_guns.yml | 18 +++ .../Objects/Weapons/Guns/LMGs/lmgs.yml | 21 +++- .../Objects/Weapons/Guns/Basic/base_pka.yml | 17 +++ .../Weapons/Guns/Battery/battery_guns.yml | 114 ++++++++++++++++++ .../Objects/Weapons/Guns/HMGs/hmgs.yml | 14 +++ .../Objects/Weapons/Guns/LMGs/lmgs.yml | 18 +++ .../Weapons/Guns/Launchers/launchers.yml | 14 +++ .../Objects/Weapons/Guns/Pistols/pistols.yml | 13 ++ .../Weapons/Guns/Revolvers/revolvers.yml | 13 ++ .../Objects/Weapons/Guns/Rifles/rifles.yml | 18 +++ .../Objects/Weapons/Guns/SMGs/smgs.yml | 18 +++ .../Weapons/Guns/Shotguns/shotguns.yml | 64 ++++++++++ .../Objects/Weapons/Guns/Snipers/snipers.yml | 78 ++++++++++-- .../Objects/Weapons/Guns/flare_gun.yml | 13 ++ .../Objects/Weapons/Guns/pneumatic_cannon.yml | 13 ++ 23 files changed, 528 insertions(+), 78 deletions(-) diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs index 3e1a4b1906d..ffcd7454ac7 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs @@ -136,6 +136,7 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang { const float thrustEnd = 0.05f; const float length = 0.15f; + var rotation = sprite.Rotation + spriteRotation; var startOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f)); var endOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance)); @@ -144,6 +145,15 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang Length = TimeSpan.FromSeconds(length), AnimationTracks = { + new AnimationTrackComponentProperty() + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(rotation, 0f), + } + }, new AnimationTrackComponentProperty() { ComponentType = typeof(SpriteComponent), diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 1d72f16706f..9f2ee5eb8f6 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Wieldable.Components; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -71,10 +72,22 @@ public override void Update(float frameTime) return; } - var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use); - var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary); + var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use) == BoundKeyState.Down; + var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary) == BoundKeyState.Down; - if (weapon.AutoAttack || useDown != BoundKeyState.Down && altDown != BoundKeyState.Down) + // Disregard inputs to the shoot binding + if (TryComp(weaponUid, out var gun) && + // Except if can't shoot due to being unwielded + (!HasComp(weaponUid) || + (TryComp(weaponUid, out var wieldable) && wieldable.Wielded))) + { + if (gun.UseKey) + useDown = false; + else + altDown = false; + } + + if (weapon.AutoAttack || !useDown && !altDown) { if (weapon.Attacking) { @@ -82,23 +95,13 @@ public override void Update(float frameTime) } } - if (weapon.Attacking || weapon.NextAttack > Timing.CurTime) + if (weapon.Attacking || weapon.NextAttack > Timing.CurTime || (!useDown && !altDown)) { return; } // TODO using targeted actions while combat mode is enabled should NOT trigger attacks. - // TODO: Need to make alt-fire melee its own component I guess? - // Melee and guns share a lot in the middle but share virtually nothing at the start and end so - // it's kinda tricky. - // I think as long as we make secondaries their own component it's probably fine - // as long as guncomp has an alt-use key then it shouldn't be too much of a PITA to deal with. - if (TryComp(weaponUid, out var gun) && gun.UseKey) - { - return; - } - var mousePos = _eyeManager.PixelToMap(_inputManager.MouseScreenPosition); if (mousePos.MapId == MapId.Nullspace) @@ -118,7 +121,8 @@ public override void Update(float frameTime) } // Heavy attack. - if (altDown == BoundKeyState.Down) + if (!weapon.DisableHeavy && + (!weapon.SwapKeys ? altDown : useDown)) { // If it's an unarmed attack then do a disarm if (weapon.AltDisarm && weaponUid == entity) @@ -139,7 +143,8 @@ public override void Update(float frameTime) } // Light attack - if (useDown == BoundKeyState.Down) + if (!weapon.DisableClick && + (!weapon.SwapKeys ? useDown : altDown)) { var attackerPos = Transform(entity).MapPosition; diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index daf76268a3c..26f0c20608e 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -53,22 +53,25 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, return; var damageSpec = GetDamage(uid, args.User, component); - if (damageSpec.Empty) return; - _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - - if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) - _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + if (!component.DisableClick) + _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - if (component.HeavyStaminaCost != 0) + if (!component.DisableHeavy) { - var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( - Loc.GetString("damage-stamina-cost", - ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); - args.Message.PushNewline(); - args.Message.AddMessage(staminaCostMarkup); + if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) + _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + + if (component.HeavyStaminaCost != 0) + { + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( + Loc.GetString("damage-stamina-cost", + ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); + args.Message.PushNewline(); + args.Message.AddMessage(staminaCostMarkup); + } } } diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 16847c3797e..b698728193f 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -41,6 +41,26 @@ public sealed partial class MeleeWeaponComponent : Component [DataField] public bool ResetOnHandSelected = true; + /// + /// If true, swaps the keybinds for light attacks and heavy attacks. + /// + [DataField] + public bool SwapKeys = false; + + /// + /// If true, disables heavy attacks for this weapon, and prevents the heavy damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableHeavy = false; + + /// + /// If true, disables single-target attacks for this weapon, and prevents the single-target damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableClick = false; + /* * Melee combat works based around 2 types of attacks: * 1. Click attacks with left-click. This attacks whatever is under your mnouse diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 7bc817dd24a..aa15ecfb286 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -62,8 +62,6 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnMeleeSelected); - SubscribeLocalEvent(OnMeleeShotAttempted); - SubscribeLocalEvent(OnMeleeShot); SubscribeLocalEvent(OnGetBonusMeleeDamage); SubscribeLocalEvent(OnGetBonusHeavyDamageModifier); SubscribeLocalEvent(OnGetBonusMeleeAttackRate); @@ -86,24 +84,6 @@ private void OnMapInit(EntityUid uid, MeleeWeaponComponent component, MapInitEve #endif } - private void OnMeleeShotAttempted(EntityUid uid, MeleeWeaponComponent comp, ref ShotAttemptedEvent args) - { - if (comp.NextAttack > Timing.CurTime) - args.Cancel(); - } - - private void OnMeleeShot(EntityUid uid, MeleeWeaponComponent component, ref GunShotEvent args) - { - if (!TryComp(uid, out var gun)) - return; - - if (gun.NextFire > component.NextAttack) - { - component.NextAttack = gun.NextFire; - Dirty(uid, component); - } - } - private void OnMeleeSelected(EntityUid uid, MeleeWeaponComponent component, HandSelectedEvent args) { var attackRate = GetAttackRate(uid, args.User, component); @@ -169,29 +149,23 @@ private void OnStopAttack(StopAttackEvent msg, EntitySessionEventArgs args) private void OnLightAttack(LightAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableClick) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableHeavy) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } diff --git a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs index 8d7ecae1a81..d522df5395e 100644 --- a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs @@ -208,6 +208,12 @@ public sealed partial class GunComponent : Component [AutoPausedField] public TimeSpan NextFire = TimeSpan.Zero; + /// + /// After dealing a melee attack with this gun, the minimum cooldown in seconds before the gun can shoot again. + /// + [DataField] + public float MeleeCooldown = 0.528f; + /// /// What firemodes can be selected. /// diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 2fbb6785e29..7afb41239c6 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -114,14 +114,18 @@ private void OnMapInit(Entity gun, ref MapInitEvent args) private void OnGunMelee(EntityUid uid, GunComponent component, MeleeHitEvent args) { - if (!TryComp(uid, out var melee)) - return; + var curTime = Timing.CurTime; - if (melee.NextAttack > component.NextFire) - { - component.NextFire = melee.NextAttack; - Dirty(uid, component); - } + if (component.NextFire < curTime) + component.NextFire = curTime; + + var meleeCooldown = TimeSpan.FromSeconds(component.MeleeCooldown); + + component.NextFire += meleeCooldown; + while (component.NextFire <= curTime) + component.NextFire += meleeCooldown; + + Dirty(uid, component); } private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 1754bb89d3e..2ac91d171eb 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -9,7 +9,7 @@ uplink-pistol-cobra-name = Cobra uplink-pistol-cobra-desc = A rugged, robust operator handgun with inbuilt silencer. Uses pistol magazines (.25 caseless). uplink-rifle-mosin-name = Surplus Rifle -uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. +uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. The attached bayonet allows it to be used as an improvised spear. uplink-esword-name = Energy Sword uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can be stored in pockets when turned off. Makes a lot of noise when used or turned on. diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index f3b41bdbfec..d1251659ece 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -165,6 +165,15 @@ Disabler: { state: mode-disabler } Lethal: { state: mode-lethal } Special: { state: mode-stun } # Unused + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: miniature energy gun @@ -232,6 +241,15 @@ - Sidearm - type: StaticPrice price: 750 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: PDW-9 Energy Pistol diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 9fb68453ee3..64fdf76f9a3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity name: Experimental L6 SAW parent: BaseItem id: WeaponLightMachineGunL6Borg @@ -38,4 +38,21 @@ # - type: DynamicPrice # price: 500 - type: Appearance - + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml index 93621bc3a28..4eec74f05a6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml @@ -48,3 +48,20 @@ - Belt - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 62a98bd5da8..62291cc2714 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -37,6 +37,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponPowerCell @@ -78,6 +96,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponBatterySmall @@ -98,6 +134,15 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity id: BaseWeaponPowerCellSmall @@ -114,6 +159,15 @@ quickEquip: false slots: - Belt + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: svalinn laser pistol @@ -248,6 +302,10 @@ fireCost: 62.5 - type: StaticPrice price: 300 + - type: MeleeWeapon + damage: + types: + Blunt: 4 - type: entity name: pulse pistol @@ -377,6 +435,14 @@ - type: HitscanBatteryAmmoProvider proto: RedHeavyLaser fireCost: 100 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: portable particle decelerator @@ -408,6 +474,22 @@ - type: Battery maxCharge: 10000 startingCharge: 10000 + - type: MeleeWeapon + attackRate: 1.6 + damage: # This is super expensive, low attack rate, slows down the user and high stam cost so it can be high + types: + Blunt: 34 + Structural: 10 + swapKeys: false + disableHeavy: false + disableClick: true + bluntStaminaDamageFactor: 1.5 + heavyRateModifier: 1.0 + heavyDamageBaseModifier: 1.0 + heavyStaminaCost: 21 + wideAnimationRotation: 270 + - type: DamageOtherOnHit + staminaCost: 48 - type: entity name: x-ray cannon @@ -476,6 +558,12 @@ - type: GuideHelp guides: - Security + - type: MeleeWeapon + damage: + types: + Blunt: 5.0 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 135 - type: entity name: disabler SMG @@ -514,6 +602,12 @@ zeroVisible: true - type: StaticPrice price: 260 + - type: MeleeWeapon + damage: + types: + Blunt: 6.5 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 180 - type: entity name: practice disabler @@ -539,6 +633,11 @@ - type: ProjectileBatteryAmmoProvider proto: BulletDisablerPractice fireCost: 100 + - type: MeleeWeapon + damage: + types: + Blunt: 3 + bluntStaminaDamageFactor: 1.0 - type: entity name: taser @@ -615,6 +714,15 @@ price: 750 - type: StealTarget stealGroup: WeaponCaptain + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9 + bluntStaminaDamageFactor: 1.25 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: advanced laser pistol @@ -650,6 +758,12 @@ - type: Appearance - type: StaticPrice price: 63 + - type: MeleeWeapon + damage: + types: + Blunt: 8 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: C.H.I.M.P. handcannon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml index 9d685e1ddc0..72df09ac508 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml @@ -20,6 +20,20 @@ - type: StaticPrice price: 500 # No chamber because HMG may want its own + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 16 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 16 - type: entity name: minigun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index f90cbb6e601..4b6e21a4922 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -62,6 +62,24 @@ price: 500 - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 - type: entity name: L6 SAW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index be4ea534d7d..dc49dce0f3a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -19,6 +19,20 @@ containers: ballistic-ammo: !type:Container ents: [] + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 14 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 14 - type: entity name: china lake diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 73c2231b23a..fefc41ae865 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -66,6 +66,19 @@ - type: StaticPrice price: 500 - type: AmmoCounter + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: viper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 734b6c4adca..c85ce56974b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -50,6 +50,19 @@ path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: Deckard diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 61df2b857ea..0aa281b95c0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -51,6 +51,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: AKMS diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index b448ddea3e4..8d43953a07b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -54,6 +54,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: Atreides diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 44ee4a08c1b..40c85374123 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -43,6 +43,24 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: Bulldog @@ -102,6 +120,24 @@ - type: Appearance - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: antique Bulldog @@ -136,6 +172,12 @@ graph: ShotgunSawn node: start deconstructionTarget: null + - type: MeleeWeapon + damage: + types: + Blunt: 8.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: double-barreled shotgun @@ -162,6 +204,13 @@ - type: BallisticAmmoProvider - type: Wieldable - type: GunRequiresWield + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 9 + - type: DamageOtherOnHit + staminaCost: 8.0 - type: entity parent: WeaponShotgunEnforcer @@ -216,6 +265,13 @@ graph: ShotgunSawn node: shotgunsawn deconstructionTarget: null + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: sawn-off shogun @@ -255,6 +311,14 @@ deconstructionTarget: null - type: StaticPrice price: 0 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: blunderbuss diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 88c00bedbd5..86b90f2bdea 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -39,12 +39,30 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + wideAnimationRotation: 135 + animation: WeaponArcThrust + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: Kardashev-Mosin parent: [BaseWeaponSniper, BaseGunWieldable] id: WeaponSniperMosin - description: A weapon for hunting, or endless trench warfare. Uses .30 rifle ammo. + description: A weapon for hunting, or endless trench warfare, with a bayonet attached at the barrel. Uses .30 rifle ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi @@ -56,6 +74,30 @@ soundGunshot: path: /Audio/Weapons/Guns/Gunshots/sniper.ogg fireOnDropChance: 1 + - type: MeleeWeapon + range: 1.75 + damage: + types: + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: Kardashev-Mosin @@ -114,15 +156,29 @@ capacity: 1 proto: CartridgeAntiMateriel - type: MeleeWeapon - wideAnimationRotation: -135 + range: 1.75 damage: types: - Piercing: 15 #you fucking stab em - Bloodloss: 2 #no way to apply bleed, triangular bayonet wounds are hard to fix(source:that one copypasta) - angle: 0 - animation: WeaponArcThrust + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: flintlock pistol @@ -152,4 +208,12 @@ proto: CartridgeAntiMateriel - type: StaticPrice price: 0 - + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml index 9b046a7aae6..0ad30e9ed6e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml @@ -37,3 +37,16 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 6.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 4.5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 12511729460..2f1527d3592 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -61,6 +61,19 @@ storagebase: !type:Container ents: [] gas_tank: !type:ContainerSlot + - type: MeleeWeapon + attackRate: 1.33 + damage: + types: + Blunt: 9 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: pie cannon From 478e159fb76c497423e370bd583958295bbbb443 Mon Sep 17 00:00:00 2001 From: SimpleStation Changelogs Date: Wed, 11 Dec 2024 23:27:08 +0000 Subject: [PATCH 10/10] Automatic Changelog Update (#1335) --- Resources/Changelog/Changelog.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9d9e8f7cb31..60540bb9f63 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8613,3 +8613,17 @@ Entries: id: 6573 time: '2024-12-11T23:19:30.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1276 +- author: Skubman + changes: + - type: Add + message: >- + Pistol-whipping has been added. You can press right click with a gun to + perform a Light Attack. Most guns will deal Blunt damage, apart from the + Kardashev-Mosin dealing Piercing/Slash damage with its bayonet. Weaving + bullets and melee attacks correctly will give you the upper hand in + combat. + - type: Add + message: Guns can now be thrown to deal the same damage as their melee damage. + id: 6574 + time: '2024-12-11T23:26:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1335