Новая HellspawnBoss Арена (#3489)

This commit is contained in:
KaiserMaus 2025-12-24 14:32:17 +00:00 committed by GitHub
parent b5c2efd0d3
commit bc354f0587
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 5753 additions and 23 deletions

View file

@ -33,6 +33,8 @@ using Robust.Shared.EntitySerialization.Systems;
using Robust.Shared.Map;
using Robust.Shared.Timing;
using Robust.Shared.Utility;
using System.Numerics;
using Robust.Shared.Maths;
namespace Content.Server._Sunrise.Boss.Systems;
@ -132,7 +134,7 @@ public sealed class HellSpawnArenaSystem : SharedHellSpawnArenaSystem
return false;
}
entityUid = Spawn("MobHellspawnBoss", new EntityCoordinates(Arena.Value, 0.5f, 0.5f));
entityUid = Spawn("MobHellspawnBossSpawn", new EntityCoordinates(Arena.Value, 0.5f, 0.5f));
var fighters = EntityQuery<HellSpawnFighterComponent>().ToList().Count;
return true;
}
@ -334,13 +336,32 @@ public sealed class HellSpawnArenaSystem : SharedHellSpawnArenaSystem
/// <summary>
/// Заспавнить культистов(а). Сделано для упрощения изменения поведения босса.
/// </summary>
private async void OnSpawnCultists()
private void OnSpawnCultists()
{
if (Arena == null)
return;
var uid = Spawn("HellSpawnCultist", new EntityCoordinates(Arena.Value, 0.5f, 0.5f));
ApplyProtection(uid);
var center = new EntityCoordinates(Arena.Value, 0.5f, 0.5f);
var main = Spawn("HellSpawnCultist", center);
ApplyProtection(main);
var dummySpawns = new[]
{
new EntityCoordinates(Arena.Value, 0.5f, 2.5f), // north (+2)
new EntityCoordinates(Arena.Value, 0.5f, -1.5f), // south (-2)
new EntityCoordinates(Arena.Value, 2.25f, 0.5f), // east (+1.75)
new EntityCoordinates(Arena.Value, -1.25f, 0.5f), // west (-1.75)
};
foreach (var coords in dummySpawns)
{
var dummy = Spawn("HellSpawnCultistDummy", coords);
ApplyProtection(dummy);
var dir = center.Position - coords.Position;
_transform.SetLocalRotation(dummy, Angle.FromWorldVec(dir));
}
}
/// <summary>

View file

@ -13,9 +13,9 @@ public abstract class SharedHellSpawnArenaSystem : EntitySystem
public EntityUid? Arena;
public MapId? ArenaMap;
public TimeSpan CooldownLength = TimeSpan.FromSeconds(3);
public TimeSpan CooldownLength = TimeSpan.FromSeconds(4);
public HashSet<EntityUid> MarkedTargets = new();
public ResPath ShuttlePath = new("/Maps/_Sunrise/arena.yml");
public ResPath ShuttlePath = new("/Maps/_Sunrise/Nonstations/roundel-arena.yml");
public List<EntityUid> Shuttles = [];
/// <inheritdoc />

View file

@ -4,3 +4,5 @@ ent-WallAbductorDiagonal = shuttle wall
ent-WallAbductor = shuttle wall
.suffix = Reinforced, Exterior
.desc = { ent-BaseWall.desc }
ent-WallCultIndestructible = { ent-WallCult }
.desc = { ent-WallCult.desc }

View file

@ -0,0 +1,8 @@
advertisement-narsie-1 = TOK-LYR RQA-NAP G'OLT-ULOFT!
advertisement-narsie-2 = Khari'd! Eske'te tannin!
advertisement-narsie-3 = Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!
advertisement-narsie-4 = N'ath reth sh'yro eth d'rekkathnor!
advertisement-narsie-5 = Sas'so c'arta forbici!
advertisement-narsie-6 = Qu'laris ver'don, thal'sorin mik'thar!
advertisement-narsie-7 = O'velikin sup'navaril, thral'kar!
advertisement-narsie-8 = Savrae ines amutan. Yam'toth remium il'tarat!

View file

@ -1,9 +1,13 @@
ent-MobHellspawnBossSpawn = { ent-MobHellspawn }
.desc = { ent-MobHellspawn.desc }
ent-MobHellspawnBoss = { ent-MobHellspawn }
.desc = { ent-MobHellspawn.desc }
ent-ComputerBossTravel = алтарь битвы с боссом
.desc = { ent-AltarFangs.desc }
ent-HellSpawnCultist = { ent-MobHuman }
.desc = { ent-MobHuman.desc }
ent-HellSpawnCultistDummy = { ent-MobHuman }
.desc = { ent-MobHuman.desc }
ent-BulletSkyFlare = шар пламени
.suffix = Босс
.desc = { ent-BaseBulletIncendiary.desc }

