diff --git a/Content.Server/Sericulture/SericultureComponent.cs b/Content.Server/Sericulture/SericultureComponent.cs new file mode 100644 index 0000000000..37da04ff13 --- /dev/null +++ b/Content.Server/Sericulture/SericultureComponent.cs @@ -0,0 +1,27 @@ +namespace Content.Server.Sericulture; + +[RegisterComponent] +public sealed class SericultureComponent : Component +{ + + [DataField("popupText")] + public string PopupText = "sericulture-failure-hunger"; + + /// + /// What will be produced at the end of the action. + /// + [DataField("entityProduced", required: true)] + public string EntityProduced = ""; + + [DataField("actionProto", required: true)] + public string ActionProto = ""; + + /// + /// How long will it take to make. + /// + [DataField("productionLength", required: true), ViewVariables(VVAccess.ReadWrite)] + public float ProductionLength = 0; + + [DataField("hungerCost"), ViewVariables(VVAccess.ReadWrite)] + public float HungerCost = 0f; +} diff --git a/Content.Server/Sericulture/SericultureSystem.cs b/Content.Server/Sericulture/SericultureSystem.cs new file mode 100644 index 0000000000..5eb538271e --- /dev/null +++ b/Content.Server/Sericulture/SericultureSystem.cs @@ -0,0 +1,101 @@ +using Content.Server.Actions; +using Content.Server.DoAfter; +using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Actions.ActionTypes; +using Content.Shared.DoAfter; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Robust.Shared.Prototypes; +using Content.Shared.Sericulture; +using Content.Server.Stack; + +namespace Content.Server.Sericulture; + +public sealed class SericultureSystem : EntitySystem +{ + [Dependency] private readonly ActionsSystem _actionsSystem = default!; + [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly HungerSystem _hungerSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly StackSystem _stackSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCompInit); + SubscribeLocalEvent(OnCompRemove); + SubscribeLocalEvent(OnSericultureStart); + SubscribeLocalEvent(OnSericultureDoAfter); + } + + private void OnCompInit(EntityUid uid, SericultureComponent comp, ComponentInit args) + { + if (!_protoManager.TryIndex(comp.ActionProto, out var actionProto)) + return; + + _actionsSystem.AddAction(uid, new InstantAction(actionProto), uid); + } + + private void OnCompRemove(EntityUid uid, SericultureComponent comp, ComponentShutdown args) + { + if (!_protoManager.TryIndex(comp.ActionProto, out var actionProto)) + return; + + _actionsSystem.RemoveAction(uid, new InstantAction(actionProto)); + } + + private void OnSericultureStart(EntityUid uid, SericultureComponent comp, SericultureActionEvent args) + { + if (IsHungry(uid)) + { + _popupSystem.PopupEntity(Loc.GetString(comp.PopupText), uid, uid); + return; + } + + var doAfter = new DoAfterArgs(uid, comp.ProductionLength, new SericultureDoAfterEvent(), uid) + { + BreakOnUserMove = true, + BlockDuplicate = true, + BreakOnDamage = true, + CancelDuplicate = true, + }; + + _doAfterSystem.TryStartDoAfter(doAfter); + } + + private void OnSericultureDoAfter(EntityUid uid, SericultureComponent comp, SericultureDoAfterEvent args) + { + if (args.Cancelled || args.Handled || comp.Deleted) + return; + + if (IsHungry(uid)) + { + _popupSystem.PopupEntity(Loc.GetString(comp.PopupText), uid, uid); + return; + } + + _hungerSystem.ModifyHunger(uid, -comp.HungerCost); + + var newEntity = Spawn(comp.EntityProduced, Transform(uid).Coordinates); + + _stackSystem.TryMergeToHands(newEntity, uid); + + args.Repeat = true; + } + + private bool IsHungry(EntityUid uid, HungerComponent? comp = null) + { + if (!Resolve(uid, ref comp)) + return false; + + if (_hungerSystem.GetHungerThreshold(comp) <= HungerThreshold.Peckish) + return true; + + return false; + } + + public sealed class SericultureActionEvent : InstantActionEvent { } +} diff --git a/Content.Shared/Sericulture/SericultureEvents.cs b/Content.Shared/Sericulture/SericultureEvents.cs new file mode 100644 index 0000000000..cf8e1063f6 --- /dev/null +++ b/Content.Shared/Sericulture/SericultureEvents.cs @@ -0,0 +1,7 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Sericulture; + +[Serializable, NetSerializable] +public sealed class SericultureDoAfterEvent : SimpleDoAfterEvent { } diff --git a/Resources/Locale/en-US/actions/actions/spider.ftl b/Resources/Locale/en-US/actions/actions/spider.ftl index 3fc482ce3e..f74e8db737 100644 --- a/Resources/Locale/en-US/actions/actions/spider.ftl +++ b/Resources/Locale/en-US/actions/actions/spider.ftl @@ -2,4 +2,8 @@ spider-web-action-name = Spider Web spider-web-action-description = Spawns a web that slows your prey down. spider-web-action-nogrid = There is no floor under you! spider-web-action-success = You place webs around you. -spider-web-action-fail = You can't place webs here! All cardinal directions already have webs! \ No newline at end of file +spider-web-action-fail = You can't place webs here! All cardinal directions already have webs! + +sericulture-action-name = Weave silk +sericulture-action-description = Weave a bit of silk for use in arts and crafts. +sericulture-failure-hunger = Your stomach is too empty to make any more webs! diff --git a/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl b/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl new file mode 100644 index 0000000000..646d89ca5e --- /dev/null +++ b/Resources/Locale/en-US/construction/conditions/crafter-whitelist.ftl @@ -0,0 +1 @@ +construction-step-condition-crafter-whitelist = You need to meet certain requirements. diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 96db8fde57..973033ce02 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -100,4 +100,5 @@ tiles-basalt-floor = basalt floor tiles-snow-floor = snow floor tiles-wood3 = wood broken floor tiles-hull = exterior hull plating -tiles-hull-reinforced = exterior reinforced hull plating \ No newline at end of file +tiles-hull-reinforced = exterior reinforced hull plating +tiles-web = web tile diff --git a/Resources/Prototypes/Actions/spider.yml b/Resources/Prototypes/Actions/spider.yml index 8a5ee0e52d..988b9a3f8d 100644 --- a/Resources/Prototypes/Actions/spider.yml +++ b/Resources/Prototypes/Actions/spider.yml @@ -5,3 +5,11 @@ description: spider-web-action-description serverEvent: !type:SpiderWebActionEvent useDelay: 25 + +- type: instantAction + id: SericultureAction + icon: Interface/Actions/web.png + name: sericulture-action-name + description: sericulture-action-description + serverEvent: !type:SericultureActionEvent + useDelay: 1 diff --git a/Resources/Prototypes/Body/Parts/arachnid.yml b/Resources/Prototypes/Body/Parts/arachnid.yml index dbb656cc18..9c95d1d15a 100644 --- a/Resources/Prototypes/Body/Parts/arachnid.yml +++ b/Resources/Prototypes/Body/Parts/arachnid.yml @@ -91,8 +91,6 @@ sprite: Mobs/Species/Arachnid/parts.rsi state: "l_leg" - type: MovementBodyPart - walkSpeed: 3.0 - sprintSpeed: 5.0 - type: entity id: RightLegArachnid @@ -103,8 +101,6 @@ sprite: Mobs/Species/Arachnid/parts.rsi state: "r_leg" - type: MovementBodyPart - walkSpeed: 3.0 - sprintSpeed: 5.0 - type: entity id: LeftFootArachnid diff --git a/Resources/Prototypes/Body/Prototypes/arachnid.yml b/Resources/Prototypes/Body/Prototypes/arachnid.yml index 0c57d3a199..60a83500af 100644 --- a/Resources/Prototypes/Body/Prototypes/arachnid.yml +++ b/Resources/Prototypes/Body/Prototypes/arachnid.yml @@ -27,14 +27,20 @@ part: RightArmArachnid connections: - right hand + - secondary right hand left arm: part: LeftArmArachnid connections: - left hand + - secondary left hand right hand: part: RightHandArachnid left hand: part: LeftHandArachnid + secondary right hand: + part: RightHandArachnid + secondary left hand: + part: LeftHandArachnid right leg: part: RightLegArachnid connections: diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index 1a425226a0..47fc03fb33 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -91,6 +91,14 @@ flatReductions: Blunt: 5 +- type: damageModifierSet + id: Web # Very flammable, can be easily hacked and slashed, but shooting or hitting it is another story. + coefficients: + Blunt: 0.7 + Slash: 2.0 + Piercing: 0.7 + Heat: 3.0 + - type: damageModifierSet id: Slime coefficients: @@ -131,13 +139,10 @@ Shock: 1.2 - type: damageModifierSet - id: Arachnid # Don't do too well with high temperatures, venomous (well some kinds anyways) and have an exo-skeleton (so probably harder to stab but easier to... break?) + id: Arachnid # Exo-skeleton, should have simillarities to skeleton resistances. coefficients: - Blunt: 1.15 - Piercing: 1.15 - Slash: 0.85 - Heat: 1.25 - Poison: 0.8 + Blunt: 1.1 + Heat: 1.5 - type: damageModifierSet id: Moth # Slightly worse at everything but cold diff --git a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml index 5ab7e4b9c3..dc6009c561 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/arachnid.yml @@ -7,7 +7,7 @@ - type: Respirator damage: types: - Asphyxiation: 2 # Make sure you have O2 on you at all times + Asphyxiation: 1.5 # Make sure you have O2 on you at all times damageRecovery: types: Asphyxiation: -0.5 # Recovery will suck without chems \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index 35c202be7f..32bf10ba5d 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -6,50 +6,40 @@ abstract: true components: # The important nessessities - - type: MovementSpeedModifier - baseWalkSpeed: 3.0 - baseSprintSpeed: 5.0 - type: Body prototype: Arachnid requiredLegs: 2 - type: Perishable - type: HumanoidAppearance species: Arachnid - - type: Damageable - damageContainer: Biological - damageModifierSet: Arachnid # spooder - type: Hunger - starvationDamage: + baseDecayRate: 0.0125 + starvationDamage: # Not sure if this should be changed. types: Cold: 0.5 Bloodloss: 0.5 - type: Thirst - - type: Icon - sprite: Mobs/Species/Arachnid/parts.rsi - state: full - # Damage and speed + baseDecayRate: 0.0125 + # Damage (Self) + - type: Damageable + damageContainer: Biological + damageModifierSet: Arachnid - type: Bloodstream bloodReagent: SpiderBlood - - type: Temperature - heatDamageThreshold: 400 - coldDamageThreshold: 285 - currentTemperature: 310.15 - specificHeat: 46 - coldDamage: - types: - Cold : 0.2 #per second, scales with temperature & other constants - heatDamage: - types: - Heat : 0.1 #per second, scales with temperature & other constants - - type: Barotrauma + # Damage (Others) + - type: MeleeWeapon + animation: WeaponArcClaw + soundHit: + collection: AlienClaw damage: - types: - Blunt: 0.20 #per second, scales with pressure and other constants. - - type: SlowOnDamage - speedModifierThresholds: # This is an ouch, but it does make up for their extra speed - 65: 0.7 - 80: 0.4 - # Misc + types: # Realisically this is more like 5 slash + Slash: 4 + # Visual & Audio + - type: DamageVisuals + damageOverlayGroups: + Brute: + sprite: Mobs/Effects/brute_damage.rsi + color: "#162581" - type: Speech speechSounds: Arachnid - type: Vocal @@ -57,20 +47,66 @@ Male: UnisexArachnid Female: UnisexArachnid Unsexed: UnisexArachnid - - type: Inventory - templateId: arachnid - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/pierce.ogg - angle: 30 - animation: WeaponArcClaw - attackRate: 1.5 - damage: - types: - # Actually does 3 + 1 damage due to +25% damage bonus on all single target melee attacks - Slash: 2.4 - Poison: 0.8 + - type: Sprite + noRot: true + drawdepth: Mobs + layers: + - map: [ "enum.HumanoidVisualLayers.Chest" ] + - map: [ "enum.HumanoidVisualLayers.Head" ] + - map: [ "enum.HumanoidVisualLayers.Snout" ] + - map: [ "enum.HumanoidVisualLayers.Eyes" ] + - map: [ "enum.HumanoidVisualLayers.RArm" ] + - map: [ "enum.HumanoidVisualLayers.LArm" ] + - map: [ "enum.HumanoidVisualLayers.RLeg" ] + - map: [ "enum.HumanoidVisualLayers.LLeg" ] + - shader: StencilClear + sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 + # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. + # sprite refactor when + state: l_leg + - shader: StencilMask + map: ["enum.HumanoidVisualLayers.StencilMask"] + sprite: Mobs/Customization/masking_helpers.rsi + state: unisex_full + visible: false + - map: ["jumpsuit"] + - map: ["enum.HumanoidVisualLayers.LFoot"] + - map: ["enum.HumanoidVisualLayers.RFoot"] + - map: ["enum.HumanoidVisualLayers.LHand"] + - map: ["enum.HumanoidVisualLayers.RHand"] + - map: [ "id" ] + - map: [ "gloves" ] + - map: [ "shoes" ] + - map: [ "ears" ] + - map: [ "outerClothing" ] + - map: [ "eyes" ] + - map: [ "belt" ] + - map: [ "enum.HumanoidVisualLayers.Tail" ] # Better here? + - map: [ "neck" ] + - map: [ "back" ] + - map: [ "enum.HumanoidVisualLayers.FacialHair" ] + - map: [ "enum.HumanoidVisualLayers.Hair" ] + - map: [ "enum.HumanoidVisualLayers.HeadSide" ] + - map: [ "enum.HumanoidVisualLayers.HeadTop" ] + - map: [ "mask" ] + - map: [ "head" ] + - map: [ "pocket1" ] + - map: [ "pocket2" ] + - map: ["enum.HumanoidVisualLayers.Handcuffs"] + color: "#ffffff" + sprite: Objects/Misc/handcuffs.rsi + state: body-overlay-2 + visible: false + - map: [ "clownedon" ] # Dynamically generated + sprite: "Effects/creampie.rsi" + state: "creampie_human" + visible: false + # Misc + - type: Sericulture + actionProto: SericultureAction + productionLength: 3 + entityProduced: MaterialWebSilk1 + hungerCost: 5 - type: Butcherable butcheringType: Spike spawned: diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index eb28eb5729..05961b355e 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -127,7 +127,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - Gauze @@ -193,7 +193,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - RawMaterial @@ -372,7 +372,7 @@ - ReagentId: Fiber Quantity: 5 - type: Tag - tags: + tags: - ClothMade - DroneUsable - RawMaterial @@ -453,3 +453,42 @@ count: 1 - type: Item size: 2 + +- type: entity + parent: MaterialBase + id: MaterialWebSilk + name: silk + description: A webby material + suffix: Full + components: + - type: PhysicalComposition + materialComposition: + WebSilk: 100 + - type: Sprite + sprite: Objects/Materials/silk.rsi + state: icon + - type: Stack + count: 50 + stackType: WebSilk + - type: Item + size: 50 + +- type: entity + parent: MaterialWebSilk + id: MaterialWebSilk25 + suffix: 25 + components: + - type: Stack + count: 25 + - type: Item + size: 25 + +- type: entity + parent: MaterialWebSilk + id: MaterialWebSilk1 + suffix: 1 + components: + - type: Stack + count: 1 + - type: Item + size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml index d0178e70c3..0cba7656cb 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/spider_web.yml @@ -49,6 +49,11 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 0 + max: 1 - type: Temperature heatDamage: types: diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 819748d58b..f13bb59e67 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -810,3 +810,19 @@ - type: Stack stackType: FloorTileGratingMaint +- type: entity + name: web tile + parent: FloorTileItemBase + id: FloorTileItemWeb + components: + - type: Sprite + sprite: Objects/Tiles/web.rsi + state: icon + - type: FloorTile + outputs: + - FloorWebTile + - type: Stack + stackType: FloorTileWeb + - type: Construction + graph: TileWeb + node: webtile diff --git a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml index bf061c4a74..301b37205c 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/Tables/tables.yml @@ -478,6 +478,35 @@ - !type:DoActsBehavior acts: [ "Destruction" ] +- type: entity + id: TableWeb + parent: TableBase + name: web table + description: Really smooth and surprisingly durable. + components: + - type: Damageable + damageModifierSet: Web + - type: Sprite + sprite: Structures/Furniture/Web/table.rsi + - type: Icon + sprite: Structures/Furniture/Web/table.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Construction + graph: TableWeb + node: table + - type: entity id: TableDebug parent: TableBase diff --git a/Resources/Prototypes/Entities/Structures/Furniture/beds.yml b/Resources/Prototypes/Entities/Structures/Furniture/beds.yml index 1d37ada25e..3c578192bb 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/beds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/beds.yml @@ -122,3 +122,31 @@ state: mattress - type: Damageable damageModifierSet: Inflatable + +- type: entity + parent: Bed + id: WebBed + name: web bed + description: You got webbed. + components: + - type: Damageable + damageModifierSet: Web + - type: Sprite + sprite: Structures/Furniture/Web/bed.rsi + state: icon + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/woodhit.ogg + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index 3afaaea408..4e84f1fbee 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -247,6 +247,45 @@ graph: RitualSeat node: chairCursed +- type: entity + name: web chair + id: WebChair + description: For true web developers. + parent: SeatBase + components: + - type: Transform + anchored: true + - type: Physics + bodyType: Static + - type: Anchorable + - type: Rotatable + - type: Sprite + sprite: Structures/Furniture/Web/chair.rsi + state: icon + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Damageable + damageModifierSet: Web + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/woodhit.ogg + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 + - type: entity parent: [SeatBase, BaseFoldable] id: ChairFolding diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 4da0c57273..aef2d6c3bf 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -927,6 +927,48 @@ key: walls base: wood +- type: entity + parent: BaseWall + id: WallWeb + name: web wall + description: Keeps the spiders in and the greytide out. + components: + - type: Clickable + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Weapons/slash.ogg" + - type: Damageable + damageModifierSet: Web + - type: Tag + tags: + - Wall + - RCDDeconstructWhitelist + - type: Sprite + sprite: Structures/Walls/web.rsi + - type: Icon + sprite: Structures/Walls/web.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:SpawnEntitiesBehavior + spawn: + MaterialWebSilk: + min: 1 + max: 1 + - type: IconSmooth + key: walls + base: wall + - type: Construction + graph: WallWeb + node: wall + # Vault Walls @@ -975,7 +1017,6 @@ sprite: Structures/Walls/vault.rsi state: sandstonevault - # Mime - type: entity diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index f3ddc4d082..1c4b00b906 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -76,3 +76,10 @@ icon: { sprite: Objects/Materials/Sheets/meaterial.rsi, state: meat } color: "#c53648" price: 0.05 + +- type: material + id: WebSilk + name: materials-web + icon: { sprite: Objects/Materials/silk.rsi, state: icon } + color: "#eeeeee" #eeeeeeeeeeeeeeeeeeeeeeeeeeeeeee + price: 0 # Maybe better for it to be priceless, knowing how greedy cargo is. diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/web.yml b/Resources/Prototypes/Recipes/Construction/Graphs/web.yml new file mode 100644 index 0000000000..0a9186207e --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/web.yml @@ -0,0 +1,35 @@ +- type: constructionGraph + id: WallWeb + start: start + graph: + - node: start + edges: + - to: wall + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: WebSilk + amount: 4 + doAfter: 3 + + - node: wall + entity: WallWeb + +- type: constructionGraph + id: TableWeb + start: start + graph: + - node: start + edges: + - to: table + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: WebSilk + amount: 4 + doAfter: 3 + + - node: table + entity: TableWeb diff --git a/Resources/Prototypes/Recipes/Construction/web.yml b/Resources/Prototypes/Recipes/Construction/web.yml new file mode 100644 index 0000000000..3d0f9cf484 --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/web.yml @@ -0,0 +1,35 @@ +- type: construction + name: web wall + id: WallWeb + graph: WallWeb + startNode: start + targetNode: wall + category: construction-category-structures + description: A fairly weak yet silky smooth wall. + icon: + sprite: /Textures/Structures/Walls/web.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + name: web table + id: TableWeb + graph: TableWeb + startNode: start + targetNode: table + category: construction-category-structures + description: Essential for any serious web development. + icon: + sprite: /Textures/Structures/Furniture/Web/table.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml index caff139192..ad62fc08fb 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/tiles.yml @@ -9,7 +9,7 @@ - !type:SetStackCount amount: 4 steps: - - material: Steel + - material: WebSilk amount: 1 - node: steeltile entity: FloorTileItemSteel diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml new file mode 100644 index 0000000000..13aa4eb6b4 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/web.yml @@ -0,0 +1,15 @@ +- type: constructionGraph + id: TileWeb + start: start + graph: + - node: start + edges: + - to: webtile + completed: + - !type:SetStackCount + amount: 2 + steps: + - material: WebSilk + amount: 1 + - node: webtile + entity: FloorTileItemWeb diff --git a/Resources/Prototypes/Recipes/Crafting/web.yml b/Resources/Prototypes/Recipes/Crafting/web.yml new file mode 100644 index 0000000000..0747806de2 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/web.yml @@ -0,0 +1,10 @@ +- type: construction + name: web tile + id: TileWeb + graph: TileWeb + startNode: start + targetNode: webtile + category: construction-category-tiles + description: "Nice and smooth." + icon: { sprite: Objects/Tiles/web.rsi, state: icon } + objectType: Item diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml index f48cc49863..283c64a10b 100644 --- a/Resources/Prototypes/Stacks/Materials/materials.yml +++ b/Resources/Prototypes/Stacks/Materials/materials.yml @@ -69,3 +69,11 @@ spawn: MaterialSheetMeat1 maxCount: 30 itemSize: 1 + +- type: stack + id: WebSilk + name: silk + icon: { sprite: /Textures/Objects/Materials/silk.rsi, state: icon } + spawn: MaterialWebSilk1 + maxCount: 50 + itemSize: 1 diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index deb212f3ad..5b69430500 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -368,3 +368,10 @@ spawn: FloorTileItemGratingMaint maxCount: 30 itemSize: 5 + +- type: stack + id: FloorTileWeb + name: web tile + spawn: FloorTileItemWeb + maxCount: 30 + itemSize: 5 diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 7e76b18599..6efef85de8 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1438,6 +1438,20 @@ itemDrop: MaterialWoodPlank1 heatCapacity: 10000 +- type: tile + id: FloorWebTile + name: tiles-web + sprite: /Textures/Tiles/Misc/Web/web_tile.png + baseTurf: Plating + isSubfloor: false + canCrowbar: true + footstepSounds: + collection: FootstepCarpet + barestepSounds: + collection: BarestepCarpet + itemDrop: FloorTileItemWeb + heatCapacity: 10000 + #Hull tiles - type: tile id: FloorHull diff --git a/Resources/Textures/Objects/Materials/silk.rsi/icon.png b/Resources/Textures/Objects/Materials/silk.rsi/icon.png new file mode 100644 index 0000000000..648f370a54 Binary files /dev/null and b/Resources/Textures/Objects/Materials/silk.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Materials/silk.rsi/meta.json b/Resources/Textures/Objects/Materials/silk.rsi/meta.json new file mode 100644 index 0000000000..5ac5189bae --- /dev/null +++ b/Resources/Textures/Objects/Materials/silk.rsi/meta.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PixelTheKermit (github) for SS14", + "size": {"x": 32, "y": 32}, + "states": + [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Objects/Tiles/web.rsi/icon.png b/Resources/Textures/Objects/Tiles/web.rsi/icon.png new file mode 100644 index 0000000000..e039f00133 Binary files /dev/null and b/Resources/Textures/Objects/Tiles/web.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Tiles/web.rsi/meta.json b/Resources/Textures/Objects/Tiles/web.rsi/meta.json new file mode 100644 index 0000000000..3be76cef96 --- /dev/null +++ b/Resources/Textures/Objects/Tiles/web.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PixelTheKermit (github) for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png b/Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png new file mode 100644 index 0000000000..18aef2ee51 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/bed.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json b/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json new file mode 100644 index 0000000000..0699682b97 --- /dev/null +++ b/Resources/Textures/Structures/Furniture/Web/bed.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png b/Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png new file mode 100644 index 0000000000..b1fb28b09d Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/chair.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/chair.rsi/meta.json b/Resources/Textures/Structures/Furniture/Web/chair.rsi/meta.json new file mode 100644 index 0000000000..3b193359ab --- /dev/null +++ b/Resources/Textures/Structures/Furniture/Web/chair.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "icon", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/full.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/full.png new file mode 100644 index 0000000000..484a398c2c Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/full.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/meta.json b/Resources/Textures/Structures/Furniture/Web/table.rsi/meta.json new file mode 100644 index 0000000000..2c94685f9c --- /dev/null +++ b/Resources/Textures/Structures/Furniture/Web/table.rsi/meta.json @@ -0,0 +1,163 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "full", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "state_0", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_1", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_2", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_3", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_4", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_5", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_6", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "state_7", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_0.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_0.png new file mode 100644 index 0000000000..fe1dda3af4 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_0.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_1.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_1.png new file mode 100644 index 0000000000..c3f7c42919 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_1.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_2.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_2.png new file mode 100644 index 0000000000..fe1dda3af4 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_2.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_3.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_3.png new file mode 100644 index 0000000000..c3f7c42919 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_3.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_4.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_4.png new file mode 100644 index 0000000000..786e798c3e Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_4.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_5.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_5.png new file mode 100644 index 0000000000..3ba4feb721 Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_5.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png new file mode 100644 index 0000000000..786e798c3e Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_6.png differ diff --git a/Resources/Textures/Structures/Furniture/Web/table.rsi/state_7.png b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_7.png new file mode 100644 index 0000000000..3f5fe58d7f Binary files /dev/null and b/Resources/Textures/Structures/Furniture/Web/table.rsi/state_7.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/full.png b/Resources/Textures/Structures/Walls/web.rsi/full.png new file mode 100644 index 0000000000..6c398daceb Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/full.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/meta.json b/Resources/Textures/Structures/Walls/web.rsi/meta.json new file mode 100644 index 0000000000..f30b2eba61 --- /dev/null +++ b/Resources/Textures/Structures/Walls/web.rsi/meta.json @@ -0,0 +1,46 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "", + "states": [ + { + "name": "wall0", + "directions": 4 + }, + { + "name": "wall1", + "directions": 4 + }, + { + "name": "wall2", + "directions": 4 + }, + { + "name": "wall3", + "directions": 4 + }, + { + "name": "wall4", + "directions": 4 + }, + { + "name": "wall5", + "directions": 4 + }, + { + "name": "wall6", + "directions": 4 + }, + { + "name": "wall7", + "directions": 4 + }, + { + "name": "full" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall0.png b/Resources/Textures/Structures/Walls/web.rsi/wall0.png new file mode 100644 index 0000000000..12426cbb8e Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall0.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall1.png b/Resources/Textures/Structures/Walls/web.rsi/wall1.png new file mode 100644 index 0000000000..1a84c1c0e5 Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall1.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall2.png b/Resources/Textures/Structures/Walls/web.rsi/wall2.png new file mode 100644 index 0000000000..12426cbb8e Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall2.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall3.png b/Resources/Textures/Structures/Walls/web.rsi/wall3.png new file mode 100644 index 0000000000..1a84c1c0e5 Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall3.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall4.png b/Resources/Textures/Structures/Walls/web.rsi/wall4.png new file mode 100644 index 0000000000..dd7e845958 Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall4.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall5.png b/Resources/Textures/Structures/Walls/web.rsi/wall5.png new file mode 100644 index 0000000000..7b1cb7cd0c Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall5.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall6.png b/Resources/Textures/Structures/Walls/web.rsi/wall6.png new file mode 100644 index 0000000000..dd7e845958 Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall6.png differ diff --git a/Resources/Textures/Structures/Walls/web.rsi/wall7.png b/Resources/Textures/Structures/Walls/web.rsi/wall7.png new file mode 100644 index 0000000000..9cd950af77 Binary files /dev/null and b/Resources/Textures/Structures/Walls/web.rsi/wall7.png differ diff --git a/Resources/Textures/Tiles/Misc/Web/meta.json b/Resources/Textures/Tiles/Misc/Web/meta.json new file mode 100644 index 0000000000..901633df32 --- /dev/null +++ b/Resources/Textures/Tiles/Misc/Web/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by PixelTheKermit (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "web_tile" + } + ] +} diff --git a/Resources/Textures/Tiles/Misc/Web/web_tile.png b/Resources/Textures/Tiles/Misc/Web/web_tile.png new file mode 100644 index 0000000000..c40431140c Binary files /dev/null and b/Resources/Textures/Tiles/Misc/Web/web_tile.png differ