Shop Forum More Submit  Join Login



The video above was made as a test of the latest version of The Movies Graphical Interface (V4.1).
The goal was to create a guitar player animation.  There happened to be a guitar mesh in the game, but there was no guitar prop or scene which used a guitar, so the first step was to take the guitar mesh and create a prop for it.  Next a nice long scene was chosen which was fairly simple and had one actor and one prop.  The scene used was called "Drink Poison."

The animation file "death_by_drink.anm" was used as a target file and edited into "play_guitar.anm."  Part of the goal was to use animation baking to create a static animation of the guitar that moved with the actor.  Some hex editing of the anm files was required to get all of the group names for the prop consistent between mesh and animation files.

The latest version of TM GUI is very similar to the previous version, but the bake prop animation button has been added along with some helpful prompts.  To download version 4.1, click on this link.www.lefty2000.com/TheMoviesGam…
There are so many options in blender that I have gotten into the habit of ignoring many of them as long as I can accomplish my task with my customary tools.  The NLA Editor (Non-Linear Action) is one of these and it was not until I needed a way to delete a range of keyframes that I discovered something it is good for.

When you select an animated prop object and open the NLA Editor you will see a row of yellow diamonds, one for each key frame in the animation.  If you press A to deselect all of the key frames, you can then select one or more key frames using the boundary select tool. You can delete all of the selected keyframes by pressing the delete key.  Another thing you can do is change the timing of an animation by dragging a keyframe to the left or the right.

This can really be useful when working with animations imported from "The Movies."  In many cases, you might want to keep part of the original animation, but then you need to remove a long sequence of keyframes  so you can replace them with a few key frames of your own.  One, very inefficient way to do this is use the delete button on the timeline editor, but that can take a long time if you need to remove say 100 key frames.  In the NLA editor, you can just select all the keyframes you don't want, and delete them, then put in the desired keyframes in the cleared interval.

When adjusting timing of key frames in the NLA editor, you select a frame with the right mouse button, and drag it left or right.  To make it stay where you want it, click with the left mouse button to drop it in its new position.  It's tricky at first, but once you get the hang of it, you can appreciate the power the NLA editor gives you. There is a lot more that you can do with it, but these are very useful tricks to know.

 


12/27/2018
My first attempt to do this  ( Converting a Bone Animation to a Prop AnimationWhen creating an animation in Blender, it is convenient to parent a prop such
as a gun or sword to the hand bone so the prop will automatically move as the pose of
the figure changes.  The Movies Game, however, does not do things that way.  The animation
of the armature and the animation of the carriable prop are separate blocks of data treated
independently and called Bone Animations and Static Animations respectively.  In order to
export your animation from Blender to The Movies game, you must convert your completed
animation to the same structure.
This can be done using a python script I found in the Blender2.4 manual and adapted for this purpose.
A detailed description of the method is available at lefty2000 (The Movies Game)
Click on the link and read the article "Converting a Bone Animation to a Prop Animation."
Acknowledgement:
Thanks to TheMoviesGame and Beowulf71 for their valuable contributions to this
) did not work very well, but I think I have the solution now, baking an animation.
This script is a lot shorter than the first one I wrote, so if you have the old one, dump it and use this one because that one did not work and this one does.

Let us say that you have an animation such as a character holding a gun, or a hammer, and you would
like to change the animation.  You will want to parent the prop to the hand, then create /change the animation so that it looks the way you want it in blender.  Don't parent the mesh to the bone, parent the empty containing the prop mesh to the bone so it moves with the bone.  When everything looks good,
you just select the empty which contains the prop in the outliner, and run this script.  The script will compute
the rotation and location data for each frame, then unparent the prop and apply the correct rotation and location data for each frame in the animation.  The prop will now be an idenpendently moving object moving in the scene, but it will move exactly the same way it did when it was parented to the bone.  If you move the armature, the motion of the prop will not change, after baking.

This is needed to prepare an animation for export to the movies game, but it could also be used for other purposes.  For example, if you wanted to have a character pick up and object and then set it down, you
could first parent the object to the hand, then go through the motions of lifting the cup and set it down.
Then, you just bake the animation with this scirpt and delete all of the keyframes before and after the cup is picked up and after it is set down.  For the first part, you copy the pose at the point you picked up the cup to frame 1.

