Repository: ss14Starlight/space-station-14
Pull request #376: Boxcutter
Author: login: Conflee
Labels: name: Changes: Sprites
name: S: Untriaged
description: Status: Indicates an item has not been triaged and doesn't have appropriate labels.
name: Changes: No C#
name: S: Needs Review
description: Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved.
name: size/S
Created: 2025-03-09T01:43:37Z | Merged: 2025-03-10T16:29:33Z


## Short description
Adds Boxcutters. They work as a knife and screwdriver, but only deal 8 Slash instead of the default 10 like other knives. 1 Spawns in every Cargo Wardrobe, and there are 2 in the CargoDrobe.

## Why we need to add this
Cargo themed knife so they stop using shivs and/or stealing Salvage's Survival Knives to do work like cut cloth etc. Boxcutter fits the Cargo vibe anyway, like a Walmart Stocker a good Cargo Tech should have a Boxcutter.

## Media (Video/Screenshots)
![image](https://github.com/user-attachments/assets/a54e42cd-179b-44b6-99a6-27de75d7754b)


## Checks
- [X] I do not require assistance to complete the PR.
- [X] Before posting/requesting review of a PR, I have verified that the changes work.
- [X] I have added screenshots/videos of the changes, or this PR does not change in-game mechanics.
- [X] I affirm that my changes are licensed under the [Starlight Fork License](https://github.com/ss14Starlight/space-station-14/blob/Starlight/LICENSE-Starlight.TXT) and grant permission for use in this repository under its conditions.

**Changelog**

:cl: Conf
- add: Added Boxcutters, a lower damage knife for Cargo. Spawns in Cargo Wardrobes, and there are 2 in the CargoDrobe vending machine



Diff:
diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml b/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml
index 49601980f30a..cb6a6e2d88e7 100644
--- a/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml
+++ b/Resources/Prototypes/Catalog/Fills/Lockers/wardrobe_job.yml
@@ -178,6 +178,7 @@
        - id: ClothingUniformJumpskirtCargo
        - id: ClothingHandsGlovesFingerless
        - id: AppraisalTool
+       - id: WeaponMeleeBoxcutter
 
  - type: entity
    id: WardrobeSalvageFilled
diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml
index 4477c0269715..ad22db744a81 100644
--- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml
+++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml
@@ -15,6 +15,7 @@
     ClothingOuterWinterMiner: 2
     ClothingNeckScarfStripedBrown: 3
     ClothingShoesBootsWinterCargo: 2
+    WeaponMeleeBoxcutter: 2
   contrabandInventory:
     ToyFigurineCargoTech: 1
     ToyFigurineSalvage: 1
diff --git a/Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml b/Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
new file mode 100644
index 000000000000..14cb030c64f7
--- /dev/null
+++ b/Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
@@ -0,0 +1,43 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: WeaponMeleeBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: sheathed
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
+    speedModifier: 0.5
+    useSound:
+      collection: Screwdriver
\ No newline at end of file
diff --git a/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/boxcutter.png b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/boxcutter.png
new file mode 100644
index 000000000000..41838e64c01a
Binary files /dev/null and b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/boxcutter.png differ
diff --git a/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/icon.png b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/icon.png
new file mode 100644
index 000000000000..368d85bcbd90
Binary files /dev/null and b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/icon.png differ
diff --git a/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-left.png b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-left.png
new file mode 100644
index 000000000000..efd31003f8ce
Binary files /dev/null and b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-left.png differ
diff --git a/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-right.png b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-right.png
new file mode 100644
index 000000000000..cbabb4cbe379
Binary files /dev/null and b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/inhand-right.png differ
diff --git a/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/meta.json b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/meta.json
new file mode 100644
index 000000000000..6b5ab9688cc1
--- /dev/null
+++ b/Resources/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/meta.json
@@ -0,0 +1,25 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "By Conflee",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "icon"
+    },
+    {
+      "name": "boxcutter"
+    },
+    {
+      "name": "inhand-left",
+      "directions": 4
+    },
+    {
+      "name": "inhand-right",
+      "directions": 4
+    }
+  ]
+}


Reviews:
user: login: StarlightHost
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T01:56:03Z
user: login: StarlightHost
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T01:56:54Z
user: login: Rinary1
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-09T10:16:29Z
user: login: Conflee
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T15:21:11Z
user: login: Conflee
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T15:22:19Z
user: login: Rinary1
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-09T17:17:08Z
user: login: Rinary1
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-09T17:17:23Z
user: login: Rinary1
body: you don't change anything just fixed error and resolve my requirements with no changes....
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-09T17:18:24Z
user: login: Conflee
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T18:45:25Z
user: login: Conflee
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-09T18:45:33Z
user: login: Rinary1
state: CHANGES_REQUESTED
author_association: MEMBER
submitted_at: 2025-03-10T09:16:53Z

