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 b15222c5bd..9466d91c5e 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -9,4 +9,10 @@ ghost-role-information-mouse-description = A hungry and mischievous mouse. ghost-role-information-giant-spider-name = Giant spider ghost-role-information-giant-spider-description = Wreak havoc on the station's inhabitants! -ghost-role-information-cognizine-description = Made conscious with the magic of cognizine. \ No newline at end of file +ghost-role-information-cognizine-description = Made conscious with the magic of cognizine. + +ghost-role-information-hamster-name = Hamster +ghost-role-information-hamster-description = A grumpy little ball of fluff. + +ghost-role-information-hamlet-name = Hamlet the hamster. +ghost-role-information-hamlet-description = Lives in the station bridge, has a bit of a temper and is always hungry. \ No newline at end of file diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index c0e0f12849..0e007569f1 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -20,6 +20,7 @@ petting-success-space-cat = You pet {THE($target)} on {POSS-ADJ($target)} glass petting-success-tarantula = You pet {THE($target)} on {POSS-ADJ($target)} hairy little head. petting-success-holo = You pet {THE($target)} on {POSS-ADJ($target)} metallic spiky head. petting-success-dragon = Dodging teeth, claws, and flames, you pet {THE($target)} on {POSS-ADJ($target)} massive scaled head. +petting-success-hamster = You pet {THE($target)} on {POSS-ADJ($target)} fluffy little head. petting-failure-generic = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} aloof towards you. @@ -32,6 +33,7 @@ petting-failure-possum = You reach out to pet {THE($target)}, but are met with h petting-failure-sloth = You reach out to pet {THE($target)}, but {SUBJECT($target)} somehow dodge with ludicrous speed! petting-failure-holo = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} spikes almost impale your hand! petting-failure-dragon = You raise your hand, but as {THE($target)} roars, you decide you'd rather not be toasty carp food. +petting-failure-hamster = You reach out to pet {THE($target)}, but {SUBJECT($target)} attempts to bite your finger and only your quick reflexes save you from an almost fatal injury. ## Petting silicons diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml index 667d847f3e..797429a0c2 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml @@ -147,3 +147,13 @@ cost: 2000 category: Livestock group: market + +- type: cargoProduct + id: LivestockHamster + icon: + sprite: Mobs/Animals/hamster.rsi + state: icon-0 + product: CrateNPCHamster + cost: 2800 + category: Livestock + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/npc.yml b/Resources/Prototypes/Catalog/Fills/Crates/npc.yml index 827766d097..ad623ae507 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/npc.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/npc.yml @@ -147,3 +147,19 @@ contents: - id: MobSnake amount: 3 + +- type: entity + id: CrateNPCHamster + parent: CrateRodentCage + components: + - type: StorageFill + contents: + - id: MobHamster + +- type: entity + id: CrateNPCHamlet + parent: CrateRodentCage + components: + - type: StorageFill + contents: + - id: MobHamsterHamlet diff --git a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml index f9d61c0953..87df0b7f32 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/mobs.yml @@ -217,3 +217,17 @@ - type: ConditionalSpawner prototypes: - MobBearSpace + +- type: entity + name: Hamster Hamlet Spawner + id: SpawnMobHamsterHamlet + parent: MarkerBase + components: + - type: Sprite + layers: + - state: green + - texture: Mobs/Animals/hamster.rsi/icon-0.png + - state: ai + - type: ConditionalSpawner + prototypes: + - CrateNPCHamlet diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 59ac3988f9..6a361cf23a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1890,3 +1890,117 @@ - type: Grammar attributes: gender: epicene + +- type: entity + name: hamster + parent: SimpleMobBase + id: MobHamster + description: A cute, fluffy, robust hamster. + components: + - type: GhostTakeoverAvailable + makeSentient: true + allowSpeech: true + allowMovement: true + name: ghost-role-information-hamster-name + description: ghost-role-information-hamster-description + - type: Speech + speechSounds: Squeak + - type: Sprite + drawdepth: SmallMobs + sprite: Mobs/Animals/hamster.rsi + layers: + - map: ["enum.DamageStateVisualLayers.Base"] + state: hamster-0 + - type: Item + size: 5 + - type: Physics + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeCircle + radius: 0.2 + density: 120 + mask: + - SmallMobMask + layer: + - SmallMobLayer + - type: MobState + thresholds: + 0: Alive + 40: Critical + 60: Dead + - type: MovementSpeedModifier + baseWalkSpeed : 4 + baseSprintSpeed : 4 + - type: Appearance + - type: DamageStateVisuals + states: + Alive: + Base: hamster-0 + Critical: + Base: dead-0 + Dead: + Base: splat-0 + - type: Food + - type: Hunger + baseDecayRate: 0.3 + - type: Extractable + grindableSolutionName: food + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nutriment + Quantity: 10 + - ReagentId: Blood + Quantity: 60 + - type: Butcherable + spawned: + - id: FoodMeat + amount: 1 + - type: ReplacementAccent + accent: mouse + - type: Tag + tags: + - Trash + - CannotSuicide + - type: Recyclable + - type: Respirator + damage: + types: + Asphyxiation: 0.25 + damageRecovery: + types: + Asphyxiation: -0.25 + - type: Barotrauma + damage: + types: + Blunt: 0.1 + - type: Vocal + maleScream: /Audio/Animals/mouse_squeak.ogg + femaleScream: /Audio/Animals/mouse_squeak.ogg + unsexedScream: /Audio/Animals/mouse_squeak.ogg + wilhelmProbability: 0.001 + - type: CombatMode + disarmAction: + enabled: false + autoPopulate: false + name: action-name-disarm + - type: MeleeWeapon + hidden: true + angle: 0 + animation: WeaponArcBite + damage: + types: + Piercing: 2 + - type: InteractionPopup + successChance: 0.4 + interactSuccessString: petting-success-hamster + interactFailureString: petting-failure-hamster + interactSuccessSound: + path: /Audio/Animals/fox_squeak.ogg + - type: Bloodstream + bloodMaxVolume: 60 + - type: CanEscapeInventory + - type: MobPrice + price: 60 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 63b5566f33..f1455bb848 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -379,3 +379,29 @@ attributes: proper: true gender: female + +- type: entity + name: Hamlet + parent: MobHamster + id: MobHamsterHamlet + description: A grumpy, cute and fluffy hamster. + components: + - type: GhostTakeoverAvailable + makeSentient: true + allowSpeech: true + allowMovement: true + name: ghost-role-information-hamlet-name + description: ghost-role-information-hamlet-description + - type: InteractionPopup + successChance: 1 + - type: Puller + needsHands: false + - type: Butcherable + spawned: + - id: FoodMeat + amount: 1 + - type: Grammar + attributes: + proper: true + gender: male + diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index bf4ff926f5..3876b77ee3 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -281,3 +281,45 @@ containers: - entity_storage +- type: entity + parent: CrateGeneric + id: CrateRodentCage + name: hamster cage + components: + - type: Sprite + sprite: Structures/Storage/Crates/cage.rsi + layers: + - state: base + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: Icon + sprite: Structures/Storage/Crates/cage.rsi + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 15 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/woodhit.ogg + - !type:SpawnEntitiesBehavior + spawn: + SheetPlastic: + min: 1 + max: 2 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + - shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.29" + density: 80 + mask: + - SmallMobMask + layer: + - SmallMobLayer + diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-left.png b/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-left.png new file mode 100644 index 0000000000..c8a6e78f16 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-right.png b/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-right.png new file mode 100644 index 0000000000..18e5157f84 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/0-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/dead-0.png b/Resources/Textures/Mobs/Animals/hamster.rsi/dead-0.png new file mode 100644 index 0000000000..279401902f Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/dead-0.png differ diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/hamster-0.png b/Resources/Textures/Mobs/Animals/hamster.rsi/hamster-0.png new file mode 100644 index 0000000000..665d695451 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/hamster-0.png differ diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/icon-0.png b/Resources/Textures/Mobs/Animals/hamster.rsi/icon-0.png new file mode 100644 index 0000000000..de09d6311d Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/icon-0.png differ diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/meta.json b/Resources/Textures/Mobs/Animals/hamster.rsi/meta.json new file mode 100644 index 0000000000..f7e96fb7d7 --- /dev/null +++ b/Resources/Textures/Mobs/Animals/hamster.rsi/meta.json @@ -0,0 +1,54 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by brainfood# 7460", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon-0" + }, + { + "name": "hamster-0", + "directions": 4, + "delays": [ + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ], + [ + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "dead-0" + }, + { + "name": "splat-0" + }, + { + "name": "0-inhand-left", + "directions": 4 + }, + { + "name": "0-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Mobs/Animals/hamster.rsi/splat-0.png b/Resources/Textures/Mobs/Animals/hamster.rsi/splat-0.png new file mode 100644 index 0000000000..8fe91e2888 Binary files /dev/null and b/Resources/Textures/Mobs/Animals/hamster.rsi/splat-0.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cage.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cage.rsi/base.png new file mode 100644 index 0000000000..0abb868d11 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cage.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cage.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/cage.rsi/closed.png new file mode 100644 index 0000000000..c2fd667d3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cage.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cage.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cage.rsi/icon.png new file mode 100644 index 0000000000..fc30b12a3a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cage.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cage.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cage.rsi/meta.json new file mode 100644 index 0000000000..30b7e4ce87 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cage.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by brainfood# 7460", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/cage.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/cage.rsi/open.png new file mode 100644 index 0000000000..74bc281484 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cage.rsi/open.png differ