Amethyst User Story Collection

(Fletcher) #1

As part of building a proper, user-facing roadmap, I would like to collect user stories. If you have one, please post it as a response to this thread. Here are the rules:

Rules

  1. Use the As a < user type >, I want < feature/goal > so that < reason >. For example: As a game developer, I want foliage so that I can have nice looking grass in my game.
  2. Do not include technical implementation details.
  3. Do not debate or respond to posted user stories. The only thing that anyone should post in this thread is a user story. Any post that isn’t a user story will be deleted.
  4. Do not worry about duplication.
  5. Do not include priority or dependencies.
  6. Do not worry about the difficulty or complexity of a story.
  7. You can submit as many as you like.
  8. Submission of a User Story does not guarantee inclusion in the roadmap.

Yes, these are fairly strict; that is because it is quite a bit of effort to collect and manage these, so this needs to be a high signal, low noise thread.

User Types

While you are free to put any user type you want there, some common ones are:

  1. Game Developer. This is someone who is using Amethyst to make a game.
  2. Engine Developer. This is someone who is working on Amethyst itself.
  3. Player. This is someone who plays a game made using Amethyst.

Time Frame

This thread will remain open indefinitely.

Next Steps

As I collect these, I may contact you directly to ask questions or clarify something.

That’s it! Feel free to ping me on Discord or message me here with questions or comments.

1 Like
(Fletcher) pinned #2
(Joël Lupien) #3

Game Developer = gd
Engine Developer = ed

  • As a ed, I want to easily define the order of execution for Systems.
  • As a ed, I want to easily define the dependencies a System has on other Systems.
  • As a gd, I want to easily define systems of the dispatcher and their dependencies using a graph so that I can visually see the execution ordering.
  • As a gd I want to integrate glTF model/scenes with minimal effort so that I can render them.
  • As a gd I want to integrate glTF model/scenes with minimal effort so that I can attach colliders to them and automatically optimize the collision shape.
  • As a gd I want to generate prefab files using a command-line and/or visual editor so that I don’t have to manually write it.
  • As a gd I want to nest prefabs so that I can define complex scenes.
  • As a ed I want to nest prefabs to create complex and reusable elements.
  • As a gd I want to minimize the amount of boilerplate I need to write to load configuration files (input, render, custom) so that prototyping is faster.
  • As a Player, I want to be able to run multiple instances of amethyst games at once.
  • As a gd/ed, I want to be able to run multiple instances of the amethyst editor at once.
  • As a gd, I want to easily create multiplayer games.
  • As a gd, I want to easily use lag-compensating utilities for realtime multiplayer games.
  • As a gd/ed, I want to have a terminal-based debugging solutions so that I can visualize the existing entities and enter commands to create new ones.
  • As a gd, I want to minimize the number of import statements I need to write so that I can prototype faster.
  • As a gd, I want to use a particle system so that my game looks beautiful.
  • As a gd, I want to easily create and update a dynamically sized list of layouted ui elements from a list.
  • As a gd, I want to easily map ui controls to arbitrary user resources so that binding data is easier when creating user settings menus, for example.
  • As a ed, I want to use derive-new, derive_builder and getset as much as possible so that maintenance and boilerplate can be reduced.
  • As a gd, I want to disable amethyst features to reduce compilation times.
  • As a gd, I want first class support for HTTP/GET and HTTP/POST queries and future handling so that I can create network-aware games with minimal effort.
  • As a player, I want engine-level support for asset modding so that the assets can easily be replaced by others by dropping them in an adjacent folder.
  • As a gd, I want first class support for physics.
  • As a gd, I want access to predefined and composable player controllers, for example flying cameras and first person movement, so that I can quickly prototype games.
  • As a gd, I want to define physical areas where entities entering, staying inside of, or leaving the zone will create events.
  • As a gd, I want to easily rotate 2d entities.
  • As a gd, I want to define colliders that emit events when starting, continuing or stopping to look at them using a camera.
  • As a gd, I want to receive input events in my State::handle_event method so that I don’t need to fetch the event channel and keep a ReaderId.
  • As a gd/ed, I want to create multiple windows, and receive events from each one knowing from which it came.
  • As a gd, I want to read and modify meshes at runtime.
  • As a gd, I want to easily save and load arbitrary parts of the game state, including resources and entities.
  • As a gd, I want to easily create sample sets (audio) and play random sounds in them, while applying effects like pitch and speed changes.
  • As a gd, I want an easy way to display errors to the user when they happen, either through ui interfaces or by console messages.
  • As a gd, I want the asset system to automatically ignore unused assets when exporting when I specify that I’m not using dynamic asset loading.
  • As a gd, I want access to integration crates providing support for steam api, discord rpc and more.
  • As a gd, I want first-class VR support.
  • As a gd, I want to be able to create ui themes.
  • As a gd, I want to easily use locales with the rest of the engine features.
  • As a gd, I want to be able to reload prefabs at runtime (delete and recreate entities) at runtime when the file changes.
  • As a gd, I want to be able to reload resources created from configuration files at runtime when the file changes.
  • As a gd, I want to easily draw basic 2d and 3d shapes.
  • As a ed/gd/player, I want to be able to generate videos using amethyst’s renderer instead of using an external recording device, so that I can share bugs or gameplay.
  • As a gd, I want the glTF importer and Pbm pass to support transparency.
  • As a gd, I want the Pbm pass to have working lighting.
  • As a gd, I want to support https://github.com/jojolepro/game_features by creating code, submitting suggestions and donating to the patreon link, so that gd can have access to pre-made reusable features.