# file: bake_prop_animation.py
# When creating an animation using hand props, it is convenient to parent
# the prop to the hand when creating the animation.  In order to export to the
# movies game as a carriable prop, the hand prop needs to be converted to a
# static animation.
#
# This is called "baking an animation."  This function is included in Blender 2.77, but it
# is not available in good old 2.49.  There is a script included which is called "bake_animation.py", but
# all it does is insert keyframes for all of the interpolated data.  It does not unparent the prop.
# To bake a prop animation with this script, select the empty that contains the prop which is
# parented to a bone, the run the script.  The script will calculate the
# rotation and location data for the prop as it moves with the bone, then
# unparent the containing empty and create keyframes for the prop for the
# entire animation.
# This should work for any kind of prop and any bone, but usually it is for hand props.
#
# If you do not select an object, you will get an error message.
# If you select an object that is not an Empty, you will get an error message.
#
# If you have more than one animated prop, just select the prop and run the script
# again.
#
#
import Blender
from Blender import *
import math
d2r = math.pi/180.0
pen = None
def main():
    scn= Scene.GetCurrent()
    print '\n\nBegin'
    props = Object.Get()
    pen = None
    for prop in props:
        print prop.name,prop.isSelected(),prop.type
        if prop.isSelected():
            pen = prop
            if prop.type == 'Empty':
                pen = prop
    if pen == None:
        raise ValueError, 'No object selected'
    if pen.type != 'Empty':
        raise ValueError, 'Object selected is not an Empty'
      
#    pen = Object.Get('00.pen_ca_')
#   notepad = Object.Get('00.notepad_ca_')
    framecount = Blender.Get('endframe')+1
    pen_rots = []
    pen_locs = []
    for f in range(framecount):
        Blender.Set('curframe',f+1)
        pen_mat = pen.matrixWorld
        pen_rots += [pen_mat.rotationPart().toEuler()]
        pen_locs += [pen_mat.translationPart()]
    pen.clrParent(2)
    print 'Parent cleared'
    for f in range(framecount):
        Blender.Set('curframe',f+1)
        (u,v,w) = pen_rots[f]
        pen.setEuler(d2r*u,d2r*v,d2r*w)
        pen.setLocation(pen_locs[f])
        pen.insertIpoKey(Blender.Object.ROT)
        pen.insertIpoKey(Blender.Object.LOC)
                
    Blender.Set('curframe',1)
    print 'Script terminated normally'
main()
Something I have been working on is trying to better understand the way location data works in the animation files in "The Movies".   In the course of my investigation I have learned some things which makes me think a rewrite of the animation import and export scripts might be in order.

The current "gold standard" of my animation import script is version 5.1.  This script and the corresponding export script require an external module that contains information about the structure of the armature, relates the names of the armature bones to the bone numbers in the animation file, and supplies transformation data to transform the animation data from the game coordinate system to the blender coordinate system.

Recently, I discovered that a lot of that information can be derived from the armature itself.  For example, the transformation from game coordinates to blender coordinates can be derived from the armature itself.  The mesh file contains this information and Gleem's mesh import script uses it to construct the armature when a costume is imported.  When the armature is in "Rest" position, the so-called pose matrix contains the same information which is the location of the bones in rest position and the rotation of the bone relative to the blender coordinates.  For a particular game armature, this data is always the same, so it follows that it should be possible to write a "smart" animation import script that will compute the required information "on the fly" from the armature itself and the external module might be eliminated.

The last hurdle is the association of  bone names with bone numbers.  Fortunately, when the mesh is imported, the msh_import script creates a bone order dictionary in the ID properties which can be seen in the ID property browser on the help menu.  A streamlined  animation import script can be written which will work for any armature in the game, provided that the user imports the required armatures before attempting to import the animation.

Ah ha!

In the course of writing this, it dawned on me that perhaps the ideal approach would be to have one import script that combines importing the mesh and the animations.  The user would start with an empty scene and invoke the animation import script.  As the script worked through the animations in the file, it would tell the user what kind of armature or prop is needed and bring up a file selector so the user can pick which costume or prop to load.  The script would then load the mesh file into the scene and apply the animations to it.

It is an ambitious, but attractive goal.

Old Bus Drive Slow by lefty2016
You recognize MDBoing's creepy old bus, of course.  I downloaded it from 8eyedBaby and created a scene for it.  The driver animation file was edited to move him up high enough so his hands are now on the steering wheel and his feet do not stick through the floor.
Beyond that, I would like to have a period bus that would work with my Vintage airplane scenes.  So I ordered a quick repaint.


