Jump to content

Cutscene for multiplayer and converting and ASE model


OCD2

Recommended Posts

Im hoping to make a "simple" brief few second cutscene for a map -  a ship flying and landing.

Was wondering if there is a reliable working option for making an ASE "model", and converting it to a MD3 format.         

I have absolutely no modeling program experience, and want to use a gtk radiant created ASE model to use it as a func_static to move/animate it for the cutscene when a map loads.

Will the SP cutscene tutorials apply for multiplayer maps?

 

Link to comment

MP has no support for cutscenes. You can make things fly around, but you can't take the camera away from the players, they'll remain in control, as far as I know.

Why go through the trouble of making an ASE out of brushes instead of simply making the brushes the func_static and moving them directly? But if you do want to use ASE, I think you can target a misc_model to a func_static to attach it, in which case you don't need to convert it to md3.

OCD2 likes this
Link to comment
8 hours ago, mrwonko said:

MP has no support for cutscenes. You can make things fly around, but you can't take the camera away from the players, they'll remain in control, as far as I know.

Why go through the trouble of making an ASE out of brushes instead of simply making the brushes the func_static and moving them directly? But if you do want to use ASE, I think you can target a misc_model to a func_static to attach it, in which case you don't need to convert it to md3.

Im highly sleep deprived at the moment, so bear with me.   

Maybe cutscene is the wrong term.   I've seen multi player levels that begin with a short intro "movie",  so I know that it is somehow achievable.   The map republic cruiser for example has a short intro movie that plays during the countdown to a match starting.   Its a ship flying and landing, which is precisely what inspired me and what I was hoping to reproduce in my own map.   

Also,  the map lunar base has a cutscene that plays at the end of a match - rebels being executed if they lose, rebel ship flying away if they win.

As far as why I was intending making the ASE out of brushes, and then converting to an MD3 -     Eventually I will delve into 3d modelling, but its not in my immediate plans.      My (sleep deprived) researching indicated that using an MD3 was the only way to use func_static and move a model for making cutscenes.    

Though if what you wrote is possible,  I should be able to make my "model" via brushes,  make it a func_static and then make my "movie" - without having to jump through all the hoops of figuring out conversion from ASE to MD3 or trying to learn 3d modelling.     

Thank you.

 

 

Link to comment
4 hours ago, Ramikad said:

Cutscene isn't really the proper term in this case - the ones you mentioned are very simply scripted sequences, that can happen either during intermission (at the end of the game, for example) or at any time during gameplay. It's all a matter of scripting them and running the script in-game whenever you want.

You can also attach .ase models to func_static, so you're not limited to .md3 for that sort of scripting. I think even .obj could work, at least I know Radiant can load them. So simply creating .ase models and attaching them to movable func_static (always remember a system/origin brush!) is the easiest way to achieve what you want.

You've really been instrumental in keeping me moving forward the past few months while I'm learning the software,  shaders and scripting.    

Thank you for all of the succinct answers.      I have a better idea now how to proceed.



 

 

Ramikad likes this
Link to comment
  • 1 month later...
On 10/29/2020 at 6:29 PM, Ramikad said:

Cutscene isn't really the proper term in this case - the ones you mentioned are very simply scripted sequences, that can happen either during intermission (at the end of the game, for example) or at any time during gameplay. It's all a matter of scripting them and running the script in-game whenever you want.

You can also attach .ase models to func_static, so you're not limited to .md3 for that sort of scripting. I think even .obj could work, at least I know Radiant can load them. So simply creating .ase models and attaching them to movable func_static (always remember a system/origin brush!) is the easiest way to achieve what you want.

 

What do you do to make the script fire and run at intermission?       

And if I used brushes as func_static with an origin,  how to I make it hide and spawn on start of script running?

Link to comment


More scripting questions, and perhaps more clarity for what im trying to achieve.   

1.  How to you make an move block that rotates the script_targetname in the opposite direction(counterclockwise)?       I had (0 180 0) in my rotation vector, and changed it to (0 -180 0) - no change the brush still rotates in the same direction (clockwise).      Script below.

2.  What do you do to make a script fire and run at intermission for multiplayer?       Ive tried a few things but cannot figure out how to make the script run during intermission.         EDIT:  I think I found a solution to this question.   Researched and found out there was a key "spawnscript".   I attached that to a few things trying to make it work... eventually trying it on Worldspawn -   seems to work,  is that a proper solution or is there something better?

3.  And if I used brushes as func_static mover,  how to I make it spawn on start of script running?       I want my func_static to be invisible before the script is run, I cannot figure out how to accomplish.

