Skip to content
Merged
Show file tree
Hide file tree
Changes from 57 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
eb1558f
add part sprites
snebl Oct 19, 2025
174f59e
fix misalignments + full.png
snebl Oct 19, 2025
c71ef7b
species name
snebl Oct 19, 2025
21974ab
fix full.png
snebl Oct 19, 2025
4c5d471
eyes, ears, and tails
snebl Oct 19, 2025
80a6d88
rough implementation
snebl Oct 19, 2025
701e2dd
prototype more markings
snebl Oct 19, 2025
1eb1d14
fix tails
snebl Oct 19, 2025
07d392a
ammonia blood
snebl Oct 20, 2025
b81b2c0
25% extra heat dmg instead of 15
snebl Oct 22, 2025
25133e6
heat buildup system
snebl Oct 23, 2025
7c94770
correct namespaces
snebl Oct 28, 2025
a71077f
action event
snebl Oct 28, 2025
fa02d3b
5 sec cooldown not 30
snebl Oct 28, 2025
2d2d68c
less specific component
snebl Oct 28, 2025
f1a48a6
almost forgot
snebl Oct 28, 2025
36f0802
rm charges
snebl Oct 28, 2025
f3f7735
partial cool off action implementation
snebl Oct 28, 2025
fb0a06b
chore: automatically update REUSE headers
monolith8319 Nov 16, 2025
b82ff5e
SO MANY SPRITES. MY GOD.
kotobdev Dec 2, 2025
30e6249
ullman major
kotobdev Dec 2, 2025
984b81c
its peam
kotobdev Dec 6, 2025
3a5648b
Merge pull request #1 from kotobdev/hydrakin-ops
Redrover1760 Dec 13, 2025
8f9812d
Merge branch 'main' of https://github.com/Monolith-Station/Monolith i…
Redrover1760 Dec 13, 2025
b298146
Merge branch 'hydrakin' of https://github.com/Redrover1760/Monolith i…
Redrover1760 Dec 13, 2025
2aea46f
languaging
Redrover1760 Dec 14, 2025
a27f3a4
code fix
Redrover1760 Dec 14, 2025
39c1bd2
removes eye slot for hydrakin
Redrover1760 Dec 14, 2025
83065fd
language part 2
Redrover1760 Dec 14, 2025
bc7b52a
updates base model sprites to new ones
Redrover1760 Dec 14, 2025
069f018
adds temperature logic
Redrover1760 Dec 14, 2025
d675d3b
yaml
Redrover1760 Dec 14, 2025
581d9f1
done
Redrover1760 Dec 14, 2025
e225c5f
head displacement map
Redrover1760 Dec 15, 2025
0f9f786
Merge branch 'main' of https://github.com/Monolith-Station/Monolith i…
Redrover1760 Dec 19, 2025
f6f4316
implements hydrakin elite suit sprites
Redrover1760 Dec 19, 2025
9f65157
correct sprite
Redrover1760 Dec 19, 2025
c66c44e
a
Redrover1760 Dec 19, 2025
8d7b463
dfdfd
Dec 17, 2025
a2afa0a
hydra!
Dec 24, 2025
222b950
ehehahwa
Dec 24, 2025
2e3e621
finalize
Dec 24, 2025
2ded809
Merge branch 'main' of https://github.com/Monolith-Station/Monolith i…
Redrover1760 Dec 24, 2025
7b7c43c
sets up hydrakin marking ftl
Redrover1760 Dec 24, 2025
5dd9e2e
more cold resistance
Redrover1760 Dec 24, 2025
1be06c5
e
Redrover1760 Dec 24, 2025
1007324
Hydragens! oh god why
Redrover1760 Dec 24, 2025
46af9cf
hydrakin markings ftl
Redrover1760 Dec 24, 2025
d30ea73
implements hydrakin language properly maybe
Redrover1760 Dec 27, 2025
c6d9cbf
finally it works
Redrover1760 Dec 27, 2025
376ded8
cuts volume on hydrakin emotes
Redrover1760 Dec 27, 2025
24ae526
guidebook is in with lore pending a rewrite because its bad
Redrover1760 Dec 27, 2025
eb22d80
linter fix
Redrover1760 Dec 27, 2025
2fe8572
aa
Redrover1760 Dec 27, 2025
1abb0a0
lore update
Redrover1760 Dec 27, 2025
83c5137
guidebook implementation
Redrover1760 Dec 27, 2025
fd067ab
hydrakining
Redrover1760 Dec 27, 2025
8fb7e78
adds mild low pressure resistance
Redrover1760 Dec 27, 2025
683d193
aaa
Redrover1760 Dec 27, 2025
5756780
word
Redrover1760 Dec 27, 2025
911b151
Merge branch 'main' of https://github.com/Monolith-Station/Monolith i…
Redrover1760 Dec 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// SPDX-FileCopyrightText: 2025 sneb
//
// SPDX-License-Identifier: MPL-2.0