Green Bus by lefty2016

This is where I am.  They hosed off the mud and sprayed green paint over the chipped scratched old yellow.  The boys at the paint shop missed a few spots, but then it was a rush job.  As you can see the wheels were left as is.  They slapped some black paint on the fenders, but if you look underneath you can see it is still rusty and corroded.  If finished, this bus will operate on Long Island in the year 1927. 


September 20, 2018:

I now have a better version of the Blender 277 animation import script for "The Movies." 

The more I learn about the new Blender the more I like it, although I still have a long way to go to use it efficiently.  The best thing about it is the availability of a large community of current users who are cranking out tutorials and answering questions for users on message boards.  The process of learning about the new Blender has actually increased my understanding of how the old (2.49b) version works.

In order to complete the current script, there were two major difficulties to overcome.  The first one was the absence of a simple file selector dialog.  Apparently you are expected to write your own, but that is a really big step.  Fortunately, if you dig through the manuals, you will eventually find some sample code which you can incorporate into your own script application and that is what I have done in this second version of "load_anm." 

The second big problem I had in developing this prototype script was the absence of the ID property browser which comes installed in 2.49b.  The animation files may contain bone animations as well as prop animations.  The prop animations are tagged with "group names" which match the group names in the mesh files.  The mesh import script for 2.49 associates these names with the mesh object as custom properties and you can use view these names in the ID property browser.   When importing the ANM file into blender, you can use these group names to identify which prop animation data goes with which object.

When you open the blend file in blender 2.7, the group names are still there, but without an ID property browser, the only way to access them is using python code.  You can do this interactively in the python console or you can write a script to do it for you.  It would be nice if some one would write an ID property browser for Blender 2.7; the old code can be found in the Blender 2.49 scripts folder.

Anyway, the latest animation import script for Blender 2.7 has a file selector and it can handle props.  In order to use it, you have to import the mesh objects from "The Movies" using Blender 2.49 and save them as blend files.  You can then open the blend in Blender 2.7 to run this script.

This script works much like the old one.  When importing a bone animation, it uses the number of bones in the armature to determine which armature to apply the data to, and when importing a prop animation, it uses the object group name (grpName) to identify the prop.  If there is no matching prop, the script creates an "Empty" object and applies the animation data to it.  Many prop animation sets include data that is not used in a particular scene, so you can delete these  unused empties after the import.

One major difference between this script and importanm(5.1) is the "append" function which required setting a flag in the ID property browser.  In load_anm, running in Blender 2.7, the animation is always keyframed starting at the current frame start setting.  To append animations together, set the start frame to the end of the previous animation before running the script.  Then you can set it back to 1 to play the entire sequence of animations.  The demo video posted above shows several machine gun poses featuring Woody and the AK47 prop.

The scripts are included in this zip.








I have Windows 7 running on Virtual Box, just because I like to play Freecell, which was not available on windows 8.  I installed "The Movies" on there, but it would not start.   That was some months ago, but today, I thought I would try something crazy.  What if we edit the registry to make it run in windowed mode?

Here is the result.


When I first became interested in Blender, I downloaded the then latest version, which was 2.77 and that is what I now have.  At present, we do not have scripts to import Movies Game assets directly into Blender 2.77, however we can import mesh files in 2.49, save the blend and then open it in Blender 2.77.  Unfortunately, the animations in a Blender 2.49 blend file are not compatible with Blender 2.77, so if you open a 2.49 blend that contains animations, the mesh files and textures are loaded okay, but the animations are lost.  Likewise, if you open a Blender 2.77 blend in Blender 2.49, the mesh objects and textures are loaded okay, but any animations in the 2.77 blend will be lost.

[ 9/10/2018:  The statement above that animations in a 2.49 blend file are lost if opened in blender 2.77 is incorrect.  This weakens the case for rewriting the anm import script for the new blender python API, but it still seems to be worth doing as a way of learning the new blender python API.  I apologize for putting out false information without adequate verification.  The error may have been fortuitous since it motivated me to dive in to Blender 2.7 and get my feet wet.]


