Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Features 1.4 #11

Closed
mchorse opened this issue Sep 4, 2016 · 1 comment

Comments

@mchorse
Copy link
Owner

commented Sep 4, 2016

This patch is mainly focused on making player recording way smoother and compatible with Minema. This has lots of benefits (syncing with Minema):

  1. The output video from Minema will be much smoother (with screen recording software, it will be as smooth only if you have a very very very powerful computer), even if you use shaders or high quality settings (but recording speed will be decreased)
  2. This way can be automated (using event listening)
  3. Doesn't requires screen recording software (which may cost money, especially on Mac)

General

  • Implement Forge configuration system
  • Configuration for sending models and skins on player's log in?
  • Fix issue #14
  • Fix issue #15
  • Fix issue #16
  • Fix issue #17
  • Clean up the code
  • Refactor lang file (error, info, etc.)
  • Update README.md to the next level
  • Categorize config entries and don't forget to add keys to language
  • Don't forget about LICENSE

Configuration is the one thing is lacking in current version of Blockbuster. Configuration over values will be very handy in some situations.

And it is very important to clean up the code, because I start to getting confused what is called where, "why this isn't there?" and so on.

Actor

  • Convert actor's skin to ResourceLocation
  • Add actor's spawn egg to Blockbuster's creative tabs
  • Fix head overlays...
  • Add riding pose

This might improve performance a little bit, since RenderActor and RenderPlayer create ResourceLocation every time the texture is being requested.

Player recording

  • Switch from separate thread recording and playback to player tick recording and entity tick playback (I'm not really sure how it will affect the performance)
  • Record actions on the server and position and other stuff on the client
  • Finish up with recording code
    • Track client records
    • When actor get out of sight and comes back, reload record player
    • Implement automatic record unloading
    • Implement renderYawOffset animation (body moves)
  • Configuration for setting up delay between frames (i.e. 1 = 20 FPS, 2 = 10 FPS, 3 = ~7 FPS, etc.)

Implementing this will result into better recording and playback, which will make machinimas even better! Therefore it will also eliminate some of the ugly workarounds found in the code.

New recording scheme

The problem with EchebKeso's recording code, is that after 1.7.10 (or whatever latest version for it is), the recording code lost its precision after 1.8. New recording scheme suppose to work similar to Keygrip's scheme (if I understood it right from AntVenom's video).

So, actions still getting recorded on the server side, while the position, rotation, and other stuff should be moved to the client side. This is a basic scheme what should happen when recording is about to start:

  1. Server started recording, notify the client that recording has started and client should start recording position and stuff. It needs to notify the client, only in case if the code that triggered recording happened only on server side (as command handling)
  2. When server stopped recording, request recorded data from the client, client will stop recording and will send the data to the server
  3. When server gets the data from client, it should sync it with recorded actions and save all recorded data in record file

That's basic scheme for recording, here's for playing:

  1. When server is about to start playing, it sends the frames data to the client and starts playing
  2. When server is about to stop playing, it doesn't need to notify the client, since the player removes itself from the actor

All that client-to-server stuff is really hard to do. There's also a problem with recording the actions and synchronizing them to ticks.

About tracking

There's another problem related to the new scheme. It's the record tracking. What I need to do is to track every record I have on the server and sync it with the client. Once there's new or updated record, when actor starts playing server should inform the client that actor has started playing and also send it updated or new record (in case if it's needed).

Camera

  • Add fov position support
  • Add roll angle support
  • cubic interpolation support for path fixture (too lazy, next time)
  • Switch to frame-based running
  • Switch duration to ticks units (no seconds and stuff)
  • Switch to JSON format (since the format will be broken anyway)
  • Don't load camera profile unless it changed
  • Load camera profile from previous session
  • Duration step configuration

Those new camera features will allow more dynamic camera control with ability to create more fascinating camera moves. Switching to frame based running increases precision of camera moves while running recording with Minema mod. To synchronize cameras with actors, you use undocumented feature and to get duration of the camera fixture you basically apply this formula:

actor_ticks / 20 * frame_rate

For example, if in video settings, you setup limiting frame rate to 30 FPS. Then your formula will be:

actor_ticks / 20 * 30

If I recall correctly, fov and roll were suggested by @NlL5 📹

Commands

  • Create model command that will be responsible for managing models
    • Sub-command export for exporting in-game models
    • Sub-command request for requesting server models
  • Add sub-command /camera fov for controlling camera's FOV
  • Add sub-command /camera roll for controlling camera's roll
  • Refactor action command to SubCommandBase
  • Improve command interaction (add more colors)
  • Too much colors isn't pleasant remake messages into similar format:
[x] Error: shit happened {7}grey{r}!
[i] Excuse me sir, I want to inform you about {7}something{r}...
[v] {7}This{r} was a success!

This is basic implementation of multiplayer model and skins sharing. Patch #13 should upgrade this command to the GUI level with server uploading and stuff. Also some basic commands for fov and roll camera control.

@mchorse mchorse added this to the Blockbuster 2.0 milestone Sep 4, 2016
@mchorse mchorse self-assigned this Sep 4, 2016
@mchorse mchorse added the Cameras label Oct 3, 2016
@mchorse mchorse added the Actors label Oct 23, 2016
@mchorse mchorse changed the title Patch 1.3.1 Features 1.4 Nov 10, 2016
@mchorse

This comment has been minimized.

Copy link
Owner Author

commented Nov 10, 2016

Looks like we're done. I'll finish off with testing and fixing bugs (submitted mostly by @NlL5), and will release this update already! 😆

@mchorse mchorse closed this Nov 10, 2016
@mchorse mchorse added Release and removed Patch labels Nov 10, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Blockbuster
Implemented
1 participant
You can’t perform that action at this time.