diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index 5ae120d742..ee2ccbca0a 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -43,6 +43,7 @@ namespace Content.Client var registerIgnore = new[] { "Breakable", + "Pickaxe", "Interactable", "Destructible", "Temperature", @@ -95,7 +96,8 @@ namespace Content.Client "PowerCell", "AiController", "PlayerInputMover", - "Computer" + "Computer", + "AsteroidRock", }; foreach (var ignoreName in registerIgnore) diff --git a/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs new file mode 100644 index 0000000000..4d01794664 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs @@ -0,0 +1,46 @@ +using System; +using System.Runtime.InteropServices; +using Content.Server.GameObjects.Components.Sound; +using Content.Server.GameObjects.Components.Weapon.Melee; +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects; +using Robust.Server.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Renderable; +using Robust.Shared.Maths; +using Robust.Shared.Utility; + +namespace Content.Server.GameObjects.Components.Mining +{ + [RegisterComponent] + public class AsteroidRockComponent : Component, IAttackBy + { + public override string Name => "AsteroidRock"; + private static readonly string[] SpriteStates = {"0", "1", "2", "3", "4"}; + + public override void Initialize() + { + base.Initialize(); + var spriteComponent = Owner.GetComponent(); + var random = new Random(Owner.Uid.GetHashCode() ^ DateTime.Now.GetHashCode()); + spriteComponent.LayerSetState(0, random.Pick(SpriteStates)); + } + + bool IAttackBy.AttackBy(AttackByEventArgs eventArgs) + { + var item = eventArgs.AttackWith; + if (!item.TryGetComponent(out MeleeWeaponComponent meleeWeaponComponent)) return false; + + Owner.GetComponent().TakeDamage(DamageType.Brute, meleeWeaponComponent.Damage); + + if (!item.TryGetComponent(out PickaxeComponent pickaxeComponent)) return true; + if (!string.IsNullOrWhiteSpace(pickaxeComponent.MiningSound) && + item.TryGetComponent(out var soundComponent)) + { + soundComponent.Play(pickaxeComponent.MiningSound, AudioParams.Default); + } + return true; + } + } +} diff --git a/Content.Server/GameObjects/Components/Mining/PickaxeComponent.cs b/Content.Server/GameObjects/Components/Mining/PickaxeComponent.cs new file mode 100644 index 0000000000..8cf0c81255 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mining/PickaxeComponent.cs @@ -0,0 +1,22 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Server.GameObjects.Components.Mining +{ + [RegisterComponent] + public class PickaxeComponent : Component + + { + public override string Name => "Pickaxe"; + public string MiningSound; + public float MiningSpeedMultiplier; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref MiningSound, "miningSound", "/Audio/items/mining/pickaxe.ogg"); + serializer.DataField(ref MiningSpeedMultiplier, "miningSpeedMultiplier", 1f); + } + } +} diff --git a/Resources/Audio/effects/footsteps/asteroid1.ogg b/Resources/Audio/effects/footsteps/asteroid1.ogg new file mode 100644 index 0000000000..1cb215dc78 Binary files /dev/null and b/Resources/Audio/effects/footsteps/asteroid1.ogg differ diff --git a/Resources/Audio/effects/footsteps/asteroid2.ogg b/Resources/Audio/effects/footsteps/asteroid2.ogg new file mode 100644 index 0000000000..331d0ef241 Binary files /dev/null and b/Resources/Audio/effects/footsteps/asteroid2.ogg differ diff --git a/Resources/Audio/effects/footsteps/asteroid3.ogg b/Resources/Audio/effects/footsteps/asteroid3.ogg new file mode 100644 index 0000000000..90fbf251a0 Binary files /dev/null and b/Resources/Audio/effects/footsteps/asteroid3.ogg differ diff --git a/Resources/Audio/effects/footsteps/asteroid4.ogg b/Resources/Audio/effects/footsteps/asteroid4.ogg new file mode 100644 index 0000000000..186ff17a43 Binary files /dev/null and b/Resources/Audio/effects/footsteps/asteroid4.ogg differ diff --git a/Resources/Audio/effects/footsteps/asteroid5.ogg b/Resources/Audio/effects/footsteps/asteroid5.ogg new file mode 100644 index 0000000000..0ea4c962d0 Binary files /dev/null and b/Resources/Audio/effects/footsteps/asteroid5.ogg differ diff --git a/Resources/Audio/items/mining/pickaxe.ogg b/Resources/Audio/items/mining/pickaxe.ogg new file mode 100644 index 0000000000..db53100a73 Binary files /dev/null and b/Resources/Audio/items/mining/pickaxe.ogg differ diff --git a/Resources/Prototypes/Entities/buildings/asteroid.yml b/Resources/Prototypes/Entities/buildings/asteroid.yml new file mode 100644 index 0000000000..e7ebfd4780 --- /dev/null +++ b/Resources/Prototypes/Entities/buildings/asteroid.yml @@ -0,0 +1,25 @@ +- type: entity + id: asteroid_rock + name: Asteroid Rock + components: + - type: AsteroidRock + - type: Clickable + - type: Sprite + sprite: Buildings/Walls/asteroid_rock.rsi + state: 0 + - type: Icon + sprite: Buildings/Walls/asteroid_rock.rsi + state: 0 + - type: BoundingBox + - type: Collidable + - type: Damageable + - type: Destructible + thresholdvalue: 100 + - type: Occluder + sizeX: 32 + sizeY: 32 + - type: SnapGrid + offset: Center + placement: + snap: + - Wall diff --git a/Resources/Prototypes/Entities/buildings/walls.yml b/Resources/Prototypes/Entities/buildings/walls.yml index 824081eb6f..cb67bbb9f0 100644 --- a/Resources/Prototypes/Entities/buildings/walls.yml +++ b/Resources/Prototypes/Entities/buildings/walls.yml @@ -253,7 +253,7 @@ - type: IconSmooth key: walls. Seriously, just a wall. Nothing extraordinary here. base: sandstone - + - type: entity id: silver_wall name: Silver wall @@ -302,7 +302,7 @@ - type: IconSmooth key: walls. Seriously, just a wall. Nothing extraordinary here. base: uranium - + - type: entity id: wood_wall name: Wood wall diff --git a/Resources/Prototypes/Entities/items/weapons/mining.yml b/Resources/Prototypes/Entities/items/weapons/mining.yml new file mode 100644 index 0000000000..daaf29cacd --- /dev/null +++ b/Resources/Prototypes/Entities/items/weapons/mining.yml @@ -0,0 +1,20 @@ +- type: entity + name: Pickaxe + parent: BaseItem + id: Pickaxe + components: + - type: Sprite + sprite: Objects/items/pickaxe.rsi + state: pickaxe + + - type: Icon + sprite: Objects/items/pickaxe.rsi + state: pickaxe + - type: Pickaxe + - type: MeleeWeapon + damage: 25 + - type: Item + Size: 24 + sprite: Objects/items/pickaxe.rsi + prefix: inhand + - type: Sound diff --git a/Resources/Prototypes/SoundCollections/footsteps.yml b/Resources/Prototypes/SoundCollections/footsteps.yml index 39a7eaabac..ba1307a19f 100644 --- a/Resources/Prototypes/SoundCollections/footsteps.yml +++ b/Resources/Prototypes/SoundCollections/footsteps.yml @@ -62,4 +62,13 @@ id: footstep_heavy files: - /Audio/effects/footsteps/suitstep1.ogg - - /Audio/effects/footsteps/suitstep2.ogg \ No newline at end of file + - /Audio/effects/footsteps/suitstep2.ogg + +- type: sound_collection + id: footstep_asteroid + files: + - /Audio/effects/footsteps/asteroid1.ogg + - /Audio/effects/footsteps/asteroid2.ogg + - /Audio/effects/footsteps/asteroid3.ogg + - /Audio/effects/footsteps/asteroid4.ogg + - /Audio/effects/footsteps/asteroid5.ogg \ No newline at end of file diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index e4ea1876dd..94a67a3c30 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -147,3 +147,63 @@ footstep_sounds: footstep_floor friction: 0.1 subfloor: underplating + +- type: tile + name: floor_asteroid_sand + display_name: Asteroid Floor + texture: asteroid_sand + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space + +- type: tile + name: floor_asteroid_tile + display_name: Asteroid Tile + texture: asteroid_tile + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space + +- type: tile + name: floor_asteroid_coarse_sand0 + display_name: Asteroid Coarse Sand 0 + texture: asteroid_coarse_sand0 + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space + +- type: tile + name: floor_asteroid_coarse_sand1 + display_name: Asteroid Coarse Sand 1 + texture: asteroid_coarse_sand1 + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space + +- type: tile + name: floor_asteroid_coarse_sand2 + display_name: Asteroid Coarse Sand 2 + texture: asteroid_coarse_sand2 + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space + +- type: tile + name: floor_asteroid_coarse_sand_dug + display_name: Asteroid Dug Coarse Sand + texture: asteroid_coarse_sand_dug + is_subfloor: false + can_crowbar: false + footstep_sounds: footstep_asteroid + friction: 0.35 + subfloor: space diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/0.png b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/0.png new file mode 100644 index 0000000000..b46e5f2f6f Binary files /dev/null and b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/0.png differ diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/1.png b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/1.png new file mode 100644 index 0000000000..26d84da342 Binary files /dev/null and b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/1.png differ diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/2.png b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/2.png new file mode 100644 index 0000000000..db394bac61 Binary files /dev/null and b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/2.png differ diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/3.png b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/3.png new file mode 100644 index 0000000000..575f5eceed Binary files /dev/null and b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/3.png differ diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/4.png b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/4.png new file mode 100644 index 0000000000..530719f4d1 Binary files /dev/null and b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/4.png differ diff --git a/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/meta.json b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/meta.json new file mode 100644 index 0000000000..6ecf28f631 --- /dev/null +++ b/Resources/Textures/Buildings/Walls/asteroid_rock.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "0", "directions": 1, "delays": [[1.0]]}, {"name": "1", "directions": 1, "delays": [[1.0]]}, {"name": "2", "directions": 1, "delays": [[1.0]]}, {"name": "3", "directions": 1, "delays": [[1.0]]}, {"name": "4", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Objects/items/pickaxe.rsi/inhand-left.png b/Resources/Textures/Objects/items/pickaxe.rsi/inhand-left.png new file mode 100644 index 0000000000..0822c1e1a5 Binary files /dev/null and b/Resources/Textures/Objects/items/pickaxe.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/items/pickaxe.rsi/inhand-right.png b/Resources/Textures/Objects/items/pickaxe.rsi/inhand-right.png new file mode 100644 index 0000000000..5aee4077c1 Binary files /dev/null and b/Resources/Textures/Objects/items/pickaxe.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/items/pickaxe.rsi/meta.json b/Resources/Textures/Objects/items/pickaxe.rsi/meta.json new file mode 100644 index 0000000000..dfd0153568 --- /dev/null +++ b/Resources/Textures/Objects/items/pickaxe.rsi/meta.json @@ -0,0 +1 @@ +{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "pickaxe", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file diff --git a/Resources/Textures/Objects/items/pickaxe.rsi/pickaxe.png b/Resources/Textures/Objects/items/pickaxe.rsi/pickaxe.png new file mode 100644 index 0000000000..a157fd81f7 Binary files /dev/null and b/Resources/Textures/Objects/items/pickaxe.rsi/pickaxe.png differ diff --git a/Resources/Textures/Tiles/asteroid_coarse_sand0.png b/Resources/Textures/Tiles/asteroid_coarse_sand0.png new file mode 100644 index 0000000000..4710843571 Binary files /dev/null and b/Resources/Textures/Tiles/asteroid_coarse_sand0.png differ diff --git a/Resources/Textures/Tiles/asteroid_coarse_sand1.png b/Resources/Textures/Tiles/asteroid_coarse_sand1.png new file mode 100644 index 0000000000..8363126546 Binary files /dev/null and b/Resources/Textures/Tiles/asteroid_coarse_sand1.png differ diff --git a/Resources/Textures/Tiles/asteroid_coarse_sand2.png b/Resources/Textures/Tiles/asteroid_coarse_sand2.png new file mode 100644 index 0000000000..bcb794d539 Binary files /dev/null and b/Resources/Textures/Tiles/asteroid_coarse_sand2.png differ diff --git a/Resources/Textures/Tiles/asteroid_coarse_sand_dug.png b/Resources/Textures/Tiles/asteroid_coarse_sand_dug.png new file mode 100644 index 0000000000..af24089603 Binary files /dev/null and b/Resources/Textures/Tiles/asteroid_coarse_sand_dug.png differ diff --git a/Resources/Textures/Tiles/asteroid.png b/Resources/Textures/Tiles/asteroid_sand.png similarity index 100% rename from Resources/Textures/Tiles/asteroid.png rename to Resources/Textures/Tiles/asteroid_sand.png diff --git a/Resources/Textures/Tiles/asteroidfloor.png b/Resources/Textures/Tiles/asteroid_tile.png similarity index 100% rename from Resources/Textures/Tiles/asteroidfloor.png rename to Resources/Textures/Tiles/asteroid_tile.png