Jump to content

jaMME 1.11 released


Recommended Posts



It's been a while since the last jaMME release.
But the time has come.

jaMME 1.11 is finally here.


Mac x86_64/arm64: 

Also thanks to tayst jaMME now has more frequent automatic builds (includes Ubuntu) that you can get jaMME binaries from without waiting for official releases:



fixed having a previous frame in the current DOF frame
added a possibility to use a mask to make custom DOF "bokeh" (mme_dofMask)
added a possibility to hide following message (mov_drawFollow)
[sdl] added drag and drop support for demos
added japro speedometer (cg_speedometer*, speedometer)
added japro race timer (cg_raceTimer*)
added japro movement keys (cg_movementkeys*)
added japro strafe helper (cg_strafeHelper*, strafeHelper)
Merge branch 'master' into strafe
[linux] added a script to start jaMME with mme mod
[mac] added arm64 (Apple M1) support
[mac] fixed inability to use pipeline with relative paths: use absolute ones now (%a)
increased the maximum for mme_workMegs to 2048 (2 GiB)
[mac|linux|android] prevent shutting down the game with SIGPIPE
fixed undefined behavior when stripping extensions by using the same src and dst
[sdl] added display scaling (credits: jk2mv)
[android] added automatic console scale for high DPI displays (con_scale)
added demo bookmark (book)
fixed incorrect time navigation in HUD on clicking progress when demo length is very long
added demo script (script)
[windows|android] added notifications system (mov_notify, cl_notify)
added a possibility to open menu with Escape key when playing a demo instead of closing the demo (mme_demoEscapeQuit)
increased the max trace distance for effects
enhanced "find" command with attacker and target options
fixed a rare crash when the demo tried to be played back before full cgame initialization
[android] properly shut down the game
[android] fixed in-game mouse cursor movement precision
fixed a rare possible crash when writing audio to avi/pipe
fixed a rare crash when a demo contains 2 or more gamestates and the first one (or any other) has less than 8 snapshots
fixed detecting next demo number within one mme demo with internal errors
added new base_enhanced team data with force points
fixed colours in voting string
holding mouse2 in chase view now lets roll the view
added an option to rotate camera, chase or effect view in 6DoF instead of Euler angles (mov_view6DoFRotation)
improved performance in camera angles smoothness on low camera rotation for non-linear camera interpolation method
added camera position smoother on low camera movement for non-linear camera interpolation methods
added a possibility to draw scoreboard for every POV
added a possibility to always show scoreboard when hitting TAB (+scores)
added a possibility to show player names above player models (credits: eternaljk) (cg_drawPlayerNames*)
fixed never resetting underwater effect when going back to main menu
[android] fixed white textures after resuming
fixed animation precision in shaders
added ratiofix for rectangle drawing
fixed showing team overlay for non-predicted players if they are on different team
added an ability to see non-predicted players' health and armor if they are on the same team as the predicted player
added multispec feature (multispec)
added support for new demo recording notification icon
fixed never applying correct disruptor team colour for spiral rail (using saber blade colour now)
fixed never applying new vibration effect to camera roll in regular game or regular demo playback
added an opportunity to set relative sensitivity for mouse when zoomed (cg_relativeZoomSensitivity)
added an opportunity to force ally models without changing player model (cg_forceModel 2)
increased interpolation precision for entities with enabled command smooth
fixed jittering movement for predicted player while playing with enabled command smooth
increased position precision in drawing strings
fixed ratio in drawing voting message + added shadow for better visibility
fixed never disappearing shot marks on bodies after rewinding
fixed wrong torso animation when firing with concussion
fixed never using alternative master servers
fixed never working new vibration fx with concussion alt fire
fixed incorrect cutting of demo if it has animated timeline
added unlagged support
properly fixed disappearing line effects if effect starts behind camera
fixed jumpy animation in ET_MOVER entities
[android] added a support for the most keyboard keys
[android] made the game execute properly while the app minimized

added ratio fix to vehicle targets and other vehicle 2D items
[android] load game modules with [abi]/lib[module][abi].so format instead of [arch]/lib[module]arm.so
[windows] register demos extensions and ja protocol for the local user instead of global scope (does not requires extra permissions anymore)
[windows] fixed opening demos from any place that put executable path to their directory instead of actual game directory
added a possibility to use blurring on any architecture
fixed incorrect altcharge and falling sounds interruption
fixed shuttering sounds on low fps
fixed sound delay
demos now get loaded from all the given folders: <fs_game>, <fs_extraGames>, "base" it used to load from <fs_game> only
change some cvars to new modern defaults: mme_saveWav 2, mme_jpegQuality 100, mme_cpuSSE2 1, com_affinity 0
[android] fixed huge memory allocation for sound and mme renderer
fixed an issue where fs_extraGames was treated as fs_game if fs_game is empty
added RPMod support: animations and text colours
fixed wrong logic in importing wav to video where some conditions were always either false or true
fixed rare crash where ghoul2 bone cache wasn't initialized
fixed searching .mp3 extension string instead of character

