Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ namespace Content.Shared.Weapons.Ranged.Components;
public partial class AmmoComponent : Component, IShootable
{
// Muzzle flash stored on ammo because if we swap a gun to whatever we may want to override it.

[DataField]
// Floof change: Changed this datafield to have a name so it could actually be changed. Before muzzleflash couldnt be changed due to no datafield existing that allowed this.
[DataField("muzzleFlash")]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simple, the field could not be addressed before. Every bullet weapon used the same muzzleflash because it was hardcoded in the line below. This defeats the purpose of "we may want to override it" if there is no way to override it to begin with

Copy link
Collaborator

@Mnemotechnician Mnemotechnician Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No it's not, this datafield has the name muzzleFlash by default (see docs), specifying it explicitly is redundant.

Copy link
Contributor Author

@JFerrix JFerrix Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But where is it then? Furthermore if it had then why did addressing the field not work? If it is named muzzleFlash by default then why did adding muzzleFlash in the yml component part not work?
Forgot to mention, you said see docs, where? Where is the documentation for this?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know why it didn't work for you, you likely made some kinda typo and it slipped through. When the name of data field is not explicitly specified, it defaults to the name of the backing field with the first letter converted to lower case.

Image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That explains a lot. Is a shitty dolution but it explains a lot. Ill try to get that to work. I tried to reverse emgineer it according to other datafiel entries which specifically specified the names of the fields. I have to admit, I hate that this doublestandard exists but I suppose the entire codebase is just held together by permanent duct tape solutions the more I look around it

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no idea how or why but now it works. I swear, it didnt work before with the same approach

public EntProtoId? MuzzleFlash = "MuzzleFlashEffect";
}

Expand Down
Binary file not shown.
2 changes: 2 additions & 0 deletions Resources/Locale/en-US/_Floof/store/uplink-catalog.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
uplink-pistol-magazine-caseless-name-subsonic = Pistol Magazine (.25 caseless subsonic)
uplink-pistol-magazine-caseless-desc-subsonic = Pistol magazine with 10 subsonic cartridges. Copatible with the Cobra. This one is designed for stealth.
2 changes: 1 addition & 1 deletion Resources/Locale/en-US/store/uplink-catalog.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ uplink-estoc-ammo-name = Rifle magazine (.20 rifle)
uplink-estoc-ammo-desc = A rifle magazine with 25 cartridges. Compatible with the Estoc DMR.
uplink-pistol-magazine-caseless-name = Pistol Magazine (.25 caseless)
uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 cartridges. Compatible with the Cobra.
uplink-pistol-magazine-caseless-desc = Pistol magazine with 10 cartridges. Compatible with the Cobra. If you want your stealth pistol to be not stealthy for some reason
uplink-speedloader-magnum-name = Speedloader (.45 magnum AP)
uplink-speedloader-magnu-desc = Revolver speedloader with 6 armor-piercing cartridges, capable of ignoring armor entirely. Compatible with the Python.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@
slots:
gun_magazine:
name: Magazine
startingItem: MagazinePistolCaselessRifle
startingItem: MagazinePistolCaselessRifleSubsonic
insertSound: /Audio/Weapons/Guns/MagIn/pistol_magin.ogg
ejectSound: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg
priority: 2
Expand All @@ -182,11 +182,11 @@
whitelistFailPopup: gun-magazine-whitelist-fail
gun_chamber:
name: Chamber
startingItem: CartridgeCaselessRifle
startingItem: CartridgeCaselessRifleSubsonic
priority: 1
whitelist:
tags:
- CartridgeCaselessRifle
- CartridgeCaselessRifleSubsonic
- type: ContainerContainer
containers:
gun_magazine: !type:ContainerSlot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,21 +113,21 @@
sprite: Objects/Weapons/Guns/Snipers/heavy_sniper.rsi
- type: GunRequiresWield
- type: Gun
fireRate: 0.4
fireRate: 0.3
selectedMode: SemiAuto
availableModes:
- SemiAuto
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/sniper.ogg
path: /Audio/Weapons/Guns/Gunshots/sniperHeavy.ogg
- type: BallisticAmmoProvider
whitelist:
tags:
- CartridgeAntiMateriel
capacity: 5
proto: CartridgeAntiMateriel
- type: SpeedModifiedOnWield
walkModifier: 0.25
sprintModifier: 0.25
walkModifier: 0.8
sprintModifier: 0.8
Comment on lines -129 to +130
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The entire point of this is to force you to stand still while aiming. This isn't cs:go or tf2 where you can snipe people on the fly, is it?