View file

@ -4,3 +4,5 @@ ent-WallAbductorDiagonal = стена шаттла абдукторов
ent-WallAbductor = стена шаттла абдукторов
.suffix = Укрепленная, Внешняя
.desc = { ent-BaseWall.desc }
ent-WallCultIndestructible = { ent-WallCult }
.desc = Удерживает воздух внутри, а культистов снаружи. Похоже особым образом зачарована магией крови.

View file

@ -0,0 +1,8 @@
advertisement-narsie-1 = TOK-LYR RQA-NAP G'OLT-ULOFT!
advertisement-narsie-2 = Khari'd! Eske'te tannin!
advertisement-narsie-3 = Pasnar val'keriam usinar!
advertisement-narsie-4 = N'ath reth sh'yro eth d'rekkathnor!
advertisement-narsie-5 = Sas'so c'arta forbici!
advertisement-narsie-6 = Qu'laris ver'don, thal'sorin mik'thar!
advertisement-narsie-7 = O'velikin sup'navaril, thral'kar!
advertisement-narsie-8 = Savrae ines amutan. Yam'toth remium il'tarat!

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,7 @@
- Wall
components:
- type: Anchorable
flags:
flags:
- Anchorable
- type: Rotatable
- type: RangedDamageSound
@ -259,7 +259,7 @@
behaviors:
- !type:SpawnEntitiesBehavior
spawn:
Girder:
CultGirder: # sunrise-edit
min: 1
max: 1
- !type:DoActsBehavior

View file

@ -90,7 +90,7 @@
behaviors:
- !type:SpawnEntitiesBehavior
spawn:
SheetSteel1:
CultRunicMetal1:
min: 1
max: 1
- !type:DoActsBehavior

View file

@ -1,4 +1,49 @@
- type: entity
# spawn animation, spawns actual narsie when it ends
- type: entity
id: MobHellspawnBossSpawn
suffix: Spawn
components:
- type: Sprite
noRot: true
sprite: Mobs/Demons/hellspawn.rsi
layers:
- state: spawn
- state: spawn_unshaded
shader: unshaded
drawdepth: Ghosts
- type: Transform
anchored: true
- type: Physics
bodyType: Static
canCollide: false
- type: TimedDespawn
lifetime: 3.2
- type: SpawnOnDespawn
prototype: MobHellspawnBoss
- type: AmbientSound
range: 13
volume: 15
sound:
path: /Audio/Animals/space_dragon_roar.ogg
- type: PointLight
radius: 1.6
energy: 4.5
color: "#ff4242"
castShadows: false
- type: TriggerOnSpawn
- type: TimerTrigger
delay: 1
- type: ExplodeOnTrigger
keysIn: [timer]
- type: Explosive
explosionType: JustStructuralCharge
totalIntensity: 125
intensitySlope: 5
maxIntensity: 75
deleteAfterExplosion: false
canCreateVacuum: false
- type: entity
parent: MobHellspawn
id: MobHellspawnBoss
# categories: [ HideSpawnMenu ]
@ -37,7 +82,7 @@
0: Alive
750: Dead
- type: Stamina
critThreshold: 175
critThreshold: 450
stunTime: 2
- type: AmbientSound
sound: /Audio/Ambience/ambiodd.ogg
@ -76,6 +121,7 @@
hidden: true
soundHit:
path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg
bluntStaminaDamageFactor: 1.2
damage:
types:
Blunt: 40
@ -107,6 +153,14 @@
prob: 0.2
- id: LeftArmCyberGorillaUpgraded
prob: 0.15
- id: CultPylon
prob: 0.1
- id: ReaperCultPylon
prob: 0.1
- id: NarbeeCultPylon
prob: 0.1
- id: NarsieCultPylon
prob: 0.1
# Meme
- id: ClothingNeckGoldmedal
prob: 0.5
@ -128,6 +182,12 @@
prob: 0.1
- id: ResearchDiskDebug
prob: 0.05
- id: ClothingHeadHatUshanka
prob: 0.2
- id: PFigurineChaminaM
prob: 0.01
- id: PFigurinePirateJugger
prob: 0.01
# Armors
- id: ClothingOuterHardsuitSalvage
prob: 0.25
@ -138,18 +198,32 @@
- id: ClothingOuterSoftsuitCBURN
prob: 0.1
# Weapons
- id: WeaponLaserGun
prob: 0.05
- id: WeaponSubMachineGunPPSH
prob: 0.05
- id: WeaponSniperDragunov
prob: 0.05
- id: WeaponLightMachineGunDP28
prob: 0.05
- id: Musket
prob: 0.05
- id: WeaponRevolverPirate
prob: 0.05
- id: WeaponPistolFlintlock
prob: 0.05
- id: WeaponShotgunGA12
prob: 0.2
prob: 0.05
- id: WeaponPistolM1984
prob: 0.15
prob: 0.05
- id: ClothingHandsPowerGlovesNoUplink
prob: 0.25
prob: 0.05
- id: WeaponMeleeMoltenCollider
prob: 0.2
prob: 0.05
- id: WeaponMeleeMoltenAmputator
prob: 0.15
prob: 0.05
- id: WeaponShotgunCycler
prob: 0.1
prob: 0.05
- id: HyperEutacticBlade
prob: 0.05
# Boss lunch
@ -214,7 +288,7 @@
- type: entity
id: HellSpawnCultist
parent: MobHuman
categories: [ HideSpawnMenu ]
# categories: [ HideSpawnMenu ]
components:
- type: NpcFactionMember
factions:
@ -228,7 +302,59 @@
- type: MobThresholds
thresholds:
0: Alive
5: Dead
50: Dead
- type: PassiveDamage
allowedStates:
- Alive
damageCap: 50
damage:
types:
Blunt: 3.75
- type: AmbientSound
range: 13
volume: -5
sound:
path: /Audio/_Sunrise/BloodCult/narsie_summoned.ogg
- type: entity
id: HellSpawnCultistDummy
parent: MobHuman
# categories: [ HideSpawnMenu ]
components:
- type: NpcFactionMember
factions:
- Syndicate
- type: Loadout
prototypes:
- CultistGear
- type: RandomHumanoidAppearance
randomizeName: true
- type: TimedDespawn
lifetime: 15
- type: SpawnOnDespawn
prototype: CultTeleportOutEffect
- type: AmbientSound
range: 6
volume: 2
sound:
path: /Audio/_Sunrise/BloodCult/enter_blood.ogg
- type: MobThresholds
thresholds:
0: Alive
75: Dead
- type: PointLight
radius: 1
energy: 2
color: "#ff4242"
castShadows: false
- type: ExplosionResistance
damageCoefficient: 0.3
- type: Vocalizer
minVocalizeInterval: 3s
maxVocalizeInterval: 6s
hideChat: true
- type: DatasetVocalizer
dataset: NarSieAds
- type: entity
parent: BaseBulletIncendiary