Review comments:
diff_hunk: @@ -0,0 +1,23 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: icon
+  - type: Item
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    storedSprite:
+      state: storage
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: StarlightHost
body: Error: /Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml(-1,-1)  File not found. (/Textures/_Starlight/Objects/Weapons/Melee/boxcutter.rsi/storage.png)
created_at: 2025-03-09T01:56:03Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,23 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: icon
+  - type: Item
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    storedSprite:
+      state: storage
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: StarlightHost
body: Actually, it seems like the storedSprite block isn't needed for it.
created_at: 2025-03-09T01:56:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,40 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: 
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Rinary1
body: why this is screwing tool and it speed the same as a normal screwdriver?
created_at: 2025-03-09T10:14:38Z
author_association: MEMBER
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Rinary1
body: also why this file in weapons but his naming structure like it's tool? Move it in tools or rename id into:
WeaponMeleeBoxcutter
created_at: 2025-03-09T10:16:25Z
author_association: MEMBER
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Conflee
body: because all knives go in the weapons melee folder
created_at: 2025-03-09T15:21:11Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,40 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: 
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Conflee
body: so cargo can use it to dismantle crates, which fits the 'boxcutter' use i want for it. 
created_at: 2025-03-09T15:22:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,40 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: 
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Rinary1
body: > so cargo can use it to dismantle crates, which fits the 'boxcutter' use i want for it.

slow it, because knife it's not a screwdriver
created_at: 2025-03-09T17:17:08Z
author_association: MEMBER
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Rinary1
body: > because all knives go in the weapons melee folder

so rename id into `WeaponMeleeBoxcutter`
created_at: 2025-03-09T17:17:23Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,40 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: CargoBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: 
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Conflee
body: Done, 70% speed
created_at: 2025-03-09T18:45:25Z
author_association: CONTRIBUTOR
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Conflee
body: Done
created_at: 2025-03-09T18:45:33Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,43 @@
+- type: entity
+  name: boxcutter
+  parent: [CombatKnife, BaseSecurityCargoContraband]
+  id: WeaponMeleeBoxcutter
+  description: Always accidentally cuts whatever is inside the box.
+  components:
+  - type: Sprite
+    sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+    state: boxcutter
+  - type: ItemSwitch
+    state: sheathed
+    states:
+      sheathed: !type:ItemSwitchState
+        verb: unsheath
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: boxcutter
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Blunt: 1
+
+      unsheathed: !type:ItemSwitchState
+        verb: sheathe
+        sprite:
+          sprite: _Starlight/Objects/Weapons/Melee/boxcutter.rsi
+          state: icon
+        components:
+        - type: MeleeWeapon
+          wideAnimationRotation: -135
+          attackRate: 1
+          damage:
+            types:
+              Slash: 8
+  - type: Tool
+    qualities:
+      - Screwing
+    speedModifier: 0.7
path: Resources/Prototypes/_StarLight/Entities/Objects/Weapons/Melee/boxcutter.yml
user: login: Rinary1
body: ```suggestion
    speedModifier: 0.5
```
created_at: 2025-03-10T09:15:42Z
author_association: MEMBER
diff_hunk: @@ -15,7 +15,9 @@
     ClothingOuterWinterMiner: 2
     ClothingNeckScarfStripedBrown: 3
     ClothingShoesBootsWinterCargo: 2
+    WeaponMeleeBoxcutter: 2
   contrabandInventory:
     ToyFigurineCargoTech: 1
     ToyFigurineSalvage: 1
     ToyFigurineQuartermaster: 1
+    CombatKnife: 1
path: Resources/Prototypes/Catalog/VendingMachines/Inventories/cargodrobe.yml
user: login: Rinary1
body: ???
```suggestion
```
created_at: 2025-03-10T09:16:31Z
author_association: MEMBER

PR comments:
user: login: Conflee
created_at: 2025-03-09T03:59:09Z
body: I cant tell what the issue is with YAMLINTER
author_association: CONTRIBUTOR
user: login: Rinary1
created_at: 2025-03-09T10:13:34Z
body: > I cant tell what the issue is with YAMLINTER

> Null value provided for reading but type was not nullable!

this means you don't specified required arguments in some component.
author_association: MEMBER