New cvars:
- mov_smoothCamPos
- mov_view6DoFRotation
- mov_notify
- mov_drawFollow
- cg_relativeZoomSensitivity
- cg_movementKeys*
- cg_drawPlayerNames*
- cg_crosshairColor
- cg_strafeHelper*
- cg_raceTimer*
- cg_speedometer*
- mme_demoEscapeQuit
- cl_notify
- con_scale
- mme_saveCubemap
- mme_combineStereoShots

New commands:
- find (subcommands)
- multispec
- script
- book
- speedometer
- strafehelper

As always the information about all cvars and commands can be found in cvars.txt and cmds.txt files that are placed in mme folder.
Cvars: https://github.com/entdark/jaMME/blob/master/build/mme/cvars.txt
Cmds: https://github.com/entdark/jaMME/blob/master/build/mme/cmds.txt

1. Virtual Reality (VR) capture

To stay up to date with modern technologies I decided to implement a possibility to capture VR videos.
Here are some examples (watch in your VR headset):


 VR180 stereo 3D video:

VR360 monoscopic video:

VR360 monoscopic free camera video:

VR180 stereo 3D screenshot:

VR360 monoscopic screenshot:

Long story short: this is achieved by capturing cubemaps in the game and then passing them to ffmpeg (pipe) with v360 filter.

To capture a VR video yourself set mme_saveCubemap to 1 and mme_pipeCommand to auto.

Long story long:


The idea:
jaMME is a pretty complete tool and making new releases requires some big features. Also staying up to date to modern technologies is a good reason for a new release as well.
The idea visited me a year ago when I got my VR set. So here we are: I decided to add the VR capture into jaMME.

The solution:
After googling a lot I found many solutions but all of them could not be simply applied to the game.
Eventually I got the main idea: I need to capture the whole world around and the simplest way to do so it to capture cubemaps.
And then I accidentally found out that ffmpeg can convert from and to any kind of spherical projection and that I could just use cubemaps.
A year later all stars got aligned.

VR video types:
1) 180 degrees stereoscopic 3D (VR180)
2) 360 degrees monoscopic (VR360)

To capture for VR:
1) highly recommended but still optional: install ffmpeg and either put ffmpeg.exe next to jamme.exe or add it to %PATH% variable
2) set resolution to at least 720 pixels height (for example: set r_customwidth 1280; set r_customheight 720; r_mode -1)
3) set cg_draw2D 0; set con_notifytime -1; mme_saveCubemap 1
4) VR180:
        set r_stereoSeparation -0.5; set r_zproj 25
        set mme_pipeCommand "ffmpeg -f avi -i - -threads 0 -vf v360=c1x6:he:in_forder=frblud:in_stereo=tb:out_stereo=sbs -c:a aac -c:v libx264 -preset ultrafast -pix_fmt yuv420p -crf 19 -y -metadata:s:v stereo_mode=left_right %o.mkv 2> ffmpeglog.txt"
eyes are separated by 0.5 game units from the centre (-0.5 is the same, just for the left eye) and the focus point is 25 units forward, values can be changed
using filter v360 we set input projection as cubemap 1x6 with faces order 'forward right back left up down', output projection as half equirectangular and input stereo top-down, output stereo side-by-side
        set r_stereoSeparation 0
        set mme_pipeCommand "ffmpeg -f avi -i - -threads 0 -vf v360=c1x6:e:in_forder=frblud -c:a aac -c:v libx264 -preset ultrafast -pix_fmt yuv420p -crf 19 -y %o.mkv 2> ffmpeglog.txt"
using filter v360 we set input projection as cubemap 1x6 with faces order 'forward right back left up down', output projection as equirectangular
to capture for YouTube container should be mp4, in other case set it to mkv
more info: https://ffmpeg.org/ffmpeg-filters.html#v360
5) capture pipe 60 name
That's all, the video is captured.

You can edit your VR video in Adobe Premiere Pro: https://helpx.adobe.com/premiere-pro/using/VRSupport.html
And publish from there as well so the Publication block could be skipped.

