Add hardlight spear implant (#587)
* Add hardlight spear implant * Small fixes * Fix collision layer
This commit is contained in:
@@ -0,0 +1,12 @@
|
|||||||
|
using Content.Shared.Actions;
|
||||||
|
|
||||||
|
namespace Content.Shared.White.HardlightSpear;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class HardlightSpearComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed partial class ActivateHardlightSpearImplantEvent : InstantActionEvent
|
||||||
|
{
|
||||||
|
}
|
||||||
79
Content.Shared/White/HardlightSpear/HardlightSpearSystem.cs
Normal file
79
Content.Shared/White/HardlightSpear/HardlightSpearSystem.cs
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using Content.Shared.Hands.EntitySystems;
|
||||||
|
using Content.Shared.Implants.Components;
|
||||||
|
using Content.Shared.Interaction.Events;
|
||||||
|
using Content.Shared.Item;
|
||||||
|
using Content.Shared.Physics;
|
||||||
|
using Content.Shared.Popups;
|
||||||
|
using Content.Shared.Throwing;
|
||||||
|
using Robust.Shared.Audio.Systems;
|
||||||
|
using Robust.Shared.Physics;
|
||||||
|
using Robust.Shared.Physics.Events;
|
||||||
|
using Robust.Shared.Spawners;
|
||||||
|
|
||||||
|
namespace Content.Shared.White.HardlightSpear;
|
||||||
|
|
||||||
|
public sealed class HardlightSpearSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
|
[Dependency] private readonly SharedHandsSystem _hands = default!;
|
||||||
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<HardlightSpearComponent, LandEvent>(OnLand);
|
||||||
|
SubscribeLocalEvent<HardlightSpearComponent, DroppedEvent>(OnDrop);
|
||||||
|
SubscribeLocalEvent<HardlightSpearComponent, GettingPickedUpAttemptEvent>(OnPickupAttempt);
|
||||||
|
SubscribeLocalEvent<HardlightSpearComponent, PreventCollideEvent>(OnPreventCollision);
|
||||||
|
SubscribeLocalEvent<SubdermalImplantComponent, ActivateHardlightSpearImplantEvent>(OnImplantActivate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPreventCollision(EntityUid uid, HardlightSpearComponent component, ref PreventCollideEvent args)
|
||||||
|
{
|
||||||
|
// Opaque collision mask doesn't work for EmbeddableProjectileComponent
|
||||||
|
if (TryComp(args.OtherEntity, out FixturesComponent? fixtures) &&
|
||||||
|
fixtures.Fixtures.All(fix => (fix.Value.CollisionLayer & (int) CollisionGroup.Opaque) == 0))
|
||||||
|
{
|
||||||
|
args.Cancelled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnImplantActivate(EntityUid uid, SubdermalImplantComponent component,
|
||||||
|
ActivateHardlightSpearImplantEvent args)
|
||||||
|
{
|
||||||
|
if (!TryComp(component.ImplantedEntity, out TransformComponent? transform))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var spear = EntityManager.SpawnEntity("SpearHardlight", transform.Coordinates);
|
||||||
|
|
||||||
|
if (_hands.TryPickupAnyHand(component.ImplantedEntity.Value, spear))
|
||||||
|
{
|
||||||
|
_audio.PlayPvs("/Audio/Weapons/ebladeon.ogg", spear);
|
||||||
|
args.Handled = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Del(spear);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnPickupAttempt(EntityUid uid, HardlightSpearComponent component, GettingPickedUpAttemptEvent args)
|
||||||
|
{
|
||||||
|
if (!HasComp<TimedDespawnComponent>(uid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
args.Cancel();
|
||||||
|
_popup.PopupClient(Loc.GetString("hardlight-spear-pickup-failed"), uid, args.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDrop(EntityUid uid, HardlightSpearComponent component, DroppedEvent args)
|
||||||
|
{
|
||||||
|
EnsureComp<TimedDespawnComponent>(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnLand(EntityUid uid, HardlightSpearComponent component, ref LandEvent args)
|
||||||
|
{
|
||||||
|
EnsureComp<TimedDespawnComponent>(uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
5
Resources/Locale/en-US/white/items/hardlight_spear.ftl
Normal file
5
Resources/Locale/en-US/white/items/hardlight_spear.ftl
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
hardlight-spear-pickup-failed = You can't pick up hardlight spear.
|
||||||
|
use-hardlight-spear-implant-action-name = Create hardlight spear
|
||||||
|
use-hardlight-spear-implant-action-description = Creates hardlight spear in your hands.
|
||||||
|
uplink-hardlight-spear-implant-name = Hardlight spear implanter
|
||||||
|
uplink-hardlight-spear-implant-desc = An implant injected into the body, and later activated at the user's will. It will summon a spear made out of hardlight that the user can use to wreak havoc.
|
||||||
@@ -11,7 +11,7 @@ implanter-inject-text = Установка
|
|||||||
implanter-empty-text = Пусто
|
implanter-empty-text = Пусто
|
||||||
implanter-implant-text = { $implantName }{ $lineBreak }{ $implantDescription }
|
implanter-implant-text = { $implantName }{ $lineBreak }{ $implantDescription }
|
||||||
implanter-contained-implant-text = [color=green]{ $desc }[/color]
|
implanter-contained-implant-text = [color=green]{ $desc }[/color]
|
||||||
implanter-label = [color=white]Имплант: { $currentEntities }{ $lineBreak }Режим: { $modeString }[/color]
|
implanter-label = [color=white]Имплант: { $implantName }{ $lineBreak }Режим: { $modeString }[/color]
|
||||||
|
|
||||||
## Implanter Actions
|
## Implanter Actions
|
||||||
|
|
||||||
|
|||||||
13
Resources/Locale/ru-RU/white/items/hardlight_spear.ftl
Normal file
13
Resources/Locale/ru-RU/white/items/hardlight_spear.ftl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
hardlight-spear-pickup-failed = Вы не можете подобрать световое копьё.
|
||||||
|
use-hardlight-spear-implant-action-name = Создать световое копьё.
|
||||||
|
use-hardlight-spear-implant-action-description = Создает световое копьё в ваших руках.
|
||||||
|
uplink-hardlight-spear-implant-name = Имплантатор световое копьё
|
||||||
|
uplink-hardlight-spear-implant-desc = Имплант, вводимый в тело и активируемый по желанию пользователя. Он вызывает копье из твердого света, с помощью которого пользователь может сеять хаос.
|
||||||
|
|
||||||
|
ent-SpearHardlight = световое копьё
|
||||||
|
.desc = Копьё из твердого света.
|
||||||
|
|
||||||
|
ent-HardlightSpearImplanter = имплантатор световое копьё
|
||||||
|
|
||||||
|
ent-HardlightSpearImplant = имплант световое копьё
|
||||||
|
.desc = Этот имплант создаёт световое копьё в ваших руках.
|
||||||
@@ -16,8 +16,8 @@
|
|||||||
fix1:
|
fix1:
|
||||||
shape: !type:PolygonShape
|
shape: !type:PolygonShape
|
||||||
vertices:
|
vertices:
|
||||||
- -0.40,-0.30
|
- -0.20,-0.10
|
||||||
- -0.30,-0.40
|
- -0.10,-0.20
|
||||||
- 0.40,0.30
|
- 0.40,0.30
|
||||||
- 0.30,0.40
|
- 0.30,0.40
|
||||||
density: 20
|
density: 20
|
||||||
@@ -42,6 +42,7 @@
|
|||||||
animation: WeaponArcThrust
|
animation: WeaponArcThrust
|
||||||
soundHit:
|
soundHit:
|
||||||
path: /Audio/Weapons/bladeslice.ogg
|
path: /Audio/Weapons/bladeslice.ogg
|
||||||
|
range: 2 # Spears are long
|
||||||
- type: DamageOtherOnHit
|
- type: DamageOtherOnHit
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
|
|||||||
@@ -12,3 +12,18 @@
|
|||||||
sprite: Objects/Weapons/Grenades/smoke.rsi
|
sprite: Objects/Weapons/Grenades/smoke.rsi
|
||||||
state: icon
|
state: icon
|
||||||
event: !type:ActivateImplantEvent
|
event: !type:ActivateImplantEvent
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: ActivateHardlightSpearImplant
|
||||||
|
name: use-hardlight-spear-implant-action-name
|
||||||
|
description: use-hardlight-spear-implant-action-description
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: InstantAction
|
||||||
|
useDelay: 1.5
|
||||||
|
itemIconStyle: BigAction
|
||||||
|
priority: -20
|
||||||
|
icon:
|
||||||
|
sprite: White/Objects/Weapons/hardlight_spear.rsi
|
||||||
|
state: spear
|
||||||
|
event: !type:ActivateHardlightSpearImplantEvent
|
||||||
|
|||||||
@@ -73,3 +73,14 @@
|
|||||||
Telecrystal: 2
|
Telecrystal: 2
|
||||||
categories:
|
categories:
|
||||||
- UplinkImplants
|
- UplinkImplants
|
||||||
|
|
||||||
|
- type: listing
|
||||||
|
id: UplinkHardlightSpearImplanter
|
||||||
|
name: uplink-hardlight-spear-implant-name
|
||||||
|
description: uplink-hardlight-spear-implant-desc
|
||||||
|
icon: { sprite: /Textures/White/Objects/Weapons/hardlight_spear.rsi, state: spear }
|
||||||
|
productEntity: HardlightSpearImplanter
|
||||||
|
cost:
|
||||||
|
Telecrystal: 15
|
||||||
|
categories:
|
||||||
|
- UplinkImplants
|
||||||
|
|||||||
@@ -1,7 +1,15 @@
|
|||||||
- type: entity
|
- type: entity
|
||||||
id: SmokeImplanter
|
id: SmokeImplanter
|
||||||
name: Имплант дыма
|
name: имплант дыма
|
||||||
parent: BaseImplantOnlyImplanterSyndi
|
parent: BaseImplantOnlyImplanterSyndi
|
||||||
components:
|
components:
|
||||||
- type: Implanter
|
- type: Implanter
|
||||||
implant: SmokeImplant
|
implant: SmokeImplant
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: HardlightSpearImplanter
|
||||||
|
name: hardlight spear implanter
|
||||||
|
parent: BaseImplantOnlyImplanterSyndi
|
||||||
|
components:
|
||||||
|
- type: Implanter
|
||||||
|
implant: HardlightSpearImplant
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseSubdermalImplant
|
parent: BaseSubdermalImplant
|
||||||
id: SmokeImplant
|
id: SmokeImplant
|
||||||
name: Имплант дыма
|
name: имплант дыма
|
||||||
description: Этот имплант выпускает облако дыма при активации.
|
description: Этот имплант выпускает облако дыма при активации.
|
||||||
noSpawn: true
|
noSpawn: true
|
||||||
components:
|
components:
|
||||||
@@ -13,3 +13,13 @@
|
|||||||
duration: 15
|
duration: 15
|
||||||
- type: SoundOnTrigger
|
- type: SoundOnTrigger
|
||||||
sound: /Audio/Effects/smoke.ogg
|
sound: /Audio/Effects/smoke.ogg
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: BaseSubdermalImplant
|
||||||
|
id: HardlightSpearImplant
|
||||||
|
name: hardlight spear implant
|
||||||
|
description: This implant creates hardlight spear in your hands.
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: SubdermalImplant
|
||||||
|
implantAction: ActivateHardlightSpearImplant
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
- type: entity
|
||||||
|
name: hardlight spear
|
||||||
|
parent: Spear
|
||||||
|
id: SpearHardlight
|
||||||
|
description: A spear made out of hardened light.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/hardlight_spear.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 18
|
||||||
|
Heat: 18
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/smash.ogg
|
||||||
|
- type: DamageOtherOnHit
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 30
|
||||||
|
Heat: 30
|
||||||
|
- type: Wieldable
|
||||||
|
- type: IncreaseDamageOnWield
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 4
|
||||||
|
Heat: 4
|
||||||
|
- type: Destructible
|
||||||
|
thresholds:
|
||||||
|
- trigger:
|
||||||
|
!type:DamageTrigger
|
||||||
|
damage: 30 #excess damage avoids cost of spawning entities.
|
||||||
|
behaviors:
|
||||||
|
- !type:DoActsBehavior
|
||||||
|
acts: [ "Destruction" ]
|
||||||
|
- type: EmbeddableProjectile
|
||||||
|
offset: 0.15,0.15
|
||||||
|
deleteOnRemove: true
|
||||||
|
- type: HardlightSpear
|
||||||
|
- type: PointLight
|
||||||
|
radius: 1.5
|
||||||
|
energy: 2
|
||||||
|
color: yellow
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 324 B |
Binary file not shown.
|
After Width: | Height: | Size: 640 B |
Binary file not shown.
|
After Width: | Height: | Size: 649 B |
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from monkestation at https://github.com/Monkestation/MonkeStation/commit/c995c9bda2c23386614ac1cb00aca552f573ba9f, equipped and wielded sprites by Aviu",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "spear"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wielded-inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wielded-inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BACKPACK",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 526 B |
Binary file not shown.
|
After Width: | Height: | Size: 400 B |
Binary file not shown.
|
After Width: | Height: | Size: 375 B |
Reference in New Issue
Block a user