aboutsummaryrefslogtreecommitdiff
path: root/server/data/src/registry.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-16 01:07:41 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-16 01:07:41 +0100
commite2efb15aa58477d898f92c8959242c0da3ce62bc (patch)
treedbea74993c73c2f3f43fcf771c01dbd8d2607c5d /server/data/src/registry.rs
parent48d7482ded28ce9d3d4ff52517b48665ff1b8ebd (diff)
downloadhurrycurry-e2efb15aa58477d898f92c8959242c0da3ce62bc.tar
hurrycurry-e2efb15aa58477d898f92c8959242c0da3ce62bc.tar.bz2
hurrycurry-e2efb15aa58477d898f92c8959242c0da3ce62bc.tar.zst
Add player portal pair entity; fix tile/item remapping
Diffstat (limited to 'server/data/src/registry.rs')
-rw-r--r--server/data/src/registry.rs31
1 files changed, 27 insertions, 4 deletions
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()