Posted by: rey - Tuesday, September 20, 2022 7:25:35 PM
Long story short: i'm trying to let Red Guards shoot mines, so if they are detected, guards could shoot to disarm them. But for some reason mere remake of GLA worker weapon doesn't work. In some experiments infantry stopped using normal shooting weapon(wasn't able to attack any more after first anti-mine try), in some - didn't do anything to mine at all. So can somebody please direct me how to modify red guard's weapon(or add another dedicated one) for it to be used against mines?

Posted by: UTD^Force - Friday, September 23, 2022 11:37:46 AM
Please provide the full edited code to make it easier to figure out what the problem is.

Posted by: UTD^Force - Friday, September 23, 2022 12:31:45 PM
Alright, so I gave it a shot and it worked. My advice to you is to look into other units that have certain characteristics which can help you achieve your goal. And that's what I did, I looked into a couple of units that have different weapons activated by command buttons, colonel burton and the american ranger. After I edited the weapons and found a way to let the red guard automatically switch back to his own weapon, another problem occurred. Because the red guard only has one weapon, he didn't animate disarming the mines, that's why this code is long. The first part of the code fixes the animation, while the second part fixes the weapon's issue: [code=plain]CommandButton Command_DisarmMinesAtPositionRedGuard Command = FIRE_WEAPON WeaponSlot = SECONDARY ; Best if this matches up with an AutoChoose listing that forbids this slot normally Options = OK_FOR_MULTI_SELECT NEED_TARGET_POS USES_MINE_CLEARING_WEAPONSET TextLabel = CONTROLBAR:DisarmMinesAtPosition ButtonImage = SSClearMines_L ;Don't know why this became a portrait (It's from Generals, not MD). ButtonBorderType = ACTION ; Identifier for the User as to what kind of button this is DescriptLabel = CONTROLBAR:ToolTipDisarmMinesAtPosition RadiusCursorType = CLEARMINES InvalidCursorName = GenericInvalid End CommandSet ChinaInfantryRedguardCommandSetNEW 1 = Command_ChinaInfantryRedGuardCaptureBuilding 2 = Command_DisarmMinesAtPositionRedGuard 3 = Command_AmericaRangerSwitchToMachineGun ; 4 = Command_AmericaRangerSwitchToFlagBangGrenades 11 = Command_AttackMove 13 = Command_Guard 14 = Command_Stop End Object ChinaInfantryRedguard RemoveModule ModuleTag_01 AddModule Draw = W3DModelDraw ModuleTag_6515648 OkToChangeModelColor = Yes ; this says "we don't use these condition states at all, so completely ; ignore them for purposes of matchmaking"... this is useful to help ; reduce the number of AliasConditionState clauses you must add in ; order to avoid ambiguity in some cases. IgnoreConditionStates = PREATTACK_A FIRING_A BETWEEN_FIRING_SHOTS_A RELOADING_A ; ------- Standing-Around Animations DefaultConditionState Model = NICNSC_SKN IdleAnimation = NICNSC_SKL.NICNSC_STA 0 35 IdleAnimation = NICNSC_SKL.NICNSC_IDA IdleAnimation = NICNSC_SKL.NICNSC_IDB AnimationMode = ONCE WeaponFireFXBone = PRIMARY Muzzle WeaponMuzzleFlash = PRIMARY MuzzleFX WeaponFireFXBone = SECONDARY Muzzle WeaponMuzzleFlash = SECONDARY MuzzleFX TransitionKey = TRANS_Stand End ConditionState = REALLYDAMAGED IdleAnimation = NICNSC_SKL.NICNSC_STB AnimationMode = ONCE TransitionKey = TRANS_StandDamaged End ; ------- Machine Gun Animations ConditionState = USING_WEAPON_A Animation = NICNSC_SKL.NICNSC_ATA AnimationMode = LOOP TransitionKey = TRANS_Firing End AliasConditionState = PREATTACK_B MOVING AliasConditionState = PREATTACK_B FIRING_B AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B ConditionState = USING_WEAPON_A REALLYDAMAGED Animation = NICNSC_SKL.NICNSC_ATC AnimationMode = LOOP TransitionKey = TRANS_FiringDamaged End AliasConditionState = PREATTACK_B MOVING REALLYDAMAGED AliasConditionState = PREATTACK_B FIRING_B REALLYDAMAGED AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B REALLYDAMAGED ; ------- Firing-related Transitions TransitionState = TRANS_Firing TRANS_FiringDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE End TransitionState = TRANS_Stand TRANS_Firing Animation = NICNSC_SKL.NICNSC_SA2AA AnimationMode = ONCE End TransitionState = TRANS_Firing TRANS_Stand Animation = NICNSC_SKL.NICNSC_AA2SA AnimationMode = ONCE End TransitionState = TRANS_StandDamaged TRANS_FiringDamaged Animation = NICNSC_SKL.NICNSC_ATCST AnimationMode = ONCE End TransitionState = TRANS_FiringDamaged TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_ATCED AnimationMode = ONCE End ; ------------- Damage Transitions -------------------- TransitionState = TRANS_StandDamaged TRANS_RunDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE AnimationSpeedFactorRange = 2 2 End TransitionState = TRANS_RunDamaged TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2 2 Flags = START_FRAME_LAST End TransitionState = TRANS_Stand TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_AA2SA AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 4 5 Flags = START_FRAME_LAST End ; ------- Bayonet Animations ConditionState = PREATTACK_C Animation = NICNSC_SKL.NICNSC_ATB1 AnimationMode = ONCE TransitionKey = TRANS_Stab End AliasConditionState = PREATTACK_C MOVING AliasConditionState = PREATTACK_C FIRING_C AliasConditionState = PREATTACK_C BETWEEN_FIRING_SHOTS_C ConditionState = FIRING_C Animation = NICNSC_SKL.NICNSC_ATB2 AnimationMode = ONCE ; this is basically a trick: this guy has a nontrivial animation for firing, ; and a long recycle time between shots. we want him to finish his fire animation ; (unless he's ordered to do something else), so this is just a handy trick that ; says, "if the previous state had this transition key, allow it to finish before ; switching to us, if possible". WaitForStateToFinishIfPossible = TRANS_Stab End AliasConditionState = BETWEEN_FIRING_SHOTS_C AliasConditionState = RELOADING_C ; ------- Parachuting Animations ConditionState = FREEFALL Animation = NICNSC_SKL.NICNSC_POP AnimationMode = MANUAL Flags = START_FRAME_FIRST TransitionKey = TRANS_Falling End AliasConditionState = FREEFALL REALLYDAMAGED AliasConditionState = FREEFALL DYING ConditionState = PARACHUTING Animation = NICNSC_SKL.NICNSC_PHG AnimationMode = LOOP Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME ; our bone positions should come from the last frame, rather than the first TransitionKey = TRANS_Chute End AliasConditionState = PARACHUTING REALLYDAMAGED AliasConditionState = PARACHUTING DYING TransitionState = TRANS_Falling TRANS_Chute Animation = NICNSC_SKL.NICNSC_POP AnimationMode = ONCE Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME ; our bone positions should come from the last frame, rather than the first End TransitionState = TRANS_Chute TRANS_Stand Animation = NICNSC_SKL.NICNSC_PTD AnimationMode = ONCE End ; ------- Movement Animations ConditionState = MOVING Animation = NICNSC_SKL.NICNSC_RNA 26 AnimationMode = LOOP Flags = RANDOMSTART TransitionKey = None ParticleSysBone = None InfantryDustTrails End AliasConditionState = MOVING ATTACKING ConditionState = MOVING REALLYDAMAGED Animation = NICNSC_SKL.NICNSC_RNB 28 AnimationMode = LOOP Flags = RANDOMSTART TransitionKey = TRANS_RunDamaged TransitionKey = None End AliasConditionState = MOVING ATTACKING REALLYDAMAGED ; ------- Bldg-capture ConditionState = UNPACKING Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP1 AnimationMode = ONCE End AliasConditionState = UNPACKING REALLYDAMAGED ConditionState = RAISING_FLAG Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP2 AnimationMode = ONCE TransitionKey = TRANS_Raising End AliasConditionState = RAISING_FLAG REALLYDAMAGED ConditionState = PACKING Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP1 AnimationMode = ONCE_BACKWARDS Flags = START_FRAME_LAST TransitionKey = TRANS_Packing End AliasConditionState = PACKING REALLYDAMAGED TransitionState = TRANS_Raising TRANS_Packing Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP2 AnimationMode = ONCE_BACKWARDS Flags = START_FRAME_LAST End ; ------- Dying Animations ConditionState = DYING Animation = NICNSC_SKL.NICNSC_DTA Animation = NICNSC_SKL.NICNSC_DTB AnimationMode = ONCE TransitionKey = TRANS_Dying End TransitionState = TRANS_Dying TRANS_Flailing Animation = NICNSC_SKL.NICNSC_ATDE1 AnimationMode = ONCE End ConditionState = DYING EXPLODED_FLAILING Animation = NICNSC_SKL.NICNSC_ATDE2 AnimationMode = LOOP TransitionKey = TRANS_Flailing End ConditionState = DYING EXPLODED_BOUNCING Animation = NICNSC_SKL.NICNSC_ATDE3 AnimationMode = ONCE TransitionKey = None End ; ------- Misc Animations ConditionState = SPECIAL_CHEERING Animation = NICNSC_SKL.NICNSC_CHA AnimationMode = LOOP End End End ;;;;;;;;;;;;;; all of that above in the redguard's code is only to let it animate disarming WeaponSet Conditions = None Weapon = PRIMARY RedguardMachineGun Weapon = SECONDARY DozerMineDisarmingWeapon AutoChooseSources = PRIMARY FROM_SCRIPT FROM_AI DEFAULT_SWITCH_WEAPON AutoChooseSources = SECONDARY FROM_SCRIPT FROM_AI WeaponLockSharedAcrossSets = Yes ; This set is so similar to the default set that it can hold the weapon lock End AddModule Behavior = StealthDetectorUpdate ModuleTag_0655 DetectionRate = 500 ; how often to rescan for stealthed things in my sight (msec) ;DetectionRange = ??? ;Dustin, enable this for independant balancing! CanDetectWhileGarrisoned = No ;Garrisoned means being in a structure that you units can shoot out of. CanDetectWhileContained = No ;Contained means being in a transport or tunnel network. ExtraRequiredKindOf = MINE ; we can only detect MINES, not other stealthed things End End CommandSet = ChinaInfantryRedguardCommandSetNEW End[/code] Oh, and I also added the StealthDetectorUpdate behaviour to let the red guard detect mines and only mines. You can remove the last part if you don't want this. Have a nice day, and happy modding! -------------------------------------------------------------------------------- [color=darkblue][b]#EDIT: make sure to copy the code in chronological order or the game will crash i.e. the game reads the code from the top to bottom, which means the commandbutton used in the commandset should be written before the commandset itself, or the game will crash. The same goes for the edited commandset that the redguard will use.[/b][/color]

Posted by: rey - Thursday, September 29, 2022 5:06:03 PM
[quote=UTD^Force;152479]My advice to you is to look into other units that have certain characteristics which can help you achieve your goal.[/quote]Thank you for your time and code example, but for pity it's not what is my goal - i'm not after simple adding disarm ability for Red Guards to come and disarm like Worker, but for them to shoot/kill mines from distance and desirably do it automatically when mines are spot(automatically start shooting in mines). And that's the problem - i didn't find any example to examine for exactly such mechanic.

Posted by: UTD^Force - Thursday, September 29, 2022 10:35:44 PM
[quote=rey;152483][quote=UTD^Force;152479]My advice to you is to look into other units that have certain characteristics which can help you achieve your goal.[/quote]Thank you for your time and code example, but for pity it's not what is my goal - i'm not after simple adding disarm ability for Red Guards to come and disarm like Worker, but for them to shoot/kill mines from distance and desirably do it automatically when mines are spot(automatically start shooting in mines). And that's the problem - i didn't find any example to examine for exactly such mechanic.[/quote] I don't think that I totally understand what you want to do. Simply changing the attack range will let the redguards kill mines from a distance. [code=plain]Weapon WorkerMineDisarmingWeaponREDGUARD PrimaryDamage = 1.0 ; this isn't really used, but must be nonzero for targeting to work well AttackRange = 500.0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISTANCE HERE DamageType = DISARM DeathType = NORMAL ProjectileObject = NONE FireFX = WeaponFX_WorkerMineDisarming DelayBetweenShots = 1000 ; time between shots, msec ClipSize = 0 ; how many shots in a Clip (0 == infinite) ClipReloadTime = 0 ; how long to reload a Clip, msec AntiGround = No AntiProjectile = No AntiSmallMissile = No AntiMine = Yes PreAttackDelay = 1000 ; we have to wave our magic wand over it a bit PreAttackType = PER_SHOT ; Do the delay every single shot ContinueAttackRange = 100 ; after disarming a mine, look for additional mines within this dist to disarm End[/code] For the redguard to automatically attack mines, I can't think of anything specific on the fly right now, but looking into base defense weapons may help, as they have targets from several KINDOFs and auto target them.

Posted by: rey - Friday, October 7, 2022 3:56:49 AM
[quote=UTD^Force;152484]I don't think that I totally understand what you want to do. Simply changing the attack range will let the redguards kill mines from a distance.[/quote]Thank you for your code example, and it works, but again it's not exactly what i want. This weapon "disarms" mines while i want to actually "kill" them - like when artillery shots on mine-fieid and they start to blow. Maybe it sounds dumb problem, but i can't merge simple infantry shooting(that is always meant to shoot directly one target) with area effect damage and spread shooting, while at the same time this weapon can't be used against other units(only mines must be effected). Basically i want unit to start gunfire an area(with actual bullets shooting in different spots) and mines not get disarmed with mere puff(like when Worker disarms them), but mines actually blow up, and at the same time weapon does damage only to mines and can't harm anything else. Plus, however i experiment with Behavior = AIUpdateInterface, controlling infantry's weapon slots, can't make infantry to automatically attack mines when found nearby, only direct order to use weapon on specific area works.

Posted by: UTD^Force - Friday, October 7, 2022 9:16:12 AM
Oh, my bad, I get it now. I have attempted changing the damage type to Armor_Piercing but as you said, that causes the weapon to damage units other than the mines. However, you can edit the weapon FX if that is what you want, for example: [code=plain]Object ChinaStandardMine RemoveModule ModuleTag_03 AddModule Behavior = StealthUpdate ModuleTag_0354212 StealthDelay = 0 ; msec StealthForbiddenConditions = NONE FriendlyOpacityMin = 0.0% FriendlyOpacityMax = 0.0% InnateStealth = Yes OrderIdleEnemiesToAttackMeUponReveal = Yes End End End Weapon WorkerMineDisarmingWeaponREDGUARD PrimaryDamage = 1.0 ; this isn't really used, but must be nonzero for targeting to work well AttackRange = 350.0 DamageType = DISARM DeathType = NORMAL ProjectileObject = NONE FireFX = WeaponFX_MineDetonation;;;;;;;;;;;;;;HERE DelayBetweenShots = 1000 ; time between shots, msec ClipSize = 0 ; how many shots in a Clip (0 == infinite) ClipReloadTime = 0 ; how long to reload a Clip, msec AntiGround = No AntiProjectile = No AntiSmallMissile = No AntiMine = Yes PreAttackDelay = 1000 ; we have to wave our magic wand over it a bit PreAttackType = PER_SHOT ; Do the delay every single shot ContinueAttackRange = 100 ; after disarming a mine, look for additional mines within this dist to disarm End[/code] I've edited the fireFX [h]'WeaponFX_MineDetonation'[/h] of the disarming weapon, and now mines appear to explode when actually disarmed using this weapon. This is the first problem, right? ----------------------------------- The second problem is that redguards don't automatically fire at the mines, and this is what I attempted to fix with the first behaviour in this code, but sadly did not succeed at. There may be other ways, however, but I don't have time now to check them out. Maybe look into the workers' code? I remember that they went by themselves to disarm mines when they detected them.

Posted by: rey - Tuesday, October 11, 2022 6:41:54 PM
[quote=UTD^Force;152499]This is the first problem, right? ----------------------------------- Maybe look into the workers' code? I remember that they went by themselves to disarm mines when they detected them.[/quote]I somewhat edited your code, but yeah, first one is solved. For the second, I checked Workers even before, and as i understood they react due to Behavior = WorkerAIUpdate and AutoAcquireEnemiesWhenIdle = Yes, but this module can't be used on ordinary infantry. Tried adding analogue for ordinary units, but still no reaction on mines. [quote] Behavior = AIUpdateInterface ModuleTag_03 Turret TurretTurnRate = 0 ControlledWeaponSlots = PRIMARY SECONDARY TERTIARY End AutoAcquireEnemiesWhenIdle = Yes MoodAttackCheckRate = 250 End[/quote]

Posted by: UTD^Force - Wednesday, October 12, 2022 12:21:50 AM
Okay, so I solved the second problem. You cannot have a worker or dozer AIupdate for a unit that does not have the kindof DOZER, the game will simply crash. But having the DOZER kindof also lets units repair buildings. I simply gave the redguard this KINDOF and set the repair percentage to 0%, which means they will not repair buildings but will also auto target mines. This is the full code inside the map.ini file that I made. Inside this will be everything I tried from the moment I saw your post until now, so figure out what you need and what you don't. [code=plain]CommandButton Command_DisarmMinesAtPositionRedGuard Command = FIRE_WEAPON WeaponSlot = SECONDARY ; Best if this matches up with an AutoChoose listing that forbids this slot normally Options = OK_FOR_MULTI_SELECT NEED_TARGET_POS USES_MINE_CLEARING_WEAPONSET TextLabel = CONTROLBAR:DisarmMinesAtPosition ButtonImage = SSClearMines_L ;Don't know why this became a portrait (It's from Generals, not MD). ButtonBorderType = ACTION ; Identifier for the User as to what kind of button this is DescriptLabel = CONTROLBAR:ToolTipDisarmMinesAtPosition RadiusCursorType = CLEARMINES InvalidCursorName = GenericInvalid End CommandButton Command_AmericaRangerSwitchToFlagBangGrenadesRG Command = SWITCH_WEAPON WeaponSlot = SECONDARY Options = CHECK_LIKE OK_FOR_MULTI_SELECT ;NEED_UPGRADE ; Upgrade = Upgrade_AmericaRangerFlashBangGrenade TextLabel = CONTROLBAR:FlashBangGrenadeMode ButtonImage = SSFlashbang ButtonBorderType = ACTION DescriptLabel = CONTROLBAR:ToolTipSwitchToUSAFlashBang End Object ChinaStandardMine RemoveModule ModuleTag_03 AddModule Behavior = StealthUpdate ModuleTag_0354212 StealthDelay = 0 ; msec StealthForbiddenConditions = NONE FriendlyOpacityMin = 0.0% FriendlyOpacityMax = 0.0% InnateStealth = Yes OrderIdleEnemiesToAttackMeUponReveal = Yes End End End Weapon WorkerMineDisarmingWeaponREDGUARD PrimaryDamage = 1.0 ; this isn't really used, but must be nonzero for targeting to work well AttackRange = 350.0 DamageType = DISARM DeathType = NORMAL ProjectileObject = NONE FireFX = WeaponFX_MineDetonation DelayBetweenShots = 1000 ; time between shots, msec ClipSize = 0 ; how many shots in a Clip (0 == infinite) ClipReloadTime = 0 ; how long to reload a Clip, msec AntiGround = No AntiProjectile = No AntiSmallMissile = No AntiMine = Yes PreAttackDelay = 1000 ; we have to wave our magic wand over it a bit PreAttackType = PER_SHOT ; Do the delay every single shot ContinueAttackRange = 100 ; after disarming a mine, look for additional mines within this dist to disarm End CommandSet ChinaInfantryRedguardCommandSetNEW 1 = Command_ChinaInfantryRedGuardCaptureBuilding ; 2 = Command_DisarmMinesAtPositionRedGuard 3 = Command_AmericaRangerSwitchToMachineGun 4 = Command_AmericaRangerSwitchToFlagBangGrenadesRG 11 = Command_AttackMove 13 = Command_Guard 14 = Command_Stop End Object ChinaInfantryRedguard RemoveModule ModuleTag_01 AddModule Draw = W3DModelDraw ModuleTag_6515648 OkToChangeModelColor = Yes ; this says "we don't use these condition states at all, so completely ; ignore them for purposes of matchmaking"... this is useful to help ; reduce the number of AliasConditionState clauses you must add in ; order to avoid ambiguity in some cases. IgnoreConditionStates = PREATTACK_A FIRING_A BETWEEN_FIRING_SHOTS_A RELOADING_A ; ------- Standing-Around Animations DefaultConditionState Model = NICNSC_SKN IdleAnimation = NICNSC_SKL.NICNSC_STA 0 35 IdleAnimation = NICNSC_SKL.NICNSC_IDA IdleAnimation = NICNSC_SKL.NICNSC_IDB AnimationMode = ONCE WeaponFireFXBone = PRIMARY Muzzle WeaponMuzzleFlash = PRIMARY MuzzleFX WeaponFireFXBone = SECONDARY Muzzle WeaponMuzzleFlash = SECONDARY MuzzleFX TransitionKey = TRANS_Stand End ConditionState = REALLYDAMAGED IdleAnimation = NICNSC_SKL.NICNSC_STB AnimationMode = ONCE TransitionKey = TRANS_StandDamaged End ; ------- Machine Gun Animations ConditionState = USING_WEAPON_A Animation = NICNSC_SKL.NICNSC_ATA AnimationMode = LOOP TransitionKey = TRANS_Firing End AliasConditionState = PREATTACK_B MOVING AliasConditionState = PREATTACK_B FIRING_B AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B ConditionState = USING_WEAPON_A REALLYDAMAGED Animation = NICNSC_SKL.NICNSC_ATC AnimationMode = LOOP TransitionKey = TRANS_FiringDamaged End AliasConditionState = PREATTACK_B MOVING REALLYDAMAGED AliasConditionState = PREATTACK_B FIRING_B REALLYDAMAGED AliasConditionState = PREATTACK_B BETWEEN_FIRING_SHOTS_B REALLYDAMAGED ; ------- Firing-related Transitions TransitionState = TRANS_Firing TRANS_FiringDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE End TransitionState = TRANS_Stand TRANS_Firing Animation = NICNSC_SKL.NICNSC_SA2AA AnimationMode = ONCE End TransitionState = TRANS_Firing TRANS_Stand Animation = NICNSC_SKL.NICNSC_AA2SA AnimationMode = ONCE End TransitionState = TRANS_StandDamaged TRANS_FiringDamaged Animation = NICNSC_SKL.NICNSC_ATCST AnimationMode = ONCE End TransitionState = TRANS_FiringDamaged TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_ATCED AnimationMode = ONCE End ; ------------- Damage Transitions -------------------- TransitionState = TRANS_StandDamaged TRANS_RunDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE AnimationSpeedFactorRange = 2 2 End TransitionState = TRANS_RunDamaged TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_AA2AC AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 2 2 Flags = START_FRAME_LAST End TransitionState = TRANS_Stand TRANS_StandDamaged Animation = NICNSC_SKL.NICNSC_AA2SA AnimationMode = ONCE_BACKWARDS AnimationSpeedFactorRange = 4 5 Flags = START_FRAME_LAST End ; ------- Bayonet Animations ConditionState = PREATTACK_C Animation = NICNSC_SKL.NICNSC_ATB1 AnimationMode = ONCE TransitionKey = TRANS_Stab End AliasConditionState = PREATTACK_C MOVING AliasConditionState = PREATTACK_C FIRING_C AliasConditionState = PREATTACK_C BETWEEN_FIRING_SHOTS_C ConditionState = FIRING_C Animation = NICNSC_SKL.NICNSC_ATB2 AnimationMode = ONCE ; this is basically a trick: this guy has a nontrivial animation for firing, ; and a long recycle time between shots. we want him to finish his fire animation ; (unless he's ordered to do something else), so this is just a handy trick that ; says, "if the previous state had this transition key, allow it to finish before ; switching to us, if possible". WaitForStateToFinishIfPossible = TRANS_Stab End AliasConditionState = BETWEEN_FIRING_SHOTS_C AliasConditionState = RELOADING_C ; ------- Parachuting Animations ConditionState = FREEFALL Animation = NICNSC_SKL.NICNSC_POP AnimationMode = MANUAL Flags = START_FRAME_FIRST TransitionKey = TRANS_Falling End AliasConditionState = FREEFALL REALLYDAMAGED AliasConditionState = FREEFALL DYING ConditionState = PARACHUTING Animation = NICNSC_SKL.NICNSC_PHG AnimationMode = LOOP Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME ; our bone positions should come from the last frame, rather than the first TransitionKey = TRANS_Chute End AliasConditionState = PARACHUTING REALLYDAMAGED AliasConditionState = PARACHUTING DYING TransitionState = TRANS_Falling TRANS_Chute Animation = NICNSC_SKL.NICNSC_POP AnimationMode = ONCE Flags = PRISTINE_BONE_POS_IN_FINAL_FRAME ; our bone positions should come from the last frame, rather than the first End TransitionState = TRANS_Chute TRANS_Stand Animation = NICNSC_SKL.NICNSC_PTD AnimationMode = ONCE End ; ------- Movement Animations ConditionState = MOVING Animation = NICNSC_SKL.NICNSC_RNA 26 AnimationMode = LOOP Flags = RANDOMSTART TransitionKey = None ParticleSysBone = None InfantryDustTrails End AliasConditionState = MOVING ATTACKING ConditionState = MOVING REALLYDAMAGED Animation = NICNSC_SKL.NICNSC_RNB 28 AnimationMode = LOOP Flags = RANDOMSTART TransitionKey = TRANS_RunDamaged TransitionKey = None End AliasConditionState = MOVING ATTACKING REALLYDAMAGED ; ------- Bldg-capture ConditionState = UNPACKING Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP1 AnimationMode = ONCE End AliasConditionState = UNPACKING REALLYDAMAGED ConditionState = RAISING_FLAG Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP2 AnimationMode = ONCE TransitionKey = TRANS_Raising End AliasConditionState = RAISING_FLAG REALLYDAMAGED ConditionState = PACKING Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP1 AnimationMode = ONCE_BACKWARDS Flags = START_FRAME_LAST TransitionKey = TRANS_Packing End AliasConditionState = PACKING REALLYDAMAGED TransitionState = TRANS_Raising TRANS_Packing Model = NICNSC_F_SKN Animation = NICNSC_F_SKL.NICNSC_F_FDP2 AnimationMode = ONCE_BACKWARDS Flags = START_FRAME_LAST End ; ------- Dying Animations ConditionState = DYING Animation = NICNSC_SKL.NICNSC_DTA Animation = NICNSC_SKL.NICNSC_DTB AnimationMode = ONCE TransitionKey = TRANS_Dying End TransitionState = TRANS_Dying TRANS_Flailing Animation = NICNSC_SKL.NICNSC_ATDE1 AnimationMode = ONCE End ConditionState = DYING EXPLODED_FLAILING Animation = NICNSC_SKL.NICNSC_ATDE2 AnimationMode = LOOP TransitionKey = TRANS_Flailing End ConditionState = DYING EXPLODED_BOUNCING Animation = NICNSC_SKL.NICNSC_ATDE3 AnimationMode = ONCE TransitionKey = None End ; ------- Misc Animations ConditionState = SPECIAL_CHEERING Animation = NICNSC_SKL.NICNSC_CHA AnimationMode = LOOP End End End KindOf = PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT CAN_CAST_REFLECTIONS INFANTRY SCORE PARACHUTABLE DOZER RemoveModule ModuleTag_04 AddModule Behavior = DozerAIUpdate ModuleTag_04444 RepairHealthPercentPerSecond = 0% ; % of max health to repair each second BoredTime = 5000 ; in milliseconds BoredRange = 150 ; when bored, we look this far away to do something ; the only "enemies" that workers can acquire are mines, to be disarmed... AutoAcquireEnemiesWhenIdle = Yes End End Locomotor = SET_NORMAL BasicHumanLocomotor WeaponSet Conditions = None Weapon = PRIMARY WorkerMineDisarmingWeaponREDGUARD Weapon = SECONDARY RedguardMachineGun;;;RedguardMachineGunOTHER; AutoChooseSources = PRIMARY FROM_SCRIPT FROM_AI DEFAULT_SWITCH_WEAPON AutoChooseSources = SECONDARY FROM_SCRIPT FROM_AI FROM_PLAYER WeaponLockSharedAcrossSets = Yes ; This set is so similar to the default set that it can hold the weapon lock End ; WeaponSet ; Conditions = MINE_CLEARING_DETAIL ; Weapon = PRIMARY WorkerMineDisarmingWeaponREDGUARD ; Weapon = SECONDARY RedguardMachineGun;;;RedguardMachineGunOTHER; ; AutoChooseSources = PRIMARY FROM_SCRIPT FROM_AI DEFAULT_SWITCH_WEAPON ; AutoChooseSources = SECONDARY FROM_SCRIPT FROM_AI FROM_PLAYER ; WeaponLockSharedAcrossSets = Yes ; This set is so similar to the default set that it can hold the weapon lock ; End AddModule Behavior = StealthDetectorUpdate ModuleTag_0655 DetectionRate = 300 ; how often to rescan for stealthed things in my sight (msec) ;DetectionRange = ??? ;Dustin, enable this for independant balancing! CanDetectWhileGarrisoned = No ;Garrisoned means being in a structure that you units can shoot out of. CanDetectWhileContained = No ;Contained means being in a transport or tunnel network. ExtraRequiredKindOf = MINE ; we can only detect MINES, not other stealthed things End End CommandSet = ChinaInfantryRedguardCommandSetNEW End[/code]

Posted by: rey - Thursday, October 13, 2022 7:35:09 AM
Unexpected approach, thank you. Didn't check it fully yet, but wouldn't then Red Guards be able to "take action in building" with Kindof Dozer?

Posted by: chu121su12 - Sunday, December 24, 2023 9:07:04 PM
I think to "kill" mine you'd need to make mine as unit/structure and spare damage & armor to be exclusive for mine attacking, not as mine fueld.