From a8f3116ec2f6903ac88ec89fbe769651ab217d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schr=C3=B6dinger?= <132720404+Schrodinger71@users.noreply.github.com> Date: Thu, 8 Aug 2024 17:20:41 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D1=82:=20=D0=9D=D0=B8=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9,=20=D0=92=D1=8B=D1=81=D0=BE=D0=BA=D0=B8=D0=B9=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Проверки** - [ ] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [ ] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [ ] Я запускал локальный сервер со своими изменениями и всё протестировал. - [ ] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: Шрёдька - fix: Починил систему роста. - tweak: Добавлена новая категория в черты: Рост. --- .../SizeAttribute/SizeAttributeComponent.cs | 14 +++ .../ADT/SizeAttribute/SizeAttributeSystem.cs | 94 +++++++++++++++++++ .../SizeAttributeWhitelistComponent.cs | 2 +- .../ADT/Cloning/ITransferredByCloning.cs | 8 ++ .../ADT/Item/PseudoItemComponent.cs | 19 ++++ .../Locale/ru-RU/ADT/traits/categories.ftl | 1 + Resources/Locale/ru-RU/ADT/traits/neutral.ftl | 8 +- .../ADT/Entities/Mobs/Player/Drask.yml | 10 +- .../ADT/Entities/Mobs/Player/demon.yml | 10 +- .../Prototypes/ADT/Traits/categories.yml | 4 + Resources/Prototypes/ADT/Traits/neutral.yml | 31 ++++++ 11 files changed, 189 insertions(+), 12 deletions(-) create mode 100644 Content.Server/ADT/SizeAttribute/SizeAttributeComponent.cs create mode 100644 Content.Server/ADT/SizeAttribute/SizeAttributeSystem.cs create mode 100644 Content.Shared/ADT/Cloning/ITransferredByCloning.cs create mode 100644 Content.Shared/ADT/Item/PseudoItemComponent.cs create mode 100644 Resources/Locale/ru-RU/ADT/traits/categories.ftl create mode 100644 Resources/Prototypes/ADT/Traits/categories.yml create mode 100644 Resources/Prototypes/ADT/Traits/neutral.yml diff --git a/Content.Server/ADT/SizeAttribute/SizeAttributeComponent.cs b/Content.Server/ADT/SizeAttribute/SizeAttributeComponent.cs new file mode 100644 index 00000000000..d617a633a3d --- /dev/null +++ b/Content.Server/ADT/SizeAttribute/SizeAttributeComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared.Cloning; + +namespace Content.Server.ADT.SizeAttribute +{ + [RegisterComponent] + public sealed partial class SizeAttributeComponent : Component, ITransferredByCloning + { + [DataField("short")] + public bool Short = false; + + [DataField("tall")] + public bool Tall = false; + } +} \ No newline at end of file diff --git a/Content.Server/ADT/SizeAttribute/SizeAttributeSystem.cs b/Content.Server/ADT/SizeAttribute/SizeAttributeSystem.cs new file mode 100644 index 00000000000..ac64100bb53 --- /dev/null +++ b/Content.Server/ADT/SizeAttribute/SizeAttributeSystem.cs @@ -0,0 +1,94 @@ +using System.Numerics; +using Robust.Server.GameObjects; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Systems; +using Content.Shared.Item.PseudoItem; + +namespace Content.Server.ADT.SizeAttribute +{ + public sealed class SizeAttributeSystem : EntitySystem + { + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly AppearanceSystem _appearance = default!; + [Dependency] private readonly FixtureSystem _fixtures = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnComponentInit); + } + + private void OnComponentInit(EntityUid uid, SizeAttributeComponent component, ComponentInit args) + { + if (!TryComp(uid, out var whitelist)) + return; + + if (whitelist.Tall && component.Tall) + { + Scale(uid, component, whitelist.TallScale, whitelist.TallDensity, whitelist.TallCosmeticOnly); + PseudoItem(uid, component, whitelist.TallPseudoItem); + } + else if (whitelist.Short && component.Short) + { + Scale(uid, component, whitelist.ShortScale, whitelist.ShortDensity, whitelist.ShortCosmeticOnly); + PseudoItem(uid, component, whitelist.ShortPseudoItem); + } + } + + private void PseudoItem(EntityUid uid, SizeAttributeComponent component, bool active) + { + if (active) + { + if (TryComp(uid, out var pseudoI)) + return; + + _entityManager.AddComponent(uid); + } + else + { + if (!TryComp(uid, out var pseudoI)) + return; + + _entityManager.RemoveComponent(uid); + } + } + + private void Scale(EntityUid uid, SizeAttributeComponent component, float scale, float density, bool cosmeticOnly) + { + if (scale <= 0f && density <= 0f) + return; + + _entityManager.EnsureComponent(uid); + + var appearanceComponent = _entityManager.EnsureComponent(uid); + if (!_appearance.TryGetData(uid, ScaleVisuals.Scale, out var oldScale, appearanceComponent)) + oldScale = Vector2.One; + + _appearance.SetData(uid, ScaleVisuals.Scale, oldScale * scale, appearanceComponent); + + if (!cosmeticOnly && _entityManager.TryGetComponent(uid, out FixturesComponent? manager)) + { + foreach (var (id, fixture) in manager.Fixtures) + { + if (!fixture.Hard || fixture.Density <= 1f) + continue; // This will skip the flammable fixture and any other fixture that is not supposed to contribute to mass + + switch (fixture.Shape) + { + case PhysShapeCircle circle: + _physics.SetPositionRadius(uid, id, fixture, circle, circle.Position * scale, circle.Radius * scale, manager); + break; + default: + throw new NotImplementedException(); + } + + _physics.SetDensity(uid, id, fixture, density); + } + } + } + } + + [ByRefEvent] + public readonly record struct ScaleEntityEvent(EntityUid Uid) { } +} \ No newline at end of file diff --git a/Content.Server/ADT/SizeAttribute/SizeAttributeWhitelistComponent.cs b/Content.Server/ADT/SizeAttribute/SizeAttributeWhitelistComponent.cs index 3816ce8b7ab..fdf8b813d02 100644 --- a/Content.Server/ADT/SizeAttribute/SizeAttributeWhitelistComponent.cs +++ b/Content.Server/ADT/SizeAttribute/SizeAttributeWhitelistComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.Physics.Collision.Shapes; -namespace Content.Server.SizeAttribute +namespace Content.Server.ADT.SizeAttribute { [RegisterComponent] public sealed partial class SizeAttributeWhitelistComponent : Component diff --git a/Content.Shared/ADT/Cloning/ITransferredByCloning.cs b/Content.Shared/ADT/Cloning/ITransferredByCloning.cs new file mode 100644 index 00000000000..31deaff5017 --- /dev/null +++ b/Content.Shared/ADT/Cloning/ITransferredByCloning.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Cloning; + +/// +/// Indicates that this Component should be transferred to the new entity when the entity is cloned (for example, using a cloner) +/// +public interface ITransferredByCloning +{ +} \ No newline at end of file diff --git a/Content.Shared/ADT/Item/PseudoItemComponent.cs b/Content.Shared/ADT/Item/PseudoItemComponent.cs new file mode 100644 index 00000000000..5190e3a3623 --- /dev/null +++ b/Content.Shared/ADT/Item/PseudoItemComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared.Cloning; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Item.PseudoItem; +/// +/// For entities that behave like an item under certain conditions, +/// but not under most conditions. +/// +[RegisterComponent] +public sealed partial class PseudoItemComponent : Component, ITransferredByCloning +{ + [DataField("size", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Size = "Huge"; + + public bool Active = false; + + [DataField] + public EntityUid? SleepAction; +} \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ADT/traits/categories.ftl b/Resources/Locale/ru-RU/ADT/traits/categories.ftl new file mode 100644 index 00000000000..f714bd58c50 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/traits/categories.ftl @@ -0,0 +1 @@ +trait-category-height = Рост \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ADT/traits/neutral.ftl b/Resources/Locale/ru-RU/ADT/traits/neutral.ftl index 16e3b5fb766..fbeb6a89824 100644 --- a/Resources/Locale/ru-RU/ADT/traits/neutral.ftl +++ b/Resources/Locale/ru-RU/ADT/traits/neutral.ftl @@ -2,4 +2,10 @@ trait-deutsch-name = Немецкий акцент trait-deutsch-desc = Вы говорите как настоящий австрийский художник! trait-moth-accent-name = Жужащий акцент -trait-moth-accent-desc = Вам либо нравятся моли, либо вы ботаник \ No newline at end of file +trait-moth-accent-desc = Вам либо нравятся моли, либо вы ботаник + +trait-tall-name = Высокий +trait-tall-desc = Вы слегка выше других представителей своего вида. + +trait-short-name = Низкий +trait-short-desc = Вы слегка ниже других представителей своего вида. \ No newline at end of file diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/Drask.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/Drask.yml index 9727af7e9d0..dd40d39740f 100644 --- a/Resources/Prototypes/ADT/Entities/Mobs/Player/Drask.yml +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/Drask.yml @@ -38,8 +38,8 @@ understands: - GalacticCommon - Drask - # - type: SizeAttributeWhitelist # Frontier TODO: нет такого компонента.. - # tall: true - # tallscale: 1.15 - # short: true - # shortscale: 1 + - type: SizeAttributeWhitelist # Frontier + tall: true + tallscale: 1.15 + short: true + shortscale: 1 diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/demon.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/demon.yml index 388c63b7ee2..8e8a6ec8cd7 100644 --- a/Resources/Prototypes/ADT/Entities/Mobs/Player/demon.yml +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/demon.yml @@ -39,10 +39,10 @@ damageRecovery: types: Asphyxiation: -1.0 - # - type: SizeAttributeWhitelist # Frontier TODO: нет такого компонента.. - # tall: true - # tallscale: 1.1 - # short: true - # shortscale: 0.9 + - type: SizeAttributeWhitelist # Frontier + tall: true + tallscale: 1.1 + short: true + shortscale: 0.9 #Weh diff --git a/Resources/Prototypes/ADT/Traits/categories.yml b/Resources/Prototypes/ADT/Traits/categories.yml new file mode 100644 index 00000000000..fec1cdb72d5 --- /dev/null +++ b/Resources/Prototypes/ADT/Traits/categories.yml @@ -0,0 +1,4 @@ +- type: traitCategory + id: Height + name: trait-category-height + maxTraitPoints: 1 \ No newline at end of file diff --git a/Resources/Prototypes/ADT/Traits/neutral.yml b/Resources/Prototypes/ADT/Traits/neutral.yml new file mode 100644 index 00000000000..f9960732ed8 --- /dev/null +++ b/Resources/Prototypes/ADT/Traits/neutral.yml @@ -0,0 +1,31 @@ +- type: trait + id: Tall + name: trait-tall-name + description: trait-tall-desc + category: Height + cost: 1 + whitelist: + components: + - SizeAttributeWhitelist + blacklist: + components: + - SizeAttribute + components: + - type: SizeAttribute + tall: true + +- type: trait + id: Short + name: trait-short-name + description: trait-short-desc + category: Height + cost: 1 + whitelist: + components: + - SizeAttributeWhitelist + blacklist: + components: + - SizeAttribute + components: + - type: SizeAttribute + short: true \ No newline at end of file From 0b2c16441240f6a22465955d7ab00234a85419cf Mon Sep 17 00:00:00 2001 From: Bolper <169089627+Bolper@users.noreply.github.com> Date: Thu, 8 Aug 2024 18:06:49 +0300 Subject: [PATCH 2/2] Kobalt (#204) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Медиа** **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [ ] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: - tweak: Перенёс расу кобольдов. Мне тут как бы особо нечего добавить. --------- Co-authored-by: Schrödinger <132720404+Schrodinger71@users.noreply.github.com> Co-authored-by: Schrodinger71 --- .../ADT/prototypes/Body/Organs/kobalt.ftl | 2 + .../ADT/prototypes/Body/Parts/kobalt.ftl | 22 + .../Mobs/Customization/Markings/kobalt.ftl | 77 ++++ .../Entities/Mobs/Player/kobalt.ftl | 2 + .../Entities/Mobs/Species/kobalt.ftl | 5 + .../Prototypes/ADT/Body/Organs/kobalt.yml | 4 + .../Prototypes/ADT/Body/Parts/kobalt.yml | 146 +++++++ .../Prototypes/ADT/Body/Prototypes/kobalt.yml | 49 +++ .../Mobs/Customization/Markings/kobalt.yml | 379 ++++++++++++++++++ .../ADT/Entities/Mobs/Player/kobalt.yml | 21 + .../ADT/Entities/Mobs/Species/kobalt.yml | 55 +++ Resources/Prototypes/ADT/Species/kobalt.yml | 141 +++++++ 12 files changed, 903 insertions(+) create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Body/Organs/kobalt.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Body/Parts/kobalt.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Customization/Markings/kobalt.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Player/kobalt.ftl create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Species/kobalt.ftl create mode 100644 Resources/Prototypes/ADT/Body/Organs/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Body/Parts/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Body/Prototypes/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Player/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Entities/Mobs/Species/kobalt.yml create mode 100644 Resources/Prototypes/ADT/Species/kobalt.yml diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Body/Organs/kobalt.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Body/Organs/kobalt.ftl new file mode 100644 index 00000000000..c77297f6307 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Body/Organs/kobalt.ftl @@ -0,0 +1,2 @@ +ent-OrganKoboltStomach = { ent-OrganAnimalStomach } + .desc = { ent-OrganAnimalStomach.desc } diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Body/Parts/kobalt.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Body/Parts/kobalt.ftl new file mode 100644 index 00000000000..2f1757accfe --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Body/Parts/kobalt.ftl @@ -0,0 +1,22 @@ +ent-PartKobolt = часть тела кобольда + .desc = { ent-BaseItem.desc } +ent-TorsoKobolt = торс кобольда + .desc = { ent-PartKobolt.desc } +ent-HeadKobolt = голова кобольда + .desc = { ent-PartKobolt.desc } +ent-LeftArmKobolt = левая рука кобольда + .desc = { ent-PartKobolt.desc } +ent-RightArmKobolt = правая рука кобольда + .desc = { ent-PartKobolt.desc } +ent-LeftHandKobolt = левая кисть кобольда + .desc = { ent-PartKobolt.desc } +ent-RightHandKobolt = правая кисть кобольда + .desc = { ent-PartKobolt.desc } +ent-LeftLegKobolt = левая нога кобольда + .desc = { ent-PartKobolt.desc } +ent-RightLegKobolt = правая нога кобольда + .desc = { ent-PartKobolt.desc } +ent-LeftFootKobolt = левая стопа кобольда + .desc = { ent-PartKobolt.desc } +ent-RightFootKobolt = правая стопа кобольда + .desc = { ent-PartKobolt.desc } diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Customization/Markings/kobalt.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Customization/Markings/kobalt.ftl new file mode 100644 index 00000000000..1e433a2b415 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Customization/Markings/kobalt.ftl @@ -0,0 +1,77 @@ +marking-KoboltFrillsShort-frills_short = Кобольд, воротник (Короткий) +marking-KoboltFrillsShort = Кобольд, воротник (Короткий) +marking-KoboltFrillsSimple-frills_simple = Кобольд, воротник (Простой) +marking-KoboltFrillsSimple = Кобольд, воротник (Простой) +marking-KoboltFrillsAquatic-frills_aquatic = Кобольд, воротник (Водный) +marking-KoboltFrillsAquatic = Кобольд, воротник (Водный) +marking-KoboltHornsAngler-horns_angler = Кобольд, рожки (Рыболов) +marking-KoboltHornsAngler = Кобольд, рожки (Рыболов) +marking-KoboltHornsCurled-horns_curled = Кобольд, рожки (Завитые) +marking-KoboltHornsCurled = Кобольд, рожки (Завитые) +marking-KoboltHornsRam-horns_ram = Кобольд, рожки (Бараньи) +marking-KoboltHornsRam = Кобольд, рожки (Бараньи) +marking-KoboltHornsShort-horns_short = Кобольд, рожки (Короткие) +marking-KoboltHornsShort = Кобольд, рожки (Короткие) +marking-KoboltHornsSimple-horns_simple = Кобольд, рожки +marking-KoboltHornsSimple = Кобольд, рожки +marking-KoboltTailSmooth-tail_smooth_primary = Кобольд, хвост +marking-KoboltTailSmooth-tail_smooth_secondary = Оттенок +marking-KoboltTailSmooth = Кобольд, хвост (Гладкий) +marking-KoboltTailLarge-tail_large = Кобольд, хвост (Большой) +marking-KoboltTailLarge = Кобольд, хвост (Большой) +marking-KoboltTailSpikes-tail_spikes = Кобольд, хвост (Шипастый) +marking-KoboltTailSpikes = Кобольд, хвост (Шипастый) +marking-KoboltTailLTiger-tail_ltiger = Кобольд, хвост (Светлые тигриные полоски) +marking-KoboltTailLTiger = Кобольд, хвост (Светлые тигриные полоски) +marking-KoboltTailDTiger-tail_dtiger = Кобольд, хвост (Тёмные тигриные полоски) +marking-KoboltTailDTiger = Кобольд, хвост (Тёмные тигриные полоски) +marking-KoboltSnoutRound-snout_round = Кобольд, морда (Круглая) +marking-KoboltSnoutRound = Кобольд, морда (Круглая) +marking-KoboltSnoutSharp-snout_sharp = Кобольд, морда (Заострёная) +marking-KoboltSnoutSharp = Кобольд, морда (Заострёная) +marking-KoboltChestTiger-body_tiger = Кобольд, грудь (Тигр) +marking-KoboltChestTiger = Кобольд, грудь (Тигр) +marking-KoboltHeadTiger-head_tiger = Кобольд, голова (Тигр) +marking-KoboltHeadTiger = Кобольд, голова (Тигр) +marking-KoboltLArmTiger-l_arm_tiger = Кобольд, левая рука (Тигр) +marking-KoboltLArmTiger = Кобольд, левая рука (Тигр) +marking-KoboltLLegTiger-l_leg_tiger = Кобольд, левая нога (Тигр) +marking-KoboltLLegTiger = Кобольд, левая нога (Тигр) +marking-KoboltRArmTiger-r_arm_tiger = Кобольд, правая рука (Тигр) +marking-KoboltRArmTiger = Кобольд, правая рука (Тигр) +marking-KoboltRLegTiger-r_leg_tiger = Кобольд, правая нога (Тигр) +marking-KoboltRLegTiger = Кобольд, правая нога (Тигр) +marking-KoboltFrillsDivinity-frills_divinity = Кобольд, воротник (Божественный) +marking-KoboltFrillsDivinity = Кобольд, воротник (Божественный) +marking-KoboltFrillsBig-frills_big = Кобольд, воротник (Большой) +marking-KoboltFrillsBig = Кобольд, воротник (Большой) +marking-KoboltFrillsNeckfull-frills_neckfull = Кобольд, воротник (Полношейный) +marking-KoboltFrillsNeckfull = Кобольд, воротник (Полношейный) +marking-KoboltHornsDouble-horns_double = Кобольд, рожки (Двойные) +marking-KoboltHornsDouble = Кобольд, рожки (Двойные) +marking-KoboltFrillsAxolotl-frills_axolotl = Кобольд, воротник (Аксолотль) +marking-KoboltFrillsHood-frills_hood_primary = Внешний капюшон +marking-KoboltFrillsHood-frills_hood_secondary = Внутренний капюшона +marking-KoboltFrillsAxolotl = Кобольд, воротник (Аксолотль) +marking-KoboltFrillsHood = Кобольд, воротник (Капюшон) +marking-KoboltHornsArgali-horns_argali = Кобольд, рожки (Аргали) +marking-KoboltHornsArgali = Кобольд, рожки (Аргали) +marking-KoboltHornsAyrshire-horns_ayrshire = Кобольд, рожки (Айршир) +marking-KoboltHornsAyrshire = Кобольд, рожки (Айршир) +marking-KoboltHornsMyrsore-horns_myrsore = Кобольд, рожки (Мирзора) +marking-KoboltHornsMyrsore = Кобольд, рожки (Мирзора) +marking-KoboltHornsBighorn-horns_bighorn = Кобольд, рожки (Толсторог) +marking-KoboltHornsBighorn = Кобольд, рожки (Толсторог) +marking-KoboltHornsDemonic-horns_demonic = Кобольд, рожки (Демонические) +marking-KoboltHornsDemonic = Кобольд, рожки (Демонические) +marking-KoboltHornsKoboldEars-horns_kobold_ears = Кобольд, уши (Кобольд) +marking-KoboltHornsKoboldEars = Кобольд, уши (Кобольд) +marking-KoboltHornsFloppyKoboldEars-horns_floppy_kobold_ears = Кобольд, уши (Вислоухий кобольд) +marking-KoboltHornsFloppyKoboldEars = Кобольд, уши (Вислоухий кобольд) +marking-KoboltChestUnderbelly-body_underbelly = Кобольд, грудь (Подбрюшье) +marking-KoboltChestUnderbelly = Кобольд, грудь (Подбрюшье) +marking-KoboltChestBackspikes-body_backspikes = Кобольд, грудь, шипы на спине (Четыре) +marking-KoboltChestBackspikes = Кобольд, грудь, шипы на спине (Четыре) +marking-KoboltSnoutSplotch = Кобольд, морда лица (Пятно) +marking-KoboltSnoutSplotch-snout_splotch_primary = Морда +marking-KoboltSnoutSplotch-snout_splotch_secondary = Нос diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Player/kobalt.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Player/kobalt.ftl new file mode 100644 index 00000000000..e3505ac7516 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Player/kobalt.ftl @@ -0,0 +1,2 @@ +ent-MobKobolt = Урист МакКобольд + .desc = { ent-BaseMobKobolt.desc } diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Species/kobalt.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Species/kobalt.ftl new file mode 100644 index 00000000000..cac22713d12 --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Mobs/Species/kobalt.ftl @@ -0,0 +1,5 @@ +ent-BaseMobKobolt = Урист Мак + .desc = { ent-BaseMobSpeciesOrganic.desc } + .suffix = Кобольд +ent-MobKoboltDummy = { ent-BaseSpeciesDummy } + .desc = { ent-BaseSpeciesDummy.desc } diff --git a/Resources/Prototypes/ADT/Body/Organs/kobalt.yml b/Resources/Prototypes/ADT/Body/Organs/kobalt.yml new file mode 100644 index 00000000000..e11c6c1b965 --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Organs/kobalt.yml @@ -0,0 +1,4 @@ +- type: entity + id: OrganKoboltStomach + parent: OrganReptilianStomach + noSpawn: true diff --git a/Resources/Prototypes/ADT/Body/Parts/kobalt.yml b/Resources/Prototypes/ADT/Body/Parts/kobalt.yml new file mode 100644 index 00000000000..cf3fbb79551 --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Parts/kobalt.yml @@ -0,0 +1,146 @@ +- type: entity + id: PartKobolt + parent: PartReptilian + name: "kobolt body part" + abstract: true + +- type: entity + id: TorsoKobolt + name: "kobolt torso" + parent: TorsoReptilian + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "torso_m" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "torso_m" + +- type: entity + id: HeadKobolt + name: "kobolt head" + parent: HeadReptilian + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "head_m" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "head_m" + - type: MovementSpeedModifier + baseWalkSpeed: 0 + baseSprintSpeed: 0 + - type: InputMover + - type: GhostOnMove + +- type: entity + id: LeftArmKobolt + name: "left kobolt arm" + parent: [PartKobolt, BaseLeftArm] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_arm" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_arm" + +- type: entity + id: RightArmKobolt + name: "right kobolt arm" + parent: [PartKobolt, BaseRightArm] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_arm" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_arm" + +- type: entity + id: LeftHandKobolt + name: "left kobolt hand" + parent: [PartKobolt, BaseLeftHand] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_hand" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_hand" + +- type: entity + id: RightHandKobolt + name: "right kobolt hand" + parent: [PartKobolt, BaseRightHand] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_hand" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_hand" + +- type: entity + id: LeftLegKobolt + name: "left kobolt leg" + parent: [PartKobolt, BaseLeftLeg] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_leg" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_leg" + - type: MovementSpeedModifier + baseWalkSpeed : 2.7 + baseSprintSpeed : 4.5 + +- type: entity + id: RightLegKobolt + name: "right kobolt leg" + parent: [PartKobolt, BaseRightLeg] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_leg" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_leg" + - type: MovementSpeedModifier + baseWalkSpeed : 2.7 + baseSprintSpeed : 4.5 + +- type: entity + id: LeftFootKobolt + name: "left kobolt foot" + parent: [PartKobolt, BaseLeftFoot] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_foot" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "l_foot" + +- type: entity + id: RightFootKobolt + name: "right kobolt foot" + parent: [PartKobolt, BaseRightFoot] + components: + - type: Sprite + netsync: false + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_foot" + - type: Icon + sprite: Mobs/Species/Reptilian/parts.rsi + state: "r_foot" diff --git a/Resources/Prototypes/ADT/Body/Prototypes/kobalt.yml b/Resources/Prototypes/ADT/Body/Prototypes/kobalt.yml new file mode 100644 index 00000000000..d15716b6c1a --- /dev/null +++ b/Resources/Prototypes/ADT/Body/Prototypes/kobalt.yml @@ -0,0 +1,49 @@ +- type: body + name: "kobolt" + id: Kobolt + root: torso + slots: + head: + part: HeadKobolt + connections: + - torso + organs: + brain: OrganHumanBrain #как у reptilian + eyes: OrganHumanEyes #как у reptilian + torso: + part: TorsoKobolt + organs: + heart: OrganAnimalHeart #как у reptilian + lungs: OrganHumanLungs #как у reptilian + stomach: OrganKoboltStomach + liver: OrganAnimalLiver #как у reptilian + kidneys: OrganHumanKidneys #как у reptilian + connections: + - right arm + - left arm + - right leg + - left leg + right arm: + part: RightArmKobolt + connections: + - right hand + left arm: + part: LeftArmKobolt + connections: + - left hand + right hand: + part: RightHandKobolt + left hand: + part: LeftHandKobolt + right leg: + part: RightLegKobolt + connections: + - right foot + left leg: + part: LeftLegKobolt + connections: + - left foot + right foot: + part: RightFootKobolt + left foot: + part: LeftFootKobolt diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/kobalt.yml b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/kobalt.yml new file mode 100644 index 00000000000..f2b7d3d0916 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Customization/Markings/kobalt.yml @@ -0,0 +1,379 @@ +- type: marking + id: KoboltFrillsAquatic + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_aquatic + +- type: marking + id: KoboltFrillsShort + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_short + +- type: marking + id: KoboltFrillsSimple + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_simple + +- type: marking + id: KoboltFrillsDivinity + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_divinity + +- type: marking + id: KoboltFrillsBig + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_big + +- type: marking + id: KoboltFrillsAxolotl + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_axolotl + +- type: marking + id: KoboltFrillsHood + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_hood_primary + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_hood_secondary + +- type: marking + id: KoboltFrillsNeckfull + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: frills_neckfull + +- type: marking + id: KoboltHornsAngler + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_angler + +- type: marking + id: KoboltHornsCurled + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_curled + +- type: marking + id: KoboltHornsRam + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_ram + +- type: marking + id: KoboltHornsShort + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_short + +- type: marking + id: KoboltHornsSimple + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_simple + +- type: marking + id: KoboltHornsDouble + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_double + +- type: marking + id: KoboltTailSmooth + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_smooth_primary + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_smooth_secondary + +- type: marking + id: KoboltTailLarge + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_large + +- type: marking + id: KoboltTailSpikes + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_spikes + +- type: marking + id: KoboltTailLTiger + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_ltiger + +- type: marking + id: KoboltTailDTiger + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_dtiger + +- type: marking + id: KoboltSnoutRound + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_round + +- type: marking + id: KoboltSnoutSharp + bodyPart: Snout + markingCategory: Snout + forcedColoring: true + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_sharp + +- type: marking + id: KoboltSnoutSplotch + bodyPart: Snout + markingCategory: Snout + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_splotch_primary + - sprite: Mobs/Customization/reptilian_parts.rsi + state: snout_splotch_secondary + +- type: marking + id: KoboltChestTiger + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: body_tiger + +- type: marking + id: KoboltHeadTiger + bodyPart: Head + markingCategory: Head + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: head_tiger + +- type: marking + id: KoboltLArmTiger + bodyPart: LArm + markingCategory: Arms + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: l_arm_tiger + +- type: marking + id: KoboltLLegTiger + bodyPart: LLeg + markingCategory: Legs + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: l_leg_tiger + +- type: marking + id: KoboltRArmTiger + bodyPart: RArm + markingCategory: Arms + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: r_arm_tiger + +- type: marking + id: KoboltRLegTiger + bodyPart: RLeg + markingCategory: Legs + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: r_leg_tiger + +- type: marking + id: KoboltHornsArgali + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_argali + +- type: marking + id: KoboltHornsAyrshire + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_ayrshire + +- type: marking + id: KoboltHornsMyrsore + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_myrsore + +- type: marking + id: KoboltHornsBighorn + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_bighorn + +- type: marking + id: KoboltHornsDemonic + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_demonic + +- type: marking + id: KoboltHornsKoboldEars + bodyPart: HeadTop + markingCategory: HeadTop + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_kobold_ears + +- type: marking + id: KoboltHornsFloppyKoboldEars + bodyPart: HeadSide + markingCategory: HeadSide + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: horns_floppy_kobold_ears + +- type: marking + id: KoboltChestUnderbelly + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: body_underbelly + +- type: marking + id: KoboltChestBackspikes + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [KoboltSpecies] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: body_backspikes + +# Animated +- type: marking + id: KoboltTailSmoothAnimated + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_smooth_wagging_primary + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_smooth_wagging_secondary + +- type: marking + id: KoboltTailSpikesAnimated + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_spikes_wagging + +- type: marking + id: KoboltTailLTigerAnimated + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_ltiger_wagging + +- type: marking + id: KoboltTailDTigerAnimated + bodyPart: Tail + markingCategory: Tail + speciesRestriction: [] + sprites: + - sprite: Mobs/Customization/reptilian_parts.rsi + state: tail_dtiger_wagging diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/kobalt.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/kobalt.yml new file mode 100644 index 00000000000..c175199f37a --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/kobalt.yml @@ -0,0 +1,21 @@ +- type: entity + save: false + name: Urisst' Mzhand Kobolt + parent: BaseMobKobolt + id: MobKobolt + components: + - type: LanguageSpeaker # Frontier + speaks: + - GalacticCommon + - Draconic + - CintaTaj + understands: + - GalacticCommon + - Draconic + - CintaTaj + - type: SizeAttributeWhitelist # Frontier + tall: true + tallscale: 1.1 + short: true + shortscale: 0.9 + diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Species/kobalt.yml b/Resources/Prototypes/ADT/Entities/Mobs/Species/kobalt.yml new file mode 100644 index 00000000000..fe244e9b5f8 --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Mobs/Species/kobalt.yml @@ -0,0 +1,55 @@ +- type: entity + save: false + name: Urisst' Mzhand + parent: BaseMobReptilian + id: BaseMobKobolt + abstract: true + components: + - type: HumanoidAppearance + species: KoboltSpecies + - type: Icon # + sprite: Mobs/Species/Reptilian/parts.rsi + state: full + - type: Sprite #особенность кобольда. в будущем заменить на sizeAtribute + netsync: false + noRot: true + drawdepth: Mobs + scale: 0.8, 0.8 + - type: Body + prototype: Kobolt + requiredLegs: 2 +# - type: DiseaseCarrier непонятная недобавленная херня +# diseaseResist: 0.1 + - type: MeleeWeapon + hidden: true + soundHit: + path: /Audio/Weapons/pierce.ogg + angle: 30 + animation: WeaponArcPunch + damage: + types: + Piercing: 5 + - type: Temperature + heatDamageThreshold: 400 + coldDamageThreshold: 260 #starting temperature damage treshold + currentTemperature: 310.15 + specificHeat: 46 + coldDamage: + types: + Cold : 0.2 #per second, scales with temperature & other constants + heatDamage: + types: + Heat : 0.1 #per second, scales with temperature & other constants + - type: MovementSpeedModifier + baseWalkSpeed : 2.7 + baseSprintSpeed : 4.5 + - type: Perishable + +- type: entity + parent: BaseSpeciesDummy + id: MobKoboltDummy + noSpawn: true + description: A dummy reptilian meant to be used in character setup. + components: + - type: HumanoidAppearance + species: KoboltSpecies diff --git a/Resources/Prototypes/ADT/Species/kobalt.yml b/Resources/Prototypes/ADT/Species/kobalt.yml new file mode 100644 index 00000000000..b9496673474 --- /dev/null +++ b/Resources/Prototypes/ADT/Species/kobalt.yml @@ -0,0 +1,141 @@ +- type: species + id: KoboltSpecies + name: species-name-kobolt + roundStart: true + prototype: MobKobolt + sprites: MobKoboltSprites + defaultSkinTone: "#34a223" + markingLimits: MobKoboltMarkingLimits + dollPrototype: MobKoboltDummy + skinColoration: Hues #как у reptilian + maleFirstNames: names_reptilian_male #как у reptilian + femaleFirstNames: names_reptilian_female #как у reptilian + naming: FirstDashFirst #как у reptilian + +- type: speciesBaseSprites + id: MobKoboltSprites + sprites: + Head: MobKoboltHead + Snout: MobHumanoidAnyMarking #как у reptilian + Chest: MobKoboltTorso + HeadTop: MobHumanoidAnyMarking #как у reptilian + HeadSide: MobHumanoidAnyMarking #как у reptilian + Tail: MobHumanoidAnyMarking #как у reptilian + Eyes: MobHumanoidEyes #как у reptilian + LArm: MobKoboltLArm + RArm: MobKoboltRArm + LHand: MobKoboltLHand + RHand: MobKoboltRHand + LLeg: MobKoboltLLeg + RLeg: MobKoboltRLeg + LFoot: MobKoboltLFoot + RFoot: MobKoboltRFoot + +- type: markingPoints + id: MobKoboltMarkingLimits + onlyWhitelisted: true + points: + Hair: + points: 0 + required: false + FacialHair: + points: 0 + required: false + Tail: + points: 1 + required: true + defaultMarkings: [ LizardTailSmooth ] + Snout: + points: 1 + required: true + defaultMarkings: [ LizardSnoutRound ] + HeadTop: + points: 1 + required: false + HeadSide: + points: 1 + required: false + +- type: humanoidBaseSprite + id: MobKoboltHead + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobKoboltHeadMale + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: head_m + +- type: humanoidBaseSprite + id: MobKoboltHeadFemale + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: head_f + +- type: humanoidBaseSprite + id: MobKoboltTorso + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobKoboltTorsoMale + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: torso_m + +- type: humanoidBaseSprite + id: MobKoboltTorsoFemale + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: torso_f + +- type: humanoidBaseSprite + id: MobKoboltLLeg + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: l_leg + +- type: humanoidBaseSprite + id: MobKoboltLHand + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: l_hand + +- type: humanoidBaseSprite + id: MobKoboltLArm + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: l_arm + +- type: humanoidBaseSprite + id: MobKoboltLFoot + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: l_foot + +- type: humanoidBaseSprite + id: MobKoboltRLeg + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: r_leg + +- type: humanoidBaseSprite + id: MobKoboltRHand + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: r_hand + +- type: humanoidBaseSprite + id: MobKoboltRArm + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: r_arm + +- type: humanoidBaseSprite + id: MobKoboltRFoot + baseSprite: + sprite: Mobs/Species/Reptilian/parts.rsi + state: r_foot