fishfolk / jumpy

Tactical 2D shooter in fishy pixels style. Made with Rust-lang 🦀 and Bevy 🪶
https://fishfolk.org/games/jumpy/
Other
1.67k stars 123 forks source link

[Suggestion] A playable main menu/lobby #473

Open SirGiraffey opened 2 years ago

SirGiraffey commented 2 years ago

A concept for how the menu could look and function. Playable Menu Concept

The idea is that fun and interaction with other players begin as soon as you open the game, not just until you get through the menus, which I think is a big plus for a party game. Also it serves as a central hub for the players between games and lets them relax in a fun, small level. And the possibility of using items lets players test them out and experiment without starting the game and hoping to run into them in a level.

zicklag commented 2 years ago

Great idea!

As far as lethal items, maybe there would be like a big flip switch somewhere that turns lobby invincibility on and off.

In the old Lego Star Wars lobbies it was always fun to get into fights in the lobby, so it seems like it'd be good to allow it, but maybe give an easy way to toggle it, just in case it got annoying, so you could test weapons without killing each-other.

erlend-sh commented 7 months ago

Forgot we had existing design work on this so I accidentally thought of a duplicate design. I like the original proposal by @SirGiraffey more, but what I came up with might be an easier MVP to start with:

Basic playable character select

We've got a fair amount of unused vertical space in the character-select screen. How about when your character has been selected, your character will descend down unto a platform underneath, where you can run around and play with weapons we randomly spawn down there.

All fish will be in no-damage mode however. That's something we can play around with a bit more later, like upon hit we shift them into a ghostly ethereal form for a few seconds before respawn, stuff like that.

Screenshot 2024-03-28 at 18 41 01

Alternatives & Prior Art

https://duckgame.fandom.com/wiki/The_Lobby image

zicklag commented 7 months ago

Thoughts on technical details for this.

Right now we do this annoying thing to render the players inside of egui. We have egui setup only to render on top of the game, and that makes sense. That means, though, that it's not possible to render the game on top of the UI, like we do with the players.

To do it, we take all the player meta and we use it to create egui images that we manually animate like they do in the game, except inside of egui's UI space. It's essentially completely re-creating the atlas rendering, hat attachment, etc. which is not cool.

The "right" way to do it, which is not yet supported in bones, would be to allow you to specify a custom texture target for cameras, in bones. This would play extremely nicely, if we did it right, with bones multi-world setup.

That would allow us to create a bones world for each player in the player selection screen. Each world would have it's own camera rendering to it's own texture, the size of the player selection box.

This allows us to use all of the game physics, etc. that we want to enable in the character selection box.

To render it in egui, we simply paint the texture that the camera is rendering to the box, and we don't have to duplicate any game logic.


Other than multi-world, this is something that is mostly implemented in Bevy already. Multi-world might make things trickier to get the rendering right, but we otherwise just have to look into it and implement the camera render targets in Bones.