Midround Free Agent - Asakim Warrior (#4459)

* explodes you with my MIND

* goated?

* medipen gaming

* evil obfuscation system from hell

* MANY things

- accent improved (takes into account word length when determining number of syllables)
- night vision tied to shitmed eye organ (not thermals, though, that's broken for some reason)
- asakim-specific backpack and jumpsuit (mono turns ert backpacks into something generic while we don't, and they use goob ninja jumpsuit so i just made a new jumpsuit with goob ninja sprites)
- gun can switch between disabler and lethal modes
- rebalanced armor, made them a bit more squishy to melee and slightly less tanky to bullets/heat
- renamed and redescribed their items to fit more into deltav "lore"
- added the High Frequency Katana, basically a silly ninja sword
- removed freedom/storage implanters

* commit before i touch evil role code

* i lied one more commit before evil role code

* a lot of assorted things

- move prototype to shared (client got angry)
- Automated Defense System issuer real
- fix spawning, remove gamer cybernetics
- fix objectives
- more blunt res
- nerf loadout
- nerf gun

* we love misprediction

* i think this works

* big changeops

- springlock suit popup and gamer prediction (kinda)
- briefing audio
- precog
- evil rules that require mrp players to actually rp (evil)
- added to freelance shuttle set
- spawner is kill
- illiterate
- more slash damage
- nerfed the gun into the absolute ground (and removed semi auto)
- sword kinda nerfed
- removed some evil mono gamerule stuff we dont have

* lower weight

* tweaks

- rules are more gamer (kill those salvies)
- nerf heat res
- 1984 psionics

* appease the linter gods

* cleanup ops

* jumpscare

* if yaml validator fails i will cry

* fix assert, maybe fix yaml thing

assert fix is from a deltanedas PR from 2023, hopefully that still works

* I LOVE RIDER I LOVE RIDER

* minor cleanup

* attrib. fix

* attrib. fix take 2

* Update asakim_small.yml

* Update asakim_small.yml

---------

Signed-off-by: KOTOB <59124164+kotobdev@users.noreply.github.com>
This commit is contained in:
KOTOB 2025-10-08 16:31:32 -07:00 committed by GitHub
parent c7c6bc01cd
commit 226d164f98
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
96 changed files with 3743 additions and 0 deletions

View File

@ -0,0 +1,46 @@
using Content.Server.Chat.Systems;
using Content.Shared._DV.Clothing;
using Content.Shared._DV.Clothing.Components;
using Content.Shared.Clothing;
using Content.Shared.Damage;
using Content.Shared.Jittering;
using Content.Shared.Popups;
using Robust.Shared.Audio.Systems;
namespace Content.Server._DV.Clothing;
public sealed class DamageOnUnequipSystem : SharedDamageOnUnequipSystem
{
[Dependency] private readonly DamageableSystem _damageable = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedJitteringSystem _jittering = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly ChatSystem _chat = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DamageOnUnequipComponent, ClothingGotUnequippedEvent>(OnUnequip);
}
private void OnUnequip(Entity<DamageOnUnequipComponent> ent, ref ClothingGotUnequippedEvent args)
{
// terminating check to avoid evil exception. bit weird but it's how a similar issue was fixed upstream
if (ent.Comp.UnequipDamage == null || !TryComp<DamageableComponent>(args.Wearer, out var damageable) || MetaData(args.Wearer).EntityLifeStage >= EntityLifeStage.Terminating)
return;
_popup.PopupEntity(Loc.GetString("damage-on-unequip-finish", ("item", ent), ("wearer", args.Wearer)), ent, PopupType.LargeCaution);
if (ent.Comp.UnequipSound != null)
_audio.PlayPvs(ent.Comp.UnequipSound, ent);
if (ent.Comp.ScreamOnUnequip)
{
_chat.TryEmoteWithChat(args.Wearer, ent.Comp.ScreamEmote);
_jittering.DoJitter(args.Wearer, TimeSpan.FromSeconds(15), false);
}
_damageable.TryChangeDamage(args.Wearer, ent.Comp.UnequipDamage, true, true, damageable);
}
}

View File

@ -0,0 +1,11 @@
using Content.Shared._DV.Speech.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server._DV.Speech.Components;
[RegisterComponent]
public sealed partial class SyllableObfuscationAccentComponent : Component
{
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<SyllableObfuscationAccentPrototype>), required: true)]
public string Accent = default!;
}

View File

@ -0,0 +1,99 @@
using System.Linq;
using System.Text;
using Content.Server._DV.Speech.Components;
using Content.Shared._DV.Speech.Prototypes;
using Content.Server.Speech;
using Content.Shared.GameTicking;
using Robust.Shared.Prototypes;
namespace Content.Server._DV.Speech.EntitySystems;
public sealed class SyllableObfuscationAccentSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly SharedGameTicker _ticker = default!;
public override void Initialize()
{
SubscribeLocalEvent<SyllableObfuscationAccentComponent, AccentGetEvent>(OnAccent);
}
private void OnAccent(EntityUid uid, SyllableObfuscationAccentComponent component, AccentGetEvent args)
{
args.Message = ApplyReplacements(args.Message, component.Accent);
}
// stolen and slightly modified from EE: Content.Shared/_EinsteinEngines/Language/ObfuscationMethods.cs
public string ApplyReplacements(string message, string accent)
{
if (!_proto.TryIndex<SyllableObfuscationAccentPrototype>(accent, out var prototype))
return message;
StringBuilder builder = new();
const char eof = (char) 0; // Special character to mark the end of the message in the code below.
var wordBeginIndex = 0;
var hashCode = 0;
for (var i = 0; i <= message.Length; i++)
{
var ch = i < message.Length ? char.ToLower(message[i]) : eof;
var isWordEnd = char.IsWhiteSpace(ch) || IsPunctuation(ch) || ch == eof;
// If this is a normal char, add it to the hash sum
if (!isWordEnd)
hashCode = hashCode * 31 + ch;
// If a word ends before this character, construct a new word and append it to the new message.
if (isWordEnd)
{
var wordLength = i - wordBeginIndex;
if (wordLength > 0)
{
var originalWord = message.Substring(wordBeginIndex, wordLength);
var isAllCaps = originalWord.All(c => !char.IsLetter(c) || char.IsUpper(c));
var newWord = new StringBuilder();
var newWordLength = Math.Clamp((originalWord.Length + 1) / 2,
prototype.MinSyllables,
prototype.MaxSyllables);
for (var j = 0; j < newWordLength; j++)
{
var index = PseudoRandomNumber(hashCode + j, 0, prototype.Replacement.Count - 1);
newWord.Append(prototype.Replacement[index]);
}
if (isAllCaps && wordLength > 1)
builder.Append(newWord.ToString().ToUpper());
else
builder.Append(newWord);
}
hashCode = 0;
wordBeginIndex = i + 1;
}
// If this message concludes a word (i.e. is a whitespace or a punctuation mark), append it to the message
if (isWordEnd && ch != eof)
builder.Append(ch);
}
var result = builder.ToString();
if (!string.IsNullOrEmpty(result)) // capitalize first character since capitals are lost from ic.punctuation
result = char.ToUpperInvariant(result[0]) + result.Substring(1);
return result;
}
private static bool IsPunctuation(char ch)
{
return ch is '.' or '!' or '?' or ',' or ':' or '-';
}
// EE function, doesn't use IRobustRandom for perf reasons, see Content.Shared/_EinsteinEngines/Language/Systems/SharedLanguageSystem.cs
internal int PseudoRandomNumber(int seed, int min, int max)
{
seed = seed ^ (_ticker.RoundId * 127);
var random = seed * 1103515245 + 12345;
return min + Math.Abs(random) % (max - min + 1);
}
}