using Content.Shared.Atmos;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;

namespace Content.Server.Species.Systems.Components;

[RegisterComponent]
public sealed partial class HydrakinComponent : Component
{
[DataField]
public float MinTemperature = Atmospherics.T20C;

[DataField]
public float MaxTemperature = 340f;

[DataField]
public float Buildup = 0f;

[DataField]
public bool HeatBuildupEnabled = true;

[DataField]
public float TemperatureProcessingCooldown = 0.5f;

public TimeSpan CurrentTemperatureCooldown = TimeSpan.Zero;

[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string? CoolOffActionId = "ActionHydrakinCoolOff";

[DataField]
public SoundSpecifier? CoolOffSound = new SoundCollectionSpecifier("HydrakinFlap");

[DataField]
public EntityUid? CoolOffAction;

[DataField]
public float CoolOffCoefficient = 0.9f;
}
102 changes: 102 additions & 0 deletions Content.Server/_Obelisk/Species/Systems/HydrakinSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
// SPDX-FileCopyrightText: 2025 sneb
//
// SPDX-License-Identifier: MPL-2.0

using Content.Server.Actions;
using Content.Server.Popups;
using Content.Server.Spawners.Components;
using Content.Server.Species.Systems.Components;
using Content.Server.Temperature.Components;
using Content.Server.Temperature.Systems;
using Content.Shared._Mono.Species.Systems;
using Content.Shared.Actions;
using Content.Shared.Actions.Events;
using Content.Shared.Audio;
using Content.Shared.DoAfter;
using Content.Shared.IdentityManagement;
using Content.Shared.Mobs;
using Content.Shared.Mobs.Components;
using Content.Shared.Temperature.Systems;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Serialization;

namespace Content.Server.Species.Systems;

public sealed class HydrakinSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly TemperatureSystem _temp = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HydrakinComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<HydrakinComponent, HydrakinCoolOffActionEvent>(OnCoolOff);
SubscribeLocalEvent<HydrakinComponent, CoolOffDoAfterEvent>(OnCoolOffDoAfter);
}

public override void Update(float frameTime)
{
base.Update(frameTime);

var query = EntityQueryEnumerator<HydrakinComponent, TemperatureComponent>();
while (query.MoveNext(out var uid, out var comp, out var temperature))
{
if (comp.CurrentTemperatureCooldown > TimeSpan.Zero)
{
comp.CurrentTemperatureCooldown -= TimeSpan.FromSeconds(frameTime);
return;
}

if (!comp.HeatBuildupEnabled)
continue;

if (TryComp<MobStateComponent>(uid, out var mobState) &&
mobState.CurrentState != MobState.Alive)
return;

if (temperature.CurrentTemperature < comp.MinTemperature ||
temperature.CurrentTemperature > comp.MaxTemperature)
return;

_temp.ChangeHeat(uid,comp.Buildup * comp.TemperatureProcessingCooldown * _temp.GetHeatCapacity(uid), true);
comp.CurrentTemperatureCooldown = TimeSpan.FromSeconds(comp.TemperatureProcessingCooldown);
}
}

private void OnInit(EntityUid uid, HydrakinComponent component, ComponentInit args)
{
if (component.CoolOffAction != null)
return;

_actionsSystem.AddAction(uid, ref component.CoolOffAction, component.CoolOffActionId);
}

private void OnCoolOff(EntityUid uid, HydrakinComponent component, HydrakinCoolOffActionEvent args)
{
var doafter = new DoAfterArgs(EntityManager, uid, TimeSpan.FromSeconds(3), new CoolOffDoAfterEvent(), uid);

if (!_doAfter.TryStartDoAfter(doafter))
return;

args.Handled = true;
}

private void OnCoolOffDoAfter(Entity<HydrakinComponent> ent, ref CoolOffDoAfterEvent args)
{
_popupSystem.PopupEntity(Loc.GetString("hydrakin-cool-off-emote", ("name", Identity.Entity(ent, EntityManager))), ent);
_audio.PlayEntity(ent.Comp.CoolOffSound, ent, ent);

if (!TryComp<TemperatureComponent>(ent, out var temp))
return;

_temp.ChangeHeat(ent,
(temp.CurrentTemperature * ent.Comp.CoolOffCoefficient - temp.CurrentTemperature) * _temp.GetHeatCapacity(ent),
true);

args.Handled = true;
}
}
8 changes: 8 additions & 0 deletions Content.Shared/_Mono/Species/Systems/CoolOffDoAfterEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Content.Shared.DoAfter;
using Robust.Shared.Serialization;

