SUBSIM Radio Room Forums

SUBSIM Radio Room Forums (https://www.subsim.com/radioroom/index.php)
-   SH5 Mods Workshop (https://www.subsim.com/radioroom/forumdisplay.php?f=249)
-   -   [TEC] Crew Scripting (https://www.subsim.com/radioroom/showthread.php?t=163616)

Heretic 03-06-10 09:17 PM

[TEC] Crew Scripting
 
The crewmen are referenced by the waypoint they are initially assigned to. Waypoints are prefixed by the compartment.
CR - Control Room
CT - Conning Tower
DER - Diesel Engine Room
QRF - Forward Quarters
RR - Radio Room, part of QRF
SQ - Stern Quarters
TRA - Aft Torpedo Room
TRF - Forward Torpedo Room
WP - Weapon?
WT - Watch Tower

The waypoints for the Control Room are:
CR_CHIEF - Chief starts here so he is CR_CHIEF
CR_CHIEF_MAP
CR_HA - Aft Hydroplane operator
CR_HELM - Helmsman
CR_HF - Fore Hydroplane
CR_LADDER - halfway up the ladder
CR_NAV - Navigator
CR_SO_01 - Second officer
CR_SO_MAP01
CR_SO_MAP01
CR_SO_PER
CR_STAIRS - foot of the ladder
CR_VALVE - Ballast tank operator
etc...

These are the Crewmen we currently have to work with:
CR_CHIEF - Chief Engineer
CR_HA - Aft Hydroplane Operator
CR_HELM - Helmsman
CR_HF - Fore Hydroplane Operator
CR_NAV - Navigator
CR_SO_01 - Second Officer
CR_VALVE - Ballast Tank Operator
DER_DE_CPO - Engine Room Chief
DER_DE_PORT01 - Port Diesel Operator
DER_DE_STB01_A - Starboard Diesel Operator
QRF_Petty_01 - Petty Officer 01
QRF_Petty_02 - Petty Officer 02
QRF_WATCH - Watch Officer
RR_HIDRO - Hydrophone Operator
RR_RADIO_A - Radio Operator
SQ_BED01 - Crewman in Bunk 01
SQ_BED02 - Crewman in Bunk 02
SQ_BED03 - Crewman in Bunk 03
SQ_BED04 - Crewman in Bunk 04
SQ_BOSUN_A - Bosun
SQ_COOK_A - Cook
TRA_EE_PORT01_A - Port Motor Operator 01
TRA_EE_PORT02 - Pot Motor Operator 02
TRA_EE_STB02 - Starboard Motor Operator
TRA_LOAD01 - Aft Torpedo Crewman
TRF_LOAD01 - Forward Torpedo Crewman 01
TRF_LOAD03 - Forward Torpedo Crewman 02
TRF_LOAD05 - Forward Torpedo Crewman 03

The animations are designed to work from specific waypoints. They are prefixed with that compartment and waypoint. So "CR_CHIEF_Idle01" is set up to work on a character in waypoint CR_CHIEF. It doesn't have to be the Chief and is doesn't have to be used only in that waypoint. Things might not line up, you may get clipping, etc, if you use it somewhere else. The animations are in data\Characters\Animations.

Heretic 03-06-10 09:23 PM

Scripting commands
The script files are text files with an aix suffix in data\scripts\AI\crew. they can be edited using any text editor. You define 'strategies' that the crewmen will perform when the circumstances you define for them are met. So, you can have different behaviors when surfaced or submerged, etc. I've mostly dealt with the idle strategies, so that's what I'll describe. You can also set up strategies for use with commands.

Here are the functions I've identified

Wp:GetCurrentlyLoadingTube()
Wp:GetGlobalVariable(variable)
Wp:IsBunkerState()
Wp:IsCharacterPosture(val) A,B,C,D,E (don't know what the postures are)
Wp:IsConningTower("tower")
Wp:IsCrewState(val) DMG_TKN, HUNTER, HUNTED, PROX_EXPL, T_FIRED, T_TRAVEL, T_HIT, T_MISS, SIL_RUN, B_STATIONS - B_STATIONS doesn't appear to work
Wp:IsCurrentWaypoint("waypoint")
Wp:IsGunManned(slot)
Wp:IsSubmerged()
Wp:IsSurfaced()
Wp:IsTorpedoLoadingInProgress()
Wp:IsTutorial()

Wp:BindAvatarCameraToObject("object", var)
Wp:DeactivateCrewState(val)
Wp:DoNothing()
Wp:ExecuteCommand
Wp:GetDistanceToAvatar()
Wp:GetGunType(slot)
Wp:GetHydrophoneState()
Wp:GetRadarState()
Wp:Goto("waypoint")
Wp:LoadTorpedo("animation", val)
Wp:ManTheGun(slot, "text", role) - ROLE_GUNNER, ROLE_TRAV, ROLE_ELEV
Wp:PlayAnimation("animation")
Wp:PlayAnimationAndWait("animation")
Wp:PlayAttenuatedSoundWithLipsync("file", delay);
Wp:PlaySoundWithLipsync("file", delay);
Wp:ScriptCompleted();
Wp:SetBodyPartVisibility(part, 0/1) VERY nice. Can change and add parts
Wp:SetGlobalVariable(variable, value)
Wp:SetNonInteractive()
Wp:Teleport("waypoint")
Wp:UnbindAvatarCamera(1)
Wp:UnmanTheGun(slot, role)

Heretic 03-06-10 09:24 PM

So here's an example using the Chief. His idles entry are defined in the submarine files

Quote:

strategy CR_CHIEF_IDLE01(wp)
{
strategies Define the strategies
{
CR_CHIEF_TUTORIAL,
CR_CHIEF_NORMAL,
CR_CHIEF_DAMAGE_TAKEN,
CR_CHIEF_PROXIMITY_EXPLOSIONS,
CR_CHIEF_HUNT
}
}
Now here's his NORMAL strategy. The precond statement tells under what conditions this strategy will be used. This one is when the CrewState is not ("!" means not) DMG_TKN, PROX_EXPL, HUNTER, or HUNTED and it's not both the Tutorial and not in the bunker

Quote:

strategy CR_CHIEF_NORMAL(wp)
{
precond
{
!Wp:IsCrewState(DMG_TKN|PROX_EXPL|HUNTER|HUNTED) and !(Wp:IsTutorial() and !Wp:IsBunkerState())
}
action
{

if Wp:IsCurrentWaypoint( "CR_CHIEF" ) then
{
Wp:PlayAnimationAndWait( "CR_CHIEF_Idle01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Talk2HA_01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Idle02" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Talk2HELM_01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Idle01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Talk_VALVE01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_Idle01" );
Wp:Goto("CR_CHIEF_MAP");
}
endif;
if Wp:IsCurrentWaypoint( "CR_CHIEF_MAP" ) then
{
Wp:PlayAnimationAndWait( "CR_CHIEF_MAP_Idle01" );
Wp:PlayAnimationAndWait( "CR_CHIEF_MAP_Idle02" );
Wp:PlayAnimationAndWait( "CR_CHIEF_MAP_Idle03" );
Wp:Goto("CR_CHIEF");
}
endif;

Wp:ScriptCompleted(); <---- IMPORTANT
}
}
So if he's currently at waypoint "CR_CHIEF", he'll perform a series of animations, then move to "CR_CHIEF_MAP". If he's at the "CR_CHIEF_MAP", he'll do a different set and move back to "CR_CHIEF". Browse through the files and it's pretty easy to figure out what's going on and the potential of this.

Heretic 03-08-10 11:45 AM

Here's some simple examples using the function Wp:SetBodyPartVisibility().
syntax is Wp:SetBodyPartVisibility("object", 1 or 0); 1 for on, 0 for off. Objects are defined in the body parts file in Characters folder.

Crewmen are made up of Head, Left Eye, Right Eye, Torso, and Pants. Optionally they can have a Hat and an Object. They start out as defined in the CHR files, be can all be changed with this function.


Add binoculars to a crewman.
Quote:

Wp:SetBodyPartVisibility("object1_Binocular", 1);
Adding a hat. Not all hats work on all heads. Some of the larger heads will show through the hat.
Quote:

Wp:SetBodyPartVisibility("A_Hat01", 1);
Changing a uniform. Important to remove the old one or both will be displayed.
Quote:

Wp:SetBodyPartVisibility("D_Torso05", 1); <-- adds Torso05
Wp:SetBodyPartVisibility("D_Torso01", 0); <-- Removes Torso01
Adding a beard.
Quote:

Wp:SetBodyPartVisibility("object1_Barba_CAP13", 1);
Changing a head. It's best to also use the proper eyes. It's not required, but they might not line up right otherwise.
Quote:

Wp:SetBodyPartVisibility("B_Head03", 0);
Wp:SetBodyPartVisibility("B_EyeL03", 0);
Wp:SetBodyPartVisibility("B_EyeR03", 0);
Wp:SetBodyPartVisibility("D_Head10", 1);
Wp:SetBodyPartVisibility("D_EyeL10", 1);
Wp:SetBodyPartVisibility("D_EyeR10", 1);
The stock scripts use this function to convert the XO into the Captain for the tutorial. Whenever you see someone with something in their hand, a book, knife, screwdriver, whatever, it's done with this function.

urfisch 03-08-10 11:50 AM

:o

:yeah:

definitely a sticky...

thanks a lot!!

Dowly 03-08-10 12:16 PM

Thanks a ton! Very good info! :rock:

Say, have you looked into adding more waypoints? I was thinking if it would be possible with the IsBunkerState and some new waypoints have the crew standing on the deck of the uboat when it's in the bunker. :hmmm:

Or even better by adding new waypoints and (if possible) new state that is triggered by the player pressing a certain button have the crew standing on deck. Would be AWESOME to slowly sail through the harbor, returning from a long patrol with the crew standing on deck.

Heretic 03-08-10 12:27 PM

Quote:

Originally Posted by Dowly (Post 1302135)
Thanks a ton! Very good info! :rock:

Say, have you looked into adding more waypoints? I was thinking if it would be possible with the IsBunkerState and some new waypoints have the crew standing on the deck of the uboat when it's in the bunker. :hmmm:

As near as I can tell, waypoints are added with the Goblin Editor. They are associated with the submarine and bunker files. The problem with that is your scripts cease to be generic and have to be included with whatever sub mod added the waypoints. Assuming, I understand it correctly of course. To get a good deck gun crew and guys standing on the deck in the bunker, it'll be worth it. But once we start seeing submarine mods, compatibiltiy will become a real issue.

Therion_Prime 03-08-10 12:49 PM

Heres a list with all waypoints of the 7a:

http://img31.imageshack.us/img31/7046/waypoints.jpg

Therion_Prime 03-08-10 12:59 PM

EDIT: SOLVED! Set Actors directory in the GoblinEditors options to SH5 root folder.

Hmm, I get an error message when opening a waypoint gr2 file in the goblin editor:

http://img242.imageshack.us/img242/7493/errorvc.jpg

I hope this is not a showstopper. :-?

Therion_Prime 03-08-10 01:12 PM

Availiable jobs in GoblinEd:

http://img532.imageshack.us/img532/8739/jobsb.jpg

Notice: Deck gun and flak loader 1 and 2

Heretic 03-08-10 01:44 PM

Nice! I'm not sure what effect the jobs has. I noticed a lot of them are set incorrectly.

I really need to make a map using a uboat layout with all the waypoints marked.

Therion_Prime 03-08-10 01:53 PM

Ok, i found out how to load a sub into the goblin editor and display waypoints. Lots of stuff can be adjusted here:
http://img709.imageshack.us/img709/7528/wpchief.jpg

You can barely see the chiefs waypoint on the white collision floor to the right. Now I have to figure out how to move it and how to add more waypoints.

Heretic 03-08-10 01:54 PM

Manning Guns

To assign a crewman to a gun, you first must move him the appropriate waypoint. The easiest way is to use Teleport().

Quote:

Wp:Teleport("WP_A01_GUN"); This is the AA mount
Then you need to man the gun using ManTheGun() using the appropriate slot, animation and role

Quote:

Wp:ManTheGun(SLOT_A01, "20mm_C38_shield_twin_UP_DW", ROLE_GUNNER)
Some guns have one slot, some have more. The deck gun only has two slots which limits what we can do to add more crew. There are workarounds, but I have found one yet that works well enough.

Heretic 03-08-10 01:57 PM

Quote:

Originally Posted by Therion_Prime (Post 1302334)
Ok, i found out how to load a sub into the goblin editor and display waypoints. Lots of stuff can be adjusted here:

You can barely see the chiefs waypoint on the white collision floor to the right. Now I have to figure out how to move it and how to add more waypoints.

Cool stuff huh? I've gotten that far but never figured out how to change anything but the crew parts. That was before I figured out I could change them with scripts.

Be careful moving waypoints. The animations are built for them. If you move them, you may throw off an animation and have guys walking through walls or something.

GermanGS 03-08-10 07:42 PM

thanx this is def were ill spend my time


All times are GMT -5. The time now is 02:54 AM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © 1995- 2024 Subsim®
"Subsim" is a registered trademark, all rights reserved.