Added fun: Darts (#20582)
* add textures * fix cargo/cargo-fun.ftl * fix cargo/cargo-fun.ftl again * update icons and resize hitbox * really fixed cargo.ftl * fix soundSpecifier * balance changes: solution transfer has been reduced from 2 to 1. Now the transfer does not work on targets wearing anything in the outerclothing slot * add hypodart to uplink * return of darts solution capacity to 2u * Update uplink-catalog.ftl * Update uplink_catalog.yml * Update darts.yml * remove hypodart sprite * Update darts.yml * Update fun.yml * add random popups component, resprite dartboard * localize darts * fix * Update darts.yml
@@ -0,0 +1,13 @@
|
||||
using Content.Server.Damage.Systems;
|
||||
|
||||
namespace Content.Server.Damage.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(DamageRandomPopupSystem))]
|
||||
/// <summary>
|
||||
/// Outputs a random pop-up from the list when an object receives damage
|
||||
/// </summary>
|
||||
public sealed partial class DamageRandomPopupComponent : Component
|
||||
{
|
||||
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||
public List<LocId> Popups = new();
|
||||
}
|
||||
27
Content.Server/Damage/Systems/DamageRandomPopupSystem.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Content.Server.Damage.Components;
|
||||
using Content.Server.Popups;
|
||||
using Content.Shared.Damage;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.Damage.Systems;
|
||||
|
||||
/// <summary>
|
||||
/// Outputs a random pop-up from the strings list when an object receives damage
|
||||
/// </summary>
|
||||
public sealed class DamageRandomPopupSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<DamageRandomPopupComponent, DamageChangedEvent>(OnDamageChange);
|
||||
}
|
||||
|
||||
private void OnDamageChange(EntityUid uid, DamageRandomPopupComponent component, DamageChangedEvent args)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString(_random.Pick(component.Popups)), uid);
|
||||
}
|
||||
}
|
||||
6
Resources/Locale/en-US/darts/darts-popup.ftl
Normal file
@@ -0,0 +1,6 @@
|
||||
darts-popup-bullseye = Bullseye! 50 points!
|
||||
darts-popup-25 = 25 points
|
||||
darts-popup-10 = 10 points
|
||||
darts-popup-5 = 5 points
|
||||
darts-popup-1 = 1 point
|
||||
darts-popup-miss = Miss
|
||||
@@ -21,3 +21,6 @@ ent-FunWaterGuns = { ent-CrateFunWaterGuns }
|
||||
|
||||
ent-FunParty = { ent-CrateFunParty }
|
||||
.desc = { ent-CrateFunParty.desc }
|
||||
|
||||
ent-FunDartsSet = { ent-CrateFunDartsSet }
|
||||
.desc = { ent-CrateFunDartsSet.desc }
|
||||
|
||||
@@ -51,3 +51,6 @@ ent-CrateFunBikeHornImplants = Bike Horn Implants
|
||||
|
||||
ent-CrateFunMysteryFigurines = Mystery Figure Crate
|
||||
.desc = A collection of 10 Mystery Figurine boxes. Duplicates non refundable.
|
||||
|
||||
ent-CrateFunDartsSet = Dartboard Box Set
|
||||
.desc = A box with everything you need for a fun game of darts.
|
||||
|
||||
@@ -187,3 +187,13 @@
|
||||
cost: 4000
|
||||
category: Fun
|
||||
group: market
|
||||
|
||||
- type: cargoProduct
|
||||
id: FunDartsSet
|
||||
icon:
|
||||
sprite: Objects/Fun/Darts/dart_red.rsi
|
||||
state: icon
|
||||
product: CrateFunDartsSet
|
||||
cost: 900
|
||||
category: Fun
|
||||
group: market
|
||||
@@ -426,3 +426,28 @@
|
||||
state: box
|
||||
- type: RadiationBlockingContainer
|
||||
resistance: 2
|
||||
|
||||
- type: entity
|
||||
name: darts box
|
||||
parent: BoxCardboard
|
||||
id: BoxDarts
|
||||
description: This box filled with colorful darts.
|
||||
components:
|
||||
- type: Item
|
||||
size: 40
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: Dart
|
||||
amount: 5
|
||||
- id: DartBlue
|
||||
amount: 5
|
||||
- id: DartPurple
|
||||
amount: 5
|
||||
- id: DartYellow
|
||||
amount: 5
|
||||
- type: Storage
|
||||
capacity: 40
|
||||
- type: Sprite
|
||||
layers:
|
||||
- state: box
|
||||
- state: darts
|
||||
@@ -290,3 +290,20 @@
|
||||
- id: MysteryFigureBox
|
||||
amount: 15
|
||||
prob: 0.05
|
||||
|
||||
- type: entity
|
||||
name: Dartboard Box Set
|
||||
description: A box with everything you need for a fun game of darts.
|
||||
id: CrateFunDartsSet
|
||||
parent: CratePlastic
|
||||
components:
|
||||
- type: StorageFill
|
||||
contents:
|
||||
- id: TargetDarts
|
||||
amount: 1
|
||||
- id: BoxDarts
|
||||
amount: 1
|
||||
- id: BoxDarts
|
||||
amount: 1
|
||||
prob: 0.05
|
||||
|
||||
|
||||
176
Resources/Prototypes/Entities/Objects/Fun/darts.yml
Normal file
@@ -0,0 +1,176 @@
|
||||
- type: entity
|
||||
name: dart
|
||||
description: light throwing dart for playing darts. Don't get in the eye!
|
||||
parent: BaseItem
|
||||
id: Dart
|
||||
components:
|
||||
- type: EmbeddableProjectile
|
||||
minimumSpeed: 3
|
||||
removalTime: 0.5
|
||||
offset: 0.0,0.0
|
||||
- type: ThrowingAngle
|
||||
angle: 315
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape: !type:PolygonShape
|
||||
vertices:
|
||||
- -0.20,0.10
|
||||
- -0.10,0.20
|
||||
- 0.20,-0.10
|
||||
- 0.10,-0.20
|
||||
density: 20
|
||||
mask:
|
||||
- ItemMask
|
||||
restitution: 0.3
|
||||
friction: 0.2
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/Darts/dart_red.rsi
|
||||
state: icon
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Piercing: 2
|
||||
angle: 0
|
||||
animation: WeaponArcThrust
|
||||
soundHit:
|
||||
path: /Audio/Weapons/pierce.ogg
|
||||
- type: DamageOtherOnHit
|
||||
damage:
|
||||
types:
|
||||
Piercing: 4
|
||||
- type: Item
|
||||
size: 2
|
||||
sprite: Objects/Fun/Darts/dart_red.rsi
|
||||
- type: ItemCooldown
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
melee:
|
||||
maxVol: 2
|
||||
- type: MeleeChemicalInjector
|
||||
solution: melee
|
||||
- type: RefillableSolution
|
||||
solution: melee
|
||||
- type: InjectableSolution
|
||||
solution: melee
|
||||
- type: SolutionInjectOnCollide
|
||||
transferAmount: 2
|
||||
blockSlots: OUTERCLOTHING
|
||||
- type: SolutionTransfer
|
||||
maxTransferAmount: 2
|
||||
- type: Damageable
|
||||
damageContainer: Inorganic
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 30 #excess damage avoids cost of spawning entities.
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 20
|
||||
behaviors:
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
collection: GlassBreak
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
PartRodMetal1:
|
||||
min: 1
|
||||
max: 1
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- type: Appearance
|
||||
- type: SolutionContainerVisuals
|
||||
maxFillLevels: 1
|
||||
fillBaseName: dart
|
||||
|
||||
- type: entity
|
||||
parent: Dart
|
||||
id: DartBlue
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/Darts/dart_blue.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Fun/Darts/dart_blue.rsi
|
||||
|
||||
- type: entity
|
||||
parent: Dart
|
||||
id: DartPurple
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/Darts/dart_purple.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Fun/Darts/dart_purple.rsi
|
||||
|
||||
- type: entity
|
||||
parent: Dart
|
||||
id: DartYellow
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/Darts/dart_yellow.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Fun/Darts/dart_yellow.rsi
|
||||
|
||||
- type: entity
|
||||
name: dartboard
|
||||
id: TargetDarts
|
||||
parent: BaseStructureDynamic
|
||||
description: A target for playing darts.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Fun/Darts/target.rsi
|
||||
state: target_dart
|
||||
noRot: true
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
fix1:
|
||||
shape:
|
||||
!type:PhysShapeCircle
|
||||
radius: 0.35
|
||||
density: 50
|
||||
mask:
|
||||
- FullTileMask
|
||||
layer:
|
||||
- WallLayer
|
||||
- type: InteractionOutline
|
||||
- type: Physics
|
||||
- type: Damageable
|
||||
- type: DamageRandomPopup
|
||||
popups:
|
||||
- darts-popup-bullseye
|
||||
- darts-popup-25
|
||||
- darts-popup-10
|
||||
- darts-popup-10
|
||||
- darts-popup-5
|
||||
- darts-popup-5
|
||||
- darts-popup-5
|
||||
- darts-popup-1
|
||||
- darts-popup-1
|
||||
- darts-popup-1
|
||||
- darts-popup-miss
|
||||
- darts-popup-miss
|
||||
- type: Destructible
|
||||
thresholds:
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 500
|
||||
behaviors:
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
- trigger:
|
||||
!type:DamageTrigger
|
||||
damage: 300
|
||||
behaviors:
|
||||
- !type:SpawnEntitiesBehavior
|
||||
spawn:
|
||||
MaterialWoodPlank:
|
||||
min: 5
|
||||
max: 5
|
||||
- !type:PlaySoundBehavior
|
||||
sound:
|
||||
path: /Audio/Effects/tree_fell.ogg
|
||||
- !type:DoActsBehavior
|
||||
acts: [ "Destruction" ]
|
||||
BIN
Resources/Textures/Objects/Fun/Darts/dart_blue.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 230 B |
|
After Width: | Height: | Size: 230 B |
|
After Width: | Height: | Size: 228 B |
22
Resources/Textures/Objects/Fun/Darts/dart_blue.rsi/meta.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Objects/Fun/Darts/dart_purple.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 235 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 231 B |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Objects/Fun/Darts/dart_red.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 236 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 232 B |
22
Resources/Textures/Objects/Fun/Darts/dart_red.rsi/meta.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Objects/Fun/Darts/dart_yellow.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 228 B |
|
After Width: | Height: | Size: 233 B |
|
After Width: | Height: | Size: 231 B |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "icon"
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
14
Resources/Textures/Objects/Fun/Darts/target.rsi/meta.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "target_dart"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Objects/Fun/Darts/target.rsi/target_dart.png
Normal file
|
After Width: | Height: | Size: 872 B |
BIN
Resources/Textures/Objects/Storage/boxes.rsi/darts.png
Normal file
|
After Width: | Height: | Size: 183 B |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively",
|
||||
"copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/cc65477c04f7403ca8a457bd5bae69a01abadbf0, encryptokey was taken from Baystation12 at https://github.com/infinitystation/Baystation12/blob/073f678cdce92edb8fcd55f9ffc9f0523bf31506/icons/obj/radio.dmi and modified by lapatison. boxwidetoy, shelltoy, swab, flare, inflatable, trashbag, magazine, holo and forensic created by potato1234x (github) for ss14 based on toys.rsi, mouth_swab.rsi, flare.rsi, inflatable_wall.rsi, trashbag.rsi, caseless_pistol_mag.rsi, guardians.rsi and bureaucracy.rsi respectively, darts made by TheShuEd (github) for ss14",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
@@ -196,6 +196,9 @@
|
||||
},
|
||||
{
|
||||
"name": "ziptie"
|
||||
},
|
||||
{
|
||||
"name": "darts"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||