SUBSIM: The Web's #1 resource for all submarine & naval simulations since 1997 |
02-29-16, 07:02 PM | #121 |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
@ Vecko
I think I have pretty much figured out crew aix scripts. Let me know If you need for any help in tweaking them. I think it would be a good idea getting both gunners in QR1 (light FlaK gunners in stock game) to man one of the quad 20 mm FlaKs, one of them for elevation and the other for traverse, and the two degkgun gunners in QR2 to man the other quad gun. In order to do so we don't need to change bone names. The same gunner can be used to man guns in different slots, as far as a new strategy for each new slot is added to its script, and if/then routines are set conveniently for avoiding any possible conflict (i.e. the a gunner wanting to man two guns at the same time. |
03-01-16, 08:45 AM | #122 |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
U-FlaK's crew script updates
In case you need for them
White body text: TwOS/MFCM's code; orange strings: code added/modified by me. Gunner: QRF_PETTY01 in QR1 (role: A01 FlaKVierling traverse) Code:
strategy QRF_PETTY01_IDLE01(wp) { strategies { QRF_PETTY01_Sleeping, QRF_PETTY01_Manning_A01gun } } strategy QRF_PETTY01_Sleeping(wp) { precond { !Wp:IsGunManned(SLOT_A01) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_Cap06", 1); ################################################################## Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A01, ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_A01) != CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A01, ROLE_GUNNER) endif; Wp:Teleport("QRF_Petty_01"); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_talk_01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_1to2" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_2to1" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_talk_01" ); Wp:PlayAnimationAndWait( "QRF_Petty01_AtoC" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle01" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle04" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle05" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "QRF_Petty01_idle02_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty01_idle03_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty01_CtoA" ); Wp:ScriptCompleted(); } } strategy QRF_PETTY01_Manning_A01gun(wp) { precond { Wp:IsGunManned(SLOT_A01) } action { Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:PlayAnimationAndWait( "QRF_Petty01_leave_rush" ); Wp:Teleport("WP_A01_GUN"); if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:ManTheGun(SLOT_A01, "Vierling_L_R", ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C30) then Wp:ManTheGun(SLOT_A01, "20mm_C30_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C30_2) then Wp:ManTheGun(SLOT_A01, "20mm_C30_2_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C38_Twin) then Wp:ManTheGun(SLOT_A01, "20mm_C38_twin_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C38_Twin_Shield) then Wp:ManTheGun(SLOT_A01, "20mm_C38_shield_twin_UP_DW", ROLE_GUNNER) endif; Wp:ScriptCompleted(); } } Gunner: QRF_PETTY02 in QR1 (role: A01 FlaKVierling elevation) Code:
strategy QRF_PETTY02_IDLE01(wp) { strategies { QRF_PETTY02_Tutorial, QRF_PETTY02_Sleeping, QRF_PETTY02_Manning_A01gun, QRF_PETTY02_Manning_A02gun } } strategy QRF_PETTY02_Tutorial(wp) { precond { Wp:IsTutorial() and !Wp:IsBunkerState() } action { Wp:Teleport( "QRF_Watch" ); if Wp:GetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE) == 0 then { Wp:PlayAnimationAndWait("SAILOR02_Walk_near_player"); Wp:SetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE, 1); } endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE) == 1 then Wp:PlayAnimationAndWait("SAILOR02_Wait_near_door") endif; Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A01) == CANNON_Vierling and Wp:IsGunManned(SLOT_A01)) or (Wp:GetGunType(SLOT_A01) != CANNON_Vierling and Wp:IsGunManned(SLOT_A02))) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { ############## Uncomment for optional beard ##################### # Wp:SetBodyPartVisibility("object1_Barba_Cap18", 1); ################################################################# if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A01, ROLE_ELEV) endif; if (Wp:GetGunType(SLOT_A01) != CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A02, ROLE_GUNNER) endif; Wp:Teleport("QRF_Petty_02"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso06", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_1to2" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_2to1" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty02_AtoC" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle01" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle04" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle05" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "QRF_Petty02_idle02_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_idle03_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty02_CtoA" ); Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Manning_A01gun(wp) { precond { Wp:GetGunType(SLOT_A01) == CANNON_Vierling and Wp:IsGunManned(SLOT_A01) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_leave_rush" ); Wp:Teleport("WP_A01_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso06", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); ManTheGun(SLOT_A01, "Vierling_UP_DW", ROLE_ELEV) Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A01) != CANNON_Vierling and Wp:IsGunManned(SLOT_A02) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_leave_rush" ); Wp:Teleport("WP_A02_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso06", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C30) then Wp:ManTheGun(SLOT_A02, "20mm_C30_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C30_2) then Wp:ManTheGun(SLOT_A02, "20mm_C30_2_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C38_Twin) then Wp:ManTheGun(SLOT_A02, "20mm_C38_twin_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C38_Twin_Shield) then Wp:ManTheGun(SLOT_A02, "20mm_C38_shield_twin_UP_DW", ROLE_GUNNER) endif; Wp:ScriptCompleted(); } } Gunner: SQ_BED01 in QR2 (role: A02 FlaKVierling traverse) Code:
strategy SQ_BED01_IDLE01(wp) { strategies { SQ_BED01_Sleeping, SQ_BED01_Manning_A02gun, SQ_BED01_Manning_deck_gun } } strategy SQ_BED01_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02)) or (Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01))) } action { ############## Uncomment for optional beard ##################### # Wp:SetBodyPartVisibility("object1_Barba_Cap18", 1); ################################################################# if (Wp:GetGunType(SLOT_A02) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A02, ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_A02) != CANNON_Vierling) then Wp:UnmanTheGun(SLOT_M01, ROLE_TRAV) endif; Wp:Teleport("SQ_BED01"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso05", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Scratch01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A2B_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED01_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_B_Dream01" ); Wp:PlayAnimationAndWait( "SQ_BED01_B2A_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle04" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle05" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "SQ_BED01_idlle02_part02" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_idlle03_part02" ); Wp:PlayAnimationAndWait( "SQ_BED01_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED01_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_leave_rush" ); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso05", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:Teleport("WP_A02_GUN"); Wp:ManTheGun(SLOT_A02, "Vierling_L_R", ROLE_TRAV); Wp:ScriptCompleted(); } } strategy SQ_BED01_Manning_deck_gun(wp) { precond { Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_leave_rush" ); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso05", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:Teleport("WP_DECK_GUN"); Wp:ManTheGun(SLOT_M01, "88mm_L_R", ROLE_TRAV); Wp:ScriptCompleted(); } } Gunner: SQ_BED02 in QR2 (role: A02 FlaKVierling elevation) Code:
strategy SQ_BED02_IDLE01(wp) { strategies { SQ_BED02_Sleeping, SQ_BED02_Manning_A02gun, SQ_BED02_Manning_deck_gun } } strategy SQ_BED02_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02)) or (Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01))) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_Cap06", 1); ################################################################## if (Wp:GetGunType(SLOT_A02) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A02, ROLE_ELEV) endif; if (Wp:GetGunType(SLOT_A02) != CANNON_Vierling) then Wp:UnmanTheGun(SLOT_M01, ROLE_ELEV) endif; Wp:Teleport("SQ_BED02"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso03", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:SetBodyPartVisibility("A_Pants02", 1); Wp:SetBodyPartVisibility("A_Pants01", 0); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_A2B_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED02_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_B2A_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle02_01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "SQ_BED02_idlle02_02" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle03_01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED02_idlle03_02" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle04" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle05" ); Wp:PlayAnimationAndWait( "SQ_BED02_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED02_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02) } action { Wp:PlayAnimationAndWait( "SQ_BED02_leave_rush" ); Wp:Teleport("WP_A02_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso03", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:ManTheGun(SLOT_A02, "Vierling_UP_DW", ROLE_ELEV); Wp:ScriptCompleted(); } } strategy SQ_BED02_Manning_deck_gun(wp) { precond { Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01) } action { Wp:PlayAnimationAndWait( "SQ_BED02_leave_rush" ); Wp:Teleport("WP_DECK_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso03", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:ManTheGun(SLOT_M01, "88mm_UP_DW", ROLE_ELEV); Wp:ScriptCompleted(); } } Last edited by gap; 03-01-16 at 09:19 AM. |
03-01-16, 09:29 AM | #123 |
Navy Seal
|
Thanks for your efforts Gap!
I also have tried all kinds of tweaks in aix files but I just couldn't get rid of flipped or frozen crew problems... Did you test your changes in the game and with other U-boat types? Some screenshot?
__________________
Best regards... Vecko The Wolves of Steel v2.2.25_SH5 Expansion Pack_Full The Wolves of Steel v2.2.xx to v2.2.25 - Update PDF Install Instructions How to report an issue If You wish to support my work... |
03-01-16, 10:15 AM | #124 | |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
My pleasure
Quote:
- that bone is flawed somehow (remember that it had no rotation data in the stock conning tower). Possible solution: replace it with a clone of another bone with rotation data. - waypoints stored in Conning_7C41F_02.waypoints.GR2 might interfere negatively with the ones of the same name stored in the main conning tower GR2 file. Possible solution: scrap that file, or remove the WP_A01_GUN bone from it. - gunners are special characters in that their animations must be synchronized with gun animations. As you have noted a few days ago, all the FlaK guns in stock game point to the stern in their resting position. Is it possible that FlaK gun animations are made so that the character will always face the same direction, no matter their waypoint's rotation? It is a bit unlikely but... Possible solution: cloning and rotating Characters\Animations\Vierling_L_R.GR2 and Vierling_UP_DW.GR2 bones, and setting the clones files as A02 crew animations (?) If you mean that gunners were frozen at their gun station even after the command "man the FlaK guns" was withdrawn, I think I know why this happened and my updates to crew AI should solve the issue No, just finished with the script changes, and now I need to finish my work on LGN1's squid launcher before I leave |
|
03-01-16, 12:01 PM | #125 | |
Navy Seal
|
Quote:
Could you upload edited files so I could test them? Squid launcher? You're planning a new mod ?
__________________
Best regards... Vecko The Wolves of Steel v2.2.25_SH5 Expansion Pack_Full The Wolves of Steel v2.2.xx to v2.2.25 - Update PDF Install Instructions How to report an issue If You wish to support my work... |
|
03-01-16, 02:39 PM | #126 |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
Sure
Overwrite the content of Crew_Idle_Actions_QR1.aix and Crew_Idle_Actions_QR2.aix with the following code. QR1: Code:
# Crew_Idle_Actions_QR1.aix # Stock script modified by MightyFine Crew Mod 1.2.1 03/22/2010 # Edited by gap for The Wolves of Steel Mega Mod on 03/01/2016 strategy QRF_WATCH_IDLE01(wp) { strategies { QRF_WATCH_TUTORIAL, QRF_WATCH_SUBMERGED, QRF_WATCH_TORPEDO_HIT, QRF_WATCH_DAMAGE_TAKEN, QRF_WATCH_SURFACED } } strategy QRF_WATCH_TUTORIAL(wp) { precond { Wp:IsTutorial() and !Wp:IsBunkerState() } action { if Wp:GetGlobalVariable(TUT_VAR_QRF_WATCH_STATE) == 0 then { Wp:BindAvatarCameraToObject("Cam01_wake_up_box", 65); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M1", 10.767); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M2", 16.367); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M3", 17.733); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M4", 25.5); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M5", 29.9); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M6", 37.9); Wp:PlaySoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D01_M7", 44.567); Wp:PlayAnimationAndWait("SAILOR01_Wake_up"); Wp:UnbindAvatarCamera(1); Wp:Teleport("CR_NAV"); Wp:PlayAnimationAndWait("SAILOR01_Go_through_hatch"); Wp:SetGlobalVariable(TUT_VAR_QRF_WATCH_STATE, 1); } endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_WATCH_STATE) == 1 then { Wp:Teleport("CR_NAV"); if Wp:GetDistanceToAvatar() < 3 then Wp:SetGlobalVariable(TUT_VAR_QRF_WATCH_STATE, 2) else Wp:PlayAnimationAndWait("SAILOR01_Wait_near_ladder") endif; } endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_WATCH_STATE) == 2 then { Wp:Teleport("CR_NAV"); Wp:PlayAttenuatedSoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D03_M1", 0.3); Wp:PlayAttenuatedSoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D03_M2", 6.0); Wp:PlayAttenuatedSoundWithLipsync("WatchOfficer\Normal\TTM_QRF_WATCH_D03_M3", 15.733); Wp:PlayAnimationAndWait("SAILOR01_Scare_Navigator"); Wp:SetGlobalVariable(TUT_VAR_QRF_WATCH_STATE, 3); } endif; if Wp:GetGlobalVariable(TUT_VAR_CAPTAIN_STATE) > 0 then Wp:SetGlobalVariable(TUT_VAR_QRF_WATCH_STATE, 4) endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_WATCH_STATE) == 3 then Wp:PlayAnimationAndWait("SAILOR01_Wait_at_NAV_Table") endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_WATCH_STATE) == 4 then { Wp:Teleport("QRF_Watch"); Wp:PlayAnimationAndWait( "QRF_Watch_idle01" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle06" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle07" ); Wp:PlayAnimationAndWait( "QRF_Watch_change_pose" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle02" ); Wp:PlayAnimationAndWait( "QRF_Watch_inspect" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle09" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle10" ); Wp:PlayAnimationAndWait( "QRF_Watch_silence" ); Wp:Goto( "QRF_Watch_C" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle03" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle04" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle05" ); Wp:Goto( "QRF_Watch" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle08" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle09" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle10" ); Wp:PlayAnimationAndWait( "QRF_Watch_return" ); } endif; Wp:ScriptCompleted(); } } strategy QRF_WATCH_SUBMERGED(wp) { precond { # (!Wp:IsCrewState(T_HIT) or !Wp:IsCharacterPosture(C)) and # (!Wp:IsCrewState(DMG_TKN) or !Wp:IsCharacterPosture(A)) and (Wp:IsSubmerged() or Wp:GetGlobalVariable(VAR_DIVE_ORDER) > 0 ) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { ############## Uncomment for alternate head ####################### # Wp:SetBodyPartVisibility("D_Head12", 0); # Wp:SetBodyPartVisibility("D_EyeL12", 0); # Wp:SetBodyPartVisibility("D_EyeR12", 0); # Wp:SetBodyPartVisibility("D_Head16", 1); # Wp:SetBodyPartVisibility("D_EyeL16", 1); # Wp:SetBodyPartVisibility("D_EyeR16", 1); # Wp:SetBodyPartVisibility("D_Torso03", 0); # Wp:SetBodyPartVisibility("D_Torso01", 1); ################################################################## ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_CAP13", 1); ################################################################## if !Wp:IsCurrentWaypoint("QRF_Watch_C") and !Wp:IsCurrentWaypoint("QRF_Watch") then { if Wp:IsCurrentWaypoint("WT_CR02") then { Wp:PlayAnimationAndWait( "DER_DE_CPO_explosion_event04" ); if Wp:GetGlobalVariable(VAR_CR_HF_LOC) < 5 and Wp:GetGlobalVariable(VAR_CR_HA_LOC) < 5 then { Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 4); Wp:SetBodyPartVisibility("object1_Binocular", 0); Wp:Teleport("CT_STAIRS"); Wp:PlayAnimationAndWait( "SQ_COOK_A2C_Part01" ); } endif; } else { if Wp:IsCurrentWaypoint("CT_STAIRS") then # wait for HF and HA to clear the stairs { Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 4); if Wp:GetGlobalVariable(VAR_CR_HF_LOC) < 3 and Wp:GetGlobalVariable(VAR_CR_HA_LOC) < 3 then { Wp:Teleport("CR_LADDER"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 3); Wp:PlayAnimationAndWait( "QRF_RTeam_01_screw" ); } else { Wp:PlayAnimationAndWait( "SQ_COOK_A2C_Part01" ); } endif; } else { if Wp:IsCurrentWaypoint("CR_LADDER") then { Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 3); if Wp:GetGlobalVariable(VAR_CR_HF_LOC) < 2 and Wp:GetGlobalVariable(VAR_CR_HA_LOC) < 2 then { Wp:PlayAttenuatedSoundWithLipsync("MFCM\fall02", 0); Wp:Teleport("CR_STAIRS"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 2); if Wp:GetGlobalVariable(VAR_DIVE_ORDER) == 2 then # jar landing on crash dive { Wp:PlayAttenuatedSoundWithLipsync("MFCM\fall02", 0.5); Wp:PlayAnimationAndWait("DER_DE_CPO_explosion_event01"); } endif; } else { Wp:Teleport("CT_STAIRS"); # in case he's blocking HA and HA Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 4); Wp:PlayAnimationAndWait( "QRF_RTeam_01_screw" ); } endif; } else { if Wp:IsCurrentWaypoint("CR_STAIRS") then { Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 2); Wp:PlayAttenuatedSoundWithLipsync("MFCM\footsteps02", 0.5); Wp:Goto("CR_WP08_DOOR"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 1); Wp:Teleport("RR_WP01_DOOR"); Wp:Goto( "QRF_Watch" ); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 0); } else { Wp:Teleport( "QRF_Watch" ); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 0); } endif; } endif; } endif; } endif; } else { if Wp:GetGlobalVariable(VAR_DIVE_ORDER) > 0 and Wp:IsSubmerged() and Wp:GetGlobalVariable(VAR_CR_HF_LOC) == 0 and Wp:GetGlobalVariable(VAR_CR_HA_LOC) == 0 then { Wp:SetGlobalVariable(VAR_DIVE_ORDER, 0); } endif; Wp:SetBodyPartVisibility("object1_Binocular", 0); Wp:SetBodyPartVisibility("D_Hat02", 0); Wp:PlayAnimationAndWait( "QRF_Watch_idle01" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle06" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle07" ); Wp:PlayAnimationAndWait( "QRF_Watch_change_pose" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle02" ); Wp:PlayAnimationAndWait( "QRF_Watch_inspect" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle09" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle10" ); Wp:PlayAnimationAndWait( "QRF_Watch_silence" ); Wp:Goto( "QRF_Watch_C" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle03" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle04" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle05" ); Wp:Goto( "QRF_Watch" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle08" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle09" ); Wp:PlayAnimationAndWait( "QRF_Watch_idle10" ); Wp:PlayAnimationAndWait( "QRF_Watch_return" ); } endif; Wp:ScriptCompleted(); } } strategy QRF_WATCH_TORPEDO_HIT(wp) { precond { Wp:IsCrewState(T_HIT) and Wp:IsCharacterPosture(C) and !Wp:IsCrewState(DMG_TKN) and Wp:IsSubmerged() and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:PlayAnimationAndWait( "QRF_Watch_JOY01" ); Wp:PlayAnimationAndWait( "QRF_Watch_JOY02" ); Wp:Goto( "QRF_Watch" ); Wp:PlayAnimationAndWait( "QRF_Watch_return" ); Wp:DeactivateCrewState(T_HIT); Wp:ScriptCompleted(); } } strategy QRF_WATCH_DAMAGE_TAKEN(wp) { precond { Wp:IsCrewState(DMG_TKN) and Wp:IsCharacterPosture(A) and Wp:IsSubmerged() and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:PlayAnimationAndWait( "QRF_Watch_explosion_event01" ); Wp:DeactivateCrewState(DMG_TKN); Wp:ScriptCompleted(); } } strategy QRF_WATCH_SURFACED(wp) { precond { Wp:GetGlobalVariable(VAR_DIVE_ORDER) == 0 and Wp:IsSurfaced() and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { ############## Uncomment for alternate head ####################### # Wp:SetBodyPartVisibility("D_Head12", 0); # Wp:SetBodyPartVisibility("D_EyeL12", 0); # Wp:SetBodyPartVisibility("D_EyeR12", 0); # Wp:SetBodyPartVisibility("D_Head16", 1); # Wp:SetBodyPartVisibility("D_EyeL16", 1); # Wp:SetBodyPartVisibility("D_EyeR16", 1); # Wp:SetBodyPartVisibility("D_Torso03", 0); # Wp:SetBodyPartVisibility("D_Torso01", 1); ################################################################### ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_CAP13", 1); ################################################################### if !Wp:IsCurrentWaypoint("WT_CR02") then { if Wp:IsCurrentWaypoint("QRF_Watch_C") or Wp:IsCurrentWaypoint("QRF_Watch") then { Wp:Teleport("QRF_Watch"); # Wp:SetBodyPartVisibility("D_Hat02", 1); Wp:PlayAnimationAndWait("QRF_Warch_leave_rush"); Wp:Teleport("CR_NAV"); Wp:PlayAttenuatedSoundWithLipsync("MFCM\footsteps02", 0.25); Wp:PlayAnimationAndWait("SAILOR01_Go_through_hatch"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 1); } else { if Wp:IsCurrentWaypoint("CR_NAV") then # wait for HA anf HF to go up ladder { if Wp:GetGlobalVariable(VAR_CR_HA_LOC) > 2 and Wp:GetGlobalVariable(VAR_CR_HF_LOC) > 2 then { Wp:Teleport("CR_STAIRS"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 2); Wp:PlayAnimationAndWait( "SQ_COOK_A2C_Part01" ); } else { Wp:PlayAnimationAndWait("SAILOR01_Wait_near_ladder"); } endif; } else { if Wp:IsCurrentWaypoint("CR_STAIRS") then { if Wp:GetGlobalVariable(VAR_CR_HA_LOC) != 3 and Wp:GetGlobalVariable(VAR_CR_HF_LOC) != 3 then { Wp:PlayAttenuatedSoundWithLipsync("MFCM\ladder_up", 0); Wp:Teleport("CR_LADDER"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 3); Wp:PlayAnimationAndWait( "QRF_RTeam_01_screw" ); Wp:Teleport("WT_CR02"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 5); } else { Wp:PlayAnimationAndWait("SQ_COOK_A2C_Part01"); } endif; } else { if !Wp:IsCurrentWaypoint("WT_CR02") then { Wp:Teleport("WT_CR02"); Wp:SetGlobalVariable(VAR_QRF_WATCH_LOC, 5); } endif; } endif; } endif; } endif; } else { Wp:SetBodyPartVisibility("object1_Binocular", 1); Wp:SetBodyPartVisibility("D_Torso03", 0); Wp:SetBodyPartVisibility("D_Torso01", 1); # Wp:SetBodyPartVisibility("D_Hat02", 1); Wp:PlayAnimationAndWait( "WATCH03_Idle01" ); Wp:PlayAnimationAndWait( "SECONDARY_IdleA09" ); Wp:PlayAnimationAndWait( "SECONDARY_Scan_with_Binoculars" ); } endif; Wp:ScriptCompleted(); } } strategy QRF_PETTY01_IDLE01(wp) { strategies { QRF_PETTY01_Sleeping, QRF_PETTY01_Manning_A01gun } } strategy QRF_PETTY01_Sleeping(wp) { precond { !Wp:IsGunManned(SLOT_A01) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_Cap06", 1); ################################################################## Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A01, ROLE_TRAV) else Wp:UnmanTheGun(SLOT_A01, ROLE_GUNNER) endif; Wp:Teleport("QRF_Petty_01"); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_talk_01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_1to2" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_2to1" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_01_talk_01" ); Wp:PlayAnimationAndWait( "QRF_Petty01_AtoC" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle01" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle04" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle05" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "QRF_Petty01_idle02_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty01_idle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty01_idle03_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty01_CtoA" ); Wp:ScriptCompleted(); } } strategy QRF_PETTY01_Manning_A01gun(wp) { precond { Wp:IsGunManned(SLOT_A01) } action { Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:PlayAnimationAndWait( "QRF_Petty01_leave_rush" ); Wp:Teleport("WP_A01_GUN"); if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:ManTheGun(SLOT_A01, "Vierling_L_R", ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C30) then Wp:ManTheGun(SLOT_A01, "20mm_C30_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C30_2) then Wp:ManTheGun(SLOT_A01, "20mm_C30_2_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C38_Twin) then Wp:ManTheGun(SLOT_A01, "20mm_C38_twin_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A01) == CANNON_20mm_C38_Twin_Shield) then Wp:ManTheGun(SLOT_A01, "20mm_C38_shield_twin_UP_DW", ROLE_GUNNER) endif; Wp:ScriptCompleted(); } } strategy QRF_PETTY02_IDLE01(wp) { strategies { QRF_PETTY02_Tutorial, QRF_PETTY02_Sleeping, QRF_PETTY02_Manning_A01gun, QRF_PETTY02_Manning_A02gun } } strategy QRF_PETTY02_Tutorial(wp) { precond { Wp:IsTutorial() and !Wp:IsBunkerState() } action { Wp:Teleport( "QRF_Watch" ); if Wp:GetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE) == 0 then { Wp:PlayAnimationAndWait("SAILOR02_Walk_near_player"); Wp:SetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE, 1); } endif; if Wp:GetGlobalVariable(TUT_VAR_QRF_PETTY02_STATE) == 1 then Wp:PlayAnimationAndWait("SAILOR02_Wait_near_door") endif; Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A01) == CANNON_Vierling and Wp:IsGunManned(SLOT_A01)) or (Wp:GetGunType(SLOT_A01) != CANNON_Vierling and Wp:IsGunManned(SLOT_A02))) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { ############## Uncomment for optional beard ##################### # Wp:SetBodyPartVisibility("object1_Barba_Cap18", 1); ################################################################# if (Wp:GetGunType(SLOT_A01) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A01, ROLE_ELEV) else Wp:UnmanTheGun(SLOT_A02, ROLE_GUNNER) endif; Wp:Teleport("QRF_Petty_02"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso06", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_1to2" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep02" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_2to1" ); Wp:PlayAnimationAndWait( "QRF_Petty_02_sleep01" ); Wp:PlayAnimationAndWait( "QRF_Petty02_AtoC" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle01" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle04" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle05" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "QRF_Petty02_idle02_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty02_idle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_idle03_part02" ); Wp:PlayAnimationAndWait( "QRF_Petty02_CtoA" ); Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Manning_A01gun(wp) { precond { Wp:GetGunType(SLOT_A01) == CANNON_Vierling and Wp:IsGunManned(SLOT_A01) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_leave_rush" ); Wp:Teleport("WP_A01_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso06", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); ManTheGun(SLOT_A01, "Vierling_UP_DW", ROLE_ELEV) Wp:ScriptCompleted(); } } strategy QRF_PETTY02_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A01) != CANNON_Vierling and Wp:IsGunManned(SLOT_A02) and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "QRF_Petty02_leave_rush" ); Wp:Teleport("WP_A02_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso06", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C30) then Wp:ManTheGun(SLOT_A02, "20mm_C30_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C30_2) then Wp:ManTheGun(SLOT_A02, "20mm_C30_2_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C38_Twin) then Wp:ManTheGun(SLOT_A02, "20mm_C38_twin_UP_DW", ROLE_GUNNER) endif; if (Wp:GetGunType(SLOT_A02) == CANNON_20mm_C38_Twin_Shield) then Wp:ManTheGun(SLOT_A02, "20mm_C38_shield_twin_UP_DW", ROLE_GUNNER) endif; Wp:ScriptCompleted(); } } strategy RR_RADIO_IDLE01(wp) { strategies { RR_RADIO_TUTORIAL, # old idle action RR_RADIO_Nothing_to_do, # these 3 strategies do exatcly the same thing, # but with a different condition. # # they probabily need to be like this so they can # be customized in the near future. RR_RADIO_Entering, RR_RADIO_In_use, RR_RADIO_Exiting } } strategy RR_RADIO_TUTORIAL(wp) { precond { Wp:GetRadarState() == 0 and Wp:IsTutorial() and !Wp:IsBunkerState() } action { if Wp:GetGlobalVariable(TUT_VAR_RR_RADIO_STATE) == 0 then { Wp:PlaySoundWithLipsync("RadioMan\Normal\TTM_RR_RADIO_D01_M8", 28.733); Wp:PlaySoundWithLipsync("RadioMan\Normal\TTM_RR_RADIO_D01_M9", 32.267); Wp:SetGlobalVariable(TUT_VAR_RR_RADIO_STATE, 1); } endif; Wp:PlayAnimationAndWait( "RR_RADIO_A_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_Idle02" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_GRAMOPHONE" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_RADIO" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part03" ); Wp:Goto( "RR_RADIO_B" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnob_Listen" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnobLeft" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part03" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnobRight" ); Wp:Goto( "RR_RADIO_C" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_LookAround01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle02" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle03" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle04" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle05" ); Wp:Goto( "RR_RADIO_A" ); Wp:ScriptCompleted(); } } # idle strategy strategy RR_RADIO_Nothing_to_do(wp) { precond { # if hydrophone is not used Wp:GetRadarState() == 0 and !(Wp:IsTutorial() and !Wp:IsBunkerState()) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Beard_CAP04", 1); ################################################################## Wp:PlayAnimationAndWait( "RR_RADIO_A_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_Idle02" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_GRAMOPHONE" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_RADIO" ); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_A_Write01_Part03" ); Wp:Goto( "RR_RADIO_B" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnob_Listen" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnobLeft" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part03" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnobRight" ); Wp:Goto( "RR_RADIO_C" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle02" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle03" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle04" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle05" ); Wp:Goto( "RR_RADIO_A" ); Wp:ScriptCompleted(); } } # captain is entering radar strategy RR_RADIO_Entering(wp) { precond { # if radar will be used by captain # "entering radar" - state Wp:GetRadarState() == 1 } strategies { RR_RADIO_MoveToB, RR_RADIO_DoIdle } } # captain is at the hydrophone strategy RR_RADIO_In_use(wp) { precond { # if captain is at the radar, and leaving # "exiting radar" - state Wp:GetRadarState() == 2 } strategies { RR_RADIO_MoveToB, RR_RADIO_DoIdle } } # captain is at the hydrophone strategy RR_RADIO_Exiting(wp) { precond { # if captain is at the hydrophone, and leaving # "exiting hydrophone" - state Wp:GetRadarState() == 3 } strategies { RR_RADIO_MoveToB, RR_RADIO_DoIdle } } strategy RR_RADIO_MoveToB(wp) { precond { Wp:IsCurrentWaypoint( "RR_RADIO_A" ) == 1 } action { Wp:Goto( "RR_RADIO_B" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnob_Listen" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part03" ); Wp:Goto( "RR_RADIO_C" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_LookAround01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle01" ); Wp:ScriptCompleted(); } } strategy RR_RADIO_DoIdle(wp) { precond { Wp:IsCurrentWaypoint( "RR_RADIO_A" ) == 0 } strategies { RR_RADIO_DoIdle_B, RR_RADIO_DoIdle_C } } strategy RR_RADIO_DoIdle_B(wp) { precond { Wp:IsCurrentWaypoint( "RR_RADIO_B" ) == 1 } action { Wp:PlayAnimationAndWait( "RR_RADIO_B_Idle01" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_TurnKnob_Listen" ); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part01" ); Wp:SetBodyPartVisibility("object2_Pencil_radio", 1); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part02" ); Wp:SetBodyPartVisibility("object2_Pencil_radio_radio", 0); Wp:PlayAnimationAndWait( "RR_RADIO_B_Write01_Part03" ); Wp:Goto( "RR_RADIO_C" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_LookAround01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle01" ); Wp:ScriptCompleted(); } } strategy RR_RADIO_DoIdle_C(wp) { precond { Wp:IsCurrentWaypoint( "RR_RADIO_C" ) == 1 } action { Wp:PlayAnimationAndWait( "RR_RADIO_C_LookAround01" ); Wp:PlayAnimationAndWait( "RR_RADIO_C_Idle01" ); Wp:ScriptCompleted(); } } strategy RR_HIDRO_IDLE01(wp) { strategies { # old idle action RR_HIDRO_Nothing_to_do_surfaced, RR_HIDRO_Nothing_to_do_submerged, # these 3 strategies do exatcly the same thing, # but with a different condition. # # they probabily need to be like this so they can # be customized in the near future. RR_HIDRO_Entering, RR_HIDRO_In_use, RR_HIDRO_Exiting } } # idle strategy strategy RR_HIDRO_Nothing_to_do_surfaced(wp) { precond { # if hydrophone is not used Wp:GetHydrophoneState() == 0 and !Wp:IsSubmerged() } action { Wp:Goto( "RR_HIDRO02" ); Wp:PlayAnimationAndWait( "RR_HIDRO_C_Idle11" ); Wp:PlayAnimationAndWait( "RR_HIDRO_C_Idle12" ); Wp:PlayAnimationAndWait( "RR_HIDRO_C_Idle13" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle08" ); Wp:PlayAnimationAndWait( "RR_HIDRO_D_Idle14" ); Wp:PlayAnimationAndWait( "RR_HIDRO_D_Idle15" ); Wp:PlayAnimationAndWait( "RR_HIDRO_D_Idle16" ); Wp:ScriptCompleted(); } } strategy RR_HIDRO_Nothing_to_do_submerged(wp) { precond { # if hydrophone is not used Wp:GetHydrophoneState() == 0 and Wp:IsSubmerged() } action { Wp:Goto( "RR_HIDRO" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle10" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle02" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle03" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle04" ); # Wp:PlayAnimationAndWait( "RR_HIDRO_Drop_headphones_part01" ); # Wp:SetBodyPartVisibility("object1_headphone01", 1); # Wp:SetBodyPartVisibility("object2_headphone02", 0); # Wp:PlayAnimationAndWait( "RR_HIDRO_Drop_headphones_part02" ); # Wp:SetBodyPartVisibility("object1_headphone01", 0); # Wp:PlayAnimationAndWait( "RR_HIDRO_Drop_headphones_part03" ); # Wp:SetBodyPartVisibility("object1_headphone01", 1); # Wp:PlayAnimationAndWait( "RR_HIDRO_Drop_headphones_part04" ); # Wp:SetBodyPartVisibility("object1_headphone01", 0); # Wp:SetBodyPartVisibility("object2_headphone02", 1); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle05" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle06" ); Wp:ScriptCompleted(); } } # captain is entering hydrophone strategy RR_HIDRO_Entering(wp) { precond { # if hydrophone will be used by captain # "entering hydrophone" - state Wp:GetHydrophoneState() == 1 } action { # if on "RR_HIDRO", go to "RR_HIDRO02" to # make room for the captain Wp:Goto( "RR_HIDRO02" ); # do idle stuff Wp:PlayAnimationAndWait( "RR_HIDRO_Idle02" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle03" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle04" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle05" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle06" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle10" ); Wp:ScriptCompleted(); } } # captain is at the hydrophone strategy RR_HIDRO_In_use(wp) { precond { # if captain is at the hydrophone, and leaving # "exiting hydrophone" - state Wp:GetHydrophoneState() == 2 } action { # if on "RR_HIDRO", go to "RR_HIDRO02" to # make room for the captain Wp:Goto( "RR_HIDRO02" ); # do idle stuff Wp:PlayAnimationAndWait( "RR_HIDRO_Idle02" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle03" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle04" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle05" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle06" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle10" ); Wp:ScriptCompleted(); } } # captain is at the hydrophone strategy RR_HIDRO_Exiting(wp) { precond { # if captain is at the hydrophone, and leaving # "exiting hydrophone" - state Wp:GetHydrophoneState() == 3 } action { # if on "RR_HIDRO", go to "RR_HIDRO02" to # make room for the captain Wp:Goto( "RR_HIDRO02" ); # do idle stuff Wp:PlayAnimationAndWait( "RR_HIDRO_Idle02" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle03" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle04" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle05" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle06" ); Wp:PlayAnimationAndWait( "RR_HIDRO_Idle10" ); Wp:ScriptCompleted(); } } Code:
# Crew_Idle_Actions_QR2.aix # Stock script modified by MightyFine Crew Mod 1.2 03/21/2010 # Edited by gap for The Wolves of Steel Mega Mod on 03/01/2016 strategy SQ_COOK_IDLE01(wp) { strategies { SQ_COOK_STEALING_FOOD_SCENE, SQ_COOK_NORMAL, SQ_COOK_DAMAGE_TAKEN, SQ_COOK_SILENT_RUNNING } } strategy SQ_COOK_STEALING_FOOD_SCENE(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) > 0 and Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) > 0) or (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) == 2) } action { Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 2 ); if Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) == 1 then Wp:DoNothing() else { Wp:PlayAnimationAndWait( "SQ_COOK_B_TALK_BOSUN" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_CHOPPING01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_THREATEN_BOSUN" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_HIT_BOSUN" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_LAUGH_AT_BOSUN" ); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 0); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part02" ); Wp:SetBodyPartVisibility("object2_spoon", 1); Wp:Goto( "SQ_COOK_A" ); Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 0 ); } endif; Wp:ScriptCompleted(); } } strategy SQ_COOK_NORMAL(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) != 2) and (!Wp:IsCrewState(DMG_TKN) or !Wp:IsCurrentWaypoint( "SQ_COOK_A" ) or !Wp:IsCurrentWaypoint( "SQ_COOK_B" )) and (!Wp:IsCrewState(SIL_RUN) or !Wp:IsCurrentWaypoint( "SQ_COOK_B" )) } action { if Wp:IsCharacterPosture(D) then { Wp:PlayAnimationAndWait( "SQ_COOK_D2B_Part01" ); Wp:PlayAnimationAndWait( "SQ_COOK_D2B_Part02" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Dance01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 0); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part02" ); Wp:SetBodyPartVisibility("object2_spoon", 1); Wp:Goto( "SQ_COOK_A" ); } endif; if !Wp:IsCharacterPosture(D) then { Wp:PlayAnimationAndWait( "SQ_COOK_A_StirPot01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_StirPotDancing01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A2B_Part01" ); Wp:SetBodyPartVisibility("object2_spoon", 0); Wp:PlayAnimationAndWait( "SQ_COOK_A2B_Part02" ); Wp:SetBodyPartVisibility("object2_knife", 1); Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 1 ); Wp:Goto( "SQ_COOK_B" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_CHOPPING01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Dance01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_CHOPPING01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Dance01" ); Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 0 ); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 0); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part02" ); Wp:SetBodyPartVisibility("object2_spoon", 1); Wp:Goto( "SQ_COOK_A" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_StirPotDancing01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_Taste01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_StirPot01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_DANCE02" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_TASTE_BURN01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_ADJUST_HEAT" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_TASTE_ADD_SALT" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_TASTE_DELICIOUS" ); Wp:PlayAnimationAndWait( "SQ_COOK_A_DANCE01" ); Wp:PlayAnimationAndWait( "SQ_COOK_A2C_Part01" ); Wp:SetBodyPartVisibility("object2_spoon", 0); Wp:Goto( "SQ_COOK_C" ); Wp:PlayAnimationAndWait( "SQ_COOK_C_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_COOK_C_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_C2B_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 1); Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 1 ); Wp:Goto( "SQ_COOK_B" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Dance01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Dance01" ); Wp:SetGlobalVariable( VAR_SQ_COOK_STATE, 0 ); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 0); Wp:PlayAnimationAndWait( "SQ_COOK_B2A_Part02" ); Wp:SetBodyPartVisibility("object2_spoon", 1); Wp:Goto( "SQ_COOK_A" ); } endif; Wp:ScriptCompleted(); } } strategy SQ_COOK_SILENT_RUNNING(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) != 2) and Wp:IsCrewState(SIL_RUN) and Wp:IsCurrentWaypoint( "SQ_COOK_B" ) } action { if Wp:IsCharacterPosture(B) then { Wp:PlayAnimationAndWait( "SQ_COOK_B2D_Part01" ); Wp:SetBodyPartVisibility("object2_knife", 0); Wp:PlayAnimationAndWait( "SQ_COOK_B2D_Part02" ); } endif; if Wp:IsCharacterPosture(D) then { Wp:PlayAnimationAndWait( "SQ_COOK_D_Idle01" ); Wp:PlayAnimationAndWait( "SQ_COOK_D_Idle02" ); Wp:PlayAnimationAndWait( "SQ_COOK_D_Idle03" ); } endif; Wp:ScriptCompleted(); } } strategy SQ_COOK_DAMAGE_TAKEN(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) != 2) and Wp:IsCrewState(DMG_TKN) and !Wp:IsCrewState(SIL_RUN) and (Wp:IsCurrentWaypoint( "SQ_COOK_A" ) or Wp:IsCurrentWaypoint( "SQ_COOK_B" ) or Wp:IsCurrentWaypoint( "SQ_COOK_D" )) } action { if Wp:IsCurrentWaypoint( "SQ_COOK_A" ) then { Wp:PlayAnimationAndWait( "SQ_COOK_A_Explosion_Event01" ); Wp:DeactivateCrewState(DMG_TKN); } endif; if Wp:IsCurrentWaypoint( "SQ_COOK_B" ) then { Wp:PlayAnimationAndWait( "SQ_COOK_B_explosion_event02" ); Wp:PlayAnimationAndWait( "SQ_COOK_B_Idle01" ); Wp:Goto( "SQ_COOK_A" ); Wp:DeactivateCrewState(DMG_TKN); } endif; if Wp:IsCurrentWaypoint( "SQ_COOK_D" ) then { Wp:PlayAnimationAndWait( "SQ_COOK_D_explosion_event03" ); Wp:DeactivateCrewState(DMG_TKN); } endif; Wp:ScriptCompleted(); } } strategy SQ_BED01_IDLE01(wp) { strategies { SQ_BED01_Sleeping, SQ_BED01_Manning_A02gun, SQ_BED01_Manning_deck_gun } } strategy SQ_BED01_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02)) or (Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01))) } action { ############## Uncomment for optional beard ##################### # Wp:SetBodyPartVisibility("object1_Barba_Cap18", 1); ################################################################# if (Wp:GetGunType(SLOT_A02) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A02, ROLE_TRAV) else Wp:UnmanTheGun(SLOT_M01, ROLE_TRAV) endif; Wp:Teleport("SQ_BED01"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso05", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Scratch01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_A2B_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED01_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_B_Dream01" ); Wp:PlayAnimationAndWait( "SQ_BED01_B2A_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED01_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle04" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle05" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle02_part01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "SQ_BED01_idlle02_part02" ); Wp:PlayAnimationAndWait( "SQ_BED01_idlle03_part01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_idlle03_part02" ); Wp:PlayAnimationAndWait( "SQ_BED01_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED01_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_leave_rush" ); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso05", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:Teleport("WP_A02_GUN"); Wp:ManTheGun(SLOT_A02, "Vierling_L_R", ROLE_TRAV); Wp:ScriptCompleted(); } } strategy SQ_BED01_Manning_deck_gun(wp) { precond { Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED01_leave_rush" ); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso05", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:Teleport("WP_DECK_GUN"); Wp:ManTheGun(SLOT_M01, "88mm_L_R", ROLE_TRAV); Wp:ScriptCompleted(); } } strategy SQ_BED02_IDLE01(wp) { strategies { SQ_BED02_Sleeping, SQ_BED02_Manning_A02gun, SQ_BED02_Manning_deck_gun } } strategy SQ_BED02_Sleeping(wp) { precond { !((Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02)) or (Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01))) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_Cap06", 1); ################################################################## if (Wp:GetGunType(SLOT_A02) == CANNON_Vierling) then Wp:UnmanTheGun(SLOT_A02, ROLE_ELEV) else Wp:UnmanTheGun(SLOT_M01, ROLE_ELEV) endif; Wp:Teleport("SQ_BED02"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Torso03", 1); Wp:SetBodyPartVisibility("A_Torso07", 0); Wp:SetBodyPartVisibility("A_Pants02", 1); Wp:SetBodyPartVisibility("A_Pants01", 0); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_A2B_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED02_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_B2A_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED02_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle02_01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "SQ_BED02_idlle02_02" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle03_01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED02_idlle03_02" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle04" ); Wp:PlayAnimationAndWait( "SQ_BED02_idlle05" ); Wp:PlayAnimationAndWait( "SQ_BED02_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED02_Manning_A02gun(wp) { precond { Wp:GetGunType(SLOT_A02) == CANNON_Vierling and Wp:IsGunManned(SLOT_A02) } action { Wp:PlayAnimationAndWait( "SQ_BED02_leave_rush" ); Wp:Teleport("WP_A02_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso03", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:ManTheGun(SLOT_A02, "Vierling_UP_DW", ROLE_ELEV); Wp:ScriptCompleted(); } } strategy SQ_BED02_Manning_deck_gun(wp) { precond { Wp:GetGunType(SLOT_A02) != CANNON_Vierling and Wp:IsGunManned(SLOT_M01) } action { Wp:PlayAnimationAndWait( "SQ_BED02_leave_rush" ); Wp:Teleport("WP_DECK_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Torso03", 0); Wp:SetBodyPartVisibility("A_Torso07", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); Wp:ManTheGun(SLOT_M01, "88mm_UP_DW", ROLE_ELEV); Wp:ScriptCompleted(); } } strategy SQ_BED03_IDLE01(wp) { strategies { SQ_BED03_Sleeping, SQ_BED03_Manning_Flakgun } } strategy SQ_BED03_Sleeping(wp) { precond { !Wp:IsGunManned(SLOT_S01) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Barba_Cap18", 1); ################################################################## Wp:UnmanTheGun(SLOT_S01, ROLE_ELEV); Wp:Teleport("SQ_BED03"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:PlayAnimationAndWait( "SQ_BED03_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_A2B_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED03_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_B_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_B2A_Turn" ); Wp:PlayAnimationAndWait( "SQ_BED03_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle01" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle02_part01" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle02_part02" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle03_part01" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle03_part02" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle04" ); Wp:PlayAnimationAndWait( "SQ_BED03_idle05" ); Wp:PlayAnimationAndWait( "SQ_BED03_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED03_Manning_Flakgun(wp) { precond { Wp:IsGunManned(SLOT_S01) } action { Wp:PlayAnimationAndWait( "SQ_BED03_leave_rush" ); Wp:Teleport("WP_FLAK_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); if (Wp:GetGunType(SLOT_S01) == CANNON_37mmM) then Wp:ManTheGun(SLOT_S01, "37mmM_UP_DW", ROLE_ELEV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_37mmSA) then Wp:ManTheGun(SLOT_S01, "37mmSA_UP_DW", ROLE_ELEV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_37mmTSA) then Wp:ManTheGun(SLOT_S01, "37mmTSA_UP_DW", ROLE_ELEV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_Vierling) then Wp:ManTheGun(SLOT_S01, "Vierling_UP_DW", ROLE_ELEV) endif; Wp:ScriptCompleted(); } } strategy SQ_BED04_IDLE01(wp) { strategies { SQ_BED04_Sleeping, SQ_BED04_Manning_Flakgun } } strategy SQ_BED04_Sleeping(wp) { precond { !Wp:IsGunManned(SLOT_S01) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Beard_CAP04", 1); ################################################################## Wp:UnmanTheGun(SLOT_S01, ROLE_TRAV); Wp:Teleport("SQ_BED04"); Wp:SetBodyPartVisibility("A_Hat01", 0); Wp:SetBodyPartVisibility("A_Pants02", 1); Wp:SetBodyPartVisibility("A_Pants01", 0); Wp:PlayAnimationAndWait( "SQ_BED04_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED04_Scratch01" ); Wp:PlayAnimationAndWait( "SQ_BED04_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BED04_FallAsleep" ); Wp:PlayAnimationAndWait( "SQ_BED04_Sleep01" ); Wp:PlayAnimationAndWait( "SQ_BED04_Sleep01" ); Wp:PlayAnimationAndWait( "SQ_BED04_WakeUp01" ); Wp:PlayAnimationAndWait( "SQ_BED04_AtoC" ); Wp:PlayAnimationAndWait( "SQ_BED04_idlle01" ); Wp:PlayAnimationAndWait( "SQ_BED04_idle04" ); Wp:PlayAnimationAndWait( "SQ_BED04_Pik_Up_Book_PART01" ); Wp:SetBodyPartVisibility("object2_book01", 1); Wp:PlayAnimationAndWait( "SQ_BED04_Pik_Up_Book_PART02" ); Wp:PlayAnimationAndWait( "SQ_BED04_Put_Down_Book_PART01" ); Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED04_Put_Down_Book_PART02" ); Wp:PlayAnimationAndWait( "SQ_BED04_idlle05" ); Wp:PlayAnimationAndWait( "SQ_BED04_CtoA" ); Wp:ScriptCompleted(); } } strategy SQ_BED04_Manning_Flakgun(wp) { precond { Wp:IsGunManned(SLOT_S01) } action { Wp:SetBodyPartVisibility("object2_book01", 0); Wp:PlayAnimationAndWait( "SQ_BED04_leave_rush" ); Wp:Teleport("WP_FLAK_GUN"); Wp:SetBodyPartVisibility("A_Hat01", 1); Wp:SetBodyPartVisibility("A_Pants02", 0); Wp:SetBodyPartVisibility("A_Pants01", 1); if (Wp:GetGunType(SLOT_S01) == CANNON_37mmM) then Wp:ManTheGun(SLOT_S01, "37mmM_L_R", ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_37mmSA) then Wp:ManTheGun(SLOT_S01, "37mmSA_L_R", ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_37mmTSA) then Wp:ManTheGun(SLOT_S01, "37mmTSA_L_R", ROLE_TRAV) endif; if (Wp:GetGunType(SLOT_S01) == CANNON_Vierling) then Wp:ManTheGun(SLOT_S01, "Vierling_L_R", ROLE_TRAV) endif; Wp:ScriptCompleted(); } } strategy SQ_BOSUN_IDLE01(wp) { strategies { SQ_BOSUN_STEALING_FOOD_SCENE, SQ_BOSUN_NORMAL, SQ_BOSUN_DAMAGE_TAKEN, SQ_BOSUN_PROXIMITY_EXPLOSIONS, SQ_BOSUN_HUNT } } strategy SQ_BOSUN_STEALING_FOOD_SCENE(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) > 0 and Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) > 0) or (Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) == 2) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Beard_CAP04", 1); ################################################################## Wp:SetGlobalVariable( VAR_SQ_BOSUN_STATE, 2 ); if Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) == 1 then Wp:DoNothing() else { Wp:PlayAnimationAndWait( "SQ_BOSUN_Talk02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_taking_food01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_eating" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_taking_food02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_pull_hand" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_taking_food01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_eating" ); Wp:Goto( "SQ_BOSUN_B" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:SetGlobalVariable( VAR_SQ_BOSUN_STATE, 0 ); } endif; Wp:ScriptCompleted(); } } strategy SQ_BOSUN_NORMAL(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) != 2) and (!Wp:IsCrewState(DMG_TKN|PROX_EXPL) or !Wp:IsCurrentWaypoint( "SQ_BOSUN_B" ) or !Wp:IsCurrentWaypoint( "SQ_BOSUN_C" )) and (!Wp:IsCrewState(HUNTER|HUNTED) or !Wp:IsCurrentWaypoint( "SQ_BOSUN_A" )) } action { ############## Uncomment for optional beard ###################### # Wp:SetBodyPartVisibility("object1_Beard_CAP04", 1); ################################################################## Wp:PlayAnimationAndWait( "SQ_BOSUN_A_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_A_LookLeft01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_A_LookRight01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_AtoD_part01" ); Wp:SetBodyPartVisibility("object2_Pencil02", 1); Wp:SetBodyPartVisibility("object1_letter02", 1); Wp:PlayAnimationAndWait( "SQ_BOSUN_AtoD_part02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_Poetry01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_Poetry02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_Poetry03" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_Poetry01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_Poetry04" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_DtoA_part01" ); Wp:SetBodyPartVisibility("object1_letter02", 0); Wp:SetBodyPartVisibility("object2_Pencil02", 0); Wp:PlayAnimationAndWait( "SQ_BOSUN_DtoA_part02" ); Wp:Goto( "SQ_BOSUN_B" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); if Wp:GetGlobalVariable( VAR_SQ_COOK_STATE ) == 0 then { Wp:PlayAnimationAndWait( "SQ_BOSUN_idle01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_idle02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_idle03" ); } endif; Wp:SetGlobalVariable( VAR_SQ_BOSUN_STATE, 1); Wp:Goto( "SQ_BOSUN_C" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_Idle01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_Talk01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_Idle01" ); Wp:SetGlobalVariable( VAR_SQ_BOSUN_STATE, 0 ); Wp:Goto( "SQ_BOSUN_B" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:ScriptCompleted(); } } strategy SQ_BOSUN_DAMAGE_TAKEN(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) != 2) and Wp:IsCrewState(DMG_TKN) and (Wp:IsCurrentWaypoint( "SQ_BOSUN_B" ) or Wp:IsCurrentWaypoint( "SQ_BOSUN_C" )) and !Wp:IsCrewState(PROX_EXPL) } action { Wp:SetBodyPartVisibility("object1_letter02", 0); Wp:SetBodyPartVisibility("object2_Pencil02", 0); if Wp:IsCurrentWaypoint( "SQ_BOSUN_B" ) then { Wp:PlayAnimationAndWait( "SQ_BOSUN_explosion_event01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:DeactivateCrewState(DMG_TKN); } endif; if Wp:IsCurrentWaypoint( "SQ_BOSUN_C" ) then { Wp:PlayAnimationAndWait( "SQ_BOSUN_explosion_event04" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_C_Idle01" ); Wp:Goto( "SQ_BOSUN_B" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:DeactivateCrewState(DMG_TKN); } endif; Wp:ScriptCompleted(); } } strategy SQ_BOSUN_HUNT(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) != 2) and !Wp:IsCrewState(DMG_TKN|PROX_EXPL) and Wp:IsCurrentWaypoint( "SQ_BOSUN_A" ) and Wp:IsCrewState(HUNTER|HUNTED) } action { Wp:SetBodyPartVisibility("object1_letter02", 0); Wp:SetBodyPartVisibility("object2_Pencil02", 0); Wp:PlayAnimationAndWait( "SQ_BOSUN_worry01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_worry02" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_worry01" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_worry02" ); Wp:ScriptCompleted(); } } strategy SQ_BOSUN_PROXIMITY_EXPLOSIONS(wp) { precond { (Wp:GetGlobalVariable( VAR_SQ_BOSUN_STATE ) != 2) and Wp:IsCrewState(PROX_EXPL) and (Wp:IsCurrentWaypoint( "SQ_BOSUN_B" ) or Wp:IsCurrentWaypoint( "SQ_BOSUN_C" )) } action { Wp:SetBodyPartVisibility("object1_letter02", 0); Wp:SetBodyPartVisibility("object2_Pencil02", 0); if Wp:IsCurrentWaypoint( "SQ_BOSUN_B" ) then { Wp:PlayAnimationAndWait( "SQ_BOSUN_explosion_event02" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:DeactivateCrewState(PROX_EXPL); } endif; if Wp:IsCurrentWaypoint( "SQ_BOSUN_C" ) then { Wp:PlayAnimationAndWait( "SQ_BOSUN_explosion_event04" ); Wp:Goto( "SQ_BOSUN_B" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookLeft" ); Wp:PlayAnimationAndWait( "SQ_BOSUN_B_LookAround01" ); Wp:Goto( "SQ_BOSUN_A" ); Wp:DeactivateCrewState(PROX_EXPL); } endif; Wp:ScriptCompleted(); } } http://www.subsim.com/radioroom/show...89#post2383289 Not exactly my mod: that's a project of LGN1 for SHIII. I offered to create 3d models for it, but once it is ready I don't think LGN1 will have problems if we ask to port the mod to SH5 |
03-01-16, 02:47 PM | #127 |
Navy Seal
|
Thanks Gap !
By the way, that launcher looks ...
__________________
Best regards... Vecko The Wolves of Steel v2.2.25_SH5 Expansion Pack_Full The Wolves of Steel v2.2.xx to v2.2.25 - Update PDF Install Instructions How to report an issue If You wish to support my work... |
03-01-16, 03:22 PM | #128 |
Navy Seal
|
Naah...CTD as soon as mission is loaded...
Nevermind...U-flak will do the job such as it is , for now... You finish those cool looking launchers.
__________________
Best regards... Vecko The Wolves of Steel v2.2.25_SH5 Expansion Pack_Full The Wolves of Steel v2.2.xx to v2.2.25 - Update PDF Install Instructions How to report an issue If You wish to support my work... |
03-02-16, 05:10 AM | #129 |
Navy Seal
Join Date: Jan 2011
Location: CJ8937
Posts: 8,215
Downloads: 793
Uploads: 10
|
Except for some simple scipts, this the first time that I modify python code of a certain complexity. Either I made a syntax error or adding new crew strategies is not allowed. In either case I hope I can track down the problem in the next future. Now...
Thank you. I have the feeling that I overdid with that mortar though. My squid launcher is probably the most detailed ship equipment ever done for a SHIII game and I hope it wont slow-down the game, otherwise I will be forced to postpone its release for bringing its polycount down |
09-15-16, 06:23 AM | #130 |
Commodore
Join Date: Aug 2016
Location: Netherlands
Posts: 620
Downloads: 31
Uploads: 0
|
These mods, including the U-Flak boat look stunning.
But I am wondering about the VII B which has an optional extra flak tower on the stern which is separated from the conning tower and Flak stand. I never have seen such a boat in historic images. It seems to me it is a fantasy boat. Is it possible somehow to remove that option until a proper Type VII C-41 becomes available ? http://uboat.net/technical/flak.htm Ashikaga, |
02-22-23, 12:32 PM | #131 |
Gefallen Engel U-666
|
welcome aboard!
Mon Homme!
__________________
"Only two things are infinite; The Universe and human squirrelyness; and I'm not too sure about the Universe" |
|
|