Blender 2.49 appears to be well suited to the task of creating modifications to the Movies Game and if that is all you want to do with Movies Game assets, there is little reason to upgrade to a later version because you would need to rewrite the mesh import/export and animation import/export scripts.  On the other hand, if you would like to make videos or games in blender which incorporate Movies game assets, it might be desirable to use Blender 2.7 or later for that purpose.  Support for Blender 2.49 is waning, while Blender 2.7 and later versions is strong. Based on my own experience, I have found that it is easier to get good looking renders in 2.7 than in 2.49.  People have done some great looking stuff in 2.49, but if you are going to spend a lot of time learning about materials and lighting and animation, it would be better to invest that time in the newer version.  The Blender 2.77 Game Engine seems to work better for me than the Blender 2.49 Game Engine.

The mesh import scripts originally written for 2.49 are much more complex than the animation import scripts, and we can work around that, so the only requirement is to rewrite the animation import script in order to use those animations in Blender 2.7.  After some analysis, I have found that rewriting the animation import script for Blender 2.7 looks much easier than rewriting the mesh import script.

The animation import scripts I have written, are based on Gleem's legacy code, and they consist of three parts.  The first part comes directly from Gleem's code and this part does not require any blender python functionality. This section parses the anm files and stores the rotation and location data for animations in a python data structure.  The second part transforms the Movies Game animation data into the Blender coordinate system and the third part applies the location and rotation data to the blender object and sets key frames for each bone and prop object for the entire animation.

After working on the problem for about three days, I have a primitive version of an anm file importer for Blender 2.77.  A short demo video is posted below to show some early results.




The green screen aviation scenes require the Vintage Aviation Pack, which can be downloaded on the same page.   Actually, it is only one scene, but the addon includes the Ryan-NYP model which is interchangable with the Jenny, in this scene.  First install the vintage aviation pack,then install the green screen addon, on top of that.


In a previous journal entry, "Magic of the Movies Game," I reported observing "Look At Behavior" in at least one FLM file (001_group_move.flm).  The discussion of that observation led to the question "What data element in the FLM file triggers this behavior?"  I think I may have at least a partial answer.

Header by lefty2016

The header of the file 001_group_move.flm shows four actors, the lead is Actor 1 and the 1st support is Actor 1090.  If we trace the flow of the Ref to Next Item ID filed from Actor 1 to the next block, we soon arrive at the following type4 block number 1197:

Lead Type4 by lefty2016
 Note that item 28 is the ID of the first supporting actor.  Could this block be telling the actor to interact in some way
with the first support?  Hmmm.

If we follow Actor 1090 from block to block, we arrive at the type4 block 1196:


Support by lefty2016
If we look in slot 28 we see the number 1 which is the ID of the lead actor.  Hmmm.  What if you change 1090 to something else?  How about -1?  Maybe that
turns off the effect.  So I tried it.  When you play the scene, the lead actor does not look at the supporting actor.  The two other actors in the scene do not use any type 4 blocks and they walk straight without turning their head.

The number in slot 29, immediately after the actor ID, is the time the "look at" option is in effect.  It appears to be in miliseconds.  If you
increase that number, the actors continue looking at one another for about 2 seconds.

The game is afoot!  Anybody who has a copy of flmreaderzero can play.
















I have managed to adapt another Emmanuel Berringer model (the Spirit of St. Louis) to The Movies Game and I found that it works in my existing "flying along" scene.  The scene has a pilot and a passenger (it was adapted from the helicopter scene) but while the pilot animation works for this prop, the passenger animation doesn't.  The mannikin is inside the gas tank, so if you put a costume on him, you still can't see him.

Anyway, I made a little video to showcase the flying scene using Jenny and Ryan-NYP (Spirit of St. Louis).



I wasn't able to get the Wright Whirlwind engine model included in Berringer's model to work.  It was too complicated and had too many triangles to export to the game.  Anyway, all you can see are the tops of the cylinders sticking out of the fuselage.  So I replaced the engine with 9 plain black cylinders as placeholders.  The propellor animation for the jenny does not work for the Ryan-NYP, but the prop is hidden inflight.  I left the blurry rotor out.  My own experience suggests that you can't see the spinning prop most of the time, unless the light is just right.  There is a solution to the prop animation, however.  There are 10 unused animation channels in this animation; eventually I intend to use one of these to animate the Ryan-NYP prop.  That would make the animation file compatible for this scene with both the Jenny and the Ryan-NYP.
Download Version 3 of the TMG GUI here.
Readme file has been updated with installation instructions and user notes.


Introduction (New version with fewer goofs):


Creating a Rescaled Character:


Inserting your character into the game:


Creating a Scene for your Rescaled Character


If you have questions, you can post them here or on the individual videos at Vimeo.