To make video players understand that the video is VR (uploading to YouTube requires that too) it has to have the corresponding metadata.
Unfortunately by the date of 2021.11.24 ffmpeg cannot add such kind of metadata so you have to use other tools.
You can inject additional metadata by using mkvmerge tool:
VR180 for manual sharing and YouTube:
        mkvmerge --output out.mkv --projection-type 0:1 --projection-private 0:0x000000000x000000000x000000000x3fffffff0x3fffffff --stereo-mode 0:side_by_side_left_first in.mkv
VR360 for manual sharing:
        mkvmerge --output out.mkv --projection-type 0:1 --projection-private 0:0x000000000x000000000x000000000x3fffffff0x3fffffff in.mkv
Or you can use Header editor from MKVToolNix GUI to add projection type, projection type private data (or leave it untouched) and stereo mode in case of VR180. Setting stereo mode is not needed if it was set though ffmpeg.
more info: https://mkvtoolnix.download/doc/mkvmerge.html
VR360 for YouTube:
        You can inject additional metadata by using Spatial Media Metadata Injector:
        0) convert to mp4 if previously captured in mkv:
                    ffmpeg -i in.mkv -c copy out.mp4
        1) download: https://github.com/google/spatial-media/releases/tag/v2.1
        2) run the tool and check "My video is spherical (360)"
        3) click "Inject metadata" and wait a bit
The video is ready for YouTube.

Video resolution:
The least recommended resolution of the game should be WIDTHx720, so it could capture cubemaps with 6 faces of 720x720 and final video resolution will be 2880x1440.
2880x1440 is one of the most popular resolution for many VR sets.

Technically VR360 could be stereoscopic 3D but looking behind will swap eyes position so the depth will be ******ed up. Though you can look up and down by way higher angles.
So VR180 could be monoscopic as well but it has no sense since VR360 monoscopic covers everything.
You can capture for VR without pipe, just save cubemaps directly into screenshots or AVI. But then you will need to convert the cubemaps into any spherical projection anyways. Pipe is the default way now so better use it.
YouTube compresses much so it's better to capture at high resolution like WIDTHx1080.

2. Multispec feature

Multispec feature lets you see multiple POVs simultaneously.



Using the feature is pretty simple. Hit = (command: multispec add) to add a new multispec window. It will appear in the centre of the screen with a cursor that you can move and edit multispec windows.
Put the cursor inside the window and click MOUSE1 or MOUSE2 to cycle through next or previous POV. Camera and Chase POVs are also options.

Holding MOUSE1 and moving mouse will move the window. Scrolling mouse wheel will change window scale. Hitting DEL will delete the window. Hitting ESC or ENTER will finish editing.

That's all, you got your multispec window. You can add as many windows as you want. More information and examples in the documentation.

3. Scripting console commands

Script is a another keypoint-based mode that lets you execute console commands in certain moments in the demo.

A few steps to use the feature:
1. Pause the demo.
2. Hit 5 to enter into script editing mode.
3. Hit V to add a keypoint.
4. Hit MOUSE3 to activate the editable demo HUD.
5. Select Run: and type some command, for example: "clientOverride player model reelo".
6. Move in time a bit. Repeat steps 2-4 but 4 with run: "clientOverride player model tusken".
7. Move back to the movement before the first keypoint.
8. Unpause the demo.
9. See how commands get executed in the exact moments they have been set to.

Additionally you can edit Init: value in step 5.
Init commands are guaranteed to be executed for all keypoints before current time when you rewind. Basically is used as a "reset" command.

4. Bookmarking demo time

Sometimes you'd like to edit some moment in the demo but later since now you are editing another part so you can save that moment with bookmarks!

Simple to use: hit 6 then hit V and it's added. Hit Q or E to jump between them.

5. Notifications

You now get notified about demo event when your game is minimized/unfocused. Notifications could be textual, flashing and console. Basically they look like this:



You can be notified about capture start, capture end and find command results.

6. Custom "bokeh" in DOF (credits: Tom Arrow)

Now you can set a DOF mask that can basically be treated as custom "camera lenses" that create custom blurring shapes in DOF. Just use any grayscale image with cvar mme_dofMask, for example: mme_dofMask gfx/2d/dlight to use dynamic light circle as a dof mask.



7. Strafe helper

Thanks to tayst jaMME got strafe jumping helper from jaPRO.



Just use strafeHelper command to see what you can set up.

Now go make some new fancy movies!


Smoo likes this
Link to comment
  • 5 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...