From 5906ec24f249215f8681c30b6d629a66a5f3b0f2 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sun, 4 Jun 2023 11:06:13 +0000 Subject: [PATCH] dungeon carp and dragon (#17040) Co-authored-by: deltanedas <@deltanedas:kde.org> --- .../ghost/roles/ghost-role-component.ftl | 1 + .../Prototypes/Entities/Mobs/NPCs/carp.yml | 10 + .../Entities/Mobs/Player/dragon.yml | 264 ++++++++++-------- .../Prototypes/Procedural/biome_markers.yml | 2 +- .../Procedural/salvage_factions.yml | 16 +- 5 files changed, 164 insertions(+), 129 deletions(-) diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index b5af1a5e3f..501ec4cf7e 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -99,6 +99,7 @@ ghost-role-information-ifrit-description = Listen to your owner. Don't tank dama ghost-role-information-space-dragon-name = Space dragon ghost-role-information-space-dragon-description = Call in 3 carp rifts and take over this quadrant! You have only 5 minutes in between each rift before you will disappear. +ghost-role-information-space-dragon-dungeon-description = Defend the expedition dungeon with your fishy comrades! ghost-role-information-cluwne-name = Cluwne ghost-role-information-cluwne-description = Become a pitiful cluwne, your only goal in life is to find a sweet release from your suffering (usually by being beaten to death). A cluwne is not an antagonist but may defend itself. Crewmembers may murder cluwnes freely. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index ac9d1c80ae..aad5fe32d0 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -155,3 +155,13 @@ - type: GhostTakeoverAvailable - type: HTN rootTask: DragonCarpCompound + +- type: entity + id: MobCarpDungeon + parent: MobCarp + suffix: Dungeon + components: + - type: MeleeWeapon + damage: + types: + Slash: 5 diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 5abd832bc0..c6fe8dce99 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -1,126 +1,148 @@ - type: entity - name: space dragon parent: SimpleSpaceMobBase - id: MobDragon + id: BaseMobDragon suffix: "" + name: space dragon description: A flying leviathan, loosely related to space carps. components: - - type: GhostRole - allowMovement: true - allowSpeech: true - makeSentient: true - name: ghost-role-information-space-dragon-name - description: ghost-role-information-space-dragon-description - - type: GhostTakeoverAvailable - - type: HTN - rootTask: XenoCompound - - type: Faction - factions: - - Dragon - - type: Speech - - type: CombatMode - - type: MobMover - - type: InputMover - - type: MovementSpeedModifier - baseWalkSpeed: 3 - baseSprintSpeed: 5 - weightlessModifier: 1.5 - - type: RandomSprite - available: - - enum.DamageStateVisualLayers.Base: - alive: Rainbow - - type: Sprite - sprite: Mobs/Aliens/Carps/dragon.rsi - netsync: false - noRot: true - layers: - - map: [ "enum.DamageStateVisualLayers.Base" ] - state: alive - - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] - state: alive-unshaded - shader: unshaded - - type: Appearance - - type: DamageStateVisuals - states: - Alive: - Base: alive - BaseUnshaded: alive-unshaded - Critical: - Base: crit - Dead: - Base: dead - BaseUnshaded: dead-unshaded - - type: Physics - bodyType: KinematicController - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.40 - density: 100 - mask: - - FlyingMobMask - layer: - - FlyingMobLayer - - type: MobState - - type: MobThresholds - thresholds: - 0: Alive - 450: Critical - 500: Dead - - type: Metabolizer - solutionOnBody: false - updateFrequency: 0.25 - metabolizerTypes: [ Dragon ] - groups: - - id: Medicine - - id: Poison - - type: MovementAlwaysTouching - - type: NoSlip - - type: Butcherable - spawned: - - id: FoodMeatDragon - amount: 2 - - type: InteractionPopup - successChance: 0.25 # It's no goose, but you better smell like carp. - interactSuccessString: petting-success-dragon - interactFailureString: petting-failure-dragon - interactFailureSound: - path: /Audio/Animals/space_dragon_roar.ogg - soundPerceivedByOthers: false # A 75% chance for a loud roar would get old fast. - - type: MeleeWeapon - hidden: true - soundHit: - path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg - damage: - types: - Piercing: 15 - Slash: 15 - - type: Devourer - foodPreference: Humanoid - shouldStoreDevoured: true - chemical: Ichor - healRate: 15.0 - whitelist: - components: - - MobState - - Door - tags: - - Wall - devourAction: - event: !type:DevourActionEvent - icon: Interface/Actions/devour.png - name: action-name-devour - description: action-description-devour - - type: Dragon - spawnsLeft: 2 - spawnsProto: MobCarpDragon - spawnRiftAction: - event: !type:DragonSpawnRiftActionEvent - icon: - sprite: Interface/Actions/carp_rift.rsi - state: icon - name: action-name-carp-rift - description: action-description-carp-rift - useDelay: 1 + - type: GhostRole + allowMovement: true + allowSpeech: true + makeSentient: true + name: ghost-role-information-space-dragon-name + description: ghost-role-information-space-dragon-description + - type: GhostTakeoverAvailable + - type: HTN + rootTask: XenoCompound + - type: Faction + factions: + - Dragon + - type: Speech + - type: CombatMode + - type: MobMover + - type: InputMover + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 5 + weightlessModifier: 1.5 + - type: RandomSprite + available: + - enum.DamageStateVisualLayers.Base: + alive: Rainbow + - type: Sprite + sprite: Mobs/Aliens/Carps/dragon.rsi + noRot: true + layers: + - map: [ "enum.DamageStateVisualLayers.Base" ] + state: alive + - map: [ "enum.DamageStateVisualLayers.BaseUnshaded" ] + state: alive-unshaded + shader: unshaded + - type: Appearance + - type: DamageStateVisuals + states: + Alive: + Base: alive + BaseUnshaded: alive-unshaded + Critical: + Base: crit + Dead: + Base: dead + BaseUnshaded: dead-unshaded + - type: Physics + bodyType: KinematicController + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.40 + density: 100 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive + 450: Critical + 500: Dead + - type: Metabolizer + solutionOnBody: false + updateFrequency: 0.25 + metabolizerTypes: [ Dragon ] + groups: + - id: Medicine + - id: Poison + - type: MovementAlwaysTouching + - type: NoSlip + - type: Butcherable + spawned: + - id: FoodMeatDragon + amount: 2 + - type: InteractionPopup + successChance: 0.25 # It's no goose, but you better smell like carp. + interactSuccessString: petting-success-dragon + interactFailureString: petting-failure-dragon + interactFailureSound: + path: /Audio/Animals/space_dragon_roar.ogg + soundPerceivedByOthers: false # A 75% chance for a loud roar would get old fast. + - type: MeleeWeapon + hidden: true + soundHit: + path: /Audio/Weapons/Xeno/alien_claw_flesh3.ogg + damage: + types: + Piercing: 15 + Slash: 15 + - type: Devourer + foodPreference: Humanoid + shouldStoreDevoured: true + chemical: Ichor + healRate: 15.0 + whitelist: + components: + - MobState + - Door + tags: + - Wall + devourAction: + event: !type:DevourActionEvent + icon: Interface/Actions/devour.png + name: action-name-devour + description: action-description-devour + +- type: entity + parent: BaseMobDragon + id: MobDragon + components: + - type: Dragon + spawnsLeft: 2 + spawnsProto: MobCarpDragon + spawnRiftAction: + event: !type:DragonSpawnRiftActionEvent + icon: + sprite: Interface/Actions/carp_rift.rsi + state: icon + name: action-name-carp-rift + description: action-description-carp-rift + useDelay: 1 + +- type: entity + parent: BaseMobDragon + id: MobDragonDungeon + suffix: Dungeon + components: + - type: GhostRole + description: ghost-role-information-space-dragon-dungeon-description + # less tanky, no crit + - type: MobThresholds + thresholds: + 0: Alive + 300: Dead + # less meat spawned since it's a lot easier to kill + - type: Butcherable + spawned: + - id: FoodMeatDragon + amount: 1 diff --git a/Resources/Prototypes/Procedural/biome_markers.yml b/Resources/Prototypes/Procedural/biome_markers.yml index 9696e2d65e..3eeddea2b3 100644 --- a/Resources/Prototypes/Procedural/biome_markers.yml +++ b/Resources/Prototypes/Procedural/biome_markers.yml @@ -10,7 +10,7 @@ - type: biomeMarkerLayer id: Carps - proto: MobCarp + proto: MobCarpDungeon #- type: biomeMarkerLayer diff --git a/Resources/Prototypes/Procedural/salvage_factions.yml b/Resources/Prototypes/Procedural/salvage_factions.yml index fd4a870cbe..cc19bb247a 100644 --- a/Resources/Prototypes/Procedural/salvage_factions.yml +++ b/Resources/Prototypes/Procedural/salvage_factions.yml @@ -20,18 +20,20 @@ id: Carps groups: - entries: - - id: MobCarp + - id: MobCarpDungeon amount: 1 - maxAmount: 3 - - id: MobCarpMagic - amount: 1 - maxAmount: 2 + maxAmount: 4 - entries: - - id: MobCarpHolo + - id: MobCarpMagic amount: 1 maxAmount: 3 prob: 0.5 + - entries: + - id: MobCarpHolo + amount: 1 + maxAmount: 2 + prob: 0.25 configs: DefenseStructure: CarpStatue Mining: Carps - Megafauna: MobDragon + Megafauna: MobDragonDungeon