BEEmod / BEE2-items

Standard Items for the BEE2.4
132 stars 46 forks source link

Improve Scaffold Wall Emitter positioning #4106

Open vrad-exe opened 2 years ago

vrad-exe commented 2 years ago

Unstationary scaffold wall emitter placement currently works in such a way that it's impossible to have them at the same height as piston emitters or slots; they're always either too high or too low. image This also means it's impossible for a platform at a wall emitter to sit flush with the top of the block, as they can when at a piston emitter or slot: image

I'd suggest changing these to use "pseudo 5-positioning", where the item is set to an 8-position handle but offset 16 units towards +x, so it effectively behaves like a 5-position handle just with the added ability to rotate around the center position. This would allow wall emitters placed in the topmost position to be at the same height as the other items.

This would slightly change the placement of wall emitters in existing maps, but shouldn't be significant enough to break any puzzles.

TeamSpen210 commented 2 years ago

We can detect which offset the item uses, so it's possible we could specify different offsets for the different positions (4 verticals, offset sideways, attached to the floor) to give better positions.

vrad-exe commented 2 years ago

Yeah, for the vertical positions it could determine the position of the platform, so topmost would align the platform with the top of the block, and the three below that would place it 1/4, 2/4, and 3/4 of the way down respectively. Not sure about the side ones though, or any of the non-centered positions on floors.

vrad-exe commented 2 years ago

Alright, here's the layout I came up with: image The item would be switched to a normal 8-way handle. The vertical positions are shifted 16 units down (so the platform lines up with the edge of the 32x tiles), the horizontal positions are shifted 32 units up (so the platform lines up with the top of the block) and 16 units towards the outside of the voxel. Note that the bottom- and side-most positions extend the emitter outside of the voxel, so we'd need to add a small protrusion to support it if there's no surface there already.

The only problem I see with this setup is it does result in some of the in-game positions being noticeably different from how they appear in the editor (especially the side ones). Collisions aren't an issue since the current collision is already light strip sized, but it could still be kind of confusing.

I also still haven't decided what to do for the floor ones, those should probably still just use pseudo-5-positioning as I originally suggested.