:slight_smile:

6 Likes
(Fletcher) #4

As a game dev, I want to be able to make sky boxes, so I can have…skies…

1 Like
(Karll) #5

Dev

  • As a game developer
    • I want a variety of easy-to-import assets to easily prototype a 2D or 3D.
    • I want to instance in-editor and visualize my systems in a node editor.
    • I want to group entities in the editor’s viewport and create prefabs.
    • I want to nest prefabs.
    • I want to write new systems with almost no boilerplate code.
    • I want to easily visualize in the editor details about the systems being used, such as which entities they are processing, performance details.
    • I want to easily activate and deactivate system in-game and in-editor.
  • As a gameplay programmer
    • I want to procedurally create new meshes
    • I want to procedurally create new textures
    • I want to procedurally create new animations
    • I want to sample existing animation and procedurally edit it.
    • I want to animate rigs and shader uniforms in code or with animation data.
    • I want to sample existing rig animation and edit it in code.
  • As a graphics programmer
    • I want to visually create my own graphics pipeline or customize common existing ones.
    • I want to code my own graphics pipeline or customize common existing ones.
  • As an engine developer
    • I would like clear error messages with suggestions.
    • I would like documentation about the engine’s organization and architecture.
    • I would like documentation that accepts fuzzy search queries.
    • I would like documentation that is easy to find traits, macros and how to use them.
    • I would like documentation that contains several usage examples.

Artist

  • As a 3D/2D artist
    • I want my assets to update in-game/in-editor instantly after saving them in my tool of choice.
    • I want to pre-process sprite sheets to have it abstracted to me.
    • I want to pre-process textures to swizzle channels and compress them…
    • I want to pre-process hierarchical animations to loop, remove or add root, and to apply common geometric operations.
  • As an environment artist
    • I want to create huge seamless levels, so that players don’t have to face loading screens.
    • I want to create huge terrains with foliage and decals, so that.
    • I want to put thousands of decals in a single scene.
  • As a technical artist
    • I want to create and edit shader code, and have it reload without restarting the game.
    • I want to create and edit shaders using shader graphs in a visual node workflow.
    • I want to be able to easily reuse common shader code or shade graphs.

I kind of forgot the “so that” part. :sweat_smile:
If I find the time I will edit this later.

5 Likes
(Khionu Sybiern) #6

As a contributor, I would like to have the Scripting RFC given a final review, so it can be accepted and merged, and work can begin on it.

As a developer for consoles, I would like to be able to use Amethyst for all modern platforms, including but not limited to Nintendo Switch, XBox One (is XBox 360 still developed for?), and Playstation 4.

As a developer, I would like the engine to have documentation that will aid in avoiding pitfalls common to Rust, the engine’s paradigms and patterns, as well as game development in general.

3 Likes
(Fletcher) #7

All stories up through here captured. Thanks everyone, and keep them coming.

1 Like
#8

As a game developer

  • I want to integrate 3rd party libraries easily, by having them a configuration that can be changed with the amethyst editor or text editor, so it will be easy to use them.
  • I want to have a tool to fetch 3rd party libraries, so they get installed and initialized easily (i.e. amethyst install fly_camera), just for easy of use and convenience, also the UX will be better.
  • I want to enable/disable systems at will, because I don’t want the systems of my game to be running in the menu, don’t know the impact of idle systems but in mobile each optimization is welcome.
  • I want to have a folder structure that amethyst team feels that is a good practice, so will be easier to jump from project to project, because each developer has their own confortable structure and a common structure will enhance the collaboration.
  • I want to write less boilerplate for systems and components, speed of development.
  • I want to have a live UI preview, quickly see the changes in the UI
  • I want to have UI theme support (css like), to reuse the UI in different projects or tweak for differents platforms.
  • I want to have autogenerate assets mod, so I can use a constant in rust instead of a string, to be able to detect an compile time if something is missing or wrong (i.e. R class from android)
  • I want to have (almost same as above) to have access to UI element ID from a constant instead of a string or enum generated by the developer, strings are evil.
  • I want to have a easy way to save the current state of the game, for convenience when saving the game.
  • I want to have an easy way to record gameplay so I can provide gameplay replay or just for development convenience when analyzing how the players play the game.
  • I want to have mods support out fo the box, so I can make my game can support mods without much hassle.
  • I want to have a strong typed scripting and popular language supported by the amethyst team, like Typescript, so I can prototype quickly.