Copy link
Contributor Author

@JFerrix JFerrix Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multiple reasons, a) Current one has 0 movespeed slow and that already hasnt exactly done it any good. b) fairness. I actually considered removing the slowdown entirely to begin with but the sight advantage requires a tradeoff. Mainly because: No other weapon has this. If we port our loadout weapons sec will be armed as hell with weapons that have no slowdown, literally higher dps (the hristov has a 16.666 dps rating btw, one shot every ~3s) and same range. To kill a hristov user you can literally blindfire into the general direction and because they effectively cant move they WILL die from this. There are no long range engagements where the hristov will have an advantage, not in this game, the hristov already has no niche and needs to compete with weapons that are made to excel at this. The only way the hristov will work is if you employ hit and run tactics. It will literally be the only way to not have a joke of a weapon again. Adding an 80% movespeed slow is killing this entire strategy and the only other way to make the hristov viable would be to increase its damage. That wouldnt work either however as due to the low firerate and armorpen all we could do would be to make it a 100 damage per shot weapon which would move it into the op, unfun to play category because it could literally oneshot anything.
You see how the movespeed is the only variable we can tweak to give both the player a fair chance without making the weapon op?
Also quickdrawing it will never be viable because you have an equip delay with the value of the fire speed, aka between equipping it and firing you will have over 3s of 80% slow without any form of pressure other than looking menacing.
Trust me this is already a statistically speaking bad weapon without the slowdown at all, we dont want to move it from shit weapon on EE to also shit weapon on DV, the entire purpose is to add a high risk, high skill, high reward weapon into the pool of available weapons.

Ill be happy to discuss this but trust me, the hristov has ironically enough already received most of the changes I would have wanted on EE here on DV and it still isnt a weapon you see often because a buff thats two steps forward but three steps back is not a buff

Copy link
Collaborator

@Mnemotechnician Mnemotechnician Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see your point. I don't fully agree with what's being said here, but I suppose we can give it a try given the unpopularity of this weapon.

- type: CursorOffsetRequiresWield
- type: EyeCursorOffset
maxOffset: 3
Expand Down
12 changes: 6 additions & 6 deletions Resources/Prototypes/Recipes/Lathes/ammo.yml
Original file line number Diff line number Diff line change
Expand Up @@ -461,12 +461,12 @@
Plastic: 80

# .60 anti-materiel
- type: latheRecipe
parent: BaseAmmoBoxRecipe
id: MagazineBoxAntiMateriel
result: MagazineBoxAntiMateriel
materials:
Steel: 200
#- type: latheRecipe
# parent: BaseAmmoBoxRecipe
# id: MagazineBoxAntiMateriel
# result: MagazineBoxAntiMateriel
# materials:
# Steel: 200

# Encampment ammo
- type: latheRecipe
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@
unlitIdleState: unlit
unlitRunningState: unlit-building
- type: EmagLatheRecipes

