mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
structure work
This commit is contained in:
@ -6,7 +6,7 @@
|
|||||||
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
||||||
inventory: (
|
inventory: (
|
||||||
loadout: Inline((
|
loadout: Inline((
|
||||||
inherit: Asset("common.loadout.dungeon.tier-1.hunter"),
|
inherit: Asset("common.loadout.dungeon.adlet.hunter"),
|
||||||
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.hunter"), None)),
|
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.hunter"), None)),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
@ -6,7 +6,7 @@
|
|||||||
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
||||||
inventory: (
|
inventory: (
|
||||||
loadout: Inline((
|
loadout: Inline((
|
||||||
inherit: Asset("common.loadout.dungeon.tier-1.icepicker"),
|
inherit: Asset("common.loadout.dungeon.adlet.icepicker"),
|
||||||
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.icepicker"), None)),
|
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.icepicker"), None)),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
@ -6,7 +6,7 @@
|
|||||||
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
loot: LootTable("common.loot_tables.dungeon.tier-1.enemy"),
|
||||||
inventory: (
|
inventory: (
|
||||||
loadout: Inline((
|
loadout: Inline((
|
||||||
inherit: Asset("common.loadout.dungeon.tier-1.tracker"),
|
inherit: Asset("common.loadout.dungeon.adlet.tracker"),
|
||||||
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.tracker"), None)),
|
active_hands: InHands((Item("common.items.npc_weapons.biped_small.adlet.tracker"), None)),
|
||||||
)),
|
)),
|
||||||
),
|
),
|
@ -1,11 +0,0 @@
|
|||||||
#![enable(implicit_some)]
|
|
||||||
(
|
|
||||||
name: Name("Rat"),
|
|
||||||
body: RandomWith("rat"),
|
|
||||||
alignment: Alignment(Enemy),
|
|
||||||
loot: LootTable("common.loot_tables.creature.quad_small.generic"),
|
|
||||||
inventory: (
|
|
||||||
loadout: FromBody,
|
|
||||||
),
|
|
||||||
meta: [],
|
|
||||||
)
|
|
11
assets/common/items/keys/bone_key.ron
Normal file
11
assets/common/items/keys/bone_key.ron
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
ItemDef(
|
||||||
|
name: "Bone Key",
|
||||||
|
description: "Used to open bone locks. Will break after use.",
|
||||||
|
kind: Utility(
|
||||||
|
kind: Key,
|
||||||
|
),
|
||||||
|
amount: 1,
|
||||||
|
quality: Common,
|
||||||
|
tags: [Utility],
|
||||||
|
)
|
||||||
|
|
@ -4833,6 +4833,10 @@
|
|||||||
"voxel.object.key_rusty-0",
|
"voxel.object.key_rusty-0",
|
||||||
(0.0, 0.0, 0.0), (-100.0, 250.0, 15.0), 1.0,
|
(0.0, 0.0, 0.0), (-100.0, 250.0, 15.0), 1.0,
|
||||||
),
|
),
|
||||||
|
Simple("common.items.keys.bone_key"): VoxTrans(
|
||||||
|
"voxel.object.key_bone",
|
||||||
|
(0.0, 0.0, 0.0), (-100.0, 250.0, 15.0), 1.0,
|
||||||
|
),
|
||||||
// Lockpicks
|
// Lockpicks
|
||||||
Simple("common.items.utility.lockpick_0"): VoxTrans(
|
Simple("common.items.utility.lockpick_0"): VoxTrans(
|
||||||
"voxel.object.lockpick",
|
"voxel.object.lockpick",
|
||||||
|
BIN
assets/voxygen/voxel/object/key_bone.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/object/key_bone.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/furniture/bone_door_block.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/furniture/bone_door_block.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/furniture/bone_keyhole_block.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/furniture/bone_keyhole_block.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/misc/fireblock.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/misc/fireblock.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1455,6 +1455,17 @@ Ember: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.0,
|
wind_sway: 0.0,
|
||||||
)),
|
)),
|
||||||
|
// FireBlock
|
||||||
|
FireBlock: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.misc.fireblock",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.0,
|
||||||
|
)),
|
||||||
// Smoke dummy
|
// Smoke dummy
|
||||||
SmokeDummy: Some((
|
SmokeDummy: Some((
|
||||||
variations: [
|
variations: [
|
||||||
@ -3828,6 +3839,26 @@ KeyDoor: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.0,
|
wind_sway: 0.0,
|
||||||
)),
|
)),
|
||||||
|
BoneKeyhole: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.furniture.bone_keyhole_block",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (0.5, 0.5, 0.5),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.0,
|
||||||
|
)),
|
||||||
|
BoneKeyDoor: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.furniture.bone_door_block",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (0.5, 0.5, 0.5),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.0,
|
||||||
|
)),
|
||||||
// Bones
|
// Bones
|
||||||
Bones: Some((
|
Bones: Some((
|
||||||
variations: [
|
variations: [
|
||||||
|
8
assets/world/manifests/site_structures/adlet/bonfire.ron
Normal file
8
assets/world/manifests/site_structures/adlet/bonfire.ron
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#![enable(unwrap_newtypes)]
|
||||||
|
|
||||||
|
[
|
||||||
|
(
|
||||||
|
specifier: "world.structure.natural.bonfire",
|
||||||
|
center: (10, 10, 2)
|
||||||
|
),
|
||||||
|
]
|
BIN
assets/world/structure/natural/bonfire.vox
(Stored with Git LFS)
Normal file
BIN
assets/world/structure/natural/bonfire.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -188,7 +188,7 @@ impl From<SpriteKind> for Option<SpriteInteractKind> {
|
|||||||
| SpriteKind::PotionMinor
|
| SpriteKind::PotionMinor
|
||||||
| SpriteKind::Seashells
|
| SpriteKind::Seashells
|
||||||
| SpriteKind::Bomb => Some(SpriteInteractKind::Collectible),
|
| SpriteKind::Bomb => Some(SpriteInteractKind::Collectible),
|
||||||
SpriteKind::Keyhole => Some(SpriteInteractKind::Unlock),
|
SpriteKind::Keyhole | SpriteKind::BoneKeyhole => Some(SpriteInteractKind::Unlock),
|
||||||
// Collectible checked in addition to container for case that sprite requires a tool to
|
// Collectible checked in addition to container for case that sprite requires a tool to
|
||||||
// collect and cannot be collected by hand, yet still meets the container check
|
// collect and cannot be collected by hand, yet still meets the container check
|
||||||
_ if sprite_kind.is_container() && sprite_kind.is_collectible() => {
|
_ if sprite_kind.is_container() && sprite_kind.is_collectible() => {
|
||||||
|
@ -302,7 +302,7 @@ impl Block {
|
|||||||
BlockKind::GlowingMushroom => Some(20),
|
BlockKind::GlowingMushroom => Some(20),
|
||||||
_ => match self.get_sprite()? {
|
_ => match self.get_sprite()? {
|
||||||
SpriteKind::StreetLamp | SpriteKind::StreetLampTall => Some(24),
|
SpriteKind::StreetLamp | SpriteKind::StreetLampTall => Some(24),
|
||||||
SpriteKind::Ember => Some(20),
|
SpriteKind::Ember | SpriteKind::FireBlock => Some(20),
|
||||||
SpriteKind::WallLamp
|
SpriteKind::WallLamp
|
||||||
| SpriteKind::WallLampSmall
|
| SpriteKind::WallLampSmall
|
||||||
| SpriteKind::WallSconce
|
| SpriteKind::WallSconce
|
||||||
@ -381,7 +381,10 @@ impl Block {
|
|||||||
BlockKind::Lava => None,
|
BlockKind::Lava => None,
|
||||||
_ => self.get_sprite().and_then(|sprite| match sprite {
|
_ => self.get_sprite().and_then(|sprite| match sprite {
|
||||||
sprite if sprite.is_container() => None,
|
sprite if sprite.is_container() => None,
|
||||||
SpriteKind::Keyhole | SpriteKind::KeyDoor => None,
|
SpriteKind::Keyhole
|
||||||
|
| SpriteKind::KeyDoor
|
||||||
|
| SpriteKind::BoneKeyhole
|
||||||
|
| SpriteKind::BoneKeyDoor => None,
|
||||||
SpriteKind::Anvil
|
SpriteKind::Anvil
|
||||||
| SpriteKind::Cauldron
|
| SpriteKind::Cauldron
|
||||||
| SpriteKind::CookingPot
|
| SpriteKind::CookingPot
|
||||||
@ -405,7 +408,8 @@ impl Block {
|
|||||||
| SpriteKind::SeaDecorWindowHor
|
| SpriteKind::SeaDecorWindowHor
|
||||||
| SpriteKind::SeaDecorWindowVer
|
| SpriteKind::SeaDecorWindowVer
|
||||||
| SpriteKind::Rope
|
| SpriteKind::Rope
|
||||||
| SpriteKind::GlassBarrier => None,
|
| SpriteKind::GlassBarrier
|
||||||
|
| SpriteKind::FireBlock => None,
|
||||||
SpriteKind::EnsnaringVines
|
SpriteKind::EnsnaringVines
|
||||||
| SpriteKind::EnsnaringWeb
|
| SpriteKind::EnsnaringWeb
|
||||||
| SpriteKind::SeaUrchin
|
| SpriteKind::SeaUrchin
|
||||||
|
@ -244,6 +244,10 @@ make_case_elim!(
|
|||||||
RepairBench = 0xDA,
|
RepairBench = 0xDA,
|
||||||
Helm = 0xDB,
|
Helm = 0xDB,
|
||||||
DoorWide = 0xDC,
|
DoorWide = 0xDC,
|
||||||
|
BoneKeyhole = 0xDD,
|
||||||
|
BoneKeyDoor = 0xDE,
|
||||||
|
// FireBlock for Burning Buff
|
||||||
|
FireBlock = 0xDF,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -335,6 +339,8 @@ impl SpriteKind {
|
|||||||
| SpriteKind::GlassBarrier
|
| SpriteKind::GlassBarrier
|
||||||
| SpriteKind::Keyhole
|
| SpriteKind::Keyhole
|
||||||
| SpriteKind::KeyDoor
|
| SpriteKind::KeyDoor
|
||||||
|
| SpriteKind::BoneKeyhole
|
||||||
|
| SpriteKind::BoneKeyDoor
|
||||||
| SpriteKind::Bomb => 1.0,
|
| SpriteKind::Bomb => 1.0,
|
||||||
// TODO: Figure out if this should be solid or not.
|
// TODO: Figure out if this should be solid or not.
|
||||||
SpriteKind::Shelf => 1.0,
|
SpriteKind::Shelf => 1.0,
|
||||||
@ -368,7 +374,7 @@ impl SpriteKind {
|
|||||||
SpriteKind::FountainArabic => 2.4,
|
SpriteKind::FountainArabic => 2.4,
|
||||||
SpriteKind::Hearth => 2.3,
|
SpriteKind::Hearth => 2.3,
|
||||||
SpriteKind::ForgeTools => 2.8,
|
SpriteKind::ForgeTools => 2.8,
|
||||||
SpriteKind::CliffDecorBlock => 1.0,
|
SpriteKind::CliffDecorBlock | SpriteKind::FireBlock => 1.0,
|
||||||
SpriteKind::Wood
|
SpriteKind::Wood
|
||||||
| SpriteKind::Hardwood
|
| SpriteKind::Hardwood
|
||||||
| SpriteKind::Ironwood
|
| SpriteKind::Ironwood
|
||||||
@ -461,7 +467,7 @@ impl SpriteKind {
|
|||||||
SpriteKind::Frostwood => item("common.items.log.frostwood"),
|
SpriteKind::Frostwood => item("common.items.log.frostwood"),
|
||||||
SpriteKind::Eldwood => item("common.items.log.eldwood"),
|
SpriteKind::Eldwood => item("common.items.log.eldwood"),
|
||||||
SpriteKind::MagicalBarrier => table("common.loot_tables.sprite.chest"),
|
SpriteKind::MagicalBarrier => table("common.loot_tables.sprite.chest"),
|
||||||
SpriteKind::Keyhole => return Some(None),
|
SpriteKind::Keyhole | SpriteKind::BoneKeyhole => return Some(None),
|
||||||
_ => return None,
|
_ => return None,
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@ -560,6 +566,9 @@ impl SpriteKind {
|
|||||||
SpriteKind::CommonLockedChest => UnlockKind::Consumes(
|
SpriteKind::CommonLockedChest => UnlockKind::Consumes(
|
||||||
ItemDefinitionId::Simple("common.items.utility.lockpick_0").to_owned(),
|
ItemDefinitionId::Simple("common.items.utility.lockpick_0").to_owned(),
|
||||||
),
|
),
|
||||||
|
SpriteKind::BoneKeyhole => UnlockKind::Consumes(
|
||||||
|
ItemDefinitionId::Simple("common.items.keys.bone_key").to_owned(),
|
||||||
|
),
|
||||||
_ => UnlockKind::Free,
|
_ => UnlockKind::Free,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ make_case_elim!(
|
|||||||
RotatedSprite(kind: SpriteKind, ori: u8) = 23,
|
RotatedSprite(kind: SpriteKind, ori: u8) = 23,
|
||||||
EntitySpawner(entitykind: String, spawn_chance: f32) = 24,
|
EntitySpawner(entitykind: String, spawn_chance: f32) = 24,
|
||||||
Keyhole(consumes: String) = 25,
|
Keyhole(consumes: String) = 25,
|
||||||
|
BoneKeyhole(consumes: String) = 26,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -200,6 +200,21 @@ impl<'a> System<'a> for Sys {
|
|||||||
)),
|
)),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if matches!(
|
||||||
|
physics_state.on_ground.and_then(|b| b.get_sprite()),
|
||||||
|
Some(SpriteKind::FireBlock)
|
||||||
|
) {
|
||||||
|
// If on FireBlock vines, apply burning buff
|
||||||
|
server_emitter.emit(ServerEvent::Buff {
|
||||||
|
entity,
|
||||||
|
buff_change: BuffChange::Add(Buff::new(
|
||||||
|
BuffKind::Burning,
|
||||||
|
BuffData::new(20.0, None, None),
|
||||||
|
Vec::new(),
|
||||||
|
BuffSource::World,
|
||||||
|
)),
|
||||||
|
});
|
||||||
|
}
|
||||||
if matches!(
|
if matches!(
|
||||||
physics_state.in_fluid,
|
physics_state.in_fluid,
|
||||||
Some(Fluid::Liquid {
|
Some(Fluid::Liquid {
|
||||||
|
@ -320,7 +320,10 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv
|
|||||||
|
|
||||||
// If the block was a keyhole, remove nearby door blocks
|
// If the block was a keyhole, remove nearby door blocks
|
||||||
// TODO: Abstract this code into a generalised way to do block updates?
|
// TODO: Abstract this code into a generalised way to do block updates?
|
||||||
if matches!(block.get_sprite(), Some(SpriteKind::Keyhole)) {
|
if matches!(
|
||||||
|
block.get_sprite(),
|
||||||
|
Some(SpriteKind::Keyhole) | Some(SpriteKind::BoneKeyhole)
|
||||||
|
) {
|
||||||
let dirs = [
|
let dirs = [
|
||||||
Vec3::unit_x(),
|
Vec3::unit_x(),
|
||||||
-Vec3::unit_x(),
|
-Vec3::unit_x(),
|
||||||
@ -342,17 +345,35 @@ pub fn handle_inventory(server: &mut Server, entity: EcsEntity, manip: comp::Inv
|
|||||||
let next_pending = pending.iter().next().copied();
|
let next_pending = pending.iter().next().copied();
|
||||||
if let Some(pos) = next_pending {
|
if let Some(pos) = next_pending {
|
||||||
pending.remove(&pos);
|
pending.remove(&pos);
|
||||||
if !destroyed.contains(&pos)
|
match block.get_sprite() {
|
||||||
&& matches!(
|
Some(SpriteKind::Keyhole) => {
|
||||||
terrain.get(pos).ok().and_then(|b| b.get_sprite()),
|
if !destroyed.contains(&pos)
|
||||||
Some(SpriteKind::KeyDoor)
|
&& matches!(
|
||||||
)
|
terrain.get(pos).ok().and_then(|b| b.get_sprite()),
|
||||||
{
|
Some(SpriteKind::KeyDoor)
|
||||||
block_change.try_set(pos, Block::empty());
|
)
|
||||||
destroyed.insert(pos);
|
{
|
||||||
|
block_change.try_set(pos, Block::empty());
|
||||||
|
destroyed.insert(pos);
|
||||||
|
|
||||||
pending.extend(dirs.into_iter().map(|dir| pos + dir));
|
pending.extend(dirs.into_iter().map(|dir| pos + dir));
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
Some(SpriteKind::BoneKeyhole) => {
|
||||||
|
if !destroyed.contains(&pos)
|
||||||
|
&& matches!(
|
||||||
|
terrain.get(pos).ok().and_then(|b| b.get_sprite()),
|
||||||
|
Some(SpriteKind::BoneKeyDoor)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
block_change.try_set(pos, Block::empty());
|
||||||
|
destroyed.insert(pos);
|
||||||
|
|
||||||
|
pending.extend(dirs.into_iter().map(|dir| pos + dir));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -348,6 +348,16 @@ pub fn block_from_structure(
|
|||||||
}),
|
}),
|
||||||
));
|
));
|
||||||
},
|
},
|
||||||
|
StructureBlock::BoneKeyhole(consumes) => {
|
||||||
|
return Some((
|
||||||
|
Block::air(SpriteKind::BoneKeyhole),
|
||||||
|
Some(SpriteCfg {
|
||||||
|
unlock: Some(UnlockKind::Consumes(ItemDefinitionIdOwned::Simple(
|
||||||
|
consumes.clone(),
|
||||||
|
))),
|
||||||
|
}),
|
||||||
|
));
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
Some((block?, None))
|
Some((block?, None))
|
||||||
|
@ -132,7 +132,6 @@ impl Environment {
|
|||||||
SiteKind::Adlet(_) => {},
|
SiteKind::Adlet(_) => {},
|
||||||
SiteKind::ChapelSite(_) => {},
|
SiteKind::ChapelSite(_) => {},
|
||||||
SiteKind::Bridge(_) => {},
|
SiteKind::Bridge(_) => {},
|
||||||
SiteKind::Adlet(_) => {},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if towns.valid() {
|
if towns.valid() {
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user