namespace Content.Shared._Mono.Species.Systems
{
[Serializable, NetSerializable]
public sealed partial class CoolOffDoAfterEvent : SimpleDoAfterEvent { };
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// SPDX-FileCopyrightText: 2025 sneb
//
// SPDX-License-Identifier: MPL-2.0

namespace Content.Shared.Actions.Events;

public sealed partial class HydrakinCoolOffActionEvent : InstantActionEvent { }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added Resources/Audio/_Mono/Voice/Hydrakin/long1.ogg
Binary file not shown.
Binary file added Resources/Audio/_Mono/Voice/Hydrakin/yelp1.ogg
Binary file not shown.
Binary file added Resources/Audio/_Mono/Voice/Hydrakin/yelp2.ogg
Binary file not shown.
Binary file added Resources/Fonts/unifont-17.0.03.otf
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ chat-language-Sign-name = Sign
chat-language-Marish-name = Marish
chat-language-Chittin-name = Chittin
chat-language-Xeeplian-name = Xeeplian
chat-language-Hydraspeak-name = Hy'drav'tha

# Additional languges

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ language-Bubblish-description = The language of Slimes. Being a mixture of bubbl
language-RootSpeak-name = Rootspeak
language-RootSpeak-description = The strange whistling-style language spoken by the Diona.

language-Hydraspeak-name = Hy'drav'tha
language-Hydraspeak-description =
A Mix of warbles, trills and chirps, with heavy tonal shifts and pitch changes make up this unusual language.
Due to the avian nature of hydrakin, one word can mean a million other things at the same time, which makes this language next to incomprehensible for even other birdlike races to figure out.

language-Nekomimetic-name = Nekomimetic
language-Nekomimetic-description = To the casual observer, this language is an incomprehensible mess of broken Japanese. To the Felinids and Oni, it's somehow comprehensible.

Expand Down
1 change: 1 addition & 0 deletions Resources/Locale/en-US/_Mono/metabolizer-types.ftl
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
metabolizer-type-chimera = Chimera
metabolizer-type-hydrakin = Hydrakin
4 changes: 4 additions & 0 deletions Resources/Locale/en-US/_Obelisk/abilities/hydrakin.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
hydrakin-action-name-cool-off = Cool Off
hydrakin-action-description-cool-off = Dispel some of your body heat.

hydrakin-cool-off-emote = {CAPITALIZE(THE($name))} begins to radiate out heat.
32 changes: 32 additions & 0 deletions Resources/Locale/en-US/_Obelisk/markings/hydrakin.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
marking-HydrakinEyesDefault = Default Eyes
marking-HydrakinEyesHex = Hex Eyes
marking-HydrakinEyesOmega = Omega Eyes
marking-HydrakinEyesQuad = Quad Eyes
marking-HydrakinEyesRing = Ring Eyes
marking-HydrakinEyesSaint = Saint Eyes

marking-HydrakinTailDefault = Tail
marking-HydrakinTailBig = Big
marking-HydrakinTailFeathers = Feathered
marking-HydrakinTailSpiny = Spiny
marking-HydrakinTailFins = Fins

marking-HydrakinEarsDefault = Default Ears
marking-HydrakinEarsOld = Thin Ears
marking-HydrakinEarsFin = Fin Ears
marking-HydrakinEarsFrilled = Frilled Ears

marking-HydrakinProtoChest = Cyberkin

marking-HydrakinProtoLeftArm = Cyberkin Left
marking-HydrakinProtoRightArm = Cyberkin Right

marking-HydrakinProtoLeftLeg = Cyberkin Left
marking-HydrakinProtoRightLeg = Cyberkin Right

marking-HydrakinProtoVisor = Visor
marking-HydrakinProtoFace1 = Ring Display
marking-HydrakinProtoFace2 = Serious Display
marking-HydrakinProtoFace3 = Devilish Display
marking-HydrakinProtoFace4 = Sad Display
marking-HydrakinProtoFace5 = Chill Display
1 change: 1 addition & 0 deletions Resources/Locale/en-US/_Obelisk/species/species.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
species-name-hydrakin = Hydrakin
6 changes: 6 additions & 0 deletions Resources/Prototypes/Guidebook/species.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
- IPC # EE
- Rodentia # DeltaV
- Tajaran # Goobstation
- Hydrakin # Monolith/Obelisk

- type: guideEntry
id: Arachnid
Expand Down Expand Up @@ -82,3 +83,8 @@
id: Tajaran
name: species-name-tajaran
text: "/ServerInfo/Guidebook/Mobs/Tajaran.xml"

- type: guideEntry
id: Hydrakin
name: species-name-hydrakin
text: "/ServerInfo/Guidebook/Mobs/Hydrakin.xml"
Loading
Loading