Here is a clip that demonstrates some effects.



It turns out you don't need the rescale_arm.py script to make a giant or a dwarf.  Awhile back Dib asked me if we could do it without that, and it turns out you can.

Here is a simplified procedure (no scripts required) to make a baby gorilla:

1.0 Import the gorilla mesh into blender.
2.0 Unparent the mesh object from the armature object.
3.0 Select the armature and rescale it in the properties menu to .5 for all three axes.
4.0 Use Object->clear/apply  to make the scale change permanent.
5.0 Select the mesh object and set its scale the same as the armature.
6.0 Use object->clear/apply to make the scale change permanent.
7.0 Re-parent the mesh to the armature.
8.0 Change the name of the armature (e.g. 507812352 can become 527812352).
9.0 Run tmpreflight.py
10.0 If all is well, export the mesh.
11.0 Use MED to inject it into the game.

Here is a video tutorial of this process.



I don't see how this could happen, but it did.

There is a scene called "Group Move."  It shows four characters walking along.  At one point, two of the characters make eye contact, then walk on.  I set out to modify this scene by changing two of the characters into half size characters.  I dug out my rescalable dude mesh, shrunk it to half size, then exported it to the game.  I created a copy of the Group Move scene called Group Move with Dwarf and rescaled the walk animation for the half size characters.  Everything worked fine.  Then when I compared the two scenes I noticed something weird.
Eyecontact Level by lefty2016
Here is a screen shot from the original scene when the two actors make eye contact.

Eyecontact Down by lefty2016
Now here is the same moment with the half size characters in the scene.  Notice the full size character is looking down at the half size character, and the half size character is looking up at the full size character.  How did the actors know where to look when they are just dumb algorithms?  Somehow the game did this.  I had nothing to do with it.

I can't find anything in the FLM file that trigger this behavior.  It is a mystery.

This update is to correct a bug in anm_import module which prevents the script from loading an animation if it contains no bone animations.

You can download the zip from my dropbox (I hope) and replace the module anm_import.py in the Blender scripts folder with the one in the zip, or you
can simply correct the error yourself by editing the script you have.

About line 382 in anm_import.py you should find the command raiseIOError "No Bone Animations Loaded."  This should be deleted or commented out.  It was put there by me for debugging purposes and I forgot to remove it.  Sorry about that.

Also, I have added a user note to the readme file.

User Notes:

If you are using the gui, before reloading the Blender default settings, stop the script by hitting escape in the gui.  Failure to do so may lead to Blender crashing when you attempt to execute a tool from the gui.

I have been using tmg_gui for  awhile now, and while it is not ideal for all purposes, I find that it can be a great time saver for many repetitive, routine tasks.  You might be surprised how much time we spend in the file selector navigating through the various folders.





The Vintage Aircraft Package has undergone a complete overhaul.

This package  uses the new JN4 "Jenny" model by Beowulf71 which is optimized for
The Movies Game.  Since this model is incompatible with the old Berringer model,
this is intended as a complete  replacement.  All future scenes for this aircraft
will be based on this model.  All meshes and textures for the old model should be
discarded.

The update is available at lefty2000.com/TheMoviesGame.

From there, go to My Scene Mods to download the complete package (rev 3).



Jenny V00 by lefty2016



This is a follow up to the previous article, "TMG Category Files" in which I had concluded that if you wish to add a new costume to a category, you need the game category file so you can edit same and add your costume to the list.  Unfortunately, no one seems to have those category files;what we have are the category files from the baseline game which do not include the S&E costumes.  One solution is to add the S&E costumes to the list when you add your mod.  That way you will have your mod and not lose any content from the category.  This is easy if you can figure out the costume file names (*.cos) for the corresponding S&E costumes.  There are only two S&E costumes in category_military, and they were easy to identify, f_pilot_us_nam, and m_pilot_us_nam, so it was easy to reconstruct the .ini file for that category. 

Foolishly, I then set out to recreate all of the category_.ini files for all categories so I could add new costumes to any category without losing any S&E costumes.  Also, MED would then be able to recognize those costumes and they could be extracted from the game for editing if so desired.  Alas, it turned out to be a harder task than I was willing to undertake.  Some categories have quite a few S&E costumes and the *.cos files are not so easy to identify.  It's possible, but it would be a lot of work.  It would be nice if someone would do that, but I decided to look for another solution.

