aboutsummaryrefslogtreecommitdiff
path: root/server/data
diff options
context:
space:
mode:
Diffstat (limited to 'server/data')
-rw-r--r--server/data/src/entities.rs8
-rw-r--r--server/data/src/lib.rs7
-rw-r--r--server/data/src/registry.rs31
3 files changed, 42 insertions, 4 deletions
diff --git a/server/data/src/entities.rs b/server/data/src/entities.rs
index 1b0d4548..62947b05 100644
--- a/server/data/src/entities.rs
+++ b/server/data/src/entities.rs
@@ -38,6 +38,14 @@ pub enum EntityDecl {
from: Vec2,
to: Vec2,
},
+ PlayerPortalPair {
+ a: IVec2,
+ b: IVec2,
+ #[serde(default = "default_tile")]
+ in_tile: TileIndex,
+ #[serde(default = "default_tile")]
+ out_tile: TileIndex,
+ },
Customers {
scaling_factor: Option<f32>,
spawn_cooldown: Option<f32>,
diff --git a/server/data/src/lib.rs b/server/data/src/lib.rs
index a677bffd..d06aadd1 100644
--- a/server/data/src/lib.rs
+++ b/server/data/src/lib.rs
@@ -224,6 +224,13 @@ fn build_data(
*blocker_tile = reg.register_tile("conveyor".to_owned());
exclusive_tiles.entry(*blocker_tile).or_default();
}
+ EntityDecl::PlayerPortalPair {
+ in_tile, out_tile, ..
+ } => {
+ *in_tile = reg.register_tile("black-hole".to_owned());
+ *out_tile = reg.register_tile("white-hole".to_owned());
+ tile_walkable.extend([*in_tile, *out_tile]);
+ }
_ => (),
}
entities.push(e);
diff --git a/server/data/src/registry.rs b/server/data/src/registry.rs
index 6c92ecb5..372df653 100644
--- a/server/data/src/registry.rs
+++ b/server/data/src/registry.rs
@@ -83,16 +83,19 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu
EntityDecl::Gate {
blocker_tile: blocker,
..
- } => used_tiles.insert(*blocker),
- EntityDecl::Customers { unknown_order, .. } => used_items.insert(*unknown_order),
+ } => used_tiles.extend([*blocker]),
+ EntityDecl::Customers { unknown_order, .. } => used_items.extend([*unknown_order]),
EntityDecl::TagMinigame {
tag_item,
blocker_tile,
} => {
used_items.insert(*tag_item);
- used_tiles.insert(*blocker_tile)
+ used_tiles.insert(*blocker_tile);
}
- _ => false,
+ EntityDecl::PlayerPortalPair {
+ in_tile, out_tile, ..
+ } => used_tiles.extend([*in_tile, *out_tile]),
+ _ => (),
};
}
@@ -182,6 +185,26 @@ pub(crate) fn filter_unused_tiles_and_items(data: &mut Gamedata, serverdata: &mu
*item = item_map[item]
}
}
+ for e in &mut serverdata.entity_decls {
+ match e {
+ EntityDecl::Gate { blocker_tile, .. } => *blocker_tile = tile_map[blocker_tile],
+ EntityDecl::Customers { unknown_order, .. } => *unknown_order = item_map[unknown_order],
+ EntityDecl::TagMinigame {
+ tag_item,
+ blocker_tile,
+ } => {
+ *tag_item = item_map[tag_item];
+ *blocker_tile = tile_map[blocker_tile];
+ }
+ EntityDecl::PlayerPortalPair {
+ in_tile, out_tile, ..
+ } => {
+ *in_tile = tile_map[in_tile];
+ *out_tile = tile_map[out_tile];
+ }
+ _ => (),
+ };
+ }
data.tile_walkable = data
.tile_walkable
.clone()