Jump to content
Sign in to follow this  
beno_83au

Sleeping into waking up animation.

Recommended Posts

If anyone comes across this post, it is outdated. Please see MIL_SleepingAI for a working version. Thanks. 

 

I've got a working script to run on AI to have them go from sleeping to waking up and adopting a certain stance. It works when I specify the unit in the script, but once I got it working I added some variables and a switch at the end to allow the user to specify a stance, including a random one, from the [] execVM. But that's where it stopped working.

Example:

Working:

[color="#FF8040"][color="#000000"]_pos[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"Middle"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"Up"[/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]call[/b][/color] BIS_fnc_selectRandom[color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]///////[/i][/color]
[color="#006400"][i]//Start the unit off "sleeping".[/i][/color]
[color="#006400"][i]//This will be moved elsewhere later (trigger, init or something).[/i][/color]
[color="#006400"][i]///////[/i][/color]

man1 [color="#191970"][b]disableAI[/b][/color] [color="#7A7A7A"]"Anim"[/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]switchMove[/b][/color] [color="#7A7A7A"]"AinjPpneMstpSnonWrflDnon"[/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]setPos[/b][/color] [color="#8B3E2F"][b]([/b][/color]testBag [color="#191970"][b]modelToWorld[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0.25[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]///////[/i][/color]
[color="#006400"][i]//Puts a gap between the unit starting out asleep[/i][/color]
[color="#006400"][i]//and then waking up.[/i][/color]
[color="#006400"][i]///////[/i][/color]

[color="#191970"][b]sleep[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]///////[/i][/color]
[color="#006400"][i]//Anims to roll onto their guts, then into normal[/i][/color]
[color="#006400"][i]//prone once they're done.[/i][/color]
[color="#006400"][i]///////[/i][/color]

man1 [color="#191970"][b]playMove[/b][/color] [color="#7A7A7A"]"AinjPpneMstpSnonWrflDnon_rolltofront"[/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]addEventHandler[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"AnimDone"[/color][color="#8B3E2F"][b],[/b][/color][color="#8B3E2F"][b]{[/b][/color]
man1 [color="#191970"][b]switchMove[/b][/color] [color="#7A7A7A"]"AmovPpneMstpSrasWrflDnon"[/color][color="#8B3E2F"][b];[/b][/color]	
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]///////[/i][/color]
[color="#006400"][i]//It seems the sleep is required to allow the previous anim to finish,[/i][/color]
[color="#006400"][i]//otherwise the rest fails.[/i][/color]
[color="#006400"][i]///////[/i][/color]

[color="#191970"][b]sleep[/b][/color] [color="#FF0000"]3[/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]removeEventHandler[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"AnimDone"[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]enableAI[/b][/color] [color="#7A7A7A"]"Anim"[/color][color="#8B3E2F"][b];[/b][/color]
man1 [color="#191970"][b]setUnitPos[/b][/color] [color="#000000"]_pos[/color][color="#8B3E2F"][b];[/b][/color][/color]
 

Made with KK's SQF to BBCode Converter

Not working (run using nul = [man1,testBag,"Up"] execVM "test.sqf"):

[color="#FF8040"][color="#191970"][b]private[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"_unit"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_bed"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"_pos"[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#1874CD"]_unit[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]_this[/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]0[/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_bed[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]_this[/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b];[/b][/color]
[color="#000000"]_pos[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#000000"]_this[/color] [color="#191970"][b]select[/b][/color] [color="#FF0000"]2[/color][color="#8B3E2F"][b];[/b][/color]

[color="#1874CD"]_unit[/color] [color="#191970"][b]disableAI[/b][/color] [color="#7A7A7A"]"Anim"[/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]switchMove[/b][/color] [color="#7A7A7A"]"AinjPpneMstpSnonWrflDnon"[/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]setPos[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#1874CD"]_bed[/color] [color="#191970"][b]modelToWorld[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0.25[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#191970"][b]sleep[/b][/color] [color="#FF0000"]1[/color][color="#8B3E2F"][b];[/b][/color]

[color="#1874CD"]_unit[/color] [color="#191970"][b]playMove[/b][/color] [color="#7A7A7A"]"AinjPpneMstpSnonWrflDnon_rolltofront"[/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]addEventHandler[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"AnimDone"[/color][color="#8B3E2F"][b],[/b][/color][color="#8B3E2F"][b]{[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]switchMove[/b][/color] [color="#7A7A7A"]"AmovPpneMstpSrasWrflDnon"[/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#191970"][b]sleep[/b][/color] [color="#FF0000"]3[/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]removeEventHandler[/b][/color] [color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"AnimDone"[/color][color="#8B3E2F"][b],[/b][/color][color="#FF0000"]0[/color][color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#1874CD"]_unit[/color] [color="#191970"][b]enableAI[/b][/color] [color="#7A7A7A"]"Anim"[/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]///////[/i][/color]
[color="#006400"][i]//So, all the same (except the variables) up until here.[/i][/color]
[color="#006400"][i]//Switch then is supposed to determine the stance.[/i][/color]
[color="#006400"][i]///////[/i][/color]

[color="#191970"][b]hint[/b][/color] [color="#191970"][b]str[/b][/color] [color="#000000"]_pos[/color][color="#8B3E2F"][b];[/b][/color]

[color="#191970"][b]switch[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#000000"]_pos[/color][color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
[color="#191970"][b]case[/b][/color] [color="#7A7A7A"]"Up"[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#1874CD"]_unit[/color] [color="#191970"][b]setUnitPos[/b][/color] [color="#7A7A7A"]"Up"[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#191970"][b]case[/b][/color] [color="#7A7A7A"]"Middle"[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#1874CD"]_unit[/color] [color="#191970"][b]setUnitPos[/b][/color] [color="#7A7A7A"]"Middle"[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#191970"][b]case[/b][/color] [color="#7A7A7A"]"Down"[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#1874CD"]_unit[/color] [color="#191970"][b]setUnitPos[/b][/color] [color="#7A7A7A"]"Down"[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#191970"][b]case[/b][/color] [color="#7A7A7A"]"NotProne"[/color][color="#8B3E2F"][b]:[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#1874CD"]_unit[/color] [color="#191970"][b]setUnitPos[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b][[/b][/color][color="#7A7A7A"]"MIDDLE"[/color][color="#8B3E2F"][b],[/b][/color][color="#7A7A7A"]"UP"[/color][color="#8B3E2F"][b]][/b][/color] [color="#191970"][b]call[/b][/color] BIS_fnc_selectRandom[color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#006400"][i]//default {_unit setUnitPos (["Down","Middle","Up"] call BIS_fnc_selectRandom)};[/i][/color]
[color="#191970"][b]default[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#191970"][b]hint[/b][/color] [color="#7A7A7A"]"default"[/color][color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color][/color]
 

Made with KK's SQF to BBCode Converter

When I run the second script the switch isn't firing at all. _pos returns as "Up", as per the hint just before the switch, but it wont pass into the switch condition. Why is that?

Share this post


Link to post
Share on other sites

The switch does fire. It's your event handler that's setup incorrectly. The way it is right there does not work. _unit is unknown inside that handler script. If you want to refer to the unit the handler is added to, you need to use "_this select 0":

_unit addEventHandler ["AnimDone",{
    (_this select 0) switchMove "AmovPpneMstpSrasWrflDnon";
}];

Share this post


Link to post
Share on other sites

Great!! Works, I understand why that was failing now, so thanks. I'll put up a proper write-up a bit later for anyone interested.

Share this post


Link to post
Share on other sites

Why do you have to go in the trouble of using multiple animations to wake up? Why not use the animation from the campaign Adapt. (Yes, it looks like their waking up to wtf all the time, but you could always create your own ;) )

Share this post


Link to post
Share on other sites

I've never looked into custom animations and I don't think I'll be starting that any time soon, I don't really have time to add that capability to my ever growing list of amateur adventures. But I've only used 3 anims in this anyway, one at the very beginning and then 2 when it's time to wake the AI up. It works/looks alright, so I don't think there's too many.

However, whats the anim used in Adapt? I'm only very early into the campaign (as much as I've loved this game since CWC, campaign completion hasn't been my strong point) and haven't seen anyone "waking up".

---------- Post added at 12:54 ---------- Previous post was at 12:37 ----------

Updated post on the finished version now anyway, tested and works on SP and MP using dedi-lan host, and it's more simplified/automated than what's posted here.

SCRIPT-WORKING-AI-Sleep-To-Waking-Up

Share this post


Link to post
Share on other sites

Ah, that's fine. :cool: (I suggest getting blender and arma toolbox, if you want to do things like animating ;) )

Also, here is the code for the waking up animation:

player switchMove "Acts_UnconsciousStandUp_part1";

If you want the sound with it, here is the code for that as well:

playSound "b_in_intro";

Share this post


Link to post
Share on other sites

Ok, I see what you're getting at with that animation. I like it, but I've aimed my script towards a "stand-to" event, or something similar. So they're reacting to contact. It'll be good to have this one for less tense wake ups though. Kinda how I wake up most morning (except I whinge and complain a lot more).

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×