One possibility is to avoid messing with the category files would be to create new categories for your modifications, so I decided to try creating a new category called "Fantasy" in which I would place giant and dwarf costumes.  I looked at a couple of examples I had of mods people had made which created new categories and tried to follow the apparent recipe, but for some mysterious reason, the game would not recognize the new category.

I had added the  following to category.ini:

[category_fantasy]
    cat = Fantasy

It took awhile to figure out what was wrong.  What was wrong was that I did not understand what that second line was for.  I had named my category definition file "category_fantasy.ini"  That second line was supposed to tell the god damned game what god damned file to load.  When I finally realized my error, and renamed "category_fantasy.ini" to "Fantasy.ini," the category appeared in the game.

But Lionhead wasn't done with me yet.  After a successful test run, I was prepared to celebrate having learned something, so I started shutting down the game.  Instead of a graceful exit, however, I got that dreaded message from Microsoft: "Your stupid program has stopped working."  That's not supposed to happen!  I could not live with that.  So I  abandoned my attempt to create a new category Fantasy for several months, but finally I decided to try again, with a different category called Aviation which would include Beowulf's new aviator costumes.  The same thing happened, the new category worked fine, but the game crashed on exit.  After some experimenting I found that problem is caused by having a costume appear in more than one category.  I removed Beowulf's costumes from the category military and the crash on exit went away.  I restored my category Fantasy, removed the giant and dwarf costumes from where I had originally installed them, category_future and category_monster (giant gorilla).  No more crash on exit.

We learn from our mistakes if the consequences are serious enough and we can learn from the mistakes of others.  Also, it is a good idea to write down what  you have learned in case you forget it.  That's what this is.

The category files are loaded from the PAK files, if there is no corresponding category file in the game directory.  If you wish to add a new costume to this category, you will need to copy the baseline category file to the game directory and add your new costume to it.  The name of the new costume is the name of the .cos file, without the suffix.  For example, f_pilote.cos would be listed in the category_military.ini file as "f_pilote" and "m_pilot.cos" would be added as "m_pilot." 

If there is no category_military.ini file in the game directory, the game constructs one from the PAK files, but we do not know exactly how it does this.  What we do know, is that if you have "stunts and effects" installed and there is no category_military.ini file in the game directory, there will be 2 new costumes added to the original game, the m_pilot_us_nam costume and the f_pilot_us_nam.  The baseline category_military.ini file does not include these two costumes, so if you add a new costume to this category, you will need to add the S&E pilot costumes to the list as well as your new costume.  If you do not do this, when you add your new costume, the S&E costumes will disappear from the game, but your new costume will appear.

This is probably true for any category, so if you modify any category file, be sure to check to see if all of the S&E costumes are explicitly listed before you copy your new category file to the game directory.

If you use Movies Editor to extract the category files from the PAK files, you will find that the category file extracted does not necessarily include the S&E costumes.  Again, if you need to create a category file for a mod, you MUST explicitly enter the names of the S&E costumes in the new category file in addition to your new costume.

Blah, blah, blah.

More bad news.  The Blender 2.4 manual is no longer listed in Blender Wiki.  I have searched the site for it and have not been able to find it.  The 2.4 blender python API was still there, as of this morning.  I happened to have on my hard drive a PDF version of the manual and you can obtain if here.
I am out of ideas, so I am making the prototype tmg_gui package available for download.



There user will need to modify the code to configure the script for his computer environment, i.e., he will have to enter the locations of mesh files, anm files, and applications into the code.  Hopefully, the enclosed readme file will explain what you need to do to make the script work on your computer with your setup.



Gui Screen by lefty2016

I have added a few more buttons to the Prototype Movies Game Graphical Interface for Blender.  These buttons allow you to run an external application from Blender.  There is a button for The Movies Editor, FLM Reader, and The Movies Game.  These buttons can be handy, but the downside is, you can use only one tool from the GUI at a time.  If you start an application, you have to close it before you can do anything else in Blender.

This afternoon I tried using the GUI to do a real job, something I have been putting off.  The new JN4 airplane model by Beowulf71 is great, but the geometry is slightly different from the old model, which sits closer to the ground.  In order to replace the old model Jenny with the new model, some adjustment to the animation files are necessary, so I decided to update the plane_warmup scene to use Beowulf's model.

To make a long story short, it worked.

You can take my word for it, or, you can watch this rough cut video of the whole process.

It took three tries to get it done, and there were a couple of Blender crashes, but I am used to that so I am not deterred.