Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GLA SCUD Storm structure has no animation that reveals whether or not it is ready #235

Open
xezon opened this issue Sep 7, 2021 · 32 comments
Labels
Controversial Is controversial Design Is a matter of game design Minor Severity: Minor < Major < Critical < Blocker

Comments

@xezon
Copy link
Collaborator

xezon commented Sep 7, 2021

GLA SCUD Storm structure has no animation that reveals whether or not it is ready.
Meanwhile China Nuke Missile and USA Particle Cannon Superweapons do have animations that show they are ready to fire.
This is an inconsistency that gives GLA a major edge over the other factions in a Superweapon fight.

@xezon xezon added Design Is a matter of game design Controversial Is controversial labels Sep 7, 2021
@commy2
Copy link
Collaborator

commy2 commented Sep 7, 2021

In some mods, the SCUD missiles are raised once the building is ready, kind of like how the Nuke Silo works.

I'd personally say this is a "big change" that not everyone will like. Would stay away from this. You could argue that not revealing which super weapon is ready fits the "sneakiness" of the GLA faction.

@xezon
Copy link
Collaborator Author

xezon commented Sep 7, 2021

I am not clear about the push back potential of changing the visuals of this. Here is a comparison of Superweapons:

USA Particle Cannon

Pros:

  • Good vs Buildings
  • (Cheap for Superweapon General)

Cons:

  • Requires Power
  • Just OK vs Units

China Nuke

Pros:

  • Good vs Units

Cons:

  • Requires Power
  • Just OK vs Buildings, Bad vs GLA buildings
  • Higher countdown than other Superweapons

GLA SCUD Storm

Pros:

  • Good vs Buildings
  • Good vs Units
  • Does not reveal if its ready to fire
  • (Camo Netting for Stealth General)

Cons:

  • Takes twice as long to build

@commy2
Copy link
Collaborator

commy2 commented Sep 7, 2021

A con of the Scud Storm is, that it takes 120 seconds to construct, while the Nuclear Missile Silo and the Particle Cannon take only 60 seconds. This is because the build times for the superweapons are identical, but GLA has to play without power.

@MTKing4
Copy link
Collaborator

MTKing4 commented Sep 7, 2021

Regarding the SCUD Storm visuals... isn't it a bit unfair that China Nuke reveals its ready status but SCUD Storm does not? SCUD Storm is sooooo much better anyway than China Nuke. Would be just fair if all armies had consistent readability.

I agree with this tbh, even though i won't like the new look or we might find opposition from a lot of players, i do think it's the right call, also it's useful for the gla player himself to know which one launches next if for example one of them is under attack and he wants to launch fast

@ImTimK
Copy link
Collaborator

ImTimK commented Sep 7, 2021

Main question is when the animation starts, at 0:00 or before that?

@xezon
Copy link
Collaborator Author

xezon commented Sep 7, 2021

Animation can be designed at our own discretion. It can trigger with exact same timing as USA and China Superweapon animation.

@ZekeDlyoung
Copy link

Possibly 10 sec before launch just like other superweapons

@Jundiyy
Copy link
Collaborator

Jundiyy commented Sep 10, 2021

I don't think it's a change that is needed. The Super Weapon is fine the way it is.

@ImTimK
Copy link
Collaborator

ImTimK commented Sep 10, 2021

I don't think it's a change that is needed. The Super Weapon is fine the way it is.

Why is it fine that only GLA’s SW stays hidden?

@Jundiyy
Copy link
Collaborator

Jundiyy commented Sep 10, 2021

Just felt that it's not broken, it's just a design that the GLA have been given. Hence no need to change.
Thinking over things a bit.

Yes looking at it from a SW only point of view, it makes sense that all are the same.

Scud Storm currently gets away many times as the opponent doesn't know which one to attack, so this could change.
For most USAs and all China factions I suppose this is a good thing to help balance it out but GLA mirrors wouldn't be good as opponents would know which one to take out first. :: thinking ::

Re-thinking about it a bit more, I think a very small timer could be used, 5s or less.

There is also a very small window to consider, in which a Sabo could be waiting between 2 SWs, and would now know which one to reset.
So having 5 or less would make this less likely to happen although still possible.

@xezon xezon added the Survey Is subject to a survey question label Sep 10, 2021
@xezon
Copy link
Collaborator Author

xezon commented Sep 10, 2021

To me this reads like this issue is potentially going for a survey question, because we may be unable to make a uniform decision. Could someone please prepare a small image that shows all super weapons in their ready state for illustration purposes, that we could use in the survey itself to help the reader understand?

@MTKing4
Copy link
Collaborator

MTKing4 commented Sep 10, 2021