View File

@ -0,0 +1,22 @@
using Content.Shared.Chat.Prototypes;
using Content.Shared.Damage;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
namespace Content.Shared._DV.Clothing.Components;
[RegisterComponent]
public sealed partial class DamageOnUnequipComponent : Component
{
[DataField]
public DamageSpecifier? UnequipDamage = null;
[DataField]
public SoundSpecifier? UnequipSound = null;
[DataField]
public bool ScreamOnUnequip = false;
[DataField]
public ProtoId<EmotePrototype> ScreamEmote = "Scream";
}

View File

@ -0,0 +1,19 @@
using Content.Shared._DV.Clothing.Components;
using Content.Shared.Examine;
namespace Content.Shared._DV.Clothing;
public abstract class SharedDamageOnUnequipSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DamageOnUnequipComponent, ExaminedEvent>(OnExamined);
}
private void OnExamined(Entity<DamageOnUnequipComponent> selfUnremovableClothing, ref ExaminedEvent args)
{
args.PushMarkup(Loc.GetString("damage-on-unequip-examine"));
}
}

View File

@ -0,0 +1,6 @@
using Content.Shared.Roles;
namespace Content.Shared._DV.Roles;
[RegisterComponent]
public sealed partial class AsakimRoleComponent : BaseMindRoleComponent;

View File

@ -0,0 +1,19 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._DV.Speech.Prototypes;
[Prototype]
public sealed partial class SyllableObfuscationAccentPrototype : IPrototype
{
[IdDataField]
public string ID { get; } = default!;
[DataField]
public int MinSyllables = 1;
[DataField]
public int MaxSyllables = 4;
[DataField(required: true)]
public List<string> Replacement = [];
}

Binary file not shown.

View File

@ -0,0 +1,4 @@
- files: ["asakimbriefing.ogg"]
license: "CC-BY-4.0"
copyright: "By kotobdev (GitHub) for DeltaV"
source: "https://github.com/DeltaV-Station/Delta-v.git"

View File

@ -6,3 +6,7 @@
license: "CC-BY-NC-3.0"
copyright: "Aurorastation"
source: "https://github.com/Aurorastation/Aurora.3/blob/master/sound/effects/creepyshriek.ogg"
- files: ["breakingbones.ogg"]
license: "CC0-1.0"
copyright: "Freesound user Sheyvan"
source: "https://freesound.org/people/Sheyvan/sounds/523250/"

Binary file not shown.

View File

@ -56,6 +56,7 @@ psionic-power-precognition-unknown-shuttle-traveling-cuisine-result-message = Yo
psionic-power-precognition-unknown-shuttle-disaster-evac-pod-result-message = You see a vision of death and blood, of a destruction so complete only few survive, drifting through the coldness of space.
psionic-power-precognition-syndicate-armsdealer-result-message = You see a vision of a ship lurking in the shadows, its cargo deadly.
psionic-power-precognition-rift-spawn-result-message = You see a small spark of energy, quickly expanding as it tears reality apart, twisting everything around it.
psionic-power-precognition-asakim-spawn-result-message = You smell stale air from a cryopod opening, and the faint echo of an intelligence far away but very near.
psionic-eruption-begin = {CAPITALIZE(THE($user))} is being consumed by a psionic energy!
psionic-eruption-annoy-minimal = You feel a pressure building up in your mind.

View File

@ -0,0 +1,3 @@
damage-on-unequip-examine = [color=red]You feel like removing this is a bad idea...[/color]
damage-on-unequip-begin = The {$item} begins to creak and groan...
damage-on-unequip-finish = The {$item} rips off of {$wearer}'s body!

View File

@ -0,0 +1,10 @@
ghost-role-information-asakim-name = Asakim Warrior
ghost-role-information-asakim-description = A genetically enhanced bioweapon, stranded in the sector after cryostasis failure.
ghost-role-information-asakim-rules =
You are a [color=yellow][bold]Free-Agent[/bold][/color]. You may pursue your given objectives, or find your own way through life.
You have [color=red]no knowledge[/color] (maybe basic at most) [color=red]of this sector of space, its inhabitants, its factions, or its culture[/color]. While you cannot speak their language, you can understand it.
You may kill your targets if you have any, and you may kill to defend yourself and your property. [color=green]Civilians and the innocent are not your enemy[/color], and may be useful to you (if you can get past the language barrier - try an AAC tablet!). Fight with honor.
asakim-role-briefing =
You are an Asakim, a genetically-engineered weapon from a distant part of space.
You've awoken from long-term cryosleep in an unfamiliar sector, and an unfamiliar time.
Your ship has transmitted new orders into your brain...

View File

@ -4,3 +4,4 @@ role-subtype-recruiter = Recruiter
role-subtype-synthesis = Synthesis
role-subtype-roboneuro = Robo-Neuro
role-subtype-armsdealer = Arms Dealer
role-subtype-asakim = Asakim

View File