View file

@ -27,3 +27,9 @@
values:
prefix: advertisement-liberation-
count: 31
- type: localizedDataset
id: NarSieAds
values:
prefix: advertisement-narsie-
count: 8

View file

@ -86,3 +86,16 @@
- type: Appearance
- type: Ricochetable
chance: 1
- type: entity
parent: WallPlastitaniumIndestructible
id: WallCultIndestructible
name: cult wall
components:
- type: Sprite
sprite: Structures/Walls/cult.rsi
- type: Icon
sprite: Structures/Walls/cult.rsi
- type: IconSmooth
key: walls
base: cult

View file

@ -141,3 +141,14 @@
# STOP
# BEFORE YOU ADD MORE EXPLOSION TYPES CONSIDER IF AN EXISTING ONE IS SUITABLE
# ADDING NEW ONES IS PROHIBITIVELY EXPENSIVE
# Sunrose-start
- type: explosion # Увы, все из-за любителей абуза с РСУ # Sunrise-TODO: Удалить это когда-нибудь
id: JustStructuralCharge
damagePerIntensity:
types:
Heat: 1
Structural: 25
lightColor: Red
fireColor: Red
texturePath: /Textures/Effects/fire_greyscale.rsi
# Sunrose-end

View file

@ -5,7 +5,7 @@
"y": 64
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by brainfood1183 (github) for ss14",
"copyright": "Made by brainfood1183 (github) for ss14 spawn state sprited by KaiserMaus(github)",
"states": [
{
"name": "dead"
@ -13,6 +13,66 @@
{
"name": "alive",
"directions": 4
},
{
"name": "spawn",
"delays": [
[
0.3,
0.1,
0.1,
0.1,
0.1,
1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.05,
0.05,
0.05,
0.05,
0.1
]
]
},
{
"name": "spawn_unshaded",
"delays": [
[
0.3,
0.1,
0.1,
0.1,
0.1,
1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.05,
0.05,
0.05,
0.05,
0.1
]
]
}
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -199,5 +199,6 @@ ignore_files:
- role-types.ftl
- rmobjective.ftl
- persistence-save-command.ftl
- 'xeno_last.ftl'
- 'xeno_first.ftl'
- xeno_last.ftl
- xeno_first.ftl
- narsie.ftl