1 Like
(Lokathor) #9
  • As a <game developer> I want <clear documentation, in the tutorials, about the control flow that the Amethyst framework uses, showing what happens between game.run() being called in main and any of my other non-Amethyst code getting called back (on_foo State hooks, ECS systems, etc). Including diagrams with arrows and all that jazz> so that <I can understand what I’m signing up for when trying to use Amethyst, because right now it’s kinda vague>.
#10

As a game developer, I want to compile to WebAssembly so judges can try my games more easily in game programming competitions.

2 Likes
(Fletcher) #11

All user stories captured up through here. Thanks!

(Timon) #12

Networking

  • As a game developer, I don’t want to flood the network when it is in bad qualities.

  • As a game developer, I want to control how many packets are sent when the internet is bad and good.

  • As a game developer, I want to be able to receive notifications when a game starts and ends

  • As a game developer, I want to be able to delete a game and associated data

  • As a game developer, I want to be able to see the state of all my current game instances

  • As a game developer, I want to be able to stop a game.

  • As a game developer, I want to be able to broadcast data.

  • As a game developer, I want to be to unicast data.

  • As a game developer, I want to be able to store all game state in a database

  • As a game developer, I want integer data.

  • As a game developer, I want to be able to encrypt my traffic.

  • As a game developer, I want to be able to see statistics, metrics of clients.

  • As a game developer, I want to be able to see the status/metrics of a server

  • As a game developer, I want to be able to have real-time statistics

  • As a player, I want my client to not have to wait for server confirmation

  • As a game developer, I want to control the connections coming in.

  • As a game developer, I want only authorized people to be able to join a specific server.

  • As a game developer, I want to be able to deploy a headless server

  • As a game developer, I want to be able to deal with people behind nat.

  • As a game developer, I want to be able to use relay servers if nat is not working.

  • As a game developer, I want to be able to prevent DDOS attacks.

  • As a game developer, I want to be able to prevent replay attacks.

  • As a game developer, I want Entities to sync automatically across the network

  • As a game developer, I want to be able to only sync properties of an entity over the network.

  • As a game developer, I want to be able to create matches.

(Kel) #13
  • As a game developer, I want to develop MUDs that can communicate over common TCP-based protocols
1 Like
(Kel) #14
  • As a game developer, I want a log viewing medium where items may be grouped together (such as in repeated calls) so that I may trace information per frame and still be able to find other information quickly in my logs.
(Timon) #15
  • As a gamedeveloper I want clientside prediction.
  • As a gamedeveloper I want the server to be authoritative with server reconciliation.
  • As a gamedeveloper I want to be able to playback a server state, because I want to see the specific state at certain times.
(Azriel Hoh) #16
  • As a solo dev, I want event-based input so that I can automate input for testing.
  • As a game modder, I want button hold duration so that I can make characters with charge-up shots.
(Azriel Hoh) #17

As a game developer, I want to be able to play sound, stop it half way, and play another sound (e.g. background music changes).

(Marco Alka) #18

As a user, I want to remap the mouse axes.

Or alternatively

As a game dev, I want to get the mouse import as axes

Mouse movements usually are used for camera movements. If we make a PC game, that makes a lot of sense, however if we want to support game pads or consoles, I as a game dev has to write my own logic to somehow remap the mouse axes to joystick axes, which is a pain! That’s why I want to define mouse axes inside the input.ron file regularly and then be able to remap them like all other input without thinking about all the logic involved.

ACs:

  • I am able to define the mouse axes as regular axes
{
  axes: {
    "camera-height": Emulated(
      pos: Mouse(up),
      neg: Mouse(down),
    ),
    "camera-rotation": Emulated(
      pos: Mouse(left),
      neg: Mouse(right),
    ),
  }
}
  • The values are in the range of [0.0 … 1.0], depending on the viewport distance traveled by the mouse from the viewport center
  • The values can only be !=0.0 if the game window is in focus
1 Like
(codetrotter) #19

Building on what @azriel91 said:

As a game developer, I want to be able to play a sound and then while it is still playing I would like to cross-fade over into another sound (e.g. background music changes).

The duration of the cross-fade should be an argument that I can provide.

Additionally I would like for it to take as argument what strategy should be used in case the amount of time left of the first sound is shorter than the requested duration of the strategy, because there are different strategies that are appropriate in different situations in my games.

“Continue loop, adhere to requested duration”-strategy: In this situation I am fading out of a sound that is made to be looping, so continuing to loop the first sound while cross-fading is fine/desireable.

“Fade with soft duration requirement”-strategy: If the amount of time left of the first piece of time is shorter than the requested duration of the cross-fade, then that amount of time is used as the duration of the cross-fade instead of the requested duration.

(Zicklag) #20

As a Player I want Amethyst to support OpenGL so that I can play Amethyst games on less than state-of-the-art hardware ( within reason ).

1 Like