emagStaticPacks:
- SecurityAmmoStatic
# Floof (Why the fuck is this not a thing?)
- SyndieGunAmmoFloof
emagDynamicPacks:
- SecurityAmmo
- SecurityExplosives
Expand Down
10 changes: 10 additions & 0 deletions Resources/Prototypes/_Floof/Catalog/uplink_catalog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
- type: listing
id: UplinkMagazinePistolCaselessRifleSubsonic
name: uplink-pistol-magazine-caseless-name-subsonic
description: uplink-pistol-magazine-caseless-desc-subsonic
icon: { sprite: /Textures/Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi, state: red-icon }
productEntity: MagazinePistolCaselessRifleSubsonic
cost:
Telecrystal: 1
categories:
- UplinkAmmo
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
- type: entity
parent: BaseMagazineBoxCaselessRifle
id: MagazineBoxCaselessRifleSubsonic
name: ammunition box (.25 caseless subsonic)
description: A cardboard box of .25 caseless subsonic rounds. Intended to hold general-purpose kinetic ammunition.
components:
- type: BallisticAmmoProvider
proto: CartridgeCaselessRifleSubsonic
- type: Sprite
layers:
- state: base
map: ["enum.GunVisualLayers.Base"]
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
- type: entity
id: CartridgeCaselessRifleSubsonic
name: cartridge (.25 caseless Subsonic)
parent: BaseCartridgeCaselessRifle
description: A small caliber utilizing caseless technology, omitting conventional brass casing in favor of hardened propellant. Specifically built for stealth purposes
components:
- type: CartridgeAmmo
muzzleFlash: MuzzleFlashEffectSuppressed
proto: BulletCaselessRifleSubsonic
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
- type: entity
id: MagazinePistolCaselessRifleSubsonic
name: "pistol magazine (.25 caseless Subsonic)"
parent: BaseMagazinePistolCaselessRifle
description: 10-round magazine for the Cobra pistol. Intended to hold general-purpose kinetic ammunition.
components:
- type: BallisticAmmoProvider
proto: CartridgeCaselessRifleSubsonic
capacity: 10
- type: Sprite
layers:
- state: red
map: ["enum.GunVisualLayers.Base"]
- state: mag-1
map: ["enum.GunVisualLayers.Mag"]
- type: MagazineVisuals
magState: mag
steps: 6
zeroVisible: false
- type: Appearance
- type: Item
inhandVisuals:
left:
- state: inhand-left-mag
right:
- state: inhand-right-mag
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
- type: entity
id: BulletCaselessRifleSubsonic
name: bullet (.25 caseless subsonic)
parent: BaseBullet
categories: [ HideSpawnMenu ]
components:
- type: Sprite
sprite: _Floof/Objects/Weapons/Guns/Projectiles/projectileSubsonic.rsi
layers:
- shader: shaded
- type: Projectile
damage:
types:
Piercing: 19
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
- type: entity
parent: MuzzleFlashEffect
id: MuzzleFlashEffectSuppressed
categories: [ HideSpawnMenu ]
components:
- type: Sprite
drawdepth: BelowMobs
layers:
- shader: unshaded
map: ["enum.EffectLayers.Unshaded"]
sprite: _Floof/Objects/Weapons/Guns/Projectiles/muzzleflashes.rsi # floof
state: kineticSuppressed # floof
10 changes: 10 additions & 0 deletions Resources/Prototypes/_Floof/Recipes/Lathes/Packs/ammo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Static

# Floof (Why the fuck is this not a thing?)
# Adds .60cal and .25 ammo and pistol magazines for the Cobra
- type: latheRecipePack
id: SyndieGunAmmoFloof
recipes:
- MagazineBoxAntiMateriel
- MagazineBoxCaselessRifleSubsonic
- MagazinePistolCaselessRifleSubsonic
20 changes: 20 additions & 0 deletions Resources/Prototypes/_Floof/Recipes/Lathes/ammo.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#.25 Caseless
- type: latheRecipe
id: MagazineBoxCaselessRifleSubsonic
result: MagazineBoxCaselessRifleSubsonic
materials:
Steel: 800

- type: latheRecipe
id: MagazinePistolCaselessRifleSubsonic
result: MagazinePistolCaselessRifleSubsonic
materials:
Steel: 500

#.60 Ammo
- type: latheRecipe
id: MagazineBoxAntiMateriel
result: MagazineBoxAntiMateriel
completetime: 5
materials:
Steel: 1000
7 changes: 5 additions & 2 deletions Resources/Prototypes/_Floof/tags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
id: EnergySabre

- type: Tag
id: IceCream
id: ShirtlessClothing

- type: Tag
id: ShirtlessClothing
id: IceCream

- type: Tag
id: Sterilebag
Expand All @@ -27,3 +27,6 @@

- type: Tag
id: HighHeelBoots

- type: Tag
id: CartridgeCaselessRifleSubsonic #Tag for new Cobra ammo
3 changes: 3 additions & 0 deletions Resources/Prototypes/tags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,9 @@
- type: Tag
id: CartridgeCap # Specialty ammo for RevolverCapGun, RevolverCapGunFake.

- type: Tag
id: CartridgeCHIMP

- type: Tag
id: CartridgeCaselessRifle # Specialty ammo for WeaponPistolCobra.

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Created by DVDPlayerOfDiscordFame (github) for Impstation.",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "kineticSuppressed",
"delays": [
[
0.05,
0.05,
0.05,
1.00
]
]
}
]
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Custom edited sprite of the 'bullet' RSI from the default bullet2.rsi folder",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "bullet",
"directions": 1
}
]
}
Loading