Кастомизация андроидов (#300)

* Новая кастомизация и исправления

* Дебаф стана от воды

* Последний штрих

* Update comment formatting for ShockDamage field

---------

Co-authored-by: Zekins <136648667+Zekins3366@users.noreply.github.com>
This commit is contained in:
MishaUnity
2026-01-31 14:11:59 +03:00
committed by GitHub
parent 4500ecab1e
commit 883362a8d1
29 changed files with 358 additions and 21 deletions

View File

@@ -4,15 +4,17 @@ using Content.Server.Popups;
using Content.Server.Power.EntitySystems;
using Content.Shared._Wega.Implants.Components;
using Content.Shared.Power.Components;
using Content.Shared.Power.EntitySystems;
using Content.Shared.PowerCell;
using Robust.Server.Audio;
using System.Diagnostics;
namespace Content.Server._Wega.Implants;
public sealed class BatteryDrainerImplantSystem : EntitySystem
{
[Dependency] private readonly HandsSystem _hands = default!;
[Dependency] private readonly BatterySystem _battery = default!;
[Dependency] private readonly PredictedBatterySystem _battery = default!;
[Dependency] private readonly PowerCellSystem _powerCell = default!;
[Dependency] private readonly ActionsSystem _actions = default!;
[Dependency] private readonly AudioSystem _audio = default!;
@@ -70,7 +72,7 @@ public sealed class BatteryDrainerImplantSystem : EntitySystem
EntityUid? battery = null;
foreach (var entity in _hands.EnumerateHeld(uid))
{
if (HasComp<BatteryComponent>(entity))
if (HasComp<PredictedBatteryComponent>(entity))
{
battery = entity;
break;
@@ -90,7 +92,7 @@ public sealed class BatteryDrainerImplantSystem : EntitySystem
{
if (!_powerCell.TryGetBatteryFromSlot(uid, out var battery))
{
if (HasComp<BatteryComponent>(uid))
if (HasComp<PredictedBatteryComponent>(uid))
return uid;
}
else
@@ -107,10 +109,13 @@ public sealed class BatteryDrainerImplantSystem : EntitySystem
if (sourceUid == null || targetUid == null)
return;
if (!TryComp<BatteryComponent>(sourceUid, out var sourceBattery) || !TryComp<BatteryComponent>(targetUid, out var targetBattery))
Log.Info(_battery.GetCharge(sourceUid.Value).ToString() + "Мя");
Log.Info(targetUid.Value.ToString() + "UwU");
if (!HasComp<PredictedBatteryComponent>(sourceUid) || !TryComp<PredictedBatteryComponent>(targetUid, out var targetBattery))
return;
float transfer = Math.Clamp(targetBattery.MaxCharge - targetBattery.CurrentCharge, 0f, sourceBattery.CurrentCharge);
float transfer = Math.Clamp(targetBattery.MaxCharge - _battery.GetCharge(targetUid.Value), 0f, _battery.GetCharge(sourceUid.Value));
if (transfer == 0f)
{
_popup.PopupEntity(Loc.GetString("implant-battery-drainer-no-transfer"), user, user);

View File

@@ -1,4 +1,4 @@
using Content.Shared.Electrocution;
using Content.Shared.Electrocution;
using Content.Shared.StatusEffect;
using Robust.Shared.Prototypes;
@@ -34,7 +34,7 @@ public sealed partial class Electrocute : EntityEffectBase<Electrocute>
/// <summary>
/// Shock damage we apply to the entity.
/// </summary>
[DataField] public int ShockDamage = 5;
[DataField] public float ShockDamage = 5; // Corvax-Wega-Edit
/// <summary>
/// Do we refresh the duration? Or add more duration if it already exists.

View File

@@ -2,14 +2,21 @@
marking-AndroidAntennaLeft = Андроид, антенна (Левая)
marking-AndroidAntennaRight = Андроид, антенна (Правая)
marking-AndroidAntennaCrown = Андроид, антенны (Корона)
marking-AndroidEyesVisor = Андроид, визор
marking-AndroidHeadBulbs = Андроид, радиолампы
marking-AndroidEyesVisor = Андроид, глаза (Визор)
marking-AndroidEyesVisor-eyes_visor_led = Светодиоды
marking-AndroidIpcHead = Андроид, голова (ЭЛТ монитор)
marking-AndroidOldHead = Андроид, голова (Страх детства)
marking-AndroidScreenHead = Андроид, голова (Экран)
marking-AndroidAnimatronicHead = Андроид, голова (Аниматроник)
marking-AndroidTempleLed = Андроид, светодиод (Висок)
# Торс
marking-AndroidTorsoFemaleStandart = Андроид, торс (Стандарт)
marking-AndroidTorsoFemaleBreast = Андроид, торс (Средняя грудь)
marking-AndroidTorsoFemaleBigBreast = Андроид, торс (Большая грудь)
marking-AndroidTorsoFemaleNoBreast = Андроид, торс (Без груди)
marking-AndroidTorsoMale = Андроид, торс
marking-AndroidTorsoSpine = Андроид, торс (Усиленный позвоночник)
# Светодиоды
marking-AndroidLeds = Андроид, светодиоды (Стандарт)
marking-AndroidLedsLove = Андроид, светодиоды (Акцент)
@@ -18,4 +25,9 @@ marking-AndroidLedsStripes = Андроид, светодиоды (Полосы)
marking-AndroidCatEars = Андроид, кошачьи ушки
marking-AndroidCatEars-ears_cat_led = Светодиоды
marking-AndroidCatTail = Андроид, кошачий хвост
marking-AndroidCatEars-cat_tail_led = Светодиоды
marking-AndroidCatEars-cat_tail_led = Светодиоды
# Конечности
marking-AndroidScrapArmLeft = Андроид, левая рука (Самоделкин)
marking-AndroidScrapArmRight = Андроид, правая рука (Самоделкин)
marking-AndroidScrapLegLeft = Андроид, левая нога (Самоделкин)
marking-AndroidScrapLegRight = Андроид, правая нога (Самоделкин)

View File

@@ -1,4 +1,4 @@
charger-examine = Заряжает [color={ $color }]{ $chargeRate }Вт[/color] в секунду.
charger-component-charge-rate = Скорость зарядки
charger-content = Текущий заряд: [color=#5E7C16]{ $chargePercentage }[/color]%.
charger-content = Текущий заряд: [color=#5E7C16]{$chargePercent}[/color]%.
charger-empty = В зарядном устройстве ничего нет.

View File

@@ -130,7 +130,7 @@
- type: Tag
tags:
- CannotSuicide
- Brain # Corvax-Wega-Android
- BrainSynthetic # Corvax-Wega-Android
- type: GenericVisualizer
visuals:
enum.ToggleableGhostRoleVisuals.Status:

View File

@@ -40,6 +40,20 @@
- sprite: _Wega/Mobs/Customization/android.rsi
state: head_antenna_crown
- type: marking
id: AndroidHeadBulbs
bodyPart: HeadTop
markingCategory: HeadTop
speciesRestriction: [ Android ]
coloring:
default:
type:
!type:CategoryColoring
category: Special
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: head_bulbs
- type: marking
id: AndroidTorsoFemaleStandart
bodyPart: Chest
@@ -115,6 +129,30 @@
- sprite: _Wega/Mobs/Customization/android.rsi
state: body_m
- type: marking
id: AndroidTorsoSpine
bodyPart: Special
markingCategory: Chest
speciesRestriction: [ Android ]
sexRestriction: [ Female ]
sponsorOnly: false
coloring:
layers:
body_spine:
type:
!type:SimpleColoring
color: "#ffffff"
body_spine_led:
type:
!type:CategoryColoring
category: Special
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: body_spine
- sprite: _Wega/Mobs/Customization/android.rsi
state: body_spine_led
- type: marking
id: AndroidLeds
bodyPart: Special
@@ -160,6 +198,21 @@
- sprite: _Wega/Mobs/Customization/android.rsi
state: leds_stripes
- type: marking
id: AndroidTempleLed
bodyPart: HeadTop
markingCategory: Head
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:CategoryColoring
category: Special
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: temple_led
- type: marking
id: AndroidCatEars
bodyPart: HeadTop
@@ -222,4 +275,160 @@
- sprite: _Wega/Mobs/Customization/android.rsi
state: eyes_visor
- sprite: _Wega/Mobs/Customization/android.rsi
state: eyes_visor_led
state: eyes_visor_led
- type: marking
id: AndroidScrapArmLeft
bodyPart: Special
markingCategory: Arms
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: l_arm_scrap
- type: marking
id: AndroidScrapArmRight
bodyPart: Special
markingCategory: Arms
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: r_arm_scrap
- type: marking
id: AndroidScrapLegLeft
bodyPart: Special
markingCategory: Legs
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: l_leg_scrap
- type: marking
id: AndroidScrapLegRight
bodyPart: Special
markingCategory: Legs
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android.rsi
state: r_leg_scrap
- type: marking
id: AndroidOldHead
bodyPart: HeadTop
markingCategory: Head
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
layers:
old_base:
type:
!type:SkinColoring
old_lit:
type:
!type:EyeColoring
old_uncolor:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: old_base
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: old_uncolor
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: old_lit
- type: marking
id: AndroidIpcHead
bodyPart: HeadTop
markingCategory: Head
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
layers:
ipc_base:
type:
!type:SkinColoring
ipc_lit:
type:
!type:CategoryColoring
category: Special
ipc_uncolor:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: ipc_base
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: ipc_uncolor
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: ipc_lit
- type: marking
id: AndroidScreenHead
bodyPart: Eyes
markingCategory: Head
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
layers:
screen_base:
type:
!type:SkinColoring
screen_lit:
type:
!type:CategoryColoring
category: Special
screen_uncolor:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: screen_base
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: screen_uncolor
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: screen_lit
- type: marking
id: AndroidAnimatronicHead
bodyPart: Head
markingCategory: Head
speciesRestriction: [ Android ]
sponsorOnly: false
coloring:
default:
type:
!type:SimpleColoring
color: "#ffffff"
sprites:
- sprite: _Wega/Mobs/Customization/android_heads.rsi
state: animatronic

View File

@@ -23,14 +23,14 @@
- map: [ "enum.HumanoidVisualLayers.UndergarmentTop" ]
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
- map: [ "enum.HumanoidVisualLayers.RFoot" ]
- map: [ "enum.HumanoidVisualLayers.LHand" ]
- map: [ "enum.HumanoidVisualLayers.RHand" ]
- map: [ "enum.HumanoidVisualLayers.Special" ]
- map: [ "socks" ]
- map: [ "underwearbottom" ]
- map: [ "underweartop" ]
- map: [ "jumpsuit" ]
- map: [ "anal" ]
- map: [ "enum.HumanoidVisualLayers.LHand" ]
- map: [ "enum.HumanoidVisualLayers.RHand" ]
# Corvax-Wega-end
- map: [ "gloves" ]
- map: [ "shoes" ]
@@ -76,12 +76,30 @@
AndroidLedsStripes-leds_stripes:
True: { shader: unshaded }
False: { shader: shaded }
AndroidTempleLed-temple_led:
True: { shader: unshaded }
False: { shader: shaded }
AndroidTorsoSpine-body_spine_led:
True: { shader: unshaded }
False: { shader: shaded }
AndroidCatEars-ears_cat_led:
True: { shader: unshaded }
False: { shader: shaded }
AndroidCatTail-cat_tail_led:
True: { shader: unshaded }
False: { shader: shaded }
AndroidHeadBulbs-head_bulbs:
True: { shader: unshaded }
False: { shader: shaded }
AndroidOldHead-hare_lit:
True: { shader: unshaded }
False: { shader: shaded }
AndroidIpcHead-ipc_lit:
True: { shader: unshaded, visible: true }
False: { shader: shaded, visible: false }
AndroidScreenHead-screen_lit:
True: { shader: unshaded }
False: { shader: shaded }
- type: WiresVisuals
- type: Icon
sprite: Mobs/Species/Human/parts.rsi
@@ -207,10 +225,10 @@
- reagents: [ Water ]
methods: [ Touch ]
effects:
- !type:HealthChange
damage:
types:
Shock: 0.5
- !type:Electrocute
shockDamage: 0.5
minScale: 20
electrocuteTime: 0.5
- type: Operated
raceGraph: AndroidSurgery
limbLossChance: 1.75

View File

@@ -39,6 +39,9 @@
id: MobAndroidMarkingLimits
points:
Special:
points: 2
required: false
Head:
points: 1
required: false
Hair:
@@ -57,13 +60,13 @@
points: 3
required: false
Chest:
points: 1
points: 2
required: false
Legs:
points: 1
points: 2
required: false
Arms:
points: 1
points: 2
required: false
- type: humanoidBaseSprite

Binary file not shown.

Before

Width:  |  Height:  |  Size: 831 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

View File

@@ -27,6 +27,14 @@
"name": "body_m",
"directions": 4
},
{
"name": "body_spine",
"directions": 4
},
{
"name": "body_spine_led",
"directions": 4
},
{
"name": "leds",
"directions": 4
@@ -39,6 +47,10 @@
"name": "leds_stripes",
"directions": 4
},
{
"name": "temple_led",
"directions": 4
},
{
"name": "ears_cat_outer",
"directions": 4
@@ -95,6 +107,10 @@
"name": "head_antenna_crown",
"directions": 4
},
{
"name": "head_bulbs",
"directions": 4
},
{
"name": "eyes_visor",
"directions": 4
@@ -102,6 +118,22 @@
{
"name": "eyes_visor_led",
"directions": 4
},
{
"name": "l_arm_scrap",
"directions": 4
},
{
"name": "r_arm_scrap",
"directions": 4
},
{
"name": "l_leg_scrap",
"directions": 4
},
{
"name": "r_leg_scrap",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

View File

@@ -0,0 +1,58 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made with love by Misha_Unity and Melissandra >//<",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "old_base",
"directions": 4
},
{
"name": "old_lit",
"directions": 4
},
{
"name": "old_uncolor",
"directions": 4
},
{
"name": "ipc_base",
"directions": 4
},
{
"name": "ipc_lit",
"directions": 4,
"delays":
[
[0.2, 0.2, 0.2, 0.2],
[0.8],
[0.2, 0.2, 0.2, 0.2],
[0.2, 0.2, 0.2, 0.2]
]
},
{
"name": "ipc_uncolor",
"directions": 4
},
{
"name": "screen_base",
"directions": 4
},
{
"name": "screen_uncolor",
"directions": 4
},
{
"name": "screen_lit",
"directions": 4
},
{
"name": "animatronic",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B