]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Reorganize and clean Fun yml (#42184)
authorāda <ss.adasts@gmail.com>
Wed, 7 Jan 2026 21:49:24 +0000 (15:49 -0600)
committerGitHub <noreply@github.com>
Wed, 7 Jan 2026 21:49:24 +0000 (21:49 +0000)
* don't look at this commit size i'm not proud

* self review

* more final changes

* more comments

* review

* review

---------

Co-authored-by: iaada <iaada@users.noreply.github.com>
Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
36 files changed:
Resources/Prototypes/Entities/Objects/Fun/Figurines/figurine_boxes.yml [moved from Resources/Prototypes/Entities/Objects/Fun/figurine_boxes.yml with 100% similarity]
Resources/Prototypes/Entities/Objects/Fun/Figurines/figurines.yml [moved from Resources/Prototypes/Entities/Objects/Fun/figurines.yml with 100% similarity]
Resources/Prototypes/Entities/Objects/Fun/Figurines/mech_figurines.yml [moved from Resources/Prototypes/Entities/Objects/Fun/mech_figurines.yml with 100% similarity]
Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml
Resources/Prototypes/Entities/Objects/Fun/Plushies/plushielizard_jobs.yml [moved from Resources/Prototypes/Entities/Objects/Fun/plushielizard_jobs.yml with 100% similarity]
Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml [moved from Resources/Prototypes/Entities/Objects/Fun/plushies.yml with 94% similarity]
Resources/Prototypes/Entities/Objects/Fun/Tabletop/backgammon.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/base.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/checkers.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/chess.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/dnd.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/parchis.yml
Resources/Prototypes/Entities/Objects/Fun/Tabletop/tabletopGeneric.yml
Resources/Prototypes/Entities/Objects/Fun/balloons.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/crayons.yml
Resources/Prototypes/Entities/Objects/Fun/darts.yml
Resources/Prototypes/Entities/Objects/Fun/dice.yml
Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/error.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/orbs.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Fun/pai.yml
Resources/Prototypes/Entities/Objects/Fun/puppet.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/skub.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/sound_maker.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml [deleted file]
Resources/Prototypes/Entities/Objects/Fun/sports.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Fun/toys.yml
Resources/Prototypes/Entities/Objects/Fun/weapons.yml [new file with mode: 0644]
Resources/Prototypes/Entities/Objects/Fun/whistles.yml [deleted file]
Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml [moved from Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml with 100% similarity]
Resources/Prototypes/Entities/Objects/Misc/candy_bucket.yml [moved from Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml with 97% similarity]
Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml
Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml
Resources/Prototypes/Entities/Objects/base_item.yml

index d6bd2e949afd65e170fe237249f85382d6039ab8..61b976c4d3d6c5b29f0f1ff67ab7dd3e8022ef84 100644 (file)
 
 #These are for instruments that are larger, can't be picked up, or have collision
 - type: entity
-  name: baseinstrument
-  id: BasePlaceableInstrument
-  parent: BaseStructureDynamic
   abstract: true
+  parent: BaseStructureDynamic
+  id: BasePlaceableInstrument
+  name: baseinstrument
   components:
   - type: Instrument
   - type: ActivatableUI
   - type: RequireProjectileTarget
 
 - type: entity
+  abstract: true
   parent: BasePlaceableInstrument
   id: BasePlaceableInstrumentRotatable
   name: baseinstrumentrotatable
-  abstract: true
   components:
   - type: Rotatable
     rotateWhileAnchored: true
similarity index 100%
rename from Resources/Prototypes/Entities/Objects/Fun/plushielizard_jobs.yml
rename to Resources/Prototypes/Entities/Objects/Fun/Plushies/plushielizard_jobs.yml
index ddde35195f3f66296ed03e7bff8a07c183ab6e35..77ead8db8a87cd63d135ab0c5c8e293a4a6b5002 100644 (file)
@@ -1,8 +1,8 @@
 # This base is created so we don't have to define the different sprite path for each plushie job.
 - type: entity
+  abstract: true
   parent: PlushieLizard
   id: BasePlushieLizardJob
-  abstract: true
   components:
   - type: Sprite
     sprite: Objects/Fun/plushielizard_jobs.rsi
similarity index 94%
rename from Resources/Prototypes/Entities/Objects/Fun/plushies.yml
rename to Resources/Prototypes/Entities/Objects/Fun/Plushies/plushies.yml
index a22d26c6f7c3807a9fdb2b51b7944ecbb434d657..55994be34881a1b974411b32af3b35d60308d764 100644 (file)
   - type: FoodSequenceElement
     entries:
       CottonBurger: PlushieVulp
+
+- type: entity
+  parent: BasePlushie
+  id: ToyIan
+  name: ian toy
+  description: Unable to eat, but just as fluffy as the real guy!
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/toy_ian.rsi
+    state: icon
+  - type: Clothing
+    quickEquip: false
+    sprite: Objects/Fun/toy_ian.rsi
+    slots:
+    - HEAD
+    clothingVisuals:
+      head:
+      - state: equipped-HELMET
+        offset: "0, 0.06"
+  - type: Item
+    size: Tiny
+  - type: EmitSoundOnUse
+    sound: &SoundIan
+  - type: EmitSoundOnLand
+    sound: *SoundIan
+  - type: EmitSoundOnActivate
+    sound: *SoundIan
+  - type: EmitSoundOnTrigger
+    sound: *SoundIan
+  - type: EmitSoundOnCollide
+    sound: *SoundIan
+  - type: MeleeWeapon
+    soundHit: *SoundIan
+  - type: Edible
+    useSound: *SoundIan
+  - type: FoodSequenceElement
+    entries:
+      CottonBurger: IanPlushie
+
+- type: entity
+  parent: BasePlushie
+  id: ToyAmongPequeno
+  name: among pequeño
+  description: Sus!
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/pequeno.rsi
+    layers:
+    - state: base
+      map: [ "enum.DamageStateVisualLayers.Base" ]
+    - state: visor
+  - type: Clothing
+    sprite: Objects/Fun/pequeno.rsi
+    slots:
+    - HEAD
+    clothingVisuals:
+      head:
+      - state: equipped-HELMET-body
+      - state: equipped-HELMET-vis
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: inhand-left-body
+      - state: inhand-left-vis
+      right:
+      - state: inhand-right-body
+      - state: inhand-right-vis
+  - type: RandomSprite
+    available:
+    - enum.DamageStateVisualLayers.Base:
+        base: Sixteen
+#  - type: FoodSequenceElement - does not work with randomized sprites
+#    entries:
+#      CottonBurger: AmongPequeno
index 965b25dbc001eb66b81e773fadca96a6c894d9af..9eb178c132b8779ab6c7340ecca9e0828a673eec 100644 (file)
     size: 550, 410
     setup:
       !type:TabletopBackgammonSetup
-      boardPrototype: BackgammonBoardTabletop
+      boardPrototype: &BackgammonBoard BackgammonBoardTabletop
 
 - type: entity
-  id: BackgammonBoardTabletop
-  name: backgammon
   parent: BaseBoardTabletop
+  id: *BackgammonBoard
+  name: backgammon
   categories: [ HideSpawnMenu ]
   components:
   - type: Sprite
index f9ef69b1d17984be7dfc62b2c54c26e527f03448..5629aee022e3534be50ffa57037728381d6da1eb 100644 (file)
@@ -1,38 +1,39 @@
+# When adding a new board game, also add it to id: AllBoardGamesTable
+
+# The actual item that players can pick up, or throw when they lose
 - type: entity
+  abstract: true
   parent: BaseItem
   id: BaseBoardEntity # Board item
   name: board
-  abstract: true
   description: A blank board.
   components:
-    - type: TabletopGame
-      size: 256, 256
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: Crowbar
-    - type: Tag
-      tags:
-        - TabletopBoard
+  - type: TabletopGame
+    size: 256, 256
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: Crowbar
+  - type: Tag
+    tags:
+    - TabletopBoard
 
 - type: entity
-  id: BaseTabletopPiece # Board piece
-  parent: BaseItem
   abstract: true
+  parent: BaseItem
+  id: BaseTabletopPiece # Board piece
   components:
   - type: TabletopDraggable
   - type: Sprite
     noRot: true
   - type: Appearance
 
+# Entity which acts as the background sprite in the tabletop game
 - type: entity
+  abstract: true
   id: BaseBoardTabletop
   name: baseboard
-  abstract: true
   categories: [ HideSpawnMenu ]
   components:
-  - type: Tag
-    tags:
-      - TabletopBoard
   - type: Sprite
     noRot: false
     drawdepth: FloorTiles
index 6c206ca26f765c991e406325a77a8bc6e510be05..20daf02291e407f0bc249b349f889664dbe615c0 100644 (file)
   name: white checker piece
   parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/checker_pieces.rsi
-      state: w_checker_piece
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/checker_pieces.rsi
+    state: w_checker_piece
 
 - type: entity
   id: *crownWhite
   name: white checker crown
   parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/checker_pieces.rsi
-      state: w_checker_crown
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/checker_pieces.rsi
+    state: w_checker_crown
 
 - type: entity
   id: *pieceBlack
   name: black checker piece
   parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/checker_pieces.rsi
-      state: b_checker_piece
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/checker_pieces.rsi
+    state: b_checker_piece
 
 - type: entity
   id: *crownBlack
   name: black checker crown
   parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/checker_pieces.rsi
-      state: b_checker_crown
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/checker_pieces.rsi
+    state: b_checker_crown
index aeba3918c49beca9bbb05990a08180d3b27104a3..6a2793fedde0cd12cee8a3ea57c516b1cabae7ab 100644 (file)
@@ -1,5 +1,4 @@
-# Chessboard item (normal in game item you can hold in your hand)
-- type: entity
+- type: entity
   parent: BaseBoardEntity
   id: ChessBoard
   name: chessboard
     size: 338, 274
     setup:
       !type:TabletopChessSetup
-      boardPrototype: ChessBoardTabletop
+      boardPrototype: &ChessBoard ChessBoardTabletop
 
-# Chessboard tabletop item (item only visible in tabletop game)
 - type: entity
-  id: ChessBoardTabletop
-  name: chessboard
   parent: BaseBoardTabletop
+  id: *ChessBoard
+  name: chessboard
   categories: [ HideSpawnMenu ]
   components:
   - type: Sprite
 
 # White pieces
 - type: entity
+  parent: BaseTabletopPiece
   id: WhiteKing
   name: white king
-  parent: BaseTabletopPiece
   components:
   - type: Sprite
     sprite: Objects/Fun/Tabletop/chess_pieces.rsi
     state: w_king
 
 - type: entity
+  parent: BaseTabletopPiece
   id: WhiteQueen
   name: white queen
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: w_queen
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: w_queen
 
 - type: entity
+  parent: BaseTabletopPiece
   id: WhiteRook
   name: white rook
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: w_rook
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: w_rook
 
 - type: entity
+  parent: BaseTabletopPiece
   id: WhiteBishop
   name: white bishop
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: w_bishop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: w_bishop
 
 - type: entity
+  parent: BaseTabletopPiece
   id: WhiteKnight
   name: white knight
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: w_knight
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: w_knight
 
 - type: entity
+  parent: BaseTabletopPiece
   id: WhitePawn
   name: white pawn
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: w_pawn
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: w_pawn
 
 # Black pieces
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackKing
   name: black king
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_king
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_king
 
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackQueen
   name: black queen
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_queen
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_queen
 
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackRook
   name: black rook
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_rook
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_rook
 
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackBishop
   name: black bishop
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_bishop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_bishop
 
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackKnight
   name: black knight
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_knight
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_knight
 
 - type: entity
+  parent: BaseTabletopPiece
   id: BlackPawn
   name: black pawn
-  parent: BaseTabletopPiece
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/chess_pieces.rsi
-      state: b_pawn
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/chess_pieces.rsi
+    state: b_pawn
index 9b00ef5e01825c9d803989057fb8d5bd445cd386..6eb38c66b703827384f571bb91ef528f75e170f0 100644 (file)
@@ -1,19 +1,17 @@
-# Board item (given to players)
+# When adding a new battlemap, also add it to id: AllBattlemapsTable
+
+# Board item (given to players)
 - type: entity
+  abstract: true
   parent: BaseBoardEntity
   id: BaseBattlemap
   name: battlemap
-  abstract: true
   description: A battlemap for your epic dungeon exploring to begin, pieces not included!
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/grassbm.rsi
-      state: icon
-    - type: TabletopGame
-      boardName: tabletop-battlemap-board-name
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: GrassBoardTabletop
+  - type: Sprite
+    state: icon
+  - type: TabletopGame
+    boardName: tabletop-battlemap-board-name
 
 - type: entity
   parent: BaseBattlemap
   name: grass battlemap
   description: A battlemap for your epic dungeon exploring to begin, pieces not included!
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/Battlemaps/grassbm.rsi
-    - type: TabletopGame
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: GrassBoardTabletop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/Battlemaps/grassbm.rsi
+  - type: TabletopGame
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: &GrassBoard GrassBoardTabletop
 
 - type: entity
   parent: BaseBattlemap
   name: moon battlemap
   description: A battlemap for your epic moon exploring to begin, pieces not included!
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/Battlemaps/moonbm.rsi
-    - type: TabletopGame
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: MoonBoardTabletop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/Battlemaps/moonbm.rsi
+  - type: TabletopGame
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: &MoonBoard MoonBoardTabletop
 
 - type: entity
   parent: BaseBattlemap
   name: sand battlemap
   description: A battlemap for your epic beach episodes to begin, pieces not included!
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/Battlemaps/sandbm.rsi
-    - type: TabletopGame
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: SandBoardTabletop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/Battlemaps/sandbm.rsi
+  - type: TabletopGame
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: &SandBoard SandBoardTabletop
 
 - type: entity
   parent: BaseBattlemap
   name: snow battlemap
   description: A battlemap for your frigid exploring to begin, pieces not included! # if this isn't funny enough i can remove it
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/Battlemaps/snowbm.rsi
-    - type: TabletopGame
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: SnowBoardTabletop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/Battlemaps/snowbm.rsi
+  - type: TabletopGame
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: &SnowBoard SnowBoardTabletop
 
 - type: entity
   parent: BaseBattlemap
   name: ship battlemap
   description: A battlemap for your epic space exploring to begin, pieces not included!
   components:
-    - type: Sprite
-      sprite: Objects/Fun/Tabletop/Battlemaps/shipbm.rsi
-    - type: TabletopGame
-      size: 543, 543
-      setup:
-        !type:TabletopEmptySetup
-        boardPrototype: ShipBoardTabletop
+  - type: Sprite
+    sprite: Objects/Fun/Tabletop/Battlemaps/shipbm.rsi
+  - type: TabletopGame
+    size: 543, 543
+    setup:
+      !type:TabletopEmptySetup
+      boardPrototype: &ShipBoard ShipBoardTabletop
 
 # Background entity (actually shown in the board)
 - type: entity
   parent: BaseBoardTabletop
-  id: GrassBoardTabletop
+  id: *GrassBoard
   name: grass battlemap
   categories: [ HideSpawnMenu ]
   components:
   - type: Sprite
     sprite: Objects/Fun/Tabletop/Battlemaps/grassbm_tabletop.rsi
     state: tabletop
-    noRot: false
-    drawdepth: FloorTiles
 
 - type: entity
   parent: BaseBoardTabletop
-  id: MoonBoardTabletop
+  id: *MoonBoard
   name: grass battlemap
   categories: [ HideSpawnMenu ]
   components:
 
 - type: entity
   parent: BaseBoardTabletop
-  id: SandBoardTabletop
+  id: *SandBoard
   name: sand battlemap
   categories: [ HideSpawnMenu ]
   components:
 
 - type: entity
   parent: BaseBoardTabletop
-  id: SnowBoardTabletop
+  id: *SnowBoard
   name: snow battlemap
   categories: [ HideSpawnMenu ]
   components:
 
 - type: entity
   parent: BaseBoardTabletop
-  id: ShipBoardTabletop
+  id: *ShipBoard
   name: ship battlemap
   categories: [ HideSpawnMenu ]
   components:
index b608f4e78767890cd0633c60c9eda46e76ff8633..17e4f3392ad125098810d101d14743ba0e63cb76 100644 (file)
@@ -1,4 +1,3 @@
-# Parchís board item (normal in game item you can hold in your hand)
 - type: entity
   parent: BaseBoardEntity
   id: ParchisBoard
     size: 574, 574
     setup:
       !type:TabletopParchisSetup
-      boardPrototype: ParchisBoardTabletop
+      boardPrototype: &ParchisBoard ParchisBoardTabletop
 
-# Parchís tabletop item (item only visible in tabletop game)
 - type: entity
-  id: ParchisBoardTabletop
-  name: parchís
   parent: BaseBoardTabletop
+  id: *ParchisBoard
+  name: parchís
   categories: [ HideSpawnMenu ]
   components:
   - type: Sprite
index 120112b9defa75c9e05eb38095893bb4067932ee..1d16f02fa58b2a9371630e1aee06c63c4831c9fd 100644 (file)
@@ -1,56 +1,55 @@
 - type: entity
-  id: BaseGenericTabletopPiece
-  parent: BaseTabletopPiece
   abstract: true
+  parent: BaseTabletopPiece
+  id: BaseGenericTabletopPiece
   components:
   - type: Sprite
-    noRot: true
     sprite: Objects/Fun/Tabletop/generic_pieces.rsi
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: RedTabletopPiece
   name: red piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: red
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: GreenTabletopPiece
   name: green piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: green
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: YellowTabletopPiece
   name: yellow piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: yellow
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: BlueTabletopPiece
   name: blue piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: blue
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: WhiteTabletopPiece
   name: white piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: white
 
 - type: entity
+  parent: BaseGenericTabletopPiece
   id: BlackTabletopPiece
   name: black piece
-  parent: BaseGenericTabletopPiece
   components:
   - type: Sprite
     state: black
diff --git a/Resources/Prototypes/Entities/Objects/Fun/balloons.yml b/Resources/Prototypes/Entities/Objects/Fun/balloons.yml
new file mode 100644 (file)
index 0000000..f519389
--- /dev/null
@@ -0,0 +1,61 @@
+# When adding new balloons, also add it to id: AllMiscToysTable
+
+- type: entity
+  abstract: true
+  parent: BaseItem
+  id: BaseBalloon
+  components:
+  - type: Sprite
+    noRot: true
+  - type: Item
+    size: Small
+  - type: EmitSoundOnCollide
+    sound: &SoundBalloonHit
+      path: /Audio/Effects/balloon_hits.ogg
+  - type: EmitSoundOnLand
+    sound: *SoundBalloonHit
+  - type: Damageable
+    damageContainer: Inorganic
+  - type: TileFrictionModifier
+    modifier: 0.3
+  - type: Tag
+    tags:
+    - Balloon
+
+- type: entity
+  parent: BaseBalloon
+  id: BalloonSyn
+  name: syndie balloon
+  description: Handed out to the bravest souls who survived the "atomic twister" ride at Syndieland.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balloons/syndicate.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/Balloons/syndicate.rsi
+  - type: StaticPrice
+    price: 100 # Entertainment.
+
+- type: entity
+  parent: BaseBalloon
+  id: BalloonNT
+  name: nanotrasen balloon
+  description: Specially designed to inflict maximum psychological damage to Syndicate operatives.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balloons/nanotrasen.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/Balloons/nanotrasen.rsi
+
+- type: entity
+  parent: BaseBalloon
+  id: BalloonCorgi
+  name: corgi balloon
+  description: Just like owning a real dog - but a lot floatier.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balloons/corgi.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/Balloons/corgi.rsi
diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml
deleted file mode 100644 (file)
index e7efa14..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-- type: entity
-  parent: BaseItem
-  id: BikeHorn
-  name: bike horn
-  description: A horn off of a bicycle.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/bikehorn.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/bikehorn.rsi
-    size: Tiny
-  - type: Clothing
-    sprite: Objects/Fun/bikehorn.rsi
-    slots: [Belt]
-    quickEquip: false
-  - type: UseDelay
-    delay: 0.5
-  - type: EmitSoundOnUse
-    sound:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnLand
-    sound:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnActivate
-    sound:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnCollide
-    sound:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-  - type: Tag
-    tags:
-    - Payload # yes, you can make re-usable prank grenades
-    - BikeHorn
-  - type: MeleeWeapon
-    wideAnimationRotation: 135
-    soundHit:
-      collection: BikeHorn
-      params:
-        variation: 0.125
-    damage:
-      types:
-        Blunt: 0
-  - type: Tool
-    qualities:
-    - Honking
-    useSound:
-      collection: BikeHorn
-
-- type: entity
-  parent: BaseItem
-  id: CluwneHorn
-  name: broken bike horn
-  description: A broken horn off of a bicycle.
-  components:
-  - type: UseDelay
-  - type: Sprite
-    sprite: Objects/Fun/cluwnehorn.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/cluwnehorn.rsi
-    size: Tiny
-  - type: Clothing
-    sprite: Objects/Fun/cluwnehorn.rsi
-    slots: [Belt]
-    quickEquip: false
-  - type: Tag
-    tags:
-    - Payload # yes, you can make re-usable prank grenades
-    - CluwneHorn
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnUse
-    sound:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnActivate
-    sound:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnCollide
-    sound:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-  - type: EmitSoundOnLand
-    sound:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-  - type: MeleeWeapon
-    wideAnimationRotation: 135
-    soundHit:
-      collection: CluwneHorn
-      params:
-        variation: 0.125
-    damage:
-      types:
-        Blunt: 5
-
-
-- type: entity
-  parent: BikeHorn
-  id: GoldenBikeHorn
-  name: golden honker
-  categories: [ DoNotMap ]
-  description: A happy honk prize, pray to the gods for your reward.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/goldbikehorn.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/goldbikehorn.rsi
-    size: Tiny
-  - type: Clothing
-    sprite: Objects/Fun/goldbikehorn.rsi
-    slots: [Belt]
-  - type: Prayable
-  - type: StaticPrice
-    price: 100 # reduced price due to heisentests
-  - type: PointLight
-    radius: 1.2
-    energy: 2.2
-    castShadows: false
-    color: "#ffca1b"
-
-- type: entity
-  parent: BikeHorn
-  id: BananiumHorn
-  name: bananium horn
-  description: An air horn made from bananium.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/bananiumhorn.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/bananiumhorn.rsi
-    size: Small
-  - type: Clothing
-    sprite: Objects/Fun/bananiumhorn.rsi
-    slots: [Belt]
-    quickEquip: false
-  - type: UseDelay
-    delay: 3
-  - type: EmitSoundOnUse
-    sound:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-  - type: EmitSoundOnLand
-    sound:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-  - type: EmitSoundOnActivate
-    sound:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-  - type: EmitSoundOnCollide
-    sound:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-  - type: MeleeWeapon
-    wideAnimationRotation: 135
-    soundHit:
-      collection: BananiumHorn
-      params:
-        variation: 0.246
-    damage:
-      types:
-        Blunt: 0
-    hidden: true
-  - type: Construction
-    graph: BananiumHorn
-    node: bananiumHorn
-
-- type: entity
-  parent: BaseItem
-  id: PushHorn
-  name: push horn
-  description: This powerful bikehorn is sure to blast frowns away.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/push_horn.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/push_horn.rsi
-    size: Tiny
-  - type: Clothing
-    sprite: Objects/Fun/push_horn.rsi
-    slots: [Belt]
-    quickEquip: false
-  - type: EmitSoundOnUse
-    handle: false
-    sound: "/Audio/Items/Toys/pushHornHonk.ogg"
-  - type: EmitSoundOnLand
-    sound: "/Audio/Items/Toys/pushHornFloor.ogg"
-  - type: UseDelay
-    delay: 10
-  - type: TriggerOnUse
-  - type: RepulseAttractOnTrigger
-    speed: 50
-    range: 3.5
-    whitelist:
-      components:
-      - MobMover
-  - type: SpawnOnTrigger
-    proto: EffectGravityPulse
-    predicted: true
index 574d6953f20502db318a0489760c62087b806d95..2652a8c1177e8a92631e89cdf90af84f3645099b 100644 (file)
@@ -1,9 +1,11 @@
+# When adding new crayons, also add it to id: AllCrayonsTable
+
 - type: entity
   abstract: true
   parent: BaseItem
   id: CrayonInedible
   name: crayon
-  description: A colourful crayon. Looks tasty. Mmmm...
+  description: A colourful crayon. A forbidden flavor.
   components:
   - type: Sprite
     sprite: Objects/Fun/crayons.rsi
@@ -15,6 +17,7 @@
     - Write
     - Crayon
     - Trash
+    - Recyclable
   - type: SpaceGarbage
   - type: UserInterface
     interfaces:
   abstract: true
   parent: CrayonInedible
   id: Crayon
-  name: crayon
   description: A colourful crayon. Looks tasty. Mmmm...
   components:
-  - type: Sprite
-    sprite: Objects/Fun/crayons.rsi
-  - type: Item
-    sprite: Objects/Fun/crayons.rsi
-    size: Tiny
-  - type: Tag
-    tags:
-    - Recyclable
   - type: Edible
   - type: FlavorProfile
     flavors:
         - ReagentId: MindbreakerToxin
           Quantity: 2
 
-- type: entity
-  parent: Crayon
-  id: CrayonWhite
-  name: white crayon
-  components:
-  - type: Sprite
-    state: white
-  - type: Item
-    heldPrefix: white
-  - type: Crayon
-    color: white
-  - type: Tag
-    tags:
-    - Write
-    - Crayon
-    - CrayonWhite
-    - Recyclable
-    - Trash
+# special crayons
 
 - type: entity
   parent: Crayon
     selectableColor: true
   - type: LimitedCharges
     maxCharges: 30
-  - type: Tag
-    tags:
-    - Write
-    - Crayon
-    - Recyclable
-    - Trash
 
 - type: entity
   parent: CrayonRainbow
   id: CrayonInfinite # should not be player available to prevent decal spam
+  categories: [ DoNotMap ]
   name: infinite crayon
   components:
   - type: Crayon
     deleteEmpty: false
     color: Red
     selectableColor: true
-  - type: LimitedCharges
-    maxCharges: 30
   - type: AutoRecharge
     rechargeDuration: 5
+
+# monocolor crayons
+
+- type: entity
+  parent: Crayon
+  id: CrayonWhite
+  name: white crayon
+  components:
+  - type: Sprite
+    state: white
+  - type: Item
+    heldPrefix: white
+  - type: Crayon
+    color: white
   - type: Tag
     tags:
     - Write
     - Crayon
+    - CrayonWhite
+    - Recyclable
     - Trash
 
 - type: entity
index 4230a361084868e88ed637ad1302e880ca0eab58..0890fcffd5b44c555394c0fed6dc3e8bf84377ef 100644 (file)
@@ -1,8 +1,8 @@
 - type: entity
-  name: dart
-  description: Light throwing dart for playing darts. Don't get in the eye!
   parent: BaseItem
   id: Dart
+  name: dart
+  description: Light throwing dart for playing darts. Don't get in the eye!
   components:
   - type: EmbeddableProjectile
     minimumSpeed: 3
@@ -66,7 +66,7 @@
     thresholds:
     - trigger:
         !type:DamageTrigger
-        damage: 30 #excess damage avoids cost of spawning entities.
+        damage: 50 #excess damage avoids cost of spawning entities.
       behaviors:
       - !type:DoActsBehavior
         acts: [ "Destruction" ]
index 132f92212efa18e6f06327215ffdf64d997ad188..ff6cc22792cb331c11069ef3444535ab5c3b2e9b 100644 (file)
       types:
         Piercing: 5
     # I love this
+
+# bags
+
+- type: entity
+  parent: BaseStorageItem
+  id: DiceBag
+  name: bag of dice
+  description: Contains all the luck you'll ever need.
+  components:
+  - type: EntityTableContainerFill
+    containers:
+      storagebase: !type:AllSelector
+        children:
+        - id: d4Dice
+        - id: d6Dice
+        - id: d8Dice
+        - id: d10Dice
+        - id: d12Dice
+        - id: d20Dice
+        - id: PercentileDie
+  - type: Sprite
+    sprite: Objects/Fun/dice.rsi
+    state: dicebag
+  - type: Item
+    size: Small
+  - type: Storage
+    grid:
+    - 0,0,3,1
+    whitelist:
+      tags:
+      - Dice
+
+- type: entity
+  parent: DiceBag
+  id: MagicDiceBag
+  name: bag of dice
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/dice.rsi
+    state: magicdicebag
+  - type: Storage
+    grid:
+    - 0,0,4,3
diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml b/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml
deleted file mode 100644 (file)
index 41cea14..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-- type: entity
-  parent: BaseStorageItem
-  id: DiceBag
-  name: bag of dice
-  description: Contains all the luck you'll ever need.
-  components:
-  - type: EntityTableContainerFill
-    containers:
-      storagebase: !type:AllSelector
-        children:
-        - id: d4Dice
-        - id: d6Dice
-        - id: d8Dice
-        - id: d10Dice
-        - id: d12Dice
-        - id: d20Dice
-        - id: PercentileDie
-  - type: Sprite
-    sprite: Objects/Fun/dice.rsi
-    state: dicebag
-  - type: Item
-    size: Small
-  - type: Storage
-    grid:
-    - 0,0,3,1
-    whitelist:
-      tags:
-      - Dice
-
-- type: entity
-  parent: DiceBag
-  id: MagicDiceBag
-  name: bag of dice
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/dice.rsi
-    state: magicdicebag
-  - type: Storage
-    grid:
-    - 0,0,4,3
diff --git a/Resources/Prototypes/Entities/Objects/Fun/error.yml b/Resources/Prototypes/Entities/Objects/Fun/error.yml
deleted file mode 100644 (file)
index 75507e6..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-- type: entity
-  parent: BaseItem
-  id: Error
-  name: error
-  description: Hmmmm. Something went wrong.
-  components:
-  - type: Sprite
-    sprite: error.rsi
-    state: error
-  - type: Edible
-  - type: SolutionContainerManager
-    solutions:
-      food:
-        maxVol: 26
-        reagents:
-        - ReagentId: Nutriment
-          Quantity: 5
-  - type: Slippery
-    slipData:
-      knockdownTime: 3
-      launchForwardsMultiplier: 3
-  - type: StepTrigger
-    intersectRatio: 0.2
-  - type: CollisionWake
-    enabled: false
-  - type: Physics
-    bodyType: Dynamic
-  - type: Fixtures
-    fixtures:
-      slips:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.4,-0.3,0.4,0.3"
-        hard: false
-        layer:
-        - SlipLayer
-      fix1:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.4,-0.3,0.4,0.3"
-        density: 30
-        mask:
-        - ItemMask
diff --git a/Resources/Prototypes/Entities/Objects/Fun/orbs.yml b/Resources/Prototypes/Entities/Objects/Fun/orbs.yml
new file mode 100644 (file)
index 0000000..d155453
--- /dev/null
@@ -0,0 +1,106 @@
+# When adding new orbs, also add it to id: AllMiscToysTable
+# Spherical objects of incredible* powers
+
+# Do not make this easily obtainable because if more than 6 of them are on the screen
+# at the same time it will break the distortion shader.
+- type: entity
+  parent: BaseItem
+  id: SingularityToy
+  name: singuloth-brand toy
+  description: Mass-produced by a sadistic corporate conglomerate!
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/toy_singularity.rsi
+    state: icon
+  - type: Icon
+    sprite: Objects/Fun/toy_singularity.rsi
+    state: icon
+  - type: SingularityDistortion
+    intensity: 25
+    falloffPower: 2.6
+  - type: Item
+    size: Normal
+    inhandVisuals:
+      left:
+      - state: singu-inhand-left
+        shader: unshaded
+      right:
+      - state: singu-inhand-right
+        shader: unshaded
+
+- type: entity
+  parent: BaseItem
+  id: TeslaToy
+  name: Teddy Tesla
+  description: The favorite toy of the great engineer Nikola Tesla.
+  components:
+  - type: Sprite
+    sprite: Structures/Power/Generation/Tesla/energy_miniball.rsi
+    layers:
+    - state: tesla_projectile
+      shader: unshaded
+  - type: Item
+    inhandVisuals:
+      left:
+      - state: tesla-inhand-left
+        shader: unshaded
+      right:
+      - state: tesla-inhand-right
+        shader: unshaded
+  - type: PointLight
+    enabled: true
+    radius: 5
+    color: "#4080FF"
+  - type: Electrified
+    shockDamage: 2
+    shockTime: 0.8
+    requirePower: false
+  - type: EmitSoundOnCollide
+    sound:
+      path: /Audio/Effects/Lightning/lightningshock.ogg
+      params:
+        variation: 0.65
+        volume: -10
+
+- type: entity
+  parent: [ BaseItem, BaseMagicalContraband ]
+  id: PonderingOrb
+  name: pondering orb
+  description: Ponderous, man... Really ponderous.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/pondering_orb.rsi
+    layers:
+    - state: icon
+      shader: unshaded
+  - type: PointLight
+    radius: 2
+    color: "#00CCFF"
+  - type: Item
+    size: Normal
+    sprite: Objects/Fun/pondering_orb.rsi
+  - type: TileFrictionModifier
+    modifier: 0.001
+
+# The true orb
+- type: entity
+  parent: PonderingOrb
+  id: PonderingOrbWizard
+  name: pondering orb
+  description: Ponderous, man... Really ponderous. Magically shows the station's camera network.
+  suffix: Wizard
+  components:
+  - type: ActivatableUI
+    requireActiveHand: false
+    inHandsOnly: true
+    key: enum.SurveillanceCameraMonitorUiKey.Key
+  - type: UserInterface
+    interfaces:
+      enum.SurveillanceCameraMonitorUiKey.Key:
+        type: SurveillanceCameraMonitorBoundUserInterface
+  - type: DeviceNetwork
+    deviceNetId: Wired
+    receiveFrequencyId: SurveillanceCamera
+    transmitFrequencyId: SurveillanceCamera
+  - type: WiredNetworkConnection
+  - type: SurveillanceCameraMonitor
index 9967eb3a300ab68d766f7e6f9b884aeca436f068..f1ae250c5481e3b27a4fc81098425ac4e51252e5 100644 (file)
     graph: PotatoAI
     node: potatoai
 
+# PAI Actions
+
 - type: entity
   parent: ActionIntrinsicStore
   id: ActionPAIOpenShop
diff --git a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml
deleted file mode 100644 (file)
index 01a15d2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-- type: entity
-  parent: [ BaseItem, MobCombat ]
-  id: MrChips
-  name: mr chips
-  suffix: Dummy
-  description: It's a dummy, dummy!
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/mrchips.rsi
-    layers:
-    - state: icon
-  - type: Input
-    context: "human"
-  - type: DoAfter
-  - type: VentriloquistPuppet
-  - type: Item
-    size: Normal
-  - type: Muted
-  - type: TypingIndicator
-    proto: robot
-  - type: Actions
-  - type: MobState
-    allowedStates:
-      - Alive
-  - type: MeleeWeapon
-    soundHit:
-      path: /Audio/Weapons/boxingpunch1.ogg
-    angle: 30
-    animation: WeaponArcPunch
-    damage:
-      types:
-        Blunt: 2
-
-- type: entity
-  parent: MrChips
-  id: MrDips
-  name: mr dips
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/mrdips.rsi
-    layers:
-    - state: icon
diff --git a/Resources/Prototypes/Entities/Objects/Fun/skub.yml b/Resources/Prototypes/Entities/Objects/Fun/skub.yml
deleted file mode 100644 (file)
index ce73d4f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-- type: entity
-  parent: BaseItem
-  id: Skub
-  name: skub
-  description: Skub is the fifth Chaos God.
-  components:
-  - type: Sprite
-    sprite: Objects/Misc/skub.rsi
-    state: icon
-  - type: Tag
-    tags:
-      - Payload
-  - type: Item
-    sprite: Objects/Misc/skub.rsi
-  - type: EmitSoundOnUse
-    sound:
-      collection: Skub
-  - type: EmitSoundOnLand
-    sound:
-      collection: Skub
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: Skub
-  - type: EmitSoundOnActivate
-    sound:
-      collection: Skub
-  - type: EmitSoundOnCollide
-    sound:
-      collection: Skub
-  - type: MeleeWeapon
-    soundHit:
-      collection: Skub
-    damage:
-      types:
-        Blunt: 0
-    hidden: true
-  - type: UseDelay
-    delay: 2.0
diff --git a/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml b/Resources/Prototypes/Entities/Objects/Fun/snap_pops.yml
deleted file mode 100644 (file)
index 4392103..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-- type: entity
-  parent: BaseItem
-  id: SnapPop
-  name: snap pop
-  description: Throw it at the floor and listen to it POP!
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/snap_pops.rsi
-    state: icon
-  - type: Item
-    size: Tiny
-  - type: Damageable
-    damageContainer: Inorganic
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTrigger
-        damage: 1
-      behaviors:
-      - !type:DoActsBehavior
-        acts: ["Destruction"]
-      - !type:PlaySoundBehavior
-        sound:
-          path: /Audio/Effects/snap.ogg
-      - !type:ExplodeBehavior
-  - type: DamageOnLand
-    damage:
-      types:
-        Blunt: 3
-  - type: Explosive
-    explosionType: Default
-    # Cosmetic explosion :tf:
-    maxIntensity: 0.01
-    intensitySlope: 1
-    totalIntensity: 0.01
-  - type: Construction
-    graph: SnapPopExplosiveGraph
-    node: snapPop
-
-- type: entity
-  parent: BaseStorageItem
-  id: SnapPopBox
-  name: snap pop box
-  description: Contains snap pops for a few minutes of popping fun!
-  components:
-  - type: Item
-    size: Normal
-  - type: Sprite
-    sprite: Objects/Fun/snap_pops.rsi
-    state: box
-  - type: Storage
-    grid:
-    - 0,0,4,3
-    areaInsert: true
-    maxItemSize: Tiny
-  - type: EntityTableContainerFill
-    containers:
-      storagebase:
-        id: SnapPop
-        amount: 5
-  - type: Dumpable
-
diff --git a/Resources/Prototypes/Entities/Objects/Fun/sound_maker.yml b/Resources/Prototypes/Entities/Objects/Fun/sound_maker.yml
new file mode 100644 (file)
index 0000000..60034f1
--- /dev/null
@@ -0,0 +1,493 @@
+# When adding new sound makers, also add it to id: AllToySoundMakerTable
+# These entities exist to make a (funny) sound and not much else
+
+## Bike horns
+
+- type: entity
+  parent: BaseItem
+  id: BikeHorn
+  name: bike horn
+  description: A horn off of a bicycle.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/bikehorn.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/bikehorn.rsi
+    size: Tiny
+  - type: Clothing
+    sprite: Objects/Fun/bikehorn.rsi
+    slots: [Belt]
+    quickEquip: false
+  - type: UseDelay
+    delay: 0.5
+  - type: EmitSoundOnUse
+    sound: &SoundBikeHorn
+      collection: BikeHorn
+      params:
+        variation: 0.125
+  - type: EmitSoundOnLand
+    sound: *SoundBikeHorn
+  - type: EmitSoundOnTrigger
+    sound: *SoundBikeHorn
+  - type: EmitSoundOnActivate
+    sound: *SoundBikeHorn
+  - type: EmitSoundOnCollide
+    sound: *SoundBikeHorn
+  - type: Tag
+    tags:
+    - Payload # yes, you can make re-usable prank grenades
+    - BikeHorn
+  - type: MeleeWeapon
+    wideAnimationRotation: 135
+    soundHit: *SoundBikeHorn
+    damage:
+      types:
+        Blunt: 0
+  - type: Tool
+    qualities:
+    - Honking
+    useSound: *SoundBikeHorn
+
+- type: entity
+  parent: BaseItem
+  id: CluwneHorn
+  name: broken bike horn
+  description: A broken horn off of a bicycle.
+  components:
+  - type: UseDelay
+  - type: Sprite
+    sprite: Objects/Fun/cluwnehorn.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/cluwnehorn.rsi
+    size: Tiny
+  - type: Clothing
+    sprite: Objects/Fun/cluwnehorn.rsi
+    slots: [Belt]
+    quickEquip: false
+  - type: Tag
+    tags:
+    - Payload # yes, you can make re-usable prank grenades
+    - CluwneHorn
+  - type: EmitSoundOnTrigger
+    sound: &SoundCluwneHorn
+      collection: CluwneHorn
+      params:
+        variation: 0.125
+  - type: EmitSoundOnUse
+    sound: *SoundCluwneHorn
+  - type: EmitSoundOnActivate
+    sound: *SoundCluwneHorn
+  - type: EmitSoundOnCollide
+    sound: *SoundCluwneHorn
+  - type: EmitSoundOnLand
+    sound: *SoundCluwneHorn
+  - type: MeleeWeapon
+    wideAnimationRotation: 135
+    soundHit: *SoundCluwneHorn
+    damage:
+      types:
+        Blunt: 5
+
+- type: entity
+  parent: BikeHorn
+  id: GoldenBikeHorn
+  name: golden honker
+  description: A happy honk prize, pray to the gods for your reward.
+  categories: [ DoNotMap ]
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/goldbikehorn.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/goldbikehorn.rsi
+    size: Tiny
+  - type: Clothing
+    sprite: Objects/Fun/goldbikehorn.rsi
+    slots: [Belt]
+  - type: Prayable
+  - type: StaticPrice
+    price: 100 # reduced price due to heisentests
+  - type: PointLight
+    radius: 1.2
+    energy: 2.2
+    castShadows: false
+    color: "#ffca1b"
+
+- type: entity
+  parent: BikeHorn
+  id: BananiumHorn
+  name: bananium horn
+  description: An air horn made from bananium.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/bananiumhorn.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/bananiumhorn.rsi
+    size: Small
+  - type: Clothing
+    sprite: Objects/Fun/bananiumhorn.rsi
+    slots: [Belt]
+    quickEquip: false
+  - type: UseDelay
+    delay: 3
+  - type: EmitSoundOnUse
+    sound: &SoundBananiumHorn
+      collection: BananiumHorn
+      params:
+        variation: 0.246
+  - type: EmitSoundOnLand
+    sound: *SoundBananiumHorn
+  - type: EmitSoundOnTrigger
+    sound: *SoundBananiumHorn
+  - type: EmitSoundOnActivate
+    sound: *SoundBananiumHorn
+  - type: EmitSoundOnCollide
+    sound: *SoundBananiumHorn
+  - type: MeleeWeapon
+    wideAnimationRotation: 135
+    soundHit: *SoundBananiumHorn
+    damage:
+      types:
+        Blunt: 0
+    hidden: true
+  - type: Construction
+    graph: BananiumHorn
+    node: bananiumHorn
+  - type: Tool
+    useSound: *SoundBananiumHorn
+
+- type: entity
+  parent: BaseItem
+  id: PushHorn
+  name: push horn
+  description: This powerful bikehorn is sure to blast frowns away.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/push_horn.rsi
+    state: icon
+  - type: Item
+    sprite: Objects/Fun/push_horn.rsi
+    size: Tiny
+  - type: Clothing
+    sprite: Objects/Fun/push_horn.rsi
+    slots: [Belt]
+    quickEquip: false
+  - type: EmitSoundOnUse
+    handle: false
+    sound: "/Audio/Items/Toys/pushHornHonk.ogg"
+  - type: EmitSoundOnLand
+    sound: "/Audio/Items/Toys/pushHornFloor.ogg"
+  - type: UseDelay
+    delay: 10
+  - type: TriggerOnUse
+  - type: RepulseAttractOnTrigger
+    speed: 50
+    range: 3.5
+    whitelist:
+      components:
+      - MobMover
+  - type: SpawnOnTrigger
+    proto: EffectGravityPulse
+    predicted: true
+
+## Whistles
+
+- type: entity
+  abstract: true
+  parent: BaseItem
+  id: BaseWhistle
+  name: whistle
+  description: Someone forgot to turn off a kettle?
+  components:
+  - type: Item
+    sprite: Objects/Fun/whistles.rsi
+    size: Tiny
+  - type: Sprite
+    sprite: Objects/Fun/whistles.rsi
+  - type: Clothing
+    sprite: Objects/Fun/whistles.rsi
+    quickEquip: false
+    slots: neck
+  - type: UseDelay
+    delay: 3
+  - type: EmitSoundOnUse
+    sound:
+      collection: BaseWhistle
+  - type: Whistle
+    distance: 3
+
+- type: entity
+  parent: BaseWhistle
+  id: Whistle
+  components:
+  - type: Sprite
+    state: whistle
+
+- type: entity
+  parent: BaseWhistle
+  id: SecurityWhistle
+  description: The sound of it brings fear.
+  components:
+  - type: Sprite
+    state: sec
+  - type: Clothing
+    equippedPrefix: sec
+  - type: Whistle
+    distance: 5
+
+- type: entity
+  parent: [BaseWhistle, BaseMinorContraband]
+  id: SyndicateWhistle
+  name: trench whistle
+  description: A whistle used by Syndicate commanders to draw attention. Avanti!
+  components:
+  - type: Sprite
+    state: trench
+  - type: Clothing
+    equippedPrefix: trench
+  - type: EmitSoundOnUse
+    sound:
+      collection: TrenchWhistle
+  - type: Whistle
+    distance: 15 # Let your enemies hear the sound of death approaching
+
+## Other
+
+- type: entity
+  abstract: true
+  parent: [BaseItem, BaseStash]
+  id: BaseRubberToy
+  components:
+  - type: Tag
+    tags:
+    - Payload
+  - type: UseDelay
+    delay: 1.0
+  - type: MeleeWeapon
+    wideAnimationRotation: 180
+    soundHit:
+      collection: ToySqueak
+    damage:
+      types:
+        Blunt: 0
+    hidden: true
+  - type: PhysicalComposition
+    materialComposition:
+      Plastic: 25
+  - type: StaticPrice
+    price: 5
+
+- type: entity
+  parent: BaseRubberToy
+  id: ToyRubberDuck
+  name: rubber ducky
+  description: Not carried here by ocean currents.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/ducky.rsi
+    state: icon
+  - type: Clothing
+    quickEquip: false
+    sprite: Objects/Fun/ducky.rsi
+    slots:
+    - HEAD
+  - type: Item
+    size: Tiny
+  - type: EmitSoundOnUse
+    sound: &SoundQuack
+      path: /Audio/Items/Toys/quack.ogg
+  - type: EmitSoundOnLand
+    sound: *SoundQuack
+  - type: EmitSoundOnActivate
+    sound: *SoundQuack
+  - type: EmitSoundOnTrigger
+    sound: *SoundQuack
+  - type: EmitSoundOnCollide
+    sound: *SoundQuack
+  - type: MeleeWeapon
+    soundHit: *SoundQuack
+  - type: Tag
+    tags:
+    - ToyRubberDuck
+
+- type: entity
+  parent: BaseRubberToy
+  id: RubberChicken
+  name: rubber chicken
+  description: A stress inducing parody of nature's most delectable avian.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/rubber_chicken.rsi
+    state: icon
+  - type: EmitSoundOnUse
+    sound: &SoundRubberChicken
+      collection: RubberChicken
+      params:
+        variation: 0.125
+  - type: EmitSoundOnLand
+    sound: *SoundRubberChicken
+  - type: EmitSoundOnActivate
+    sound: *SoundRubberChicken
+  - type: EmitSoundOnCollide
+    sound: *SoundRubberChicken
+  - type: EmitSoundOnTrigger
+    sound: *SoundRubberChicken
+  - type: MeleeWeapon
+    wideAnimationRotation: 110
+    soundHit: *SoundRubberChicken
+
+- type: entity
+  parent: BaseItem
+  id: NewtonCradle
+  name: newton cradle
+  description: A device bored paper pushers use to remind themselves that time did not stop yet. Contains gravity.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/newton_cradle.rsi
+    state: icon-off
+  - type: Item
+    sprite: Objects/Fun/newton_cradle.rsi
+    storedRotation: -90
+  - type: Appearance
+  - type: GenericVisualizer
+    visuals:
+      enum.ToggleableVisuals.Enabled:
+        enum.ToggleableVisuals.Layer:
+          True: { state: icon }
+          False: { state: icon-off }
+  - type: ItemToggle
+  - type: UseDelay
+    delay: 1
+  - type: ItemToggleActiveSound
+    activeSound:
+      path: /Audio/Items/newton_cradle.ogg
+      params:
+        volume: -9
+        maxDistance: 3
+
+- type: entity
+  parent: BaseItem
+  id: ClownRecorder
+  name: clown recorder
+  description: When you just can't get those laughs coming the natural way!
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/clownrecorder.rsi
+    state: icon
+  - type: EmitSoundOnUse
+    sound: &SoundClownRecorder
+      collection: ClownRecorder
+  - type: EmitSoundOnLand
+    sound: *SoundClownRecorder
+  - type: EmitSoundOnActivate
+    sound: *SoundClownRecorder
+  - type: EmitSoundOnTrigger
+    sound: *SoundClownRecorder
+  - type: EmitSoundOnCollide
+    sound: *SoundClownRecorder
+  - type: UseDelay
+    delay: 30.0
+  - type: Tag
+    tags:
+    - ClownRecorder
+    - Payload
+
+- type: entity
+  parent: BaseItem
+  id: WhoopieCushion
+  name: whoopie cushion
+  description: A practical joke device involving flatulence humour.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/whoopie.rsi
+    state: icon
+  - type: Tag
+    tags:
+    - Payload
+  - type: EmitSoundOnUse
+    sound: &SoundParp
+      collection: Parp
+      params:
+        variation: 0.125
+  - type: EmitSoundOnLand
+    sound: *SoundParp
+  - type: EmitSoundOnActivate
+    sound: *SoundParp
+  - type: EmitSoundOnCollide
+    sound: *SoundParp
+  - type: UseDelay
+    delay: 0.8
+  - type: Slippery
+    staminaDamage: 0
+    frictionStatusTime: 0
+    slipData:
+      stunTime: 0
+      knockdownTime: 0
+      launchForwardsMultiplier: 0
+    slipSound: *SoundParp
+  - type: MeleeWeapon
+    soundHit: *SoundParp
+    damage:
+      types:
+        Blunt: 0
+  - type: StepTrigger
+    intersectRatio: 0.2
+    requiredTriggeredSpeed: 2
+  - type: TriggerOnStepTrigger # for payloads, that don't work because of trouble with sound prediction
+  - type: CollisionWake
+    enabled: false
+  - type: Physics
+    bodyType: Dynamic
+  - type: Fixtures
+    fixtures:
+      slips:
+        shape:
+          !type:PhysShapeAabb
+          bounds: "-0.2,-0.2,0.2,0.2"
+        hard: false
+        layer:
+        - SlipLayer
+      fix1:
+        shape:
+          !type:PhysShapeAabb
+          bounds: "-0.2,-0.2,0.2,0.2"
+        density: 30
+        mask:
+        - ItemMask
+
+- type: entity
+  parent: BaseItem
+  id: Skub
+  name: skub
+  description: Skub is the fifth Chaos God.
+  components:
+  - type: Sprite
+    sprite: Objects/Misc/skub.rsi
+    state: icon
+  - type: Tag
+    tags:
+    - Payload
+  - type: Item
+    sprite: Objects/Misc/skub.rsi
+  - type: EmitSoundOnUse
+    sound: &SoundSkub
+      collection: Skub
+  - type: EmitSoundOnLand
+    sound: *SoundSkub
+  - type: EmitSoundOnTrigger
+    sound: *SoundSkub
+  - type: EmitSoundOnActivate
+    sound: *SoundSkub
+  - type: EmitSoundOnCollide
+    sound: *SoundSkub
+  - type: MeleeWeapon
+    soundHit: *SoundSkub
+    damage:
+      types:
+        Blunt: 0
+    hidden: true
+  - type: UseDelay
+    delay: 2.0
diff --git a/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml
deleted file mode 100644 (file)
index 329d278..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-- type: entity
-  id: SpectralLocatorUnpowered
-  parent: BaseItem
-  name: spectral locator
-  description: Appears to be a modified anomaly locator. Seems very old.
-  suffix: Always Powered
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/spectrallocator.rsi
-    layers:
-      - state: icon
-      - state: screen
-        shader: unshaded
-        visible: false
-        map: ["enum.ToggleableVisuals.Layer"]
-  - type: Appearance
-  - type: GenericVisualizer
-    visuals:
-      enum.ToggleableVisuals.Enabled:
-        enum.ToggleableVisuals.Layer:
-          True: { visible: true }
-          False: { visible: false }
-  - type: ItemToggle
-  - type: ProximityBeeper
-  - type: ProximityDetector
-    range: 12
-    components:
-    - type: Spectral # reacts to AI eye, intentional
-  - type: Beeper
-    isMuted: true
-    minBeepInterval: 0.25
-    maxBeepInterval: 0.5
-    beepSound:
-      path: "/Audio/Items/locator_beep.ogg"
-      params:
-        maxDistance: 1
-        volume: -8
-
-- type: entity
-  id: SpectralLocator
-  parent: [ SpectralLocatorUnpowered, PowerCellSlotSmallItem ]
-  suffix: ""
-  components:
-  - type: PowerCellDraw
-    drawRate: 1
-    useCharge: 0
-  - type: ToggleCellDraw
-
-- type: entity
-  id: SpectralLocatorEmpty
-  parent: SpectralLocator
-  suffix: Empty
-  components:
-  - type: ItemSlots
-    slots:
-      cell_slot:
-        name: power-cell-slot-component-slot-name-default
diff --git a/Resources/Prototypes/Entities/Objects/Fun/sports.yml b/Resources/Prototypes/Entities/Objects/Fun/sports.yml
new file mode 100644 (file)
index 0000000..b78198f
--- /dev/null
@@ -0,0 +1,159 @@
+# When adding new sports, also add them to id: AllMiscToysTable
+# File for SPORTS and the various oddly shaped objects used while playing them
+
+## Balls
+
+- type: entity
+  abstract: true
+  id: BaseSportsBall # How about that game with the pigskin?
+  components:
+  - type: Catchable
+    catchChance: 0.8
+    catchSuccessSound: &SoundSportsBounce
+      path: /Audio/Effects/Footsteps/bounce.ogg
+  - type: EmitSoundOnCollide
+    sound: *SoundSportsBounce
+  - type: EmitSoundOnLand
+    sound: *SoundSportsBounce
+
+- type: entity
+  parent: [ BaseItem, BaseSportsBall ]
+  id: Basketball
+  name: basketball
+  description: Where dah courts at?
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balls/basketball.rsi
+    state: icon
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.25
+        density: 20
+        mask:
+        - ItemMask
+        restitution: 0.8 # bouncy
+        friction: 0.2
+  - type: Item
+    size: Normal
+    sprite: Objects/Fun/Balls/basketball.rsi
+  - type: TileFrictionModifier
+    modifier: 0.5
+
+- type: entity
+  parent: [ BaseItem, BaseSportsBall ]
+  id: Football
+  name: football
+  description: Otherwise known as a handegg.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balls/football.rsi
+    state: icon
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.25
+        density: 20
+        mask:
+        - ItemMask
+        restitution: 0.5 # a little bouncy
+        friction: 0.2
+  - type: Item
+    size: Small
+    sprite: Objects/Fun/Balls/football.rsi
+
+- type: entity
+  parent: [ BaseItem, BaseSportsBall ]
+  id: TennisBall
+  name: tennis ball
+  description: A fuzzy orb of endless betrayal.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balls/tennisball.rsi
+    state: icon
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.25
+        density: 20
+        mask:
+        - ItemMask
+        restitution: 0.5 # a little bouncy
+        friction: 0.2
+  - type: Item
+    size: Small
+    sprite: Objects/Fun/Balls/tennisball.rsi
+  - type: EmitSoundOnUse
+    sound:
+      collection: ToySqueak
+      params:
+        volume: -4
+  - type: UseDelay
+  - type: Clothing
+    slots: [mask]
+  - type: Tag
+    tags:
+    - PetWearable
+
+- type: entity
+  parent: [ BaseItem, BaseSportsBall ]
+  id: BeachBall
+  name: beach ball
+  description: The simple beach ball is one of Nanotrasen's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Nanotrasen
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Balls/beach_ball.rsi
+    state: icon
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.3
+          position: "0,-0.2"
+        density: 20
+        mask:
+        - ItemMask
+        restitution: 0.2 # not bouncy
+        friction: 0.2
+  - type: Item
+    size: Normal
+    sprite: Objects/Fun/Balls/beach_ball.rsi
+  - type: TileFrictionModifier
+    modifier: 0.05
+
+- type: entity
+  parent: BeachBall
+  id: EvilBeachBall
+  suffix: EVIL/ADMEME
+  description: Someone's drawn ">:3c" on the side of this beach ball in indelible ink.
+  components:
+  - type: Fixtures
+    fixtures:
+      fix1:
+        shape: !type:PhysShapeCircle
+          radius: 0.3
+          position: "0,-0.2"
+        density: 20
+        mask:
+        - ThrownItem
+        restitution: 0.5 # very bouncy
+        friction: 0.2
+  - type: LaunchOnTrigger
+    impulse: 100.0
+    keysIn:
+    - OnCollide
+  - type: StaminaDamageOnTrigger
+    stamina: 25.0
+    keysIn:
+    - OnCollide
+    targetUser: true
+  - type: DamageOnTrigger
+    damage:
+      types:
+        Blunt: 20
+    keysIn:
+    - OnCollide
+    targetUser: true
index 52d13d6214b6c0237da8d04e592bc089c07fdb5e..65c47dfd5c14353726c2bb1309313d5a8694b1b2 100644 (file)
-## Base stash
+# When adding new toys, also add it somewhere nested in id: AllToysTable
+# Catchall file for toys which don't have a strong grouping (only 1 or 2 prototypes)
 
 - type: entity
-  id: BaseStash
-  abstract: true
-  components:
-  - type: Speech
-    speechVerb: Default # for pais (In the secret stash)
-  - type: SecretStash
-    secretStashName: secret-stash-plushie
-    blacklist:
-      components:
-      - SecretStash # Prevents being able to insert plushies inside each other (infinite plush)!
-      tags:
-      - QuantumSpinInverter # It will cause issues with the grinder...
-  - type: ToolOpenable
-    openToolQualityNeeded: Slicing
-    closeToolQualityNeeded: Slicing # Should probably be stitching or something if that gets added
-    name: secret-stash-plushie
-  - type: ContainerContainer
-    containers:
-      stash: !type:ContainerSlot {}
-
-## Rubber
-
-- type: entity
-  parent: [BaseItem, BaseStash]
-  id: BaseRubberToy
-  abstract: true
-  components:
-  - type: Tag
-    tags:
-    - Payload
-  - type: UseDelay
-    delay: 1.0
-  - type: MeleeWeapon
-    wideAnimationRotation: 180
-    soundHit:
-      collection: ToySqueak
-    damage:
-      types:
-        Blunt: 0
-    hidden: true
-  - type: PhysicalComposition
-    materialComposition:
-      Plastic: 25
-  - type: StaticPrice
-    price: 5
-  - type: ContainerContainer
-    containers:
-      stash: !type:ContainerSlot {}
-
-- type: entity
-  parent: BaseRubberToy
-  id: ToyRubberDuck
-  name: rubber ducky
-  description: Not carried here by ocean currents.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/ducky.rsi
-    state: icon
-  - type: Clothing
-    quickEquip: false
-    sprite: Objects/Fun/ducky.rsi
-    slots:
-    - HEAD
-  - type: Item
-    size: Tiny
-  - type: EmitSoundOnUse
-    sound:
-      path: /Audio/Items/Toys/quack.ogg
-  - type: EmitSoundOnLand
-    sound:
-      path: /Audio/Items/Toys/quack.ogg
-  - type: EmitSoundOnActivate
-    sound:
-      path: /Audio/Items/Toys/quack.ogg
-  - type: EmitSoundOnTrigger
-    sound:
-      path: /Audio/Items/Toys/quack.ogg
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Items/Toys/quack.ogg
-  - type: Tag
-    tags:
-    - ToyRubberDuck
-
-- type: entity
-  parent: BaseRubberToy
-  id: RubberChicken
-  name: rubber chicken
-  description: A stress inducing parody of nature's most delectable avian.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/rubber_chicken.rsi
-    state: icon
-  - type: EmitSoundOnUse
-    sound:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-  - type: EmitSoundOnLand
-    sound:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-  - type: EmitSoundOnActivate
-    sound:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-  - type: EmitSoundOnCollide
-    sound:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-  - type: MeleeWeapon
-    wideAnimationRotation: 110
-    soundHit:
-      collection: RubberChicken
-      params:
-        variation: 0.125
-
-- type: entity
-  parent: BasePlushie
-  id: ToyIan
-  name: ian toy
-  description: Unable to eat, but just as fluffy as the real guy!
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/toy_ian.rsi
-    state: icon
-  - type: Clothing
-    quickEquip: false
-    sprite: Objects/Fun/toy_ian.rsi
-    slots:
-      - HEAD
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET
-        offset: "0, 0.06"
-  - type: Item
-    size: Tiny
-  - type: EmitSoundOnUse
-    sound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: EmitSoundOnLand
-    sound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: EmitSoundOnActivate
-    sound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: EmitSoundOnTrigger
-    sound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: MeleeWeapon
-    soundHit:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: Edible
-    useSound:
-      path: /Audio/Items/Toys/ian.ogg
-  - type: FoodSequenceElement
-    entries:
-      CottonBurger: IanPlushie
-
-## Toyweapons
-
-- type: entity
-  abstract: true
   parent: BaseItem
-  id: FoamWeaponBase
+  id: SnapPop
+  name: snap pop
+  description: Throw it at the floor and listen to it POP!
   components:
   - type: Sprite
-  - type: Item
-    size: Normal
-  - type: PacifismAllowedGun
-
-- type: entity
-  parent: FoamWeaponBase
-  id: FoamCrossbow
-  name: foam crossbow
-  description: Aiming this at Security may get you filled with lead.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Foam/foam_crossbow.rsi
+    sprite: Objects/Fun/snap_pops.rsi
     state: icon
   - type: Item
-    size: Normal
-    sprite: Objects/Fun/Foam/foam_crossbow.rsi
-  - type: Gun
-    fireRate: 0.5
-    selectedMode: SemiAuto
-    availableModes:
-    - SemiAuto
-    soundGunshot:
-      path: /Audio/Weapons/Guns/Gunshots/energycrossbow_shoot.ogg
-  - type: BallisticAmmoProvider
-    whitelist:
-      tags:
-      - BulletFoam
-    capacity: 1
-    soundInsert:
-      path: /Audio/Weapons/Guns/MagIn/energycrossbow_reload.ogg
-  - type: ContainerContainer
-    containers:
-      ballistic-ammo: !type:Container
-        ents: []
-
-- type: entity
-  parent: BaseItem
-  id: ToyGunBase
-  name: ToyGunBase
-  description: A rooty tooty point and shooty.
-  abstract: true
-  components:
-  - type: Sprite
-
-- type: entity
-  parent: ToyGunBase
-  id: RevolverCapGun
-  name: cap gun
-  description: Looks almost like the real thing! Ages 8 and up.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/capgun.rsi
-    layers:
-    - state: base
-      map: ["enum.GunVisualLayers.Base"]
-  - type: Item
-    shape:
-    - 0,0,1,0
-    - 0,1,0,1
-    storedOffset: -2,-7
-    sprite: Objects/Fun/capgun.rsi
-  - type: Tag
-    tags:
-    - Sidearm
-    - ToySidearm
-  - type: Gun
-    selectedMode: SemiAuto
-    availableModes:
-    - SemiAuto
-    fireRate: 2
-    soundGunshot:
-      path: /Audio/Weapons/Guns/Gunshots/revolver.ogg
-      params:
-        volume: 2.25
-    clumsyProof: true
-  - type: RevolverAmmoProvider
-    whitelist:
-      tags:
-      - CartridgeCap
-      - SpeedLoaderCap
-    proto: CartridgeCap
-    capacity: 6
-    chambers: [ True, True, True, True, True, True ]
-    ammoSlots: [ null, null, null, null, null, null ]
-    soundInsert:
-      path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg
-  - type: ContainerContainer
-    containers:
-      revolver-ammo: !type:Container
-
-- type: entity
-  parent: RevolverCapGun
-  id: RevolverCapGunFake
-  name: cap gun
-  suffix: Fake
-  description: Looks almost like the real thing! Ages 8 and up.
-  components:
-  - type: RevolverAmmoProvider
-    whitelist:
-      tags:
-      - CartridgeCap
-      - SpeedLoaderCap
-      - CartridgeMagnum
-      - SpeedLoaderMagnum
-    proto: CartridgeMagnumAP
-
-- type: entity
-  parent: BaseItem
-  id: FoamBlade
-  name: foamblade
-  description: It says "Sternside Changs number 1 fan" on it.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Foam/foam_blade.rsi
-    state: icon
-  - type: MeleeWeapon
-    attackRate: 1.5
-    angle: 0
-    animation: WeaponArcThrust
-    wideAnimationRotation: 90
-    damage:
-      types:
-        Blunt: 0
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Foam/foam_blade.rsi
-  - type: UseDelay
-
-# Balloons
-
-- type: entity
-  parent: BaseItem
-  id: BaseBalloon
-  abstract: true
-  components:
-  - type: Sprite
-    noRot: true
-  - type: Item
-    size: Small
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Effects/balloon_hits.ogg
-  - type: EmitSoundOnLand
-    sound:
-      path: /Audio/Effects/balloon_hits.ogg
+    size: Tiny
   - type: Damageable
     damageContainer: Inorganic
-  - type: TileFrictionModifier
-    modifier: 0.3
-  - type: Tag
-    tags:
-    - Balloon
-
-- type: entity
-  parent: BaseBalloon
-  id: BalloonSyn
-  name: syndie balloon
-  description: Handed out to the bravest souls who survived the "atomic twister" ride at Syndieland.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balloons/syndicate.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/Balloons/syndicate.rsi
-  - type: StaticPrice
-    price: 100 # Entertainment.
-
-- type: entity
-  parent: BaseBalloon
-  id: BalloonNT
-  name: nanotrasen balloon
-  description: Specially designed to inflict maximum psychological damage to Syndicate operatives.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balloons/nanotrasen.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/Balloons/nanotrasen.rsi
-
-- type: entity
-  parent: BaseBalloon
-  id: BalloonCorgi
-  name: corgi balloon
-  description: Just like owning a real dog - but a lot floatier.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balloons/corgi.rsi
-    state: icon
-  - type: Item
-    sprite: Objects/Fun/Balloons/corgi.rsi
-
-# MISC
-
-- type: entity
-  parent: BaseItem
-  id: Basketball
-  name: basketball
-  description: Where dah courts at?
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balls/basketball.rsi
-    state: icon
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.25
-        density: 20
-        mask:
-        - ItemMask
-        restitution: 0.8 # bouncy
-        friction: 0.2
-  - type: Catchable
-    catchChance: 0.8
-    catchSuccessSound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Balls/basketball.rsi
-  - type: TileFrictionModifier
-    modifier: 0.5
-
-- type: entity
-  parent: BaseItem
-  id: Football
-  name: football
-  description: Otherwise known as a handegg.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balls/football.rsi
-    state: icon
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.25
-        density: 20
-        mask:
-        - ItemMask
-        restitution: 0.5 # a little bouncy
-        friction: 0.2
-  - type: Catchable
-    catchChance: 0.8
-    catchSuccessSound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Balls/football.rsi
-
-- type: entity
-  parent: BaseItem
-  id: TennisBall
-  name: tennis ball
-  description: A fuzzy orb of endless betrayal.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balls/tennisball.rsi
-    state: icon
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.25
-        density: 20
-        mask:
-        - ItemMask
-        restitution: 0.5 # a little bouncy
-        friction: 0.2
-  - type: Catchable
-    catchChance: 0.8
-    catchSuccessSound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: Item
-    size: Small
-    sprite: Objects/Fun/Balls/tennisball.rsi
-  - type: EmitSoundOnUse
-    sound:
-      collection: ToySqueak
-      params:
-        volume: -4
-  - type: UseDelay
-  - type: Clothing
-    slots: [mask]
-  - type: Tag
-    tags:
-    - PetWearable
-
-- type: entity
-  parent: BaseItem
-  id: BeachBall
-  name: beach ball
-  description: The simple beach ball is one of Nanotrasen's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Nanotrasen
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Balls/beach_ball.rsi
-    state: icon
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.3
-          position: "0,-0.2"
-        density: 20
-        mask:
-          - ItemMask
-        restitution: 0.2 # not bouncy
-        friction: 0.2
-  - type: Catchable
-    catchChance: 0.8
-    catchSuccessSound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/Balls/beach_ball.rsi
-  - type: TileFrictionModifier
-    modifier: 0.05
-  - type: TriggerOnCollide
-    fixtureID: fix1
-    keyOut: OnCollide
-  - type: EmitSoundOnTrigger
-    sound:
-      path: /Audio/Effects/Footsteps/bounce.ogg
-    keysIn:
-      - OnCollide
-
-- type: entity
-  parent: BeachBall
-  id: EvilBeachBall
-  suffix: EVIL/ADMEME
-  description: Someone's drawn ">:3c" on the side of this beach ball in indelible ink.
-  components:
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape: !type:PhysShapeCircle
-          radius: 0.3
-          position: "0,-0.2"
-        density: 20
-        mask:
-        - ThrownItem
-        restitution: 0.5 # very bouncy
-        friction: 0.2
-  - type: LaunchOnTrigger
-    impulse: 100.0
-    keysIn:
-      - OnCollide
-  - type: StaminaDamageOnTrigger
-    stamina: 25.0
-    keysIn:
-      - OnCollide
-    targetUser: true
-  - type: DamageOnTrigger
+  - type: Destructible
+    thresholds:
+    - trigger:
+        !type:DamageTrigger
+        damage: 1
+      behaviors:
+      - !type:DoActsBehavior
+        acts: ["Destruction"]
+      - !type:PlaySoundBehavior
+        sound:
+          path: /Audio/Effects/snap.ogg
+      - !type:ExplodeBehavior
+  - type: DamageOnLand
     damage:
       types:
-        Blunt: 20
-    keysIn:
-      - OnCollide
-    targetUser: true
-
-- type: entity
-  parent: BaseItem
-  id: SingularityToy
-  name: singuloth-brand toy
-  description: Mass-produced by a sadistic corporate conglomerate!
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/toy_singularity.rsi
-    state: icon
-  - type: Icon
-    sprite: Objects/Fun/toy_singularity.rsi
-    state: icon
-  - type: SingularityDistortion
-    intensity: 25
-    falloffPower: 2.6
-  - type: Item
-    size: Normal
-    inhandVisuals:
-      left:
-      - state: singu-inhand-left
-        shader: unshaded
-      right:
-      - state: singu-inhand-right
-        shader: unshaded
-
-- type: entity
-  parent: BaseItem
-  id: TeslaToy
-  name: Teddy Tesla
-  description: The favorite toy of the great engineer Nikola Tesla.
-  components:
-  - type: Sprite
-    sprite: Structures/Power/Generation/Tesla/energy_miniball.rsi
-    layers:
-    - state: tesla_projectile
-      shader: unshaded
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: tesla-inhand-left
-        shader: unshaded
-      right:
-      - state: tesla-inhand-right
-        shader: unshaded
-  - type: PointLight
-    enabled: true
-    radius: 5
-    color: "#4080FF"
-  - type: Electrified
-    shockDamage: 2
-    shockTime: 0.8
-    requirePower: false
-  - type: EmitSoundOnCollide
-    sound:
-      path: /Audio/Effects/Lightning/lightningshock.ogg
-      params:
-        variation: 0.65
-        volume: -10
-
-- type: entity
-  parent: [ BaseItem, BaseMagicalContraband ]
-  id: PonderingOrb
-  name: pondering orb
-  description: Ponderous, man... Really ponderous.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/pondering_orb.rsi
-    layers:
-    - state: icon
-      shader: unshaded
-  - type: PointLight
-    radius: 2
-    color: "#00CCFF"
-  - type: Item
-    size: Normal
-    sprite: Objects/Fun/pondering_orb.rsi
-  - type: TileFrictionModifier
-    modifier: 0.001
-
-- type: entity
-  parent: PonderingOrb
-  id: PonderingOrbWizard
-  name: pondering orb
-  description: Ponderous, man... Really ponderous. Magically shows the station's camera network.
-  suffix: Wizard
-  components:
-  - type: ActivatableUI
-    requireActiveHand: false
-    inHandsOnly: true
-    key: enum.SurveillanceCameraMonitorUiKey.Key
-  - type: UserInterface
-    interfaces:
-      enum.SurveillanceCameraMonitorUiKey.Key:
-        type: SurveillanceCameraMonitorBoundUserInterface
-  - type: DeviceNetwork
-    deviceNetId: Wired
-    receiveFrequencyId: SurveillanceCamera
-    transmitFrequencyId: SurveillanceCamera
-  - type: WiredNetworkConnection
-  - type: SurveillanceCameraMonitor
-
-- type: entity
-  parent: BaseItem
-  id: ToySword
-  name: toy sword
-  description: New Sandy-Cat plastic sword! Comes with realistic sound and full color! Looks almost like the real thing!
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Melee/e_sword.rsi
-    layers:
-    - state: e_sword
-    - state: e_sword_blade
-      color: "#FFFFFF"
-      visible: false
-      shader: unshaded
-      map: [ "blade" ]
-  - type: EnergySword
-  - type: ItemToggle
-    soundActivate:
-      path: /Audio/Weapons/ebladeon.ogg
-    soundDeactivate:
-      path: /Audio/Weapons/ebladeoff.ogg
-  - type: ItemToggleActiveSound
-    activeSound:
-      path: /Audio/Weapons/ebladehum.ogg
-  - type: Item
-    size: Small
-    sprite: Objects/Weapons/Melee/e_sword-inhands.rsi
-  - type: UseDelay
-    delay: 1.0
-  - type: PointLight
-    enabled: false
-    radius: 2
-    energy: 2
-    color: white
-    netsync: false
-  - type: Appearance
-  - type: ToggleableVisuals
-    spriteLayer: blade
-    inhandVisuals:
-      left:
-      - state: inhand-left-blade
-        shader: unshaded
-      right:
-      - state: inhand-right-blade
-        shader: unshaded
-  - type: ItemTogglePointLight
-  - type: DisarmMalus
-    malus: 0
-  - type: StaminaDamageOnHit
-    damage: 8
-  - type: MeleeWeapon
-    wideAnimationRotation: -135
-    damage:
-      types:
-        Blunt: 0
-  - type: ItemToggleMeleeWeapon
-    activatedSoundOnHit:
-      path: /Audio/Weapons/eblade1.ogg
-      params:
-        variation: 0.250
-    activatedSoundOnHitNoDamage:
-      path: /Audio/Weapons/eblade1.ogg
-      params:
-        variation: 0.250
-    activatedSoundOnSwing:
-      path: /Audio/Weapons/eblademiss.ogg
-      params:
-        variation: 0.125
-
-- type: entity
-  parent: BasePlushie
-  id: ToyAmongPequeno
-  name: among pequeño
-  description: Sus!
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/pequeno.rsi
-    layers:
-    - state: base
-      map: [ "enum.DamageStateVisualLayers.Base" ]
-    - state: visor
-  - type: Clothing
-    sprite: Objects/Fun/pequeno.rsi
-    slots:
-    - HEAD
-    clothingVisuals:
-      head:
-      - state: equipped-HELMET-body
-      - state: equipped-HELMET-vis
-  - type: Item
-    inhandVisuals:
-      left:
-      - state: inhand-left-body
-      - state: inhand-left-vis
-      right:
-      - state: inhand-right-body
-      - state: inhand-right-vis
-  - type: RandomSprite
-    available:
-    - enum.DamageStateVisualLayers.Base:
-        base: Sixteen
-#  - type: FoodSequenceElement - does not work with randomized sprites
-#    entries:
-#      CottonBurger: AmongPequeno
-
-
-- type: entity
-  parent: BaseItem
-  id: FoamCutlass
-  name: foam cutlass
-  description: Cosplay as a pirate and force your friends to walk the plank.
-  components:
-  - type: Sprite
-    sprite: Objects/Weapons/Melee/cutlass.rsi
-    state: foam_icon
-  - type: MeleeWeapon
-    wideAnimationRotation: -135
-    attackRate: 1.5
-    range: 2.0
-    damage:
-      types:
-        Blunt: 0
-  - type: Item
-    size: Normal
-    storedSprite:
-      state: foam_storage
-      sprite: Objects/Weapons/Melee/cutlass.rsi
-    shape:
-    - 0,0,0,2
-
-- type: entity
-  parent: BaseItem
-  id: CardSword
-  name: cardboard sword
-  description: A cardboard tube fashioned into the shape of a sword.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/card_sword.rsi
-    state: icon
-  - type: Clothing
-    sprite: Objects/Fun/card_sword.rsi
-    slots:
-    - Back
-    - SuitStorage
-  - type: StaminaDamageOnHit
-    damage: 6
-  - type: Appearance
-  - type: DisarmMalus
-    malus: 0
-  - type: MeleeWeapon
-    wideAnimationRotation: -135
-    attackRate: 1.25
-    damage:
-      types:
-        Blunt: 0.3
-    soundHit:
-      path: /Audio/Items/Toys/card_tube_bonk.ogg
+        Blunt: 3
+  - type: Explosive
+    explosionType: Default
+    # Cosmetic explosion :tf:
+    maxIntensity: 0.01
+    intensitySlope: 1
+    totalIntensity: 0.01
   - type: Construction
-    graph: CardSword
-    node: cardSword
-  - type: Item
-    size: Normal
-    storedSprite:
-      state: icon
-      sprite: Objects/Fun/card_sword.rsi
-    shape:
-    - 0,0,1,3
+    graph: SnapPopExplosiveGraph
+    node: snapPop
 
 - type: entity
-  parent: BaseItem
-  id: ClownRecorder
-  name: clown recorder
-  description: When you just can't get those laughs coming the natural way!
+  parent: BaseStorageItem
+  id: SnapPopBox
+  name: snap pop box
+  description: Contains snap pops for a few minutes of popping fun!
   components:
-  - type: Sprite
-    sprite: Objects/Fun/clownrecorder.rsi
-    state: icon
-  - type: EmitSoundOnUse
-    sound:
-      collection: ClownRecorder
-  - type: EmitSoundOnLand
-    sound:
-      collection: ClownRecorder
-  - type: EmitSoundOnActivate
-    sound:
-      collection: ClownRecorder
-  - type: EmitSoundOnTrigger
-    sound:
-      collection: ClownRecorder
-  - type: EmitSoundOnCollide
-    sound:
-      collection: ClownRecorder
-  - type: UseDelay
-    delay: 30.0
-  - type: Tag
-    tags:
-    - ClownRecorder
-    - Payload
-
-- type: entity
-  parent: BaseItem
-  id: ToyHammer
-  name: rubber hammer
-  description: A brightly colored hammer made of rubber.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/rubber_hammer.rsi
-    state: icon
-  - type: WeaponRandom
-    damageBonus:
-      types:
-        Blunt: 1000
-  - type: StaminaDamageOnHit
-    damage: 8
   - type: Item
-    size: Small
-    sprite: Objects/Fun/rubber_hammer.rsi
-  - type: Appearance
-  - type: DisarmMalus
-    malus: 0
-  - type: MeleeWeapon
-    wideAnimationRotation: -135
-    soundHit:
-      collection: RubberHammer
-      params:
-        variation: 0.03
-        volume: 3
-    soundNoDamage:
-      collection: RubberHammer
-      params:
-        variation: 0.03
-        volume: 3
-    damage:
-      types:
-        Blunt: 0
-
-- type: entity
-  parent: BaseItem
-  id: WhoopieCushion
-  name: whoopie cushion
-  description: A practical joke device involving flatulence humour.
-  components:
+    size: Normal
   - type: Sprite
-    sprite: Objects/Fun/whoopie.rsi
-    state: icon
-  - type: Tag
-    tags:
-    - Payload
-  - type: EmitSoundOnUse
-    sound:
-      collection: Parp
-      params:
-        variation: 0.125
-  - type: EmitSoundOnLand
-    sound:
-      collection: Parp
-      params:
-        variation: 0.125
-  - type: EmitSoundOnActivate
-    sound:
-      collection: Parp
-      params:
-        variation: 0.125
-  - type: EmitSoundOnCollide
-    sound:
-      collection: Parp
-      params:
-        variation: 0.125
-  - type: UseDelay
-    delay: 0.8
-  - type: Slippery
-    staminaDamage: 0
-    frictionStatusTime: 0
-    slipData:
-      stunTime: 0
-      knockdownTime: 0
-      launchForwardsMultiplier: 0
-    slipSound:
-      collection: Parp
-      params:
-        variation: 0.125
-  - type: MeleeWeapon
-    soundHit:
-      collection: Parp
-      params:
-        variation: 0.125
-    damage:
-      types:
-        Blunt: 0
-  - type: StepTrigger
-    intersectRatio: 0.2
-    requiredTriggeredSpeed: 2
-  - type: TriggerOnStepTrigger # for payloads
-  - type: Appearance
-  - type: CollisionWake
-    enabled: false
-  - type: Physics
-    bodyType: Dynamic
-  - type: Fixtures
-    fixtures:
-      slips:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.2,-0.2,0.2,0.2"
-        hard: false
-        layer:
-        - SlipLayer
-      fix1:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.2,-0.2,0.2,0.2"
-        density: 30
-        mask:
-        - ItemMask
+    sprite: Objects/Fun/snap_pops.rsi
+    state: box
+  - type: Storage
+    grid:
+    - 0,0,4,3
+    areaInsert: true
+    maxItemSize: Tiny
+  - type: EntityTableContainerFill
+    containers:
+      storagebase:
+        id: SnapPop
+        amount: 5
+  - type: Dumpable
 
 - type: entity
-  name: banana
   parent: FoodProduceBase
   id: PlasticBanana
-  description: A plastic banana.
+  name: banana
   suffix: Plastic
+  description: A plastic banana.
   components:
   - type: Sprite
     sprite: Objects/Specific/Hydroponics/banana.rsi
     solution: drink
 
 - type: entity
-  parent: BaseItem
-  id: NewtonCradle
-  name: newton cradle
-  description: A device bored paper pushers use to remind themselves that time did not stop yet. Contains gravity.
+  parent: [ BaseItem, MobCombat ]
+  id: MrChips
+  name: mr chips
+  suffix: Dummy
+  description: It's a dummy, dummy!
   components:
   - type: Sprite
-    sprite: Objects/Fun/newton_cradle.rsi
-    state: icon-off
+    sprite: Objects/Fun/mrchips.rsi
+    layers:
+    - state: icon
+  - type: Input
+    context: "human"
+  - type: DoAfter
+  - type: VentriloquistPuppet
   - type: Item
-    sprite: Objects/Fun/newton_cradle.rsi
-    storedRotation: -90
+    size: Normal
+  - type: Muted
+  - type: TypingIndicator
+    proto: robot
+  - type: Actions
+  - type: MobState
+    allowedStates:
+    - Alive
+  - type: MeleeWeapon
+    soundHit:
+      path: /Audio/Weapons/boxingpunch1.ogg
+    angle: 30
+    animation: WeaponArcPunch
+    damage:
+      types:
+        Blunt: 2
+
+- type: entity
+  parent: MrChips
+  id: MrDips
+  name: mr dips
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/mrdips.rsi
+
+- type: entity
+  parent: BaseItem
+  id: Error
+  name: error
+  description: Hmmmm. Something went wrong.
+  components:
+  - type: Sprite
+    sprite: error.rsi
+    state: error
+  - type: Edible
+  - type: SolutionContainerManager
+    solutions:
+      food:
+        maxVol: 26
+        reagents:
+        - ReagentId: Nutriment
+          Quantity: 5
+  - type: Slippery
+    slipData:
+      knockdownTime: 3
+      launchForwardsMultiplier: 3
+  - type: StepTrigger
+    intersectRatio: 0.2
+  - type: CollisionWake
+    enabled: false
+  - type: Physics
+    bodyType: Dynamic
+  - type: Fixtures
+    fixtures:
+      slips:
+        shape:
+          !type:PhysShapeAabb
+          bounds: "-0.4,-0.3,0.4,0.3"
+        hard: false
+        layer:
+        - SlipLayer
+      fix1:
+        shape:
+          !type:PhysShapeAabb
+          bounds: "-0.4,-0.3,0.4,0.3"
+        density: 30
+        mask:
+        - ItemMask
+
+- type: entity
+  parent: BaseItem
+  id: SpectralLocatorUnpowered
+  name: spectral locator
+  suffix: Always Powered
+  description: Appears to be a modified anomaly locator. Seems very old.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/spectrallocator.rsi
+    layers:
+    - state: icon
+    - state: screen
+      shader: unshaded
+      visible: false
+      map: ["enum.ToggleableVisuals.Layer"]
   - type: Appearance
   - type: GenericVisualizer
     visuals:
       enum.ToggleableVisuals.Enabled:
         enum.ToggleableVisuals.Layer:
-          True: { state: icon }
-          False: { state: icon-off }
+          True: { visible: true }
+          False: { visible: false }
   - type: ItemToggle
-  - type: UseDelay
-    delay: 1
-  - type: ItemToggleActiveSound
-    activeSound:
-      path: /Audio/Items/newton_cradle.ogg
+  - type: ProximityBeeper
+  - type: ProximityDetector
+    range: 12
+    components:
+    - type: Spectral # ghosts, jaunts, reventants
+  - type: Beeper
+    isMuted: true
+    minBeepInterval: 0.25
+    maxBeepInterval: 0.5
+    beepSound:
+      path: "/Audio/Items/locator_beep.ogg"
       params:
-        volume: -9
-        maxDistance: 3
+        maxDistance: 1
+        volume: -8
+
+- type: entity
+  parent: [ SpectralLocatorUnpowered, PowerCellSlotSmallItem ]
+  id: SpectralLocator
+  suffix: ""
+  components:
+  - type: PowerCellDraw
+    drawRate: 1
+    useCharge: 0
+  - type: ToggleCellDraw
+
+- type: entity
+  parent: SpectralLocator
+  id: SpectralLocatorEmpty
+  suffix: Empty
+  components:
+  - type: ItemSlots
+    slots:
+      cell_slot:
+        name: power-cell-slot-component-slot-name-default
diff --git a/Resources/Prototypes/Entities/Objects/Fun/weapons.yml b/Resources/Prototypes/Entities/Objects/Fun/weapons.yml
new file mode 100644 (file)
index 0000000..f9a6e87
--- /dev/null
@@ -0,0 +1,337 @@
+# When adding new "weapons", also add it to id: AllToyWeaponsTable
+# File for fun weapons that aren't very dangerous
+
+## Toy guns
+
+- type: entity
+  abstract: true
+  id: BaseToyGun
+  components:
+  - type: PacifismAllowedGun # They don't hurt!
+  - type: Gun
+    clumsyProof: true # Clown proficiency
+
+- type: entity
+  parent: [ BaseItem, BaseToyGun ]
+  id: FoamCrossbow
+  name: foam crossbow
+  description: Aiming this at Security may get you filled with lead.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Foam/foam_crossbow.rsi
+    state: icon
+  - type: Item
+    size: Normal
+    sprite: Objects/Fun/Foam/foam_crossbow.rsi
+  - type: Gun
+    fireRate: 0.5
+    selectedMode: SemiAuto
+    availableModes:
+    - SemiAuto
+    soundGunshot:
+      path: /Audio/Weapons/Guns/Gunshots/energycrossbow_shoot.ogg
+  - type: BallisticAmmoProvider
+    whitelist: &WhitelistFoam
+      tags:
+      - BulletFoam
+    capacity: 1
+    soundInsert:
+      path: /Audio/Weapons/Guns/MagIn/energycrossbow_reload.ogg
+  - type: ContainerContainer
+    containers:
+      ballistic-ammo: !type:Container
+        ents: []
+
+- type: entity
+  name: Foam Force Astro Ace
+  parent: [ BaseToyGun, BaseWeaponShotgun, BaseGunWieldable ]
+  id: WeaponRifleFoam
+  description: A premium foam rifle of the highest quality. Its plastic feels rugged, and its mechanisms sturdy.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Foam/foam_rifle.rsi
+  - type: Clothing
+    sprite: Objects/Fun/Foam/foam_rifle.rsi
+  - type: Item
+    sprite: Objects/Fun/Foam/foam_rifle_inhand_64x.rsi
+    size: Normal
+    shape:
+    - 0,0,3,0
+  - type: BallisticAmmoProvider
+    whitelist: *WhitelistFoam
+    capacity: 10
+    proto: BulletFoam
+  - type: GunRequiresWield #remove when inaccuracy on spreads is fixed
+  - type: Gun
+    fireRate: 2
+    selectedMode: SemiAuto
+    availableModes:
+    - SemiAuto
+    soundGunshot:
+      path: /Audio/Effects/thunk.ogg
+    soundEmpty:
+      path: /Audio/Weapons/Guns/Empty/empty.ogg
+  - type: StaticPrice
+    price: 100
+
+- type: entity
+  parent: [ BaseItem, BaseToyGun ]
+  id: RevolverCapGun
+  name: cap gun
+  description: Looks almost like the real thing! Ages 8 and up.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/capgun.rsi
+    layers:
+    - state: base
+      map: ["enum.GunVisualLayers.Base"]
+  - type: Item
+    shape:
+    - 0,0,1,0
+    - 0,1,0,1
+    storedOffset: -2,-7
+    sprite: Objects/Fun/capgun.rsi
+  - type: Tag
+    tags:
+    - Sidearm
+    - ToySidearm
+  - type: AmmoCounter
+  - type: Gun
+    selectedMode: SemiAuto
+    availableModes:
+    - SemiAuto
+    fireRate: 2
+    soundGunshot:
+      path: /Audio/Weapons/Guns/Gunshots/revolver.ogg
+      params:
+        volume: 2.25
+  - type: RevolverAmmoProvider
+    whitelist:
+      tags:
+      - CartridgeCap
+      - SpeedLoaderCap
+    proto: CartridgeCap
+    capacity: 6
+    chambers: [ True, True, True, True, True, True ]
+    ammoSlots: [ null, null, null, null, null, null ]
+    soundInsert:
+      path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg
+  - type: ContainerContainer
+    containers:
+      revolver-ammo: !type:Container
+
+- type: entity
+  parent: RevolverCapGun
+  id: RevolverCapGunFake
+  suffix: Fake
+  components:
+  - type: RevolverAmmoProvider
+    whitelist:
+      tags:
+      - CartridgeCap
+      - SpeedLoaderCap
+      - CartridgeMagnum
+      - SpeedLoaderMagnum
+    proto: CartridgeMagnumAP
+
+- type: entity
+  parent: [ BaseItem, BaseToyGun ]
+  id: WeaponStickyHand
+  name: sticky hand
+  description: They're saying you're reaching. They're saying it's a stretch. You'll show them all, and you'll stick it to them.
+  components:
+  - type: GrapplingGun
+    cycleSound: /Audio/Misc/woosh.ogg
+    ropeSprite:
+      sprite: Objects/Weapons/Guns/Launchers/sticky_hand.rsi
+      state: rope
+  - type: Gun
+    soundGunshot: /Audio/Misc/stickystretch.ogg
+    fireRate: 0.5
+    soundEmpty: /Audio/Misc/boing.ogg
+  - type: BasicEntityAmmoProvider
+    proto: StickyHandPalm
+    capacity: 1
+  - type: Sprite
+    sprite: Objects/Weapons/Guns/Launchers/sticky_hand.rsi
+    state: base
+  - type: UseDelay
+    delay: 1.5
+
+## Toy swords
+
+- type: entity
+  abstract: true
+  id: BaseToySword
+  components:
+  - type: DisarmMalus
+    malus: -0.3 # Easy to disarm for epic reversals
+  - type: StaminaDamageOnHit
+    damage: 8 # Too small for real combat, but allows for foam fights to have a conclusion
+  - type: MeleeWeapon
+    damage:
+      types:
+        Blunt: 0.3 # Not even close to real damage, but creates the red flash to give the illusion of damage
+
+- type: entity
+  parent: [ BaseItem, BaseToySword ]
+  id: FoamBlade
+  name: foamblade
+  description: It says "Sternside Changs number 1 fan" on it.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/Foam/foam_blade.rsi
+    state: icon
+  - type: MeleeWeapon
+    attackRate: 1.5
+    angle: 0
+    animation: WeaponArcThrust
+    wideAnimationRotation: 90
+  - type: Item
+    size: Small
+    sprite: Objects/Fun/Foam/foam_blade.rsi
+
+- type: entity
+  parent: [ BaseItem, BaseToySword ]
+  id: FoamCutlass
+  name: foam cutlass
+  description: Cosplay as a pirate and force your friends to walk the plank.
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Melee/cutlass.rsi
+    state: foam_icon
+  - type: MeleeWeapon
+    wideAnimationRotation: -135
+    attackRate: 1.5
+    range: 2.0
+  - type: Item
+    size: Normal
+    storedSprite:
+      state: foam_storage
+      sprite: Objects/Weapons/Melee/cutlass.rsi
+    shape:
+    - 0,0,0,2
+
+- type: entity
+  parent: [ BaseItem, BaseToySword ]
+  id: ToySword
+  name: toy sword
+  description: New Sandy-Cat plastic sword! Comes with realistic sound and full color! Looks almost like the real thing!
+  components:
+  - type: Sprite
+    sprite: Objects/Weapons/Melee/e_sword.rsi
+    layers:
+    - state: e_sword
+    - state: e_sword_blade
+      color: "#FFFFFF"
+      visible: false
+      shader: unshaded
+      map: [ "blade" ]
+  - type: EnergySword
+  - type: ItemToggle
+    soundActivate:
+      path: /Audio/Weapons/ebladeon.ogg
+    soundDeactivate:
+      path: /Audio/Weapons/ebladeoff.ogg
+  - type: ItemToggleActiveSound
+    activeSound:
+      path: /Audio/Weapons/ebladehum.ogg
+  - type: Item
+    size: Small
+    sprite: Objects/Weapons/Melee/e_sword-inhands.rsi
+  - type: UseDelay
+    delay: 1.0
+  - type: PointLight
+    enabled: false
+    radius: 2
+    energy: 2
+    color: white
+    netsync: false
+  - type: Appearance
+  - type: ToggleableVisuals
+    spriteLayer: blade
+    inhandVisuals:
+      left:
+      - state: inhand-left-blade
+        shader: unshaded
+      right:
+      - state: inhand-right-blade
+        shader: unshaded
+  - type: ItemTogglePointLight
+  - type: MeleeWeapon
+    wideAnimationRotation: -135
+    damage:
+      types:
+        Blunt: 0
+  - type: ItemToggleMeleeWeapon
+    activatedSoundOnHit:
+      path: /Audio/Weapons/eblade1.ogg
+      params:
+        variation: 0.250
+    activatedSoundOnHitNoDamage:
+      path: /Audio/Weapons/eblade1.ogg
+      params:
+        variation: 0.250
+    activatedSoundOnSwing:
+      path: /Audio/Weapons/eblademiss.ogg
+      params:
+        variation: 0.125
+    activatedDamage:
+      types:
+        Heat: 0.3
+
+- type: entity
+  parent: [ BaseItem, BaseToySword ]
+  id: CardSword
+  name: cardboard sword
+  description: A cardboard tube fashioned into the shape of a sword.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/card_sword.rsi
+    state: icon
+  - type: Clothing
+    sprite: Objects/Fun/card_sword.rsi
+    slots:
+    - Back
+    - SuitStorage
+  - type: Appearance
+  - type: MeleeWeapon
+    wideAnimationRotation: -135
+    attackRate: 1.25
+    soundHit:
+      path: /Audio/Items/Toys/card_tube_bonk.ogg
+  - type: Construction
+    graph: CardSword
+    node: cardSword
+  - type: Item
+    size: Normal
+    storedSprite:
+      state: icon
+      sprite: Objects/Fun/card_sword.rsi
+    shape:
+    - 0,0,1,3
+
+- type: entity
+  parent: [ BaseItem, BaseToySword ]
+  id: ToyHammer
+  name: rubber hammer
+  description: A brightly colored hammer made of rubber.
+  components:
+  - type: Sprite
+    sprite: Objects/Fun/rubber_hammer.rsi
+    state: icon
+  - type: WeaponRandom # 1 in 100,000 to "win" the "fight"
+    damageBonus:
+      types:
+        Blunt: 1000
+  - type: Item
+    size: Small
+    sprite: Objects/Fun/rubber_hammer.rsi
+  - type: MeleeWeapon
+    wideAnimationRotation: -135
+    soundHit: &SoundRubberHammer
+      collection: RubberHammer
+      params:
+        variation: 0.03
+        volume: 3
+    soundNoDamage: *SoundRubberHammer
diff --git a/Resources/Prototypes/Entities/Objects/Fun/whistles.yml b/Resources/Prototypes/Entities/Objects/Fun/whistles.yml
deleted file mode 100644 (file)
index 6e7fd3d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-- type: entity
-  abstract: true
-  parent: BaseItem
-  id: BaseWhistle
-  name: whistle
-  description: Someone forgot to turn off a kettle?
-  components:
-  - type: Item
-    sprite: Objects/Fun/whistles.rsi
-    size: Tiny
-  - type: Sprite
-    sprite: Objects/Fun/whistles.rsi
-  - type: Clothing
-    sprite: Objects/Fun/whistles.rsi
-    quickEquip: false
-    slots: neck
-  - type: UseDelay
-    delay: 3
-  - type: EmitSoundOnUse
-    sound:
-      collection: BaseWhistle
-  - type: Whistle
-    distance: 3
-
-- type: entity
-  parent: BaseWhistle
-  id: Whistle
-  components:
-  - type: Sprite
-    state: whistle
-
-- type: entity
-  parent: BaseWhistle
-  id: SecurityWhistle
-  description: The sound of it brings fear.
-  components:
-  - type: Sprite
-    state: sec
-  - type: Clothing
-    equippedPrefix: sec
-  - type: Whistle
-    distance: 5
-
-- type: entity
-  parent: [BaseWhistle, BaseMinorContraband]
-  id: SyndicateWhistle
-  name: trench whistle
-  description: A whistle used by Syndicate commanders to draw attention. Avanti!
-  components:
-  - type: Sprite
-    state: trench
-  - type: Clothing
-    equippedPrefix: trench
-  - type: EmitSoundOnUse
-    sound:
-      collection: TrenchWhistle
-  - type: Whistle
-    distance: 15 # Let your enemies hear the sound of death approaching
similarity index 100%
rename from Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml
rename to Resources/Prototypes/Entities/Objects/Magic/immovable_rod.yml
index 5fe9a6a68e664f08d0d3fb052a7077d8a48169be..200a5d3ee67e95e09cf2c96a56760b4e7d57c49f 100644 (file)
       - GhostOnlyWarp
 
 - type: entity
+  parent: ImmovableRod
   id: ImmovableRodDespawn
   suffix: Despawn
-  parent: ImmovableRod
   components:
   - type: TimedDespawn
     lifetime: 30.0
 
 - type: entity
-  id: ImmovableRodSlow
   parent: ImmovableRodDespawn
+  id: ImmovableRodSlow
   suffix: Slow
   components:
   - type: ImmovableRod
similarity index 97%
rename from Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml
rename to Resources/Prototypes/Entities/Objects/Misc/candy_bucket.yml
index 3efba15f9392da094088a0afc5330410d1063b20..13be355c5bf21deb301cbb4374f0525d5b3cc1ab 100644 (file)
@@ -1,7 +1,7 @@
 - type: entity
-  name: "candy bucket"
   parent: BaseItem
   id: CandyBucket
+  name: candy bucket
   description: A festive bucket for all your treats.
   components:
   - type: Sprite
index 61beb4537ddbd549f504d2b28375c2e962edc4d4..030966930b74015b91e25cc8f47ef0d10f3d0afe 100644 (file)
             False: { state: base-unshaded-off }
     - type: PacifismAllowedGun
 
-- type: entity
-  parent: BaseItem
-  id: WeaponStickyHand
-  name: sticky hand
-  description: They're saying you're reaching. They're saying it's a stretch. You'll show them all, and you'll stick it to them.
-  components:
-  - type: AmmoCounter
-  - type: GrapplingGun
-    cycleSound: /Audio/Misc/woosh.ogg
-    ropeSprite:
-      sprite: Objects/Weapons/Guns/Launchers/sticky_hand.rsi
-      state: rope
-  - type: Gun
-    soundGunshot: /Audio/Misc/stickystretch.ogg
-    fireRate: 0.5
-    clumsyProof: true
-    soundEmpty: /Audio/Misc/boing.ogg
-  - type: BasicEntityAmmoProvider
-    proto: StickyHandPalm
-    capacity: 1
-  - type: Sprite
-    sprite: Objects/Weapons/Guns/Launchers/sticky_hand.rsi
-    state: base
-  - type: UseDelay
-    delay: 1.5
-  - type: PacifismAllowedGun
-
 # Admeme
 - type: entity
   name: tether gun
index d3887b16dc1e16f9d43e29762eeb377e86d86a74..8d4a38fb598b441223133dfdf778ab4ef6508d95 100644 (file)
     steps: 1
     zeroVisible: true
   - type: Appearance
-
-- type: entity
-  name: Foam Force Astro Ace
-  parent: [BaseWeaponShotgun, BaseGunWieldable]
-  id: WeaponRifleFoam
-  description: A premium foam rifle of the highest quality. Its plastic feels rugged, and its mechanisms sturdy.
-  components:
-  - type: Sprite
-    sprite: Objects/Fun/Foam/foam_rifle.rsi
-  - type: Clothing
-    sprite: Objects/Fun/Foam/foam_rifle.rsi
-  - type: Item
-    sprite: Objects/Fun/Foam/foam_rifle_inhand_64x.rsi
-    size: Normal
-    shape:
-    - 0,0,3,0
-  - type: BallisticAmmoProvider
-    whitelist:
-      tags:
-      - BulletFoam
-    capacity: 10
-    proto: BulletFoam
-  - type: GunRequiresWield #remove when inaccuracy on spreads is fixed
-  - type: Gun
-    fireRate: 2
-    selectedMode: SemiAuto
-    availableModes:
-    - SemiAuto
-    soundGunshot:
-      path: /Audio/Effects/thunk.ogg
-    soundEmpty:
-      path: /Audio/Weapons/Guns/Empty/empty.ogg
-    clumsyProof: true
-  - type: PacifismAllowedGun
-  - type: StaticPrice
-    price: 100
index ca7e78033d79a691865a12f33372f5002b9274f4..5830ad2f146117fa42e3158760ebd3b1b9447fea 100644 (file)
         cell_slot:
           name: power-cell-slot-component-slot-name-default
           startingItem: PowerCellHigh
+
+# For entities with a hidden container slot that can be opened with a tool
+- type: entity
+  abstract: true
+  id: BaseStash
+  components:
+  - type: Speech
+    speechVerb: Default # for pais (In the secret stash)
+  - type: SecretStash
+    secretStashName: secret-stash-plushie
+    blacklist:
+      components:
+      - SecretStash # Prevents being able to insert plushies inside each other (infinite plush)!
+      tags:
+      - QuantumSpinInverter # It will cause issues with the grinder...
+  - type: ToolOpenable
+    openToolQualityNeeded: Slicing
+    closeToolQualityNeeded: Slicing # Should probably be stitching or something if that gets added
+    name: secret-stash-plushie
+  - type: ContainerContainer
+    containers:
+      stash: !type:ContainerSlot {}