Ive been working on it for a good while, and having a hard time finding solutions.

 

Here is the script thats not cooperating:

//Generated by BehavEd

rem ( "rci" );

affect ( "rcflyin", /*@AFFECT_TYPE*/ FLUSH )
{
    move ( $tag( "begin", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "approach", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "turn", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    rotate ( < 0.000 -180.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "land", ORIGIN)$, < 0.000 -180.000 0.000 >, 1000.000 );
}
 

Link to comment
On 12/29/2020 at 6:59 PM, fullkevlar said:


More scripting questions, and perhaps more clarity for what im trying to achieve.   

1.  How to you make an move block that rotates the script_targetname in the opposite direction(counterclockwise)?       I had (0 180 0) in my rotation vector, and changed it to (0 -180 0) - no change the brush still rotates in the same direction (clockwise).      Script below.

2.  What do you do to make a script fire and run at intermission for multiplayer?       Ive tried a few things but cannot figure out how to make the script run during intermission.         EDIT:  I think I found a solution to this question.   Researched and found out there was a key "spawnscript".   I attached that to a few things trying to make it work... eventually trying it on Worldspawn -   seems to work,  is that a proper solution or is there something better?

3.  And if I used brushes as func_static mover,  how to I make it spawn on start of script running?       I want my func_static to be invisible before the script is run, I cannot figure out how to accomplish.

Ive been working on it for a good while, and having a hard time finding solutions.

 

Here is the script thats not cooperating:

//Generated by BehavEd

rem ( "rci" );

affect ( "rcflyin", /*@AFFECT_TYPE*/ FLUSH )
{
    move ( $tag( "begin", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "approach", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "turn", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );
    rotate ( < 0.000 -180.000 0.000 >, 1000.000 );
    wait ( 1000.000 );
    move ( $tag( "land", ORIGIN)$, < 0.000 -180.000 0.000 >, 1000.000 );
}
 

1. Not sure if it's possible - try rotating twice, first at -90 and then to -180.

2. If it works, then it definitely is a solution. :oldtongue:

3. You can either spawn it and hide it somewhere, and move it back when it has to be seen, or you can try a script with a convenient:

//(BHVD)
set ( /*@SET_TYPES*/ "SET_INVISIBLE", /*@BOOL_TYPES*/ "true" );

It should work on brushes too, if I remember correctly. You can set it to false at the start of the moving script, when you want it to be seen again.

OCD2 likes this
Link to comment

Thanks for the information and help!

To address the questions:

1.  Setting the rotation incrementally, like you mentioned, did the trick.  Also, each stage had to reflect the rotation vector of the one prior, even in the move blocks- or it did some hilarious unexpected rotations.

2.  Lol.  It seems to work, though I believe most of the examples I've seen only begin their scripted "intro" after the first round was played.    Not sure it matters, just an observation.    Is there a way to script a script to not begin working until a round has been played?

3.  Oh, thank you, the invisible scripting should work - I plan to use it for a ship flying in and landing.   I want to attempt making an effect of it appearing, so starting invisible should be really helpful.

 

Link to comment
12 hours ago, Ramikad said:

1. Not sure if it's possible - try rotating twice, first at -90 and then to -180.

2. If it works, then it definitely is a solution. :oldtongue:

3. You can either spawn it and hide it somewhere, and move it back when it has to be seen, or you can try a script with a convenient:


//(BHVD)
set ( /*@SET_TYPES*/ "SET_INVISIBLE", /*@BOOL_TYPES*/ "true" );

It should work on brushes too, if I remember correctly. You can set it to false at the start of the moving script, when you want it to be seen again.

I tried the set invisible command you recommended,  it did not work.

I have a func_static (composed of brushes) that im using as my "model". 

This is how I applied the command:     


affect ( "rcflyin", /*@AFFECT_TYPE*/ FLUSH )
{
    set ( /*@SET_TYPES*/ "SET_INVISIBLE", /*@BOOL_TYPES*/ "true" );
    wait ( 3000.000 );
    set ( /*@SET_TYPES*/ "SET_INVISIBLE", /*@BOOL_TYPES*/ "false" );
    move ( $tag( "begin", ORIGIN)$, < 0.000 0.000 0.000 >, 1000.000 );

The func_static model stays visible, and then proceeds to run the rest of the script.   

Did I apply it to the script incorrectly?

 

 

edit: something I noticed, the func_static is visible, but now semi solid  - you can pass through it, though your character stutters little like he is swimming through glue. 

 

Link to comment

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...