Re-thinking about it a bit more, I think a very small timer could be used, 5s or less. So having 5 or less would make this less likely to happen although still possible.

How long is it for the other SWs? It should be the same

@xezon
Copy link
Collaborator Author

xezon commented Sep 10, 2021

Animation Reveal:
Particle Cannon: ~11 seconds
Nuke Silo: ~7 seconds
SCUD Storm: Never

shot_20210910_181929_1

shot_20210910_182315_4

@xezon xezon added the Minor Severity: Minor < Major < Critical < Blocker label Sep 17, 2021
@ReLaX82
Copy link

ReLaX82 commented Jan 20, 2022

I would like the ready animation 10s before.
The skill part to Mark the first one is still there.

@ImTimK
Copy link
Collaborator

ImTimK commented Jul 12, 2022

Should be 7-11 seconds, there just isn't a singular counter argument for not having the animation at all.

@xezon
Copy link
Collaborator Author

xezon commented Jul 12, 2022

Let's add it!

@ImTimK
Copy link
Collaborator

ImTimK commented Aug 14, 2022

SW's are close to being balanced now, this would be the last change to make it perfect :)

@xezon xezon removed the Survey Is subject to a survey question label Jun 29, 2023
@xezon
Copy link
Collaborator Author

xezon commented Dec 4, 2024

I think there are 2 ways to visualize ready Scud Storm:

  1. Idle Scud Storm looks same as Original. Ready Scud Storm shows upright raised missiles at the launch pad, same as Nuke Missile.

  2. Idle Scud Storm shows no missiles. Ready Scud Storm shows lowered missiles on the ground, same as Original Scud Storm.

I think I would prefer option 2, because it would require no timing or visual changes towards the missile launch sequence.

@MTKing4
Copy link
Collaborator

MTKing4 commented Dec 4, 2024

Option 2

@dmgreeny
Copy link
Collaborator

dmgreeny commented Dec 4, 2024

2

@ViTeXFTW
Copy link

ViTeXFTW commented Dec 5, 2024

For option 2 to work the animation for the model will need to be changed so there is a state where the model goes from having no missiles to going underground to get missiles.
The problem is the only animation that goes underground is hardcoded to start upright without rockets, go down, go underground and make the missiles appear when going up again.

The first option can be fixed with the NuclearMissileBuildingUpdate and some extra conditionstates.

ScudStormUpdate.txt

@xezon
Copy link
Collaborator Author

xezon commented Dec 5, 2024

ScudStormUpdate.txt inplace
Object GLAScudStorm
    Draw = W3DModelDraw ModuleTag_New01 ; Instead of ModuleTag_01
        OkToChangeModelColor = Yes
        ProjectileBoneFeedbackEnabledSlots = PRIMARY
        
        ; ConditionStates for Prestine model only, missing DAMAGED REALLYDAMAGED and RUBBLE
        DefaultConditionState ; lying around
            Model         = UBScudStrm_A1
            Animation     = UBScudStrm_A1.UBScudStrm_A1
            AnimationMode = MANUAL
            Flags         = START_FRAME_FIRST
            WeaponLaunchBone = PRIMARY WeaponA
            TransitionKey = Trans_READY
            
            ParticleSysBone      = SteamM01 SteamLarge
            ParticleSysBone      = SteamS01 SteamMedium
        End

        ConditionState = DOOR_1_OPENING
            Model = UBScudStrm_A1
            Animation = UBScudStrm_A1.UBScudStrm_A1
            AnimationMode = ONCE
            Flags = MAINTAIN_FRAME_ACROSS_STATES
            WeaponLaunchBone = PRIMARY WeaponA

            ParticleSysBone      = SteamM01 SteamLarge
            ParticleSysBone      = SteamS01 SteamMedium
        End

        ConditionState = DOOR_1_WAITING_OPEN
            Model = UBScudStrm_A1
            Animation = UBScudStrm_A1.UBScudStrm_A1
            AnimationMode = MANUAL
            Flags = START_FRAME_LAST PRISTINE_BONE_POS_IN_FINAL_FRAME
            WeaponLaunchBone = PRIMARY WeaponA

            ParticleSysBone      = SteamM01 SteamLarge
            ParticleSysBone      = SteamS01 SteamMedium
        End

        ConditionState = ATTACKING
            Model         = UBScudStrm_A2
            Animation     = UBScudStrm_A2.UBScudStrm_A2
            AnimationMode = MANUAL
            Flags         = START_FRAME_FIRST
            WeaponLaunchBone = PRIMARY WeaponA
            TransitionKey = Trans_ATTACKING
            
            ParticleSysBone      = SteamM01 SteamLarge
            ParticleSysBone      = SteamS01 SteamMedium
            
            ParticleSysBone      = FXBone01 ScudStormBuildingGoo
            ParticleSysBone      = FXBone02 ScudStormBuildingGoo
            ParticleSysBone      = FXBone03 ScudStormBuildingGoo
        End

        TransitionState = Trans_ATTACKING Trans_READY
            Model         = UBScudStrm_A3
            Animation     = UBScudStrm_A3.UBScudStrm_A3
            AnimationMode = ONCE
            Flags         = MAINTAIN_FRAME_ACROSS_STATES2
            
            ParticleSysBone      = SteamM01 SteamVent
            ParticleSysBone      = SteamS01 SteamVent
        End

    End
    
    ; New behavior for condistionstate DOOR_1_OPENING DOOR_1_WAITING_OPEN DOOR_1_CLOSING DOOR_1_WAITING_CLOSE 
    Behavior = MissileLauncherBuildingUpdate ModuleTag_New02 
        SpecialPowerTemplate = SuperweaponScudStorm
        
        DoorOpenTime = 4000
        DoorCloseTime = 4000
    End
    
    Behavior    = OCLSpecialPower ModuleTag_New10 ; Instead of ModuleTag_10
        SpecialPowerTemplate = SuperweaponScudStorm
        OCL                  = SUPERWEAPON_ScudStorm
    End
