using Content.Shared.Actions;
-using Robust.Shared.Network;
-using Robust.Shared.Random;
namespace Content.Shared.Spider;
public abstract class SharedSpiderSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _action = default!;
- [Dependency] private readonly IRobustRandom _robustRandom = default!;
- [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SpiderComponent, MapInitEvent>(OnInit);
- SubscribeLocalEvent<SpiderWebObjectComponent, ComponentStartup>(OnWebStartup);
}
private void OnInit(EntityUid uid, SpiderComponent component, MapInitEvent args)
{
_action.AddAction(uid, ref component.Action, component.WebAction, uid);
}
-
- private void OnWebStartup(EntityUid uid, SpiderWebObjectComponent component, ComponentStartup args)
- {
- // TODO dont use this. use some general random appearance system
- _appearance.SetData(uid, SpiderWebVisuals.Variant, _robustRandom.Next(1, 3));
- }
}
+++ /dev/null
-using Robust.Shared.Serialization;
-
-namespace Content.Shared.Spider;
-
-[Serializable, NetSerializable]
-public enum SpiderWebVisuals
-{
- Variant
-}
+++ /dev/null
-- type: entity
- id: SpiderWeb
- name: spider web
- description: It's stringy and sticky.
- placement:
- mode: SnapgridCenter
- snap:
- - Wall
- components:
- - type: MeleeSound
- soundGroups:
- Brute:
- path:
- "/Audio/Weapons/slash.ogg"
- - type: Sprite
- sprite: Objects/Misc/spiderweb.rsi
- layers:
- - state: spider_web_1
- map: ["spiderWebLayer"]
- drawdepth: WallMountedItems
- - type: Appearance
- - type: GenericVisualizer
- visuals:
- enum.SpiderWebVisuals.Variant:
- spiderWebLayer:
- 1: {state: spider_web_1}
- 2: {state: spider_web_2}
- - type: Clickable
- - type: Transform
- anchored: true
- - type: Physics
- - type: Fixtures
- fixtures:
- fix1:
- hard: false
- density: 7
- shape:
- !type:PhysShapeAabb
- bounds: "-0.5,-0.5,0.5,0.5"
- layer:
- - MidImpassable
- - type: Damageable
- damageModifierSet: Wood
- - type: Destructible
- thresholds:
- - trigger: # Excess damage, don't spawn entities
- !type:DamageTrigger
- damage: 50
- behaviors:
- - !type:DoActsBehavior
- acts: ["Destruction"]
- - trigger:
- !type:DamageTrigger
- damage: 10
- behaviors:
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- - !type:SpawnEntitiesBehavior
- spawn:
- MaterialWebSilk:
- min: 0
- max: 1
- - type: Temperature
- heatDamage:
- types:
- Heat: 5
- coldDamage: {}
- coldDamageThreshold: 0
- - type: Flammable
- fireSpread: true
- damage:
- types:
- Heat: 5
- - type: Reactive
- groups:
- Flammable: [Touch]
- Extinguish: [Touch]
- - type: SpiderWebObject
- - type: SpeedModifierContacts
- walkSpeedModifier: 0.5
- sprintSpeedModifier: 0.5
- ignoreWhitelist:
- components:
- - IgnoreSpiderWeb
-
-- type: entity
- id: SpiderWebClown
- name: clown spider web
- description: It's stringy and slippy.
- placement:
- mode: SnapgridCenter
- snap:
- - Wall
- components:
- - type: MeleeSound
- soundGroups:
- Brute:
- path:
- "/Audio/Weapons/slash.ogg"
- - type: Sprite
- sprite: Objects/Misc/spiderweb.rsi
- layers:
- - state: spider_web_clown_1
- map: ["spiderWebLayer"]
- drawdepth: WallMountedItems
- - type: Appearance
- - type: GenericVisualizer
- visuals:
- enum.SpiderWebVisuals.Variant:
- spiderWebLayer:
- 1: {state: spider_web_clown_1}
- 2: {state: spider_web_clown_2}
- - type: Clickable
- - type: Transform
- anchored: true
- - type: Slippery
- - type: StepTrigger
- intersectRatio: 0.2
- - type: Physics
- - 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: 1000
- mask:
- - ItemMask
- - type: Damageable
- damageModifierSet: Wood
- - type: Destructible
- thresholds:
- - trigger:
- !type:DamageTrigger
- damage: 10
- behaviors:
- - !type:DoActsBehavior
- acts: [ "Destruction" ]
- - type: Temperature
- heatDamage:
- types:
- Heat: 5
- coldDamage: {}
- coldDamageThreshold: 0
- - type: Flammable
- fireSpread: true
- damage:
- types:
- Heat: 5
- - type: Reactive
- groups:
- Flammable: [Touch]
- Extinguish: [Touch]
- - type: SpiderWebObject
- - type: FlavorProfile
- flavors:
- - sweet
- - type: Food
- delay: 2
- - type: SolutionContainerManager
- solutions:
- food:
- reagents:
- - ReagentId: Sugar
- Quantity: 2
--- /dev/null
+- type: entity
+ id: SpiderWebBase
+ abstract: true
+ placement:
+ mode: SnapgridCenter
+ snap:
+ - Wall
+ components:
+ - type: PlacementReplacement
+ key: web
+ - type: MeleeSound
+ soundGroups:
+ Brute:
+ path:
+ "/Audio/Weapons/slash.ogg"
+ - type: Sprite
+ sprite: Structures/floor_web.rsi
+ drawdepth: WallMountedItems
+ - type: Appearance
+ - type: Clickable
+ - type: Transform
+ anchored: true
+ - type: Physics
+ - type: Damageable
+ damageModifierSet: Wood
+ - type: Temperature
+ heatDamage:
+ types:
+ Heat: 5
+ coldDamage: {}
+ coldDamageThreshold: 0
+ - type: Flammable
+ fireSpread: true
+ damage:
+ types:
+ Heat: 5
+ - type: Reactive
+ groups:
+ Flammable: [Touch]
+ Extinguish: [Touch]
+ - type: SpiderWebObject
+ - type: IconSmooth
+ key: web
+ additionalKeys:
+ - walls
+ base: web_
+
+- type: entity
+ id: SpiderWeb
+ parent: SpiderWebBase
+ name: spider web
+ description: It's stringy and sticky.
+ components:
+ - type: Sprite
+ color: "#ffffffdd"
+ - type: Fixtures
+ fixtures:
+ fix1:
+ hard: false
+ density: 7
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.5,-0.5,0.5,0.5"
+ layer:
+ - MidImpassable
+ - type: Destructible
+ thresholds:
+ - trigger: # Excess damage, don't spawn entities
+ !type:DamageTrigger
+ damage: 50
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - trigger:
+ !type:DamageTrigger
+ damage: 10
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - !type:SpawnEntitiesBehavior
+ spawn:
+ MaterialWebSilk:
+ min: 0
+ max: 1
+ - type: SpeedModifierContacts
+ walkSpeedModifier: 0.5
+ sprintSpeedModifier: 0.5
+ ignoreWhitelist:
+ components:
+ - IgnoreSpiderWeb
+
+- type: entity
+ id: SpiderWebClown
+ parent: SpiderWebBase
+ name: clown spider web
+ description: It's stringy and slippy.
+ components:
+ - type: Sprite
+ color: "#ffa3fc"
+ - type: Slippery
+ - type: StepTrigger
+ intersectRatio: 0.2
+ - type: Fixtures
+ fixtures:
+ slips:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.4,-0.4,0.4,0.4"
+ hard: false
+ layer:
+ - SlipLayer
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.4,-0.4,0.4,0.4"
+ density: 1000
+ mask:
+ - ItemMask
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 10
+ behaviors:
+ - !type:DoActsBehavior
+ acts: [ "Destruction" ]
+ - type: FlavorProfile
+ flavors:
+ - sweet
+ - type: Food
+ delay: 2
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ reagents:
+ - ReagentId: Sugar
+ Quantity: 2
+++ /dev/null
-{
- "version": 1,
- "license": "CC-BY-SA-3.0",
- "copyright": "Taken from https://github.com/tgstation/tgstation/commit/788b2576cd9511ced86e74222b6395fd3ef9affe",
- "size": {
- "x": 32,
- "y": 32
- },
- "states": [
- {
- "name": "spider_web_1"
- },
- {
- "name": "spider_web_clown_1"
- },
- {
- "name": "spider_web_clown_2"
- },
- {
- "name": "spider_web_2"
- }
- ]
-}
\ No newline at end of file
--- /dev/null
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by TheShuEd (github)",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "full"
+ },
+ {
+ "name": "web_0",
+ "directions": 4
+ },
+ {
+ "name": "web_1",
+ "directions": 4
+ },
+ {
+ "name": "web_2",
+ "directions": 4
+ },
+ {
+ "name": "web_3",
+ "directions": 4
+ },
+ {
+ "name": "web_4",
+ "directions": 4
+ },
+ {
+ "name": "web_5",
+ "directions": 4
+ },
+ {
+ "name": "web_6",
+ "directions": 4
+ },
+ {
+ "name": "web_7",
+ "directions": 4
+ }
+ ]
+}