@ -0,0 +1,3 @@
objective-issuer-asakim = [color=#5085fa]Automated Defense System[/color]
objective-condition-asakim-terminate-title = >TERMINATE {$targetName}, {CAPITALIZE($job)}.
objective-condition-asakim-terminate-reroll-message = <ERROR>: FEEDBACK LOOP DETECTED. NEW SUBJECT DESIGNATED FOR TERMINATION: {$targetName}, {CAPITALIZE($job)}.

View File

@ -27,3 +27,6 @@ roles-antag-skia-objective = Rend souls from the living.
roles-antag-syndicate-armsdealer-name = Arms Dealer
roles-antag-syndicate-armsdealer-objective = Sell your firearms and stay away from the law.
roles-antag-asakim-name = Asakim
roles-antag-asakim-objective = Serve the ancient directives of your ship's AI.

View File

@ -0,0 +1,3 @@
## Species Names
species-name-asakim = Asakim

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,89 @@
- type: syllableObfuscationAccent
id: draconian
minSyllables: 1
maxSyllables: 4
replacement:
- za
- az
- ze
- ez
- zi
- iz
- zo
- oz
- zu
- uz
- zs
- sz
- ha
- ah
- he
- eh
- hi
- ih
- ho
- oh
- hu
- uh
- hs
- sh
- la
- al
- le
- el
- li
- il
- lo
- ol
- lu
- ul
- ls
- sl
- ka
- ak
- ke
- ek
- ki
- ik
- ko
- ok
- ku
- uk
- ks
- sk
- sa
- as
- se
- es
- si
- is
- so
- os
- su
- us
- ss
- ss
- ra
- ar
- re
- er
- ri
- ir
- ro
- or
- ru
- ur
- rs
- sr
- a
- a
- e
- e
- i
- i
- o
- o
- u
- u
- s
- s

View File

@ -0,0 +1,12 @@
- type: entity
parent: BaseCyberneticEyes
id: OrganAsakimEyes
name: asakim eyes
components:
- type: Organ
onAdd:
- type: NightVision
isEquipment: false
color: "#ae65bf"
activateSound: null
deactivateSound: null

View File

@ -16,3 +16,15 @@
- type: Sprite
sprite: _DV/Clothing/Back/Backpacks/hop.rsi
state: icon
- type: entity
parent: ClothingBackpack
id: ClothingBackpackAdvancedTactical
name: advanced tactical backpack
description: A spacious backpack with lots of pockets.
components:
- type: Sprite
sprite: Clothing/Back/Backpacks/ertleader.rsi
- type: Storage
grid:
- 0,0,10,3

View File

@ -533,6 +533,17 @@
- type: Clothing
sprite: _DV/Clothing/Uniforms/Jumpsuit/cybersunrnd.rsi
- type: entity
parent: ClothingUniformBase
id: ClothingUniformJumpsuitAsakim
name: combat jumpsuit
description: A comfortable and flexible jumpsuit, designed to be worn under a hardsuit.
components:
- type: Sprite
sprite: _Goobstation/Clothing/Uniforms/Jumpsuit/ninja.rsi
- type: Clothing
sprite: _Goobstation/Clothing/Uniforms/Jumpsuit/ninja.rsi
- type: entity
parent: ClothingUniformBase
id: ClothingUniformHarbingerTunic

View File

@ -189,3 +189,16 @@
- !type:DepartmentTimeRequirement
department: Command
time: 43200 # 12h Command (so you know to handle the responsibility of an armsdealer)
- type: entity
categories: [ HideSpawnMenu, Spawner ]
parent: BaseAntagSpawner
id: SpawnPointGhostAsakim
components:
- type: GhostRole
name: ghost-role-information-asakim-name
description: ghost-role-information-asakim-description
rules: ghost-role-information-asakim-rules
requirements: # keep in sync with the antag prototype
- !type:OverallPlaytimeRequirement
time: 172800 # 48 hours, same reasoning as SRN

View File

@ -0,0 +1,16 @@
- type: entity
id: HandheldAutopulserDisablerProjectile
name: disabling plasma projectile
parent: BulletDisablerSmg
categories: [ HideSpawnMenu ]
components:
- type: StaminaDamageOnCollide
damage: 19
- type: Sprite
sprite: _Impstation/Objects/Weapons/Guns/Projectiles/energybolts.rsi
scale: 0.4, 0.4
layers:
- state: lightstun
shader: unshaded
- type: PointLight
color: "#00a6ff"

View File

@ -5,6 +5,7 @@
- id: SyndicateRecruiter
- id: SynthesisSpecialist
- id: SyndicateArmsdealer
- id: AsakimShuttle
- type: entity
parent: BaseUnknownShuttleRule

View File

@ -0,0 +1,76 @@
- type: entity
abstract: true
parent: BaseObjective
id: BaseAsakimObjective
components:
- type: Objective
difficulty: 1 # unused
issuer: objective-issuer-asakim
icon:
sprite: _Mono/Objects/Weapons/Melee/hfblade.rsi
state: icon
- type: RoleRequirement
roles:
- AsakimRole
- type: entity
parent: BaseAsakimObjective
id: AsakimKillObjective
name: ">TERMINATE"
description: Vital signs MUST reach zero in subject. Once.
components:
- type: Objective
issuer: objective-issuer-asakim
unique: false
icon:
sprite: Mobs/Ghosts/ghost_human.rsi
state: icon
- type: KillPersonCondition
requireDead: true
- type: TargetObjective
title: objective-condition-asakim-terminate-title
- type: PickRandomPerson
onlyChoosableJobs: true
- type: RerollAfterCompletion
rerollObjectivePrototype: AsakimKillObjective
rerollObjectiveMessage: objective-condition-asakim-terminate-reroll-message
- type: entity
parent: [BaseAsakimObjective, BaseSurviveObjective]
id: AsakimTheftObjective
name: ">CONFISCATE"
description: Records indicate that this sector may have valuable artifacts. Confiscate such items for further study.
components:
- type: Objective
- type: entity
parent: [BaseAsakimObjective, BaseSurviveObjective]
id: AsakimInfiltrateObjective
name: ">INFILTRATE"
description: Ambient radio chatter mentions "High-Security Areas". Investigate such places, if they do exist.
components:
- type: Objective
- type: entity
parent: [BaseAsakimObjective, BaseSurviveObjective]
id: AsakimInterrogateObjective
name: ">INTERROGATE"
description: WARNING - Time-gap of [ERROR] years detected. Records may be outdated. Consult local population.
components:
- type: Objective
- type: entity
parent: [BaseAsakimObjective, BaseSurviveObjective]
id: AsakimUpgradeObjective
name: ">UPGRADE"
description: Preliminary sector scans detect possible high-value cybernetics. Upgrade your body.
components:
- type: Objective
- type: entity
parent: [BaseAsakimObjective, BaseSurviveObjective]
id: AsakimAllyObjective
name: ">AFFILIATE"
description: Prior records indicate possible persons-of-interest in this sector. Find or make allies in the local populace.
components:
- type: Objective

View File

@ -108,3 +108,44 @@
WizardDataObjective: 0.75
WizardPreserveObjective: 1
WizardTeachObjective: 1
## Asakim
- type: weightedRandom
id: AsakimObjectiveGroup
weights:
AsakimObjectiveGroupKill: 1
AsakimObjectiveGroupTheft: 1
AsakimObjectiveGroupInfiltrate: 1
AsakimObjectiveGroupInterrogate: 1
AsakimObjectiveGroupUpgrade: 1
AsakimObjectiveGroupAlly: 1
- type: weightedRandom
id: AsakimObjectiveGroupKill
weights:
AsakimKillObjective: 1
- type: weightedRandom
id: AsakimObjectiveGroupTheft
weights:
AsakimTheftObjective: 1
- type: weightedRandom
id: AsakimObjectiveGroupInfiltrate
weights:
AsakimInfiltrateObjective: 1
- type: weightedRandom
id: AsakimObjectiveGroupInterrogate
weights:
AsakimInterrogateObjective: 1
- type: weightedRandom
id: AsakimObjectiveGroupUpgrade
weights:
AsakimUpgradeObjective: 1
- type: weightedRandom
id: AsakimObjectiveGroupAlly
weights:
AsakimAllyObjective: 1

View File

@ -0,0 +1,8 @@
- type: antag
id: Asakim
name: roles-antag-asakim-name
objective: roles-antag-asakim-objective
antagonist: true
requirements:
- !type:OverallPlaytimeRequirement
time: 172800 # 48 hours, same reasoning as SRN

View File

@ -100,3 +100,17 @@
- type: ArmsdealerRole
- type: RoleBriefing
briefing: armsdealer-role-briefing
- type: entity
parent: BaseMindRoleAntag
id: MindRoleAsakim
name: Asakim Role
components:
- type: MindRole
roleType: FreeAgent
subtype: role-subtype-asakim
antagPrototype: Asakim
exclusiveAntag: true
- type: AsakimRole
- type: RoleBriefing
briefing: asakim-role-briefing

View File

@ -0,0 +1,134 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# TODO: Add descriptions (many)
# TODO BODY: Part damage
- type: entity
id: PartAsakim
parent: [BaseItem, BasePart]
name: "asakim body part"
abstract: true
components:
- type: Icon # Shitmed Change
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
- type: BodyPart # Shitmed Change
species: Asakim
- type: Destructible # Shitmed Change: Let blunt weapons break bones
thresholds:
- trigger: !type:DamageTypeTrigger
damageType: Blunt
damage: 350
behaviors:
- !type:GibPartBehavior
- type: Extractable
juiceSolution:
reagents:
- ReagentId: Fat
Quantity: 3
- ReagentId: Blood
Quantity: 10
- type: entity
id: TorsoAsakim
name: "asakim torso"
parent: [PartAsakim, BaseTorso]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "torso_m"
- type: Extractable
juiceSolution:
reagents:
- ReagentId: Fat
Quantity: 10
- ReagentId: Blood
Quantity: 20
- type: entity
id: HeadAsakim
name: "asakim head"
parent: [PartAsakim, BaseHead]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "head_m"
- type: Extractable
juiceSolution:
reagents:
- ReagentId: Fat
Quantity: 5
- ReagentId: Blood
Quantity: 10
- type: entity
id: LeftArmAsakim
name: "left asakim arm"
parent: [PartAsakim, BaseLeftArm]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "l_arm"
- type: entity
id: RightArmAsakim
name: "right asakim arm"
parent: [PartAsakim, BaseRightArm]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "r_arm"
- type: entity
id: LeftHandAsakim
name: "left asakim hand"
parent: [PartAsakim, BaseLeftHand]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "l_hand"
- type: entity
id: RightHandAsakim
name: "right asakim hand"
parent: [PartAsakim, BaseRightHand]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "r_hand"
- type: entity
id: LeftLegAsakim
name: "left asakim leg"
parent: [PartAsakim, BaseLeftLeg]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "l_leg"
- type: entity
id: RightLegAsakim
name: "right asakim leg"
parent: [PartAsakim, BaseRightLeg]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "r_leg"
- type: entity
id: LeftFootAsakim
name: "left asakim foot"
parent: [PartAsakim, BaseLeftFoot]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "l_foot"
- type: entity
id: RightFootAsakim
name: "right asakim foot"
parent: [PartAsakim, BaseRightFoot]
components:
- type: Sprite
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: "r_foot"

View File

@ -0,0 +1,58 @@
# SPDX-FileCopyrightText: 2022 DrSmugleaf
# SPDX-FileCopyrightText: 2022 Jezithyr
# SPDX-FileCopyrightText: 2023 Nemanja
# SPDX-FileCopyrightText: 2025 Ark
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: body
name: "asakim"
id: Asakim
root: torso
slots:
head:
part: HeadAsakim
connections:
- torso
organs:
brain: OrganHumanBrain
eyes: OrganAsakimEyes # DeltaV
torso:
part: TorsoAsakim
organs:
heart: OrganAnimalHeart
lungs: OrganHumanLungs
stomach: OrganReptilianStomach
liver: OrganAnimalLiver
kidneys: OrganHumanKidneys
connections:
- right arm
- left arm
- right leg
- left leg
- head # Shitmed
right arm:
part: RightArmAsakim
connections:
- right hand
left arm:
part: LeftArmAsakim
connections:
- left hand
right hand:
part: RightHandAsakim
left hand:
part: LeftHandAsakim
right leg:
part: RightLegAsakim
connections:
- right foot
left leg:
part: LeftLegAsakim
connections:
- left foot
right foot:
part: RightFootAsakim
left foot:
part: LeftFootAsakim

View File

@ -0,0 +1,59 @@
# SPDX-FileCopyrightText: 2025 Avalon
# SPDX-FileCopyrightText: 2025 Coenx-flex
# SPDX-FileCopyrightText: 2025 Cojoke
# SPDX-FileCopyrightText: 2025 HungryCuban
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
parent: [ClothingHeadHardsuitBase, ShowMedicalIcons] # DeltaV - no contraband
id: ClothingHelmetHardsuitAsakim
name: combat harness helmet # DeltaV - simple names
description: Part of an advanced combat harness. # DeltaV - no fracture
components:
- type: Sprite
sprite: _Mono/Clothing/Head/Hardsuits/asakim.rsi
- type: Clothing
sprite: _Mono/Clothing/Head/Hardsuits/asakim.rsi
- type: PressureProtection
highPressureMultiplier: 0.02
lowPressureMultiplier: 1000
- type: Armor
modifiers:
coefficients:
Blunt: 0.8
Slash: 0.8
Piercing: 0.85
Heat: 0.8
- type: FlashImmunity
- type: EyeProtection
protectionTime: 15
- type: ThermalVision
pulseTime: 1
isEquipment: true
toggleAction: PulseThermalVision
#- type: NightVision # DeltaV - redundant, species already has it
# flashDurationMultiplier: 0.85
# isEquipment: true
# color: "#1584e6"
- type: RadarConsole
maxRange: 1024
followEntity: true
#pannable: true # DeltaV - unimplemented
#- type: DetectionRangeMultiplier # upgraded thermal sensors # DeltaV - doesn't exist
# infraredMultiplier: 1.5 # from 1
# visualMultiplier: 8 # from 4
- type: ActivatableUI
key: enum.RadarConsoleUiKey.Key
singleUser: true
- type: UserInterface
interfaces:
enum.RadarConsoleUiKey.Key:
type: RadarConsoleBoundUserInterface
- type: HideLayerClothing
slots:
- Hair
- Snout
- HeadTop
- HeadSide

View File

@ -0,0 +1,80 @@
# SPDX-FileCopyrightText: 2025 Arcticular1
# SPDX-FileCopyrightText: 2025 HungryCuban
# SPDX-FileCopyrightText: 2025 core-mene
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
parent: ClothingOuterHardsuitBase # DeltaV - no contraband
id: ClothingOuterHardsuitAsakim
name: combat harness # DeltaV - simple name
description: An advanced combat harness. Incredibly rare, and practically alien in technology compared to modern hardsuits. Once equipped, the armor binds itself with the wearer and cannot be removed without external release. # DeltaV - no fracture
suffix: SelfUnremovable
components:
- type: Sprite
sprite: _Mono/Clothing/OuterClothing/Hardsuits/asakim.rsi
- type: Clothing
sprite: _Mono/Clothing/OuterClothing/Hardsuits/asakim.rsi
stripDelay: 60
equipDelay: 5
- type: SelfUnremovableClothing
- type: PressureProtection
highPressureMultiplier: 0.1
lowPressureMultiplier: 1000
- type: ExplosionResistance
damageCoefficient: 0.35
- type: FireProtection
reduction: 0.7
- type: ProtectedFromStepTriggers
slots: WITHOUT_POCKET
- type: DamageOnInteractProtection
damageProtection:
flatReductions:
Heat: 10
slots: OUTERCLOTHING
- type: StaticPrice
price: 50000
- type: Armor
modifiers:
coefficients:
Blunt: 0.5 # DeltaV - was 0.35
Slash: 0.85
Piercing: 0.4 # DeltaV - was 0.3
Heat: 0.6 # DeltaV - was 0.4
Radiation: 0
Shock: 0.8
Poison: 0.4
Caustic: 0.4
- type: ClothingSpeedModifier
walkModifier: 1
sprintModifier: 1
- type: HeldSpeedModifier
- type: ToggleableClothing # Goobstation - Modsuits change - Mono - this is a solution for helmet attachment/cover to not fit on hardsuits
requiredSlot: outerclothing
#blockUnequipWhenAttached: false # DeltaV - doesn't exist here
#replaceCurrentClothing: true # DeltaV - doesn't exist here
clothingPrototype: ClothingHelmetHardsuitAsakim # DeltaV - simplified ToggleableClothing
#- type: PirateBountyItem # DeltaV - no way we have this
# id: ClothingOuterHardsuitTacsuit
- type: StaminaResistance # DeltaV - different comp name
damageCoefficient: 0.4 # DeltaV - was 0.1
- type: DamageOnUnequip # DeltaV
unequipDamage:
types:
Blunt: 20
Slash: 30
Piercing: 40
unequipSound: "/Audio/_DV/Effects/breakingbones.ogg"
screamOnUnequip: true
- type: entity
parent: ClothingOuterHardsuitAsakim
id: ClothingOuterHardsuitAsakimUnremoveable
description: An advanced combat harness. Incredibly rare, and practically alien in technology compared to modern hardsuits. Once equipped, the armor binds itself with the wearer and cannot be removed without external release. This one is fully binded to a warrior, and will take a long time to remove. # DeltaV - no fracture
suffix: 120 stripDelay
components:
- type: Clothing
stripDelay: 120
equipDelay: 120

View File

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2025 Ilya246
# SPDX-FileCopyrightText: 2025 UnicornOnLSD
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
parent: ClothingShoesBootsMagAdv
id: ClothingShoesBootsMagAsakim
name: combat magboots # DeltaV - no fracture
description: State-of-the-art magnetic boots made for combat with advanced harnesses.
components:
#- type: FootstepModifier # DeltaV - sneaky
# footstepSoundCollection:
# collection: FootstepHeavySuit
- type: ClothingSlowOnDamageModifier
modifier: 0.35

View File

@ -0,0 +1,45 @@
# SPDX-FileCopyrightText: 2025 Arcticular1
# SPDX-FileCopyrightText: 2025 Onezero0
# SPDX-FileCopyrightText: 2025 significant harassment
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: startingGear
id: AsakimGear
equipment:
jumpsuit: ClothingUniformJumpsuitAsakim # DeltaV - dedicated jumpsuit with goob sprites instead of base ninja one
back: ClothingBackpackAdvancedTactical # DeltaV - dedicated backpack instead of ERT one
gloves: ClothingHandsGlovesCombat
outerClothing: ClothingOuterHardsuitAsakimUnremoveable
shoes: ClothingShoesBootsMagAsakim
#pocket1: CrowbarPocket # DeltaV - fake
pocket2: DoubleEmergencyOxygenTankFilled # DeltaV - filled instead of empty
belt: ClothingBeltSecurityWebbing # DeltaV - use our webbing
suitStorage: OxygenTankFilled
inhand:
- WeaponRifleAsakimAutopulser
- WeaponHFKatana
storage:
back: # DeltaV - reorganized to fit
#- RadioHandheldNF # DeltaV - fake
- DoubleEmergencyOxygenTankFilled
- BoxSurvival # DeltaV
- JetpackMiniFilled
- MedkitCombatFilled
- MedkitCombatFilled
#- SyringeCaseAltFilled # DeltaV - fake
#- StorageImplanter # DeltaV - implanters too OP they already have insane stamina resist
#- FreedomImplanter # DeltaV
belt: # DeltaV - reordered for better fit
#- HandHeldMassScannerBorg # DeltaV - redundant, their helmet is a mass scanner
#- PowerDrill # DeltaV - less gamer loot, replaced with below
- Screwdriver # DeltaV
- Wrench # DeltaV
- WelderIndustrial # DeltaV - less gamer loot roundstart, was WelderExperimental
- JawsOfLife
- Multitool # DeltaV - let them hack doors, also snugly fills out the chest rig
#- CombatMedipen # DeltaV - these things are so busted
#- CombatMedipen # DeltaV
#- CombatMedipen # DeltaV
#- CombatMedipen # DeltaV

View File

@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# DeltaV - this goes unused in our port, but it's being left in so admins can spawn these guys with their gear
- type: entity
parent: MobAsakim
id: MobAsakimGhostrole
name: asakim warrior
suffix: Asakim
components:
- type: RandomHumanoidAppearance
randomizeName: True
- type: HumanoidAppearance
#height: 1.2 # DeltaV - non-functional
#width: 1.2 # DeltaV - non-functional
- type: Loadout
prototypes: [AsakimGear]
#roleLoadout: [RoleSurvivalTankOnly] # DeltaV - nope
- type: GhostRole
name: ghost-role-information-asakim-name
description: ghost-role-information-asakim-description
rules: ghost-role-information-asakim-rules
raffle:
settings: default
requirements:
- !type:OverallPlaytimeRequirement
time: 172800 # DeltaV - 48 hours, sync with antag
mindRoles: # DeltaV
- MindRoleAsakim
- type: GhostTakeoverAvailable
- type: RandomMetadata
nameSegments:
- NamesFirst # DeltaV - was NamesFirstMilitary
- NamesLast # DeltaV - was NamesLastMilitary
- type: NpcFactionMember
factions:
- Syndicate
- type: SurgerySpeedModifier
speedModifier: 1.5
#- type: IntrinsicRadioReceiver # DeltaV - unused
#- type: IntrinsicRadioTransmitter
# channels:
# - Remnants
#- type: ActiveRadio
# channels:
# - Remnants

View File

@ -0,0 +1,279 @@
# SPDX-FileCopyrightText: 2022 DrSmugleaf
# SPDX-FileCopyrightText: 2022 EmoGarbage404
# SPDX-FileCopyrightText: 2022 Flipp Syder
# SPDX-FileCopyrightText: 2022 Jezithyr
# SPDX-FileCopyrightText: 2022 Mervill
# SPDX-FileCopyrightText: 2022 Moony
# SPDX-FileCopyrightText: 2022 Paul
# SPDX-FileCopyrightText: 2022 Rane
# SPDX-FileCopyrightText: 2022 T-Stalker
# SPDX-FileCopyrightText: 2022 ZeroDayDaemon
# SPDX-FileCopyrightText: 2022 metalgearsloth
# SPDX-FileCopyrightText: 2022 mirrorcult
# SPDX-FileCopyrightText: 2022 och-och
# SPDX-FileCopyrightText: 2022 rolfero
# SPDX-FileCopyrightText: 2023 Alex Evgrashin
# SPDX-FileCopyrightText: 2023 AndresE55
# SPDX-FileCopyrightText: 2023 Cheackraze
# SPDX-FileCopyrightText: 2023 Emisse
# SPDX-FileCopyrightText: 2023 Errant
# SPDX-FileCopyrightText: 2023 FoxxoTrystan
# SPDX-FileCopyrightText: 2023 I.K
# SPDX-FileCopyrightText: 2023 Kara
# SPDX-FileCopyrightText: 2023 LankLTE
# SPDX-FileCopyrightText: 2023 Leon Friedrich
# SPDX-FileCopyrightText: 2023 Visne
# SPDX-FileCopyrightText: 2023 notquitehadouken <1isthisameme>
# SPDX-FileCopyrightText: 2023 potato1234_x
# SPDX-FileCopyrightText: 2024 Aexxie
# SPDX-FileCopyrightText: 2024 Dvir
# SPDX-FileCopyrightText: 2024 Ed
# SPDX-FileCopyrightText: 2024 KittenColony
# SPDX-FileCopyrightText: 2024 Minemoder5000
# SPDX-FileCopyrightText: 2024 Mnemotechnican
# SPDX-FileCopyrightText: 2024 Morb
# SPDX-FileCopyrightText: 2024 Mr. 27
# SPDX-FileCopyrightText: 2024 Nairod
# SPDX-FileCopyrightText: 2024 Nemanja
# SPDX-FileCopyrightText: 2024 Pieter-Jan Briers
# SPDX-FileCopyrightText: 2024 Plykiya
# SPDX-FileCopyrightText: 2024 Whatstone
# SPDX-FileCopyrightText: 2024 lunarcomets
# SPDX-FileCopyrightText: 2024 no
# SPDX-FileCopyrightText: 2024 portfiend
# SPDX-FileCopyrightText: 2025 ScyronX
# SPDX-FileCopyrightText: 2025 SuperJoelDood
# SPDX-FileCopyrightText: 2025 Suyo
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
save: false
name: Urist McAsakim
parent: BaseMobSpeciesOrganic
id: BaseMobAsakim
abstract: true
components:
- type: HumanoidAppearance
species: Asakim
hideLayersOnEquip:
- Snout
# - HeadTop # WWDP - Because visible horns its cool
- HeadSide
- type: Hunger
- type: Puller
needsHands: false
- type: MovementSpeedModifier
baseWalkSpeed : 2.7
baseSprintSpeed : 4.65
weightlessAcceleration: 1.5 # Slightly more manueverable in space.
- type: Fixtures
fixtures: # TODO: This needs a second fixture just for mob collisions.
fix1:
shape:
!type:PhysShapeCircle
radius: 0.48
density: 275 # Its an abandoned bioweapon species with 4 arms, of course it should be able to fight a Oni.
restitution: 0.0
mask:
- MobMask
layer:
- MobLayer
- type: Sprite
scale: 1.2, 1.2
- type: PlayerToolModifier
pryTimeMultiplier: 0.7
- type: BonusMeleeDamage
damageModifierSet:
coefficients:
Blunt: 1.1
Slash: 1.1
Piercing: 1.1
Asphyxiation: 1
- type: Thirst
- type: Icon
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: full
- type: Body
prototype: Asakim
requiredLegs: 2
- type: Butcherable
butcheringType: Spike
spawned:
- id: FoodMeatLizard
amount: 7
#- type: LizardAccent # DeltaV - replaced with language accent
- type: Speech
speechSounds: Lizard
speechVerb: Reptilian
allowedEmotes: ['Thump']
- type: TypingIndicator
proto: lizard
- type: Vocal
sounds:
Male: MaleReptilian
Female: FemaleReptilian
Unsexed: MaleReptilian
#- type: LanguageKnowledge # DeltaV - ee language port when
# speaks:
# - Draconic
# - Azaziba
# understands:
# - Draconic
# - Azaziba
- type: BodyEmotes
soundsId: ReptilianBodyEmotes
- type: Damageable
damageContainer: Biological
damageModifierSet: GenemoddedScale
- type: MeleeWeapon
soundHit:
collection: AlienClaw
angle: 30
animation: WeaponArcClaw
damage:
types:
Slash: 15
Structural: 24
- type: SolutionContainerManager
solutions:
melee:
reagents:
- ReagentId: GastroToxin
Quantity: 20
- type: SolutionRegeneration
solution: melee
generated:
reagents:
- ReagentId: GastroToxin
Quantity: 20
#- type: NightVision # DeltaV - moved to eye organ
# isEquipment: false
# color: "#ae65bf"
# activateSound: null
# deactivateSound: null
- type: MeleeChemicalInjector
solution: melee
transferAmount: 1
- type: Temperature
heatDamageThreshold: 400
coldDamageThreshold: 285
currentTemperature: 310.15
specificHeat: 42
coldDamage:
types:
Cold : 0.05 #per second, scales with temperature & other constants
heatDamage:
types:
Heat : 0.6 #per second, scales with temperature & other constants
- type: TemperatureSpeed
thresholds:
301: 0.8
295: 0.6
285: 0.4
- type: Wagging
- type: NpcFactionMember
factions:
- Syndicate # Making new AI factions is annoying with all the hostilities I have to add, whatever.
- type: Inventory
speciesId: asakim
# WWDP-Edit-Start
femaleDisplacements:
jumpsuit:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: jumpsuit-female
shoes:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: shoes
displacements:
jumpsuit:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: jumpsuit
shoes:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: shoes
#- type: GuideHelp # uncomment when you actually bring the guide over
# guides:
# - Asakim
# # WWDP-Edit-End
# Begin DeltaV Additions
- type: SyllableObfuscationAccent # unintelligable language
accent: draconian
- type: BlockWriting # can't speak common can't write common. better get an AAC tablet
# End DeltaV Additions
- type: entity
save: false
name: Urist McAsakim
suffix: Urisst' MzAsakim
parent: BaseMobAsakim
id: MobAsakim
- type: entity
parent: BaseMobAsakim
id: MobAsakimRandom
name: Urist McAsakim
suffix: Random Appearance
components:
- type: RandomHumanoidAppearance
- type: RandomMetadata
nameSegments:
- NamesReptilianMale
- type: entity
parent: BaseSpeciesDummy
id: MobAsakimDummy
categories: [ HideSpawnMenu ]
description: A dummy Asakim meant to be used in character setup.
components:
- type: HumanoidAppearance
species: Asakim
hideLayersOnEquip: # WWDP
- Snout
# - HeadTop # WWDP - Because visible horns its cool
- HeadSide
- type: Inventory
speciesId: asakim
femaleDisplacements:
jumpsuit:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: jumpsuit-female
shoes:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: shoes
displacements:
jumpsuit:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: jumpsuit
shoes:
sizeMaps:
32:
sprite: _White/Mobs/Species/displacement.rsi
state: shoes
- type: damageModifierSet
id: GenemoddedScale # Strong brute-focused scales.
coefficients:
Cold: 1.2
Radiation: 1.2
Poison: 1.2
Piercing: 0.8
Slash: 0.95 # DeltaV - emphasize slash weakness, was 0.75
Blunt: 0.75
Heat: 1.1
Shock: 1.1

View File

@ -0,0 +1,26 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
id: HandheldAutopulserProjectile
name: plasma projectile
parent: BaseBullet
categories: [ HideSpawnMenu ]
components:
- type: Projectile
damage:
types:
Caustic: 4 # DeltaV - was 5
Heat: 6 # DeltaV - was 14
Radiation: 4 # DeltaV - was 5
- type: Sprite
sprite: _Impstation/Objects/Weapons/Guns/Projectiles/energybolts.rsi # DeltaV
scale: 0.4, 0.4
layers:
- state: medium # DeltaV
shader: unshaded
- type: Ammo
muzzleFlash: MuzzleFlashEffectEnergySmall # DeltaV - awesome imp sprites
- type: PointLight
color: "#FF00AA"

View File

@ -0,0 +1,58 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: entity
name: plasma autopulser # DeltaV - simplify name
parent: [BaseWeaponBattery, BaseGunWieldable]
id: WeaponRifleAsakimAutopulser
description: An advanced handheld plasma rifle. # DeltaV - no fracture here
components:
- type: Sprite
sprite: _Mono/Objects/Weapons/Guns/Battery/asakimrifle.rsi
layers:
- state: base
map: ["enum.GunVisualLayers.Base"]
- state: mag-0
map: ["enum.GunVisualLayers.Mag"]
#- type: WieldedCrosshair # DeltaV - nope
# rsi:
# sprite: _RMC14/Interface/MousePointer/flamer_mouse.rsi
# state: all
- type: Clothing
sprite: _Mono/Objects/Weapons/Guns/Battery/asakimrifle.rsi
- type: GunWieldBonus
minAngle: -18
maxAngle: -14
- type: Gun
minAngle: 18
maxAngle: 26
fireRate: 6
burstFireRate: 15
shotsPerBurst: 3 # DeltaV - was 5
selectedMode: FullAuto
availableModes:
#- SemiAuto # DeltaV - semi was just kinda lame
- Burst
- FullAuto
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/ship_svalinn.ogg
- type: MagazineVisuals
magState: mag
steps: 1
zeroVisible: false
- type: ProjectileBatteryAmmoProvider
proto: HandheldAutopulserProjectile
fireCost: 50 # DeltaV - doubled fire cost, was 25
- type: BatteryWeaponFireModes # DeltaV - selectable disabler mode
fireModes:
- proto: HandheldAutopulserProjectile
fireCost: 50 # DeltaV - doubled fire cost, was 25
- proto: HandheldAutopulserDisablerProjectile
fireCost: 35 # DeltaV - less than doubled fire cost for disable mode, was 25
- type: Appearance
- type: StaticPrice
price: 1750
- type: BatterySelfRecharger
autoRecharge: true
autoRechargeRate: 30 # DeltaV - double to compensate for increased cost, was 15

View File

@ -0,0 +1,35 @@
- type: entity
name: high-frequency blade
parent: Katana # DeltaV - no contraband
id: WeaponHFKatana
description: A high-frequency blade. It's incredibly powerful. # Why the glorp would a katana be modified to have a HF blade :nerd::point_up:
components:
- type: Sprite
sprite: _Mono/Objects/Weapons/Melee/hfblade.rsi
- type: MeleeWeapon
attackRate: 1.25
wideAnimationRotation: -60
damage:
types: # It's still incredibly strong, but -reasonable-
Slash: 19 # DeltaV - was 23
Shock: 6 # DeltaV - was 6
Structural: 25 # Ion doesn't exist, according to Proto manager.
- type: Item
sprite: _Mono/Objects/Weapons/Melee/hfblade.rsi
- type: Clothing
sprite: _Mono/Objects/Weapons/Melee/hfblade.rsi
slots:
- Back
- Belt
- suitStorage
- type: Reflect
reflectProb: 0.15 # DeltaV - was 0.35, these guys are strong enough as-is come on
- type: DisarmMalus
malus: 0.9
- type: StaticPrice
price: 5000 # YOU CALL THAT A BLADE.... I'LL SHOW YOU A BLADE...
#- type: Construction # DeltaV - not gonna let tiders build this
# graph: GraphWeaponHFKatana
# node: WeaponHFKatana
#- type: PirateBountyItem # DeltaV - no pirates
# id: TSFEnergyWeapon

View File

@ -0,0 +1,8 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: preloadedGrid
id: AsakimSmall
path: /Maps/_Mono/ShuttleEvent/asakim_small.yml
copies: 1 # DeltaV - was 4

View File

@ -0,0 +1,64 @@
# SPDX-FileCopyrightText: 2025 Redrover1760
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
#- type: entityTable # DeltaV - unused
# id: AsakimShipsTable
# table: !type:AllSelector # we need to pass a list of rules, since rules have further restrictions to consider via StationEventComp
# children:
# - id: UnknownShuttleAsakimSmall
- type: entity
parent: BaseUnknownShuttleRule # DeltaV - was BaseRandomShuttleRule
id: AsakimShuttle
components:
- type: StationEvent
#startAnnouncement: station-event-asakim-shuttle-detected # DeltaV - no
# startAudio:
# path: /Audio/Misc/notice1.ogg
weight: 1.5 # DeltaV - was 2, now less common then Arms Dealer. rare role
minimumPlayers: 25 # DeltaV
maxOccurrences: 1 # DeltaV - was 4
duration: null # DeltaV
#- type: GameRule # DeltaV - redundant
# minPlayers: 40
- type: LoadMapRule
preloadedGrid: AsakimSmall
# Begin DeltaV Additions
- type: PrecognitionResult
message: psionic-power-precognition-asakim-spawn-result-message
- type: AntagSpawner
prototype: MobAsakim
- type: AntagRandomObjectives
sets:
- groups: AsakimObjectiveGroup
maxPicks: 2
maxDifficulty: 100 # unused but mandatory
- type: AntagSelection
agentName: roles-antag-asakim-name
definitions:
- spawnerPrototype: SpawnPointGhostAsakim
min: 1
max: 1
pickPlayer: false
startingGear: AsakimGear
roleLoadout:
- RoleSurvivalStandard # maybe remove this
briefing:
text: asakim-role-briefing
color: "#5085fa"
sound: "/Audio/_DV/Ambience/Antag/asakimbriefing.ogg"
components:
- type: RandomHumanoidAppearance
randomizeName: true
- type: NpcFactionMember
factions:
- Syndicate
- type: SurgerySpeedModifier # not sure why this was in the original one but whatever
speedModifier: 1.5
#- type: PsionicBonusChance # uncomment when psionics are cool
# multiplier: 999 # no way to guarentee random psionics so. next best thing
mindRoles:
- MindRoleAsakim
# End DeltaV Additions

View File

@ -0,0 +1,162 @@
# SPDX-FileCopyrightText: 2025 starch
#
# SPDX-License-Identifier: AGPL-3.0-or-later
- type: species
id: Asakim
name: species-name-asakim
roundStart: false # sad...
prototype: MobAsakim
sprites: MobAsakimSprites
dollPrototype: MobAsakimDummy
skinColoration: Hues
defaultSkinTone: "#444541"
markingLimits: MobAsakimMarkingLimits
maleFirstNames: NamesReptilianMale # DeltaV
femaleFirstNames: NamesReptilianFemale # DeltaV
naming: FirstDashFirst
- type: speciesBaseSprites
id: MobAsakimSprites
sprites:
Special: MobAsakimAnyMarking
Head: MobAsakimHead
HeadTop: MobAsakimAnyMarking
Chest: MobAsakimTorso
Tail: MobHumanoidAnyMarking
Eyes: MobAsakimEyes
LArm: MobAsakimLArm
RArm: MobAsakimRArm
LHand: MobAsakimLHand
RHand: MobAsakimRHand
LLeg: MobAsakimLLeg
RLeg: MobAsakimRLeg
LFoot: MobAsakimLFoot
RFoot: MobAsakimRFoot
- type: humanoidBaseSprite
id: MobAsakimAnyMarking
- type: humanoidBaseSprite
id: MobAsakimMarkingMatchSkin
markingsMatchSkin: true
- type: humanoidBaseSprite
id: MobAsakimHead
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: head_m
- type: humanoidBaseSprite
id: MobAsakimHeadMale
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: head_m
- type: humanoidBaseSprite
id: MobAsakimHeadFemale
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: head_f
- type: humanoidBaseSprite
id: MobAsakimTorso
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: torso_m
- type: humanoidBaseSprite
id: MobAsakimTorsoMale
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: torso_m
- type: humanoidBaseSprite
id: MobAsakimTorsoFemale
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: torso_f
- type: humanoidBaseSprite
id: MobAsakimLLeg
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: l_leg
- type: humanoidBaseSprite
id: MobAsakimLArm
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: l_arm
- type: humanoidBaseSprite
id: MobAsakimLHand
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: l_hand
- type: humanoidBaseSprite
id: MobAsakimLFoot
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: l_foot
- type: humanoidBaseSprite
id: MobAsakimRLeg
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: r_leg
- type: humanoidBaseSprite
id: MobAsakimRArm
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: r_arm
- type: humanoidBaseSprite
id: MobAsakimRHand
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: r_hand
- type: humanoidBaseSprite
id: MobAsakimRFoot
baseSprite:
sprite: _Mono/Mobs/Species/Asakim/parts.rsi
state: r_foot
- type: humanoidBaseSprite
id: MobAsakimEyes
baseSprite:
sprite: _Mono/Mobs/Customization/asakimeyes.rsi
state: eyes
- type: markingPoints
id: MobAsakimMarkingLimits
onlyWhitelisted: true
points:
Hair:
points: 0
required: false
FacialHair:
points: 0
required: false
Tail:
points: 1
required: true
defaultMarkings: [ LizardTailSmooth ]
HeadTop:
points: 2
required: false
HeadSide:
points: 2 # WWDP-Edit
required: false
Chest:
points: 3
required: false
Legs:
points: 2
required: false
Arms:
points: 2
required: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

View File

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Modified by Jackal298 (github), based on paradise station at https://github.com/ParadiseSS13/Paradise/blob/ede55cc8f5b50abcd4f51d37779b56853a440a9a/icons/obj/clothing/uniforms.dmi, fix digi sprites by DreamlyJack",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-INNERCLOTHING",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Made by _starch_ (Discord)",
"copyright": "Icon state from NSV13",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "equipped-HELMET",
"directions": 4
},
{
"name": "equipped-HELMET-asakim",
"directions": 4
},
{
"name": "icon"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

View File

@ -0,0 +1,30 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Edited from Baystation12 sprites by _starch_ (discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "equipped-OUTERCLOTHING-asakim",
"directions": 4
},
{
"name": "equipped-OUTERCLOTHING",
"directions": 4
},
{
"name": "icon"
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

View File

@ -0,0 +1,15 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Modified from /tg/ station sprites by _starch_ (discord).",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "eyes",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,63 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "https://github.com/tgstation/tgstation/blob/08898964e67a0d517ca4e47eec7039394b694ac2/icons/mob/species/lizard/bodyparts.dmi",
"copyright": "Edited by _starch_ (Discord) from sprites from /tg/, and from sprites edited by PixelTheKermit (github).",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "full"
},
{
"name": "head_f",
"directions": 4
},
{
"name": "head_m",
"directions": 4
},
{
"name": "l_arm",
"directions": 4
},
{
"name": "l_foot",
"directions": 4
},
{
"name": "l_hand",
"directions": 4
},
{
"name": "l_leg",
"directions": 4
},
{
"name": "r_arm",
"directions": 4
},
{
"name": "r_foot",
"directions": 4
},
{
"name": "r_hand",
"directions": 4
},
{
"name": "r_leg",
"directions": 4
},
{
"name": "torso_f",
"directions": 4
},
{
"name": "torso_m",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -0,0 +1,44 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Kitbashed from various sprites by _starch_ (discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "base"
},
{
"name": "mag-0"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "wielded-inhand-left",
"directions": 4
},
{
"name": "wielded-inhand-right",
"directions": 4
},
{
"name": "equipped-BACKPACK",
"directions": 4
},
{
"name": "equipped-SUITSTORAGE",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@ -0,0 +1,34 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/a9451f4d22f233d328b63490c2bcf64a640e42ff and modified by Jackal298. Recolored by _starch_ (discord)",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-BELT",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "equipped-BACKPACK",
"directions": 4
},
{
"name": "equipped-SUITSTORAGE",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

View File

@ -0,0 +1,26 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "by Litogin",
"size": {
"x": 32,
"y": 32
},
"load": {
"srgb": false
},
"states": [
{
"name": "jumpsuit",
"directions": 4
},
{
"name": "jumpsuit-female",
"directions": 4
},
{
"name": "shoes",
"directions" : 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B