End

@xezon
Copy link
Collaborator Author

xezon commented Dec 5, 2024

We can probably create new animation(s) by borrowing animation frames of the existing ones.

@penfriendz
Copy link

Currently, I use beacons to label enemy superweapons in the order they're built. As an 'extended' suggestion, if there's some clever way to show how far along their timer there are, this would save me doing this... and maybe benefit other people. Is it skill that I use beacons to keep track of this?

@ViTeXFTW
Copy link

ViTeXFTW commented Dec 5, 2024

You could set the OpenDoorTime to be almost the same as the SWs actual countdown and the animation will play very slowly until the superweapon is ready.

My gut feeling says that this should not be the case and players should manage this themselves. But I can't provide an actual good reason other than it is a skill for advanced players

@ImTimK
Copy link
Collaborator

ImTimK commented Dec 11, 2024

Currently, I use beacons to label enemy superweapons in the order they're built. As an 'extended' suggestion, if there's some clever way to show how far along their timer there are, this would save me doing this... and maybe benefit other people. Is it skill that I use beacons to keep track of this?

I rather use bookmarks myself, because that leaves beacons free to use when needed, plus you can Mark up to 10. My team can't see it no, but I can beacon afterwards anyway if they need to know.

@Float1ngFree
Copy link

Float1ngFree commented Jan 22, 2025

The problem is the only animation that goes underground is hardcoded to start upright without rockets, go down, go underground and make the missiles appear when going up again.

Well, the easy way is to just reuse what's already there:

  1. Default/none - Empty raised missile supports
  2. DOOR_1_OPENING - reload animation (going from empty up to loaded on ground)
  3. DOOR_1_WAITING_OPEN - original default (missiles waiting on the ground)
  4. Keep the transition to attacking (missiles going up) and ATTACKING states as is
  5. No door closing time, so we go to Default state right after firing (keep empty supports raised)

Here the door open time is 12s, with some added sounds:

Generals.2025-01-21.18-26-18-12-1.mp4

@xezon
Copy link
Collaborator Author

xezon commented Jan 22, 2025

This looks nice. Can you create a Pull for it?

@dmgreeny
Copy link
Collaborator

I agree, it looks great

@DevGeniusCode
Copy link
Contributor

Do empty supports raised stay raised for 5 minutes at all times until the missiles are loaded?

@Float1ngFree
Copy link

Float1ngFree commented Jan 22, 2025

This looks nice. Can you create a Pull for it?

I wish I didn't have to spend yesterday changing & testing all states up to the point I had to drop Boss & GCs as is because I got tired of it... Besides, I'm sure there are some differences with my project. I'll fork the project for future, but for now, I'm going to share the code so you or anyone else can duplicate & reuse the logic:

; day
ConditionState = NONE ; standing up empty
  Model         = UBScudStrm_A3
  Animation     = UBScudStrm_A3.UBScudStrm_A3
  AnimationMode = MANUAL
  Flags         = START_FRAME_FIRST
  WeaponLaunchBone = SECONDARY WeaponA
  TransitionKey = Trans_READY

  ParticleSysBone      = SteamM01 SteamLarge
  ParticleSysBone      = SteamS01 SteamMedium
End

