using System.Numerics;
using Content.Client.Weapons.Melee.Components;
+using Content.Shared.Weapons.Melee;
using Robust.Client.Animations;
using Robust.Client.GameObjects;
using Robust.Shared.Animations;
/// <summary>
/// Does all of the melee effects for a player that are predicted, i.e. character lunge and weapon animation.
/// </summary>
- public override void DoLunge(EntityUid user, Angle angle, Vector2 localPos, string? animation, bool predicted = true)
+ public override void DoLunge(EntityUid user, EntityUid weapon, Angle angle, Vector2 localPos, string? animation, bool predicted = true)
{
if (!Timing.IsFirstTimePredicted)
return;
return;
}
+ var spriteRotation = Angle.Zero;
+ if (arcComponent.Animation != WeaponArcAnimation.None
+ && TryComp(weapon, out MeleeWeaponComponent? meleeWeaponComponent))
+ {
+ if (user == weapon
+ && TryComp(weapon, out SpriteComponent? weaponSpriteComponent))
+ sprite.CopyFrom(weaponSpriteComponent);
+
+ spriteRotation = meleeWeaponComponent.WideAnimationRotation;
+
+ if (meleeWeaponComponent.SwingLeft)
+ angle *= -1;
+ }
sprite.NoRotation = true;
sprite.Rotation = localPos.ToWorldAngle();
var distance = Math.Clamp(localPos.Length() / 2f, 0.2f, 1f);
switch (arcComponent.Animation)
{
case WeaponArcAnimation.Slash:
- _animation.Play(animationUid, GetSlashAnimation(sprite, angle), SlashAnimationKey);
+ _animation.Play(animationUid, GetSlashAnimation(sprite, angle, spriteRotation), SlashAnimationKey);
TransformSystem.SetParent(animationUid, xform, user, userXform);
if (arcComponent.Fadeout)
_animation.Play(animationUid, GetFadeAnimation(sprite, 0.065f, 0.065f + 0.05f), FadeAnimationKey);
break;
case WeaponArcAnimation.Thrust:
- _animation.Play(animationUid, GetThrustAnimation(sprite, distance), ThrustAnimationKey);
+ _animation.Play(animationUid, GetThrustAnimation(sprite, distance, spriteRotation), ThrustAnimationKey);
TransformSystem.SetParent(animationUid, xform, user, userXform);
if (arcComponent.Fadeout)
_animation.Play(animationUid, GetFadeAnimation(sprite, 0.05f, 0.15f), FadeAnimationKey);
}
}
- private Animation GetSlashAnimation(SpriteComponent sprite, Angle arc)
+ private Animation GetSlashAnimation(SpriteComponent sprite, Angle arc, Angle spriteRotation)
{
const float slashStart = 0.03f;
const float slashEnd = 0.065f;
const float length = slashEnd + 0.05f;
- var startRotation = sprite.Rotation - arc / 2;
- var endRotation = sprite.Rotation + arc / 2;
+ var startRotation = sprite.Rotation + arc / 2;
+ var endRotation = sprite.Rotation - arc / 2;
+ var startRotationOffset = startRotation.RotateVec(new Vector2(0f, -1f));
+ var endRotationOffset = endRotation.RotateVec(new Vector2(0f, -1f));
+ startRotation += spriteRotation;
+ endRotation += spriteRotation;
sprite.NoRotation = true;
return new Animation()
Property = nameof(SpriteComponent.Offset),
KeyFrames =
{
- new AnimationTrackProperty.KeyFrame(startRotation.RotateVec(new Vector2(0f, -1f)), 0f),
- new AnimationTrackProperty.KeyFrame(startRotation.RotateVec(new Vector2(0f, -1f)), slashStart),
- new AnimationTrackProperty.KeyFrame(endRotation.RotateVec(new Vector2(0f, -1f)), slashEnd)
+ new AnimationTrackProperty.KeyFrame(startRotationOffset, 0f),
+ new AnimationTrackProperty.KeyFrame(startRotationOffset, slashStart),
+ new AnimationTrackProperty.KeyFrame(endRotationOffset, slashEnd)
}
},
}
};
}
- private Animation GetThrustAnimation(SpriteComponent sprite, float distance)
+ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Angle spriteRotation)
{
const float thrustEnd = 0.05f;
const float length = 0.15f;
+ var startOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f));
+ var endOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance));
return new Animation()
{
Property = nameof(SpriteComponent.Offset),
KeyFrames =
{
- new AnimationTrackProperty.KeyFrame(sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f)), 0f),
- new AnimationTrackProperty.KeyFrame(sprite.Rotation.RotateVec(new Vector2(0f, -distance)), thrustEnd),
- new AnimationTrackProperty.KeyFrame(sprite.Rotation.RotateVec(new Vector2(0f, -distance)), length),
+ new AnimationTrackProperty.KeyFrame(startOffset, 0f),
+ new AnimationTrackProperty.KeyFrame(endOffset, thrustEnd),
+ new AnimationTrackProperty.KeyFrame(endOffset, length),
}
},
}
using Robust.Shared.Map;
using Robust.Shared.Player;
using Robust.Shared.Players;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Timing;
namespace Content.Client.Weapons.Melee;
private void OnMeleeLunge(MeleeLungeEvent ev)
{
var ent = GetEntity(ev.Entity);
+ var entWeapon = GetEntity(ev.Weapon);
// Entity might not have been sent by PVS.
- if (Exists(ent))
- DoLunge(ent, ev.Angle, ev.LocalPos, ev.Animation);
+ if (Exists(ent) && Exists(entWeapon))
+ DoLunge(ent, entWeapon, ev.Angle, ev.LocalPos, ev.Animation);
}
}
_audio.PlayPvs(component.TransferSound, target);
_useDelay.BeginDelay(used);
return true;
- _audio.PlayPvs(component.TransferSound, target);
- _useDelay.BeginDelay(used);
- return true;
}
/// <summary>
var localPos = _transform.GetInvWorldMatrix(userXform).Transform(targetPos);
localPos = userXform.LocalRotation.RotateVec(localPos);
- _melee.DoLunge(user, Angle.Zero, localPos, null, false);
+ _melee.DoLunge(user, used, Angle.Zero, localPos, null, false);
return true;
}
return Math.Clamp(chance, 0f, 1f);
}
- public override void DoLunge(EntityUid user, Angle angle, Vector2 localPos, string? animation, bool predicted = true)
+ public override void DoLunge(EntityUid user, EntityUid weapon, Angle angle, Vector2 localPos, string? animation, bool predicted = true)
{
Filter filter;
filter = Filter.Pvs(user, entityManager: EntityManager);
}
- RaiseNetworkEvent(new MeleeLungeEvent(GetNetEntity(user), angle, localPos, animation), filter);
+ RaiseNetworkEvent(new MeleeLungeEvent(GetNetEntity(user), GetNetEntity(weapon), angle, localPos, animation), filter);
}
private void OnSpeechHit(EntityUid owner, MeleeSpeechComponent comp, MeleeHitEvent args)
{
public NetEntity Entity;
+ /// <summary>
+ /// The weapon used.
+ /// </summary>
+ public NetEntity Weapon;
+
/// <summary>
/// Width of the attack angle.
/// </summary>
/// </summary>
public string? Animation;
- public MeleeLungeEvent(NetEntity entity, Angle angle, Vector2 localPos, string? animation)
+ public MeleeLungeEvent(NetEntity entity, NetEntity weapon, Angle angle, Vector2 localPos, string? animation)
{
Entity = entity;
+ Weapon = weapon;
Angle = angle;
LocalPos = localPos;
Animation = animation;
[ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
public EntProtoId WideAnimation = "WeaponArcSlash";
+ /// <summary>
+ /// Rotation of the animation.
+ /// 0 degrees means the top faces the attacker.
+ /// </summary>
+ [ViewVariables(VVAccess.ReadWrite), DataField]
+ public Angle WideAnimationRotation = Angle.Zero;
+
+ [ViewVariables(VVAccess.ReadWrite), DataField]
+ public bool SwingLeft;
+
+
// Sounds
/// <summary>
throw new NotImplementedException();
}
- DoLungeAnimation(user, weapon.Angle, GetCoordinates(attack.Coordinates).ToMap(EntityManager, TransformSystem), weapon.Range, animation);
+ DoLungeAnimation(user, weaponUid, weapon.Angle, GetCoordinates(attack.Coordinates).ToMap(EntityManager, TransformSystem), weapon.Range, animation);
}
var attackEv = new MeleeAttackEvent(weaponUid);
return true;
}
- private void DoLungeAnimation(EntityUid user, Angle angle, MapCoordinates coordinates, float length, string? animation)
+ private void DoLungeAnimation(EntityUid user, EntityUid weapon, Angle angle, MapCoordinates coordinates, float length, string? animation)
{
// TODO: Assert that offset eyes are still okay.
if (!TryComp<TransformComponent>(user, out var userXform))
if (localPos.Length() > visualLength)
localPos = localPos.Normalized() * visualLength;
- DoLunge(user, angle, localPos, animation);
+ DoLunge(user, weapon, angle, localPos, animation);
}
- public abstract void DoLunge(EntityUid user, Angle angle, Vector2 localPos, string? animation, bool predicted = true);
+ public abstract void DoLunge(EntityUid user, EntityUid weapon, Angle angle, Vector2 localPos, string? animation, bool predicted = true);
}
- type: entity
name: bat
- parent: [ SimpleMobBase, FlyingMobBase ]
+ parent: [ SimpleMobBase, FlyingMobBase, MobCombat ]
id: MobBat
description: Some cultures find them terrifying, others crunchy on the teeth.
components:
- type: ReplacementAccent
accent: mouse
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
- type: entity
name: bee
suffix: Angry
- parent: MobBee
+ parent: [ MobBee, MobCombat ]
id: MobAngryBee
description: How nice a bee. Oh no, it looks angry and wants my pizza.
components:
- type: CombatMode
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
damage:
- type: entity
name: gorilla
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: MobGorilla
description: Smashes, roars, looks cool. Don't stand near one.
components:
- type: entity
name: kangaroo
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: MobKangaroo
description: A large marsupial herbivore. It has powerful hind legs, with nails that resemble long claws.
components:
- type: entity
name: grenade penguin
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: MobGrenadePenguin
description: A small penguin with a grenade strapped around its neck. Harvested by the Syndicate from icy shit-hole planets.
components:
- id: FoodMeatPenguin
amount: 3
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
damage:
# random sprite state when you spawn it.
- type: entity
name: tarantula
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: MobGiantSpider
description: Widely recognized to be the literal worst thing in existence.
components:
0: Alive
90: Dead
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
soundHit:
- DoorBumpOpener
- FootstepSound
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
soundHit:
- type: entity
name: corrupted corgi
- parent: MobCorgi
+ parent: [ MobCorgi, MobCombat ]
id: MobCorgiNarsi
description: Ian! No!
components:
Dead:
Base: narsian_dead
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
- type: entity
name: hamster
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: MobHamster
description: A cute, fluffy, robust hamster.
components:
Blunt: 0.1
- type: CombatMode
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
- type: entity
save: false
- parent: BaseSimpleMob
+ parent: [ BaseSimpleMob, MobCombat ]
id: BaseMobArgocyte
suffix: AI
description: A dangerous alien found on the wrong side of planets, known for their propensity for munching on ruins.
- type: Insulated
- type: CombatMode
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
damage:
- type: entity
name: behonker
- parent: [ SimpleSpaceMobBase, FlyingMobBase ]
+ parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat ]
id: BaseMobBehonker
abstract: true
description: A floating demon aspect of the honkmother.
- id: WeaponBehonkerLaser
amount: 1
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
damage:
- type: entity
name: space carp
id: BaseMobCarp
- parent: [ SimpleSpaceMobBase, FlyingMobBase ]
+ parent: [ SimpleSpaceMobBase, FlyingMobBase, MobCombat ]
description: It's a space carp.
abstract: true
components:
amount: 2
- type: MeleeWeapon
altDisarm: false
- hidden: true
angle: 0
animation: WeaponArcBite
soundHit:
- type: ZombieImmune
- type: entity
- parent: MobElementalBase
+ parent: [ MobElementalBase, MobCombat ]
id: MobQuartzCrab
name: quartz crab
description: An ore crab made from quartz.
rootTask:
task: SimpleHostileCompound
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
damage:
acts: [ "Destruction" ]
- type: entity
- parent: MobElementalBase
+ parent: [ MobElementalBase, MobCombat ]
id: MobIronCrab
name: ore crab
description: An ore crab made from iron.
rootTask:
task: SimpleHostileCompound
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
damage:
acts: [ "Destruction" ]
- type: entity
- parent: MobElementalBase
+ parent: [ MobElementalBase, MobCombat ]
id: MobUraniumCrab
name: ore crab
description: An ore crab made from uranium.
rootTask:
task: IdleCompound
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
damage:
name: Reagent slime
id: ReagentSlime
suffix: Water
- parent: MobAdultSlimes
+ parent: [ MobAdultSlimes, MobCombat ]
description: It consists of a liquid, and it wants to dissolve you in itself.
components:
- type: NpcFactionMember
factions:
- - SimpleHostile
+ - SimpleHostile
- type: Sprite
drawdepth: Mobs
sprite: Mobs/Aliens/elemental.rsi
speedModifierThresholds:
50: 0.4
- type: Bloodstream
- bloodReagent: Water
+ bloodReagent: Water
chemicalMaxVolume: 100
- type: StatusEffects
allowed:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: alive
color: "#128e80"
-
+
- type: entity
id: ReagentSlimeTHC
parent: ReagentSlime
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: alive
color: "#808080"
-
+
- type: entity
id: ReagentSlimeBicaridine
parent: ReagentSlime
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: alive
color: "#FA00AF"
-
+
- type: entity
id: ReagentSlimeOmnizine
parent: ReagentSlime
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: alive
- color: "#fcf7f9"
\ No newline at end of file
+ color: "#fcf7f9"
- type: entity
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
id: BaseMobFlesh
name: aberrant flesh
description: A shambling mass of flesh, animated through anomalous energy.
bloodMaxVolume: 100
- type: CombatMode
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
Dead:
Base: dead
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
0: Alive
50: Dead
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
baseWalkSpeed: 1.5
baseSprintSpeed: 2.5
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
- type: entity
name: Mimic
id: MobMimic
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
description: Surprise. # When this gets a proper write this should use the object's actual description >:)
components:
- type: Tag
- MachineLayer
- type: AnimationPlayer
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcFist
damage:
0: Alive
150: Dead
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
soundHit:
- type: entity
name: Rat King
id: MobRatKing
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
description: He's da rat. He make da roolz.
components:
- type: CombatMode
0: Alive
200: Dead
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh1.ogg
angle: 0
0: Alive
350: Dead
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh2.ogg
angle: 0
- type: entity
name: Rat Servant
id: MobRatServant
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
description: He's da mini rat. He don't make da roolz.
noSpawn: true #Must be configured to a King or the AI breaks.
components:
- type: Stamina
critThreshold: 60
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/bladeslice.ogg
angle: 0
- type: entity
name: basic slime
id: MobAdultSlimes
- parent: SimpleMobBase
+ parent: [ SimpleMobBase, MobCombat ]
abstract: true
description: It looks so much like jelly. I wonder what it tastes like?
components:
- type: Body
prototype: Slimes
requiredLegs: 1
- - type: CombatMode
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/punch3.ogg
angle: 0
heatDamageThreshold: 500
coldDamageThreshold: 0
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
state: glow
shader: unshaded
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
angle: 0
layer:
- MobLayer
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
bloodMaxVolume: 50
- type: CombatMode
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
bloodReagent: FluorosulfuricAcid
- type: MeleeWeapon
altDisarm: false
- hidden: true
angle: 0
soundHit:
collection: AlienClaw
150: 0.7
- type: MovementSpeedModifier
- type: MeleeWeapon
- hidden: true
damage:
groups:
Brute: 12
- type: MovementSpeedModifier
baseSprintSpeed: 4
- type: MeleeWeapon
- hidden: true
damage:
groups:
Brute: 10
- type: MovementSpeedModifier
baseSprintSpeed: 6.0
- type: MeleeWeapon
- hidden: true
damage:
groups:
Brute: 5
factions:
- Xeno
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
damage:
soundPerceivedByOthers: false # A 75% chance for a loud roar would get old fast.
- type: MeleeWeapon
altDisarm: false
- hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
damage:
rules: ghost-role-information-cerberus-rules
- type: GhostTakeoverAvailable
- type: MeleeWeapon
- hidden: true
angle: 0
animation: WeaponArcBite
damage:
color: "#40a7d7"
shader: unshaded
- type: NpcFactionMember
- factions:
+ factions:
- Syndicate
- type: HTN
rootTask:
Burn: 3
- type: InventorySlots
- type: MeleeWeapon
- hidden: true
angle: 30
animation: WeaponArcFist
attackRate: 1.8
nameSegments:
- names_clown
- type: NpcFactionMember
- factions:
+ factions:
- Syndicate
- type: HTN
rootTask:
- type: CombatMode
canDisarm: true
- type: MeleeWeapon
- hidden: true
soundHit:
collection: Punch
angle: 30
damageContainer: Biological
damageModifierSet: Scale
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/pierce.ogg
angle: 30
tags:
- StringInstrument
- type: MeleeWeapon
+ wideAnimationRotation: 45
damage:
types:
Blunt: 6
- back
sprite: Objects/Fun/Instruments/guitar.rsi
- type: Wieldable
- - type: Damageable # Smash it! Does 20 damage a hit, but breaks after 1 hit.
+ - type: Damageable # Smash it! Does 20 damage a hit, but breaks after 1 hit.
damageContainer: Inorganic
- type: Destructible
thresholds:
types:
Blunt: 20
- type: MeleeWeapon
+ wideAnimationRotation: 45
damage:
types:
Blunt: 5
- Payload # yes, you can make re-usable prank grenades
- BikeHorn
- type: MeleeWeapon
+ wideAnimationRotation: 135
soundHit:
collection: BikeHorn
params:
params:
variation: 0.246
- type: MeleeWeapon
+ wideAnimationRotation: 135
soundHit:
collection: CluwneHorn
params:
- type: entity
- parent: BaseItem
+ parent: [ BaseItem, MobCombat ]
id: MrChips
name: mr chips
suffix: Dummy
allowedStates:
- Alive
- type: MeleeWeapon
- hidden: true
soundHit:
path: /Audio/Weapons/boxingpunch1.ogg
angle: 30
sound:
path: /Audio/Items/Toys/mousesqueek.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Items/Toys/mousesqueek.ogg
sound:
path: /Audio/Items/Toys/weh.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Items/Toys/weh.ogg
sound:
path: /Audio/Items/Toys/muffled_weh.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Items/Toys/muffled_weh.ogg
sound:
path: /Audio/Items/Toys/toy_rustle.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Items/Toys/toy_rustle.ogg
- type: SolutionContainerManager
sound:
path: /Audio/Effects/bite.ogg
- type: MeleeWeapon
+ wideAnimationRotation: -90
soundHit:
path: /Audio/Effects/bite.ogg
angle: 0
sound:
path: /Audio/Items/Toys/rattle.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Items/Toys/rattle.ogg
sound:
path: /Audio/Items/Toys/mousesqueek.ogg
- type: MeleeWeapon
+ wideAnimationRotation: -90
soundHit:
path: /Audio/Items/Toys/mousesqueek.ogg
- type: Clothing
sound:
path: /Audio/Voice/Vox/shriek1.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Voice/Vox/shriek1.ogg
sound:
path: /Audio/Weapons/Xeno/alien_spitacid.ogg
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
path: /Audio/Weapons/Xeno/alien_spitacid.ogg
id: BookChefGaming
parent: BaseItem
name: chef gaming
- description: A book about cooking written by a gamer chef.
+ description: A book about cooking written by a gamer chef.
components:
- type: Sprite
sprite: Objects/Misc/books.rsi
id: BookSecurity
parent: BaseItem
name: security 101
- description: A book about security written by Nanotrasen. The book is stained with blood. It seems to have been used more as a weapon than reading material.
+ description: A book about security written by Nanotrasen. The book is stained with blood. It seems to have been used more as a weapon than reading material.
components:
- type: Sprite
sprite: Objects/Misc/books.rsi
tags:
- Book
- type: MeleeWeapon
+ wideAnimationRotation: 180
damage:
types:
Blunt: 6
- type: UseDelay
delay: 0.5
- type: MeleeWeapon
+ wideAnimationRotation: 180
soundHit:
collection: DeskBell
params:
- type: FireExtinguisher
hasSafety: true
- type: MeleeWeapon
+ wideAnimationRotation: 180
damage:
types:
Blunt: 10
state: overpriced_pen
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -45
damage:
types:
Piercing: 15
whitelist:
tags:
- Write
- insertOnInteract: false
+ insertOnInteract: false
- type: Item
sprite: Objects/Misc/clipboard.rsi
size: 10
tags:
- Write
- type: MeleeWeapon
+ wideAnimationRotation: 180
damage:
types:
Blunt: 6
tags:
- Metal
- type: SpaceGarbage
-
+
- type: entity
parent: UtensilBase
id: UtensilBasePlastic
types:
- Fork
- type: MeleeWeapon
+ wideAnimationRotation: 180
attackRate: 1.5
damage:
types:
types:
- Spoon
- type: MeleeWeapon
+ wideAnimationRotation: 180
attackRate: 1.5
damage:
types:
- state: cutters-cutty-thingy
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -90
damage:
types:
Piercing: 2
sprite: Objects/Tools/screwdriver.rsi
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -90
attackRate: 1
damage:
types:
sprite: Objects/Tools/wrench.rsi
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: 135
attackRate: 1.5
damage:
types:
size: 10
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 8
- type: StaticPrice
price: 100
- type: MeleeWeapon
+ wideAnimationRotation: -90
attackRate: 1.5
damage:
types:
state: icon
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 14
- Belt
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 7
shader: unshaded
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -90
damage:
types:
Blunt: 5 #i mean... i GUESS you could use it like that
sprite: Objects/Weapons/Melee/armblade.rsi\r
state: icon\r
- type: MeleeWeapon\r
+ wideAnimationRotation: 90\r
attackRate: 0.75\r
damage:\r
types:\r
sprite: Objects/Weapons/Melee/baseball_bat.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 10
sprite: Objects/Weapons/Melee/chainsaw.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Slash: 5
sprite: Objects/Weapons/Melee/cult_dagger.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
sprite: Objects/Weapons/Melee/cult_blade.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
sprite: Objects/Weapons/Melee/cult_halberd.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
shader: unshaded
map: [ "blade" ]
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1
soundHit:
path: /Audio/Weapons/eblade1.ogg
shader: unshaded
map: [ "blade" ]
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1
hidden: true
damage:
Blunt: -4.5
litDisarmMalus: 0.7
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
angle: 100
soundHit:
sprite: Objects/Weapons/Melee/fireaxe.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -90
+ swingLeft: true
attackRate: 0.75
damage:
types:
sprite: Objects/Weapons/Melee/gohei.rsi
state: gohei
- type: MeleeWeapon
+ wideAnimationRotation: -150
damage:
types:
Blunt: 3 #You'd be better off punching people
- Knife
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Slash: 12
size: 4
state: butch
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
size: 2
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
capacity: 1
count: 1
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 8
sprite: Objects/Weapons/Melee/crusher_dagger.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
- type: Sprite
sprite: Objects/Weapons/Melee/crusher_glaive.rsi
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.25
- type: Item
size: 150
sprite: Objects/Weapons/Melee/needle.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Piercing: 1
state: pickaxe
- type: ItemCooldown
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
groups:
Brute: 5
map: ["enum.SolutionContainerLayers.Fill"]
visible: false
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Piercing: 12
- type: Sprite
sprite: Objects/Weapons/Melee/reinforced_spear.rsi
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Piercing: 15
- type: Sprite
sprite: Objects/Weapons/Melee/plasma_spear.rsi
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Piercing: 18
- type: Sprite
sprite: Objects/Weapons/Melee/uranium_spear.rsi
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Piercing: 10
- type: Stunbaton
energyPerUse: 70
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 9
price: 100
- type: Construction
graph: makeshiftstunprod
- node: msstunprod
\ No newline at end of file
+ node: msstunprod
sprite: Objects/Weapons/Melee/captain_sabre.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
sprite: Objects/Weapons/Melee/katana.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Slash: 25
sprite: Objects/Weapons/Melee/energykatana.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -60
damage:
types:
Slash: 30
sprite: Objects/Weapons/Melee/machete.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Slash: 20
sprite: Objects/Weapons/Melee/claymore.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 0.75
damage:
types:
sprite: Objects/Weapons/Melee/cutlass.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Slash: 16
size: 150
sprite: Objects/Tools/Toolboxes/toolbox_red.rsi
- type: MeleeWeapon
+ wideAnimationRotation: -135
attackRate: 1.5
damage:
types:
size: 15
sprite: Objects/Weapons/Melee/white_cane.rsi
- type: MeleeWeapon
+ wideAnimationRotation: 45
damage:
types:
Blunt: 5
damage:
types:
Blunt: 3
-
\ No newline at end of file
- type: Stunbaton
energyPerUse: 50
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 7
sprite: Objects/Weapons/Melee/truncheon.rsi
state: icon
- type: MeleeWeapon
+ wideAnimationRotation: -135
damage:
types:
Blunt: 20
maxCharges: 5
charges: 5
- type: MeleeWeapon
+ wideAnimationRotation: 180
damage:
types:
Blunt: 0 # melee weapon to allow flashing individual targets