ConditionState = DOOR_1_WAITING_OPEN ; lying around
  Model         = UBScudStrm_A1
  Animation     = UBScudStrm_A1.UBScudStrm_A1
  AnimationMode = MANUAL
  Flags         = START_FRAME_FIRST
  WeaponLaunchBone = SECONDARY WeaponA
  ShowSubObject = WeaponA01 WeaponA02 WeaponA03 WeaponA04 WeaponA05 WeaponA06 WeaponA07 WeaponA08 WeaponA09

  ParticleSysBone      = SteamM01 SteamLarge
  ParticleSysBone      = SteamS01 SteamMedium
End

TransitionState = Trans_READY Trans_ATTACKING ; from lying around to straight up
  Model         = UBScudStrm_A1
  Animation     = UBScudStrm_A1.UBScudStrm_A1
  AnimationMode = ONCE
  Flags         = MAINTAIN_FRAME_ACROSS_STATES
  WeaponLaunchBone = SECONDARY WeaponA

  ParticleSysBone      = SteamM01 SteamLarge
  ParticleSysBone      = SteamS01 SteamMedium
End

ConditionState = ATTACKING  ; Projectile feedback code selectively hiding missiles as they shoot
  Model         = UBScudStrm_A2
  Animation     = UBScudStrm_A2.UBScudStrm_A2
  AnimationMode = MANUAL
  Flags         = START_FRAME_FIRST
  WeaponLaunchBone = SECONDARY WeaponA
  TransitionKey = Trans_ATTACKING

  ParticleSysBone      = SteamM01 SteamLarge
  ParticleSysBone      = SteamS01 SteamMedium
End
AliasConditionState = ATTACKING FIRING_B
AliasConditionState = ATTACKING BETWEEN_FIRING_SHOTS_B

ConditionState = DOOR_1_OPENING ; empty arms going underground, coming up with presents for bad people
  Model         = UBScudStrm_A3
  Animation     = UBScudStrm_A3.UBScudStrm_A3
  AnimationMode = ONCE
  Flags         = MAINTAIN_FRAME_ACROSS_STATES2

  ParticleSysBone      = SteamM01 SteamVent
  ParticleSysBone      = SteamS01 SteamVent
End
ConditionState       = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED
  Model              = UBScudStrm_A3
  Flags              = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
End
ConditionState       = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED DAMAGED
  Model              = UBScudStrm_DA3
  Flags              = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
End
ConditionState       = AWAITING_CONSTRUCTION PARTIALLY_CONSTRUCTED ACTIVELY_BEING_CONSTRUCTED REALLYDAMAGED
  Model              = UBScudStrm_EA3
  Flags              = ADJUST_HEIGHT_BY_CONSTRUCTION_PERCENT
End
  Behavior = MissileLauncherBuildingUpdate ModuleTag_New02
    SpecialPowerTemplate = SuperweaponScudStorm
    DoorOpenTime         = 12000
    DoorOpeningFX        = FX_ScudStormReloading
    DoorOpenIdleAudio    = BuildingScudMissilesHiss
  End

Steps:

  1. Duplicate NONE State, change it to DOOR_1_WAITING_OPEN and remove TransitionKey = Trans_READY
  2. Remove ShowSubObject = ... from NONE State, replace UBScudStrm_A1 Model & Animation with UBScudStrm_A3
  3. Change TransitionState = Trans_ATTACKING Trans_READY to ConditionState = DOOR_1_OPENING
  4. Change construction models from UBScudStrm_A, UBScudStrm_D and UBScudStrm_E to UBScudStrm_A3, UBScudStrm_DA3 and UBScudStrm_EA3
  5. Add MissileLauncherBuildingUpdate with time for door opening. Skip opened & closing times so it jumps to default state, which is standing up empty.

Door open time animation is about 10s long, so I stretched it slowed it down a little bit by stretching to 12s.
FX_ScudStormReloading is a custom effect of 3 sounds - 1 localized, low prio & volume version of ScudStormInitiated & 2 modified & delayed copies of OverlordTankTurretMoveLoop (not looped)
BuildingScudMissilesHiss - a slightly lower volume copy of BuildingNeutronMissileHiss

Lastly, couple bugs that I've noticed:

  1. TransitionState = Trans_READY Trans_ATTACKING - Flag MAINTAIN_FRAME_ACROSS_STATES - doesn't work - the animation is getting cancelled if building is damaged & goes to DAMAGED or REALLYDAMAGED states (same in original).
  2. Pressing S while Scud Storm selected & firing will cancel the attack (same in original).

@Float1ngFree
Copy link

Do empty supports raised stay raised for 5 minutes at all times until the missiles are loaded?

Yes, they stay up all the time, until last 12s when reload starts. That's the downside of this approach to reuse what's there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Controversial Is controversial Design Is a matter of game design Minor Severity: Minor < Major < Critical < Blocker
Projects
None yet
Development

No branches or pull requests