Beta Patch Notes e1.5.5

Users who are viewing this thread

Take the original stack out of your party (give it to a clan member, put in garrison, whatever). Get a new bandit, get an upgrade availabe with him, then go back and put your original stack in your party.
Tried that, didn't work. Transferred all my upgradable bandits to city garrison, went off captured some more same bandits, went back to city, transferred city garrison bandits back to army, tried to upgrade bandits - NO GO ! same stupid message appears.

Please fix.
 
Someone from TW should check the Aserai Mamalukes and Master archers. I don't think this is normal...


4 (edit 27) Mamalukes killed 131 units :facepalm:

Idduno looks like they took heavy losses, I wouldn't accept that loss if it were my troops. Unless they killed 131 other t5/6 units I don't see a problem, they just connected with the executioner's axe = kill 1st. if they didn't they'd 100% worthless. If anything other high tier units should be killing at least that well.
Your master archer goofed though, shame on you for letting them be defeated like that! What's the point in raising all those high tier units if you let em die?
 
Tried that, didn't work. Transferred all my upgradable bandits to city garrison, went off captured some more same bandits, went back to city, transferred city garrison bandits back to army, tried to upgrade bandits - NO GO ! same stupid message appears.

Please fix.

You have to get an upgrade on the fresh bandit stack.
 
Tried that, didn't work. Transferred all my upgradable bandits to city garrison, went off captured some more same bandits, went back to city, transferred city garrison bandits back to army, tried to upgrade bandits - NO GO ! same stupid message appears.

Please fix.
you skipped a step, after getting new bandits, level them first, then once you level them, then your old stack will unlock
 
Just confirmed, the combat death bug is still there. This is sad, wanting players to play in EA but making so many game breaking bugs and mechanics and doesn't bother to fix or reply.

For the time being You can switch to 1.5.4 turn it off or on depending what You need and go back to 1.5.5. One downside through is that the option switches aging and children together with death in battle so if You turn this of characters won't age and no children will be born.
 
What I did

(1) moved recruited bandits into city
(2) raced off to capture NEW prisoners of this type, got some
(3) raced back home, some of these prisoners wanted to be recruited, so I did so
(4) I raced about alot more until these recruited bandits wanted to be upgrade
(5) clicked on their upgrade , noting both options are redded out, with moused-over message "You need Veteran Perk"
(6) screamed alot

The Veteran Perk is for converting Bandits into non-bandits, NOT upgrading bandits !!

.


"recruit prisoner"
 
Going to add here something which I have wrote in a SP sub forum thread for more visibility, concerning the Archers/Crossbowmen and shock infantry units performance in singleplayer:


Archers are already pretty OP in my view, and this is the thing, I remember that Mexxico said that after giving the AI some small cheats for passively training troops, recruits average is 30-40% now in most of AI parties. If we sum archers and two hander troops, most of AI parties have >50% unshielded units by design.

The problem is that archers are currently balanced keeping in mind a rock paper or scissors system for captain mode where high tier shielded units are able to defend properly against archers, while shock infantry can make use of map to keep safe against archers, or make some team play to advance behind shielded infantry, if not they get wrecked by archers in seconds. The good thing is that if shock infantry gets used properly, it wrecked shielded units. This system is nice in captain mode but it is pretty bad for SP. it is simply not possible to keep all the army protected if most of units are unshielded, so the poor AI has not much to do against this.

Having said that, maybe recruits should get shields or who knows, but the current system does not work at all in singleplayer and something has to change.
 
Going to add here something which I have wrote in a SP sub forum thread for more visibility, concerning the Archers/Crossbowmen and shock infantry units performance in singleplayer:


Archers are already pretty OP in my view, and this is the thing, I remember that Mexxico said that after giving the AI some small cheats for passively training troops, recruits average is 30-40% now in most of AI parties. If we sum archers and two hander troops, most of AI parties have >50% unshielded units by design.

The problem is that archers are currently balanced keeping in mind a rock paper or scissors system for captain mode where high tier shielded units are able to defend properly against archers, while shock infantry can make use of map to keep safe against archers, or make some team play to advance behind shielded infantry, if not they get wrecked by archers in seconds. The good thing is that if shock infantry gets used properly, it wrecked shielded units. This system is nice in captain mode but it is pretty bad for SP. it is simply not possible to keep all the army protected if most of units are unshielded, so the poor AI has not much to do against this.

Having said that, maybe recruits should get shields or who knows, but the current system does not work at all in singleplayer and something has to change.

I think that main problem in this case is lack of different groups usage by AI. Player can set up everything separating shielded inf from unshielded and spears.
AI treats all melee foot units as one group and moves them together. When they get in the range of arrows deaths to unshielded units causes morale drop to others and creates holes in formation which make it easier to destroy them in melee.
They should implement proper groups like heavy infantry etc. for AI to use and adjust it to use them according to situation. So for example when they advance against archers they put heavy shielded inf in front and advance while keeping light Inf out if range and use them when heavy reached the enemy and archers are not a threat any more.
 
I don't remember if I clicked something wrong in the beginning of my new 1.55 campaign but I already lost a couple of compagnions and then my little sister was killed in battle! ! ! I have to say that I was shocked.... I even thought about executing all the prisoners of that battle which I didn't and I never do normally....
 
Some of the heaviest crossbows are capable of penetrating shields

Do we have more details of when shield penetration takes place? Is it only for the top tier xbow units or is it at a specific damage level? Finally is the damage done by a penetrating bolt reduced or full impact? Currious as this changes a great deal for shield wall formations depending on the answers.
 
I don't remember if I clicked something wrong in the beginning of my new 1.55 campaign but I already lost a couple of compagnions and then my little sister was killed in battle! ! ! I have to say that I was shocked.... I even thought about executing all the prisoners of that battle which I didn't and I never do normally....
there is a bug that turned aging and death on in the small ?wednesday? patch
nothing you can do

EDit well some things you can do
reload
play carefully, always with full health
use them as governors mostly
park the importand ones in town
put scout and doctor in the archer group and use advance commands

but
sieges and full battles were you are not in command are deadly
 
Do we have more details of when shield penetration takes place? Is it only for the top tier xbow units or is it at a specific damage level? Finally is the damage done by a penetrating bolt reduced or full impact? Currious as this changes a great deal for shield wall formations depending on the answers.


Here is your Answer....
<!-- #region Tier 5 -->
<Item id="crossbow_f" name="{=TBW9E2ao}Bound Crossbow" body_name="bo_cross_bow_heavy" mesh="crossbow_f" culture="Culture.neutral_culture" weight="2.0" appearance="0.8" difficulty="70" Type="Crossbow" AmmoOffset="0.0, 0.02131, 0.22975" item_holsters="crossbow_back:bow_hip:mace_right_hip:bow_hip_2" holster_position_shift="0.02,0,-0.4">
<ItemComponent>
<Weapon weapon_class="Crossbow" ammo_class="Bolt" ammo_limit="1" thrust_speed="95" speed_rating="63" missile_speed="97" weapon_length="90" accuracy="100" thrust_damage="100" thrust_damage_type="Pierce" item_usage="crossbow" physics_material="wood_weapon" center_of_mass="0,0,0.4" item_modifier_group="crossbow">
<WeaponFlags RangedWeapon="true" HasString="true" CantReloadOnHorseback="true" CanPenetrateShield="true" NotUsableWithOneHand="true" TwoHandIdleOnMount="true" />
</Weapon>
</ItemComponent>
<Flags />
</Item>
<!-- #endregion -->

So actually Bound Crossbows can penetrate Shields, but they are the only ones atm
 
Here is your Answer....
<!-- #region Tier 5 -->
<Item id="crossbow_f" name="{=TBW9E2ao}Bound Crossbow" body_name="bo_cross_bow_heavy" mesh="crossbow_f" culture="Culture.neutral_culture" weight="2.0" appearance="0.8" difficulty="70" Type="Crossbow" AmmoOffset="0.0, 0.02131, 0.22975" item_holsters="crossbow_back:bow_hip:mace_right_hip:bow_hip_2" holster_position_shift="0.02,0,-0.4">
<ItemComponent>
<Weapon weapon_class="Crossbow" ammo_class="Bolt" ammo_limit="1" thrust_speed="95" speed_rating="63" missile_speed="97" weapon_length="90" accuracy="100" thrust_damage="100" thrust_damage_type="Pierce" item_usage="crossbow" physics_material="wood_weapon" center_of_mass="0,0,0.4" item_modifier_group="crossbow">
<WeaponFlags RangedWeapon="true" HasString="true" CantReloadOnHorseback="true" CanPenetrateShield="true" NotUsableWithOneHand="true" TwoHandIdleOnMount="true" />
</Weapon>
</ItemComponent>
<Flags />
</Item>
<!-- #endregion -->

So actually Bound Crossbows can penetrate Shields, but they are the only ones atm

Oh thanks for this. Do you know if it is able to penetrate every shield or only the worse shields?

I am going to remove this to check if it is the cause because sharpshooters are now OP. I remember that crossbowmen have been always pretty good balanced until we got 1.5.5.
 
Here is your Answer....
<!-- #region Tier 5 -->
<Item id="crossbow_f" name="{=TBW9E2ao}Bound Crossbow" body_name="bo_cross_bow_heavy" mesh="crossbow_f" culture="Culture.neutral_culture" weight="2.0" appearance="0.8" difficulty="70" Type="Crossbow" AmmoOffset="0.0, 0.02131, 0.22975" item_holsters="crossbow_back:bow_hip:mace_right_hip:bow_hip_2" holster_position_shift="0.02,0,-0.4">
<ItemComponent>
<Weapon weapon_class="Crossbow" ammo_class="Bolt" ammo_limit="1" thrust_speed="95" speed_rating="63" missile_speed="97" weapon_length="90" accuracy="100" thrust_damage="100" thrust_damage_type="Pierce" item_usage="crossbow" physics_material="wood_weapon" center_of_mass="0,0,0.4" item_modifier_group="crossbow">
<WeaponFlags RangedWeapon="true" HasString="true" CantReloadOnHorseback="true" CanPenetrateShield="true" NotUsableWithOneHand="true" TwoHandIdleOnMount="true" />
</Weapon>
</ItemComponent>
<Flags />
</Item>
<!-- #endregion -->

So actually Bound Crossbows can penetrate Shields, but they are the only ones atm


Thank you very much for looking at the code for us! Looks like there is no damage reduction for it going through a shield either if I am reading it right.
 
Oh thanks for this. Do you know if it is able to penetrate every shield or only the worse shields?

I am going to remove this to check if it is the cause because sharpshooters are now OP. I remember that crossbowmen have been always pretty good balanced until we got 1.5.5.
A moment ago i found this Method "MissileHitCallback, if you are interested you can check it on your own.
internal bool MissileHitCallback(out int hitParticleIndex, ref AttackCollisionData collisionData, Vec3 missileStartingPosition, Vec3 missilePosition, Vec3 missileAngularVelocity, Vec3 movementVelocity, MatrixFrame attachGlobalFrame, MatrixFrame affectedShieldGlobalFrame, int numDamagedAgents, Agent attacker, Agent victim, GameEntity hitEntity)
{
Mission.Missile missile = this._missiles[collisionData.AffectorWeaponSlotOrMissileIndex];
MissionWeapon weapon = missile.Weapon;
WeaponFlags weaponFlags = weapon.CurrentUsageItem.WeaponFlags;
float num = 1f;
WeaponComponentData weaponComponentData = null;
MissionGameModels.Current.AgentApplyDamageModel.DecideMissileWeaponFlags(attacker, missile.Weapon, ref weaponFlags);
if (collisionData.AttackBlockedWithShield && weaponFlags.HasAnyFlag(WeaponFlags.CanPenetrateShield))
{
this.GetAttackCollisionResults(attacker, victim, hitEntity, num, ref collisionData, weapon, false, false, false, out weaponComponentData);
EquipmentIndex wieldedItemIndex = victim.GetWieldedItemIndex(Agent.HandIndex.OffHand);
if ((float)collisionData.InflictedDamage > ManagedParameters.Instance.GetManagedParameter(ManagedParametersEnum.ShieldPenetrationOffset) + ManagedParameters.Instance.GetManagedParameter(ManagedParametersEnum.ShieldPenetrationFactor) * (float)victim.Equipment[wieldedItemIndex].GetGetModifiedArmorForCurrentUsage())
{
AttackCollisionData.UpdateDataForShieldPenetration(ref collisionData);
num *= 0.4f + MBRandom.RandomFloat * 0.2f;
}
}
hitParticleIndex = -1;
Mission.MissileCollisionReaction missileCollisionReaction = Mission.MissileCollisionReaction.Invalid;
bool flag = !GameNetwork.IsSessionActive;
bool missileHasPhysics = collisionData.MissileHasPhysics;
PhysicsMaterial fromIndex = PhysicsMaterial.GetFromIndex(collisionData.PhysicsMaterialIndex);
object obj = fromIndex.IsValid ? fromIndex.GetFlags() : PhysicsMaterialFlags.None;
bool flag2 = (weaponFlags & WeaponFlags.AmmoSticksWhenShot) > (WeaponFlags)0UL;
object obj2 = obj;
bool flag3 = (obj2 & 1) == 0;
bool flag4 = (obj2 & :cool: != 0;
MissionObject missionObject = null;
if (victim == null && hitEntity != null)
{
GameEntity gameEntity = hitEntity;
do
{
missionObject = gameEntity.GetFirstScriptOfType<MissionObject>();
gameEntity = gameEntity.Parent;
}
while (missionObject == null && gameEntity != null);
hitEntity = ((missionObject != null) ? missionObject.GameEntity : null);
}
Mission.MissileCollisionReaction missileCollisionReaction2;
if (flag4)
{
missileCollisionReaction2 = Mission.MissileCollisionReaction.PassThrough;
}
else if (weaponFlags.HasAnyFlag(WeaponFlags.Burning))
{
missileCollisionReaction2 = Mission.MissileCollisionReaction.BecomeInvisible;
}
else if (!flag3 || !flag2)
{
missileCollisionReaction2 = Mission.MissileCollisionReaction.BounceBack;
}
else
{
missileCollisionReaction2 = Mission.MissileCollisionReaction.Stick;
}
bool flag5 = false;
if (collisionData.MissileGoneUnderWater)
{
missileCollisionReaction = Mission.MissileCollisionReaction.BecomeInvisible;
hitParticleIndex = 0;
}
else if (victim == null)
{
if (hitEntity != null)
{
this.GetAttackCollisionResults(attacker, victim, hitEntity, num, ref collisionData, weapon, false, false, false, out weaponComponentData);
Blow b = this.CreateMissileBlow(attacker, collisionData, weapon, missilePosition, missileStartingPosition);
this.RegisterBlow(attacker, null, hitEntity, b, ref collisionData, weapon);
}
missileCollisionReaction = missileCollisionReaction2;
hitParticleIndex = 0;
}
else if (collisionData.AttackBlockedWithShield)
{
this.GetAttackCollisionResults(attacker, victim, hitEntity, num, ref collisionData, weapon, false, false, false, out weaponComponentData);
missileCollisionReaction = (collisionData.IsShieldBroken ? Mission.MissileCollisionReaction.BecomeInvisible : missileCollisionReaction2);
hitParticleIndex = 0;
}
else
{
if (attacker != null && attacker.IsFriendOf(victim))
{
if (!missileHasPhysics)
{
if (flag)
{
if (attacker.Controller == Agent.ControllerType.AI)
{
flag5 = true;
}
}
else if ((MultiplayerOptions.OptionType.FriendlyFireDamageRangedFriendPercent.GetIntValue(MultiplayerOptions.MultiplayerOptionsAccessMode.CurrentMapOptions) <= 0 && MultiplayerOptions.OptionType.FriendlyFireDamageRangedSelfPercent.GetIntValue(MultiplayerOptions.MultiplayerOptionsAccessMode.CurrentMapOptions) <= 0) || this.Mode == MissionMode.Duel)
{
flag5 = true;
}
}
}
else if (victim.IsHuman && !attacker.IsEnemyOf(victim))
{
flag5 = true;
}
else if (flag && attacker != null && attacker.Controller == Agent.ControllerType.AI && victim.RiderAgent != null && attacker.IsFriendOf(victim.RiderAgent))
{
flag5 = true;
}
if (flag5)
{
if (flag && attacker == Agent.Main && attacker.IsFriendOf(victim))
{
InformationManager.DisplayMessage(new InformationMessage(GameTexts.FindText("ui_you_hit_a_friendly_troop", null).ToString(), Color.ConvertStringToColor("#D65252FF")));
}
missileCollisionReaction = Mission.MissileCollisionReaction.BecomeInvisible;
}
else
{
bool flag6 = (weaponFlags & WeaponFlags.MultiplePenetration) > (WeaponFlags)0UL;
this.GetAttackCollisionResults(attacker, victim, null, num, ref collisionData, weapon, false, false, false, out weaponComponentData);
Blow blow = this.CreateMissileBlow(attacker, collisionData, weapon, missilePosition, missileStartingPosition);
if (collisionData.IsColliderAgent)
{
if (!collisionData.CollidedWithShieldOnBack && flag6 && numDamagedAgents > 0)
{
blow.InflictedDamage /= numDamagedAgents;
blow.SelfInflictedDamage /= numDamagedAgents;
}
if (victim.Health - (float)collisionData.InflictedDamage >= 1f)
{
ManagedParametersEnum managedParameterEnum;
if (blow.DamageType == DamageTypes.Cut)
{
managedParameterEnum = ManagedParametersEnum.DamageInterruptAttackThresholdCut;
}
else if (blow.DamageType == DamageTypes.Pierce)
{
managedParameterEnum = ManagedParametersEnum.DamageInterruptAttackThresholdPierce;
}
else
{
managedParameterEnum = ManagedParametersEnum.DamageInterruptAttackThresholdBlunt;
}
float num2 = MissionGameModels.Current.AgentApplyDamageModel.CalculateStaggerThresholdMultiplier(victim);
float num3 = ManagedParameters.Instance.GetManagedParameter(managedParameterEnum) * num2;
MPPerkObject.MPPerkHandler perkHandler = MPPerkObject.GetPerkHandler(victim);
float? num4 = (perkHandler != null) ? new float?(perkHandler.GetDamageInterruptionThreshold()) : null;
if (num4 != null && num4.Value > 0f)
{
num3 = num4.Value;
}
if ((float)collisionData.InflictedDamage <= num3)
{
blow.BlowFlag |= BlowFlags.ShrugOff;
}
}
MissionGameModels.Current.AgentApplyDamageModel.DecideMissileBlowFlags(attacker, victim, weapon.CurrentUsageItem, collisionData, ref blow.BlowFlag);
}
if (victim.State == AgentState.Active)
{
this.RegisterBlow(attacker, victim, null, blow, ref collisionData, weapon);
}
hitParticleIndex = ParticleSystemManager.GetRuntimeIdByName("psys_game_blood_sword_enter");
if (flag6 && numDamagedAgents < 3)
{
missileCollisionReaction = Mission.MissileCollisionReaction.PassThrough;
}
else
{
missileCollisionReaction = missileCollisionReaction2;
if (missileCollisionReaction2 == Mission.MissileCollisionReaction.Stick && !collisionData.CollidedWithShieldOnBack)
{
bool flag7 = this.CombatType == Mission.MissionCombatType.Combat;
if (flag7)
{
bool flag8 = victim.IsHuman && collisionData.VictimHitBodyPart == BoneBodyPartType.Head;
flag7 = (victim.State != AgentState.Active || !flag:cool:;
}
if (flag7)
{
float managedParameter = ManagedParameters.Instance.GetManagedParameter(ManagedParametersEnum.MissileMinimumDamageToStick);
float num5 = 2f * managedParameter;
if (!GameNetwork.IsClientOrReplay && (float)blow.InflictedDamage < managedParameter && blow.AbsorbedByArmor > num5)
{
missileCollisionReaction = Mission.MissileCollisionReaction.BounceBack;
}
}
else
{
missileCollisionReaction = Mission.MissileCollisionReaction.BecomeInvisible;
}
}
}
}
}
if (collisionData.CollidedWithShieldOnBack && weaponComponentData != null && victim != null && victim.IsMainAgent)
{
InformationManager.DisplayMessage(new InformationMessage(GameTexts.FindText("ui_hit_shield_on_back", null).ToString(), Color.ConvertStringToColor("#FFFFFFFF")));
}
MatrixFrame attachLocalFrame;
if (!collisionData.MissileHasPhysics && !collisionData.MissileGoneUnderWater)
{
bool shouldMissilePenetrate = missileCollisionReaction == Mission.MissileCollisionReaction.Stick;
attachLocalFrame = this.CalculateAttachedLocalFrame(ref attachGlobalFrame, collisionData, missile.Weapon.CurrentUsageItem, victim, hitEntity, movementVelocity, missileAngularVelocity, affectedShieldGlobalFrame, shouldMissilePenetrate);
}
else
{
attachLocalFrame = attachGlobalFrame;
missionObject = null;
}
Vec3 zero = Vec3.Zero;
Vec3 zero2 = Vec3.Zero;
if (missileCollisionReaction == Mission.MissileCollisionReaction.BounceBack)
{
WeaponFlags weaponFlags2 = weaponFlags & WeaponFlags.AmmoBreakOnBounceBackMask;
if ((weaponFlags2 == WeaponFlags.AmmoCanBreakOnBounceBack && collisionData.MissileVelocity.Length > ManagedParameters.Instance.GetManagedParameter(ManagedParametersEnum.BreakableProjectileMinimumBreakSpeed)) || weaponFlags2 == WeaponFlags.AmmoBreaksOnBounceBack)
{
missileCollisionReaction = Mission.MissileCollisionReaction.BecomeInvisible;
hitParticleIndex = ParticleSystemManager.GetRuntimeIdByName("psys_game_broken_arrow");
}
else
{
missile.CalculateBounceBackVelocity(missileAngularVelocity, collisionData, out zero, out zero2);
}
}
this.HandleMissileCollisionReaction(collisionData.AffectorWeaponSlotOrMissileIndex, missileCollisionReaction, attachLocalFrame, attacker, victim, collisionData.AttackBlockedWithShield, collisionData.CollisionBoneIndex, missionObject, zero, zero2, -1);
foreach (MissionBehaviour missionBehaviour in this.MissionBehaviours)
{
missionBehaviour.OnMissileHit(attacker, victim, flag5);
}
return missileCollisionReaction != Mission.MissileCollisionReaction.PassThrough;
}
 
Thank you very much for looking at the code for us! Looks like there is no damage reduction for it going through a shield either if I am reading it right.

There is a Dmg reduction

Here is your Answer....
<!-- #region Tier 5 -->
<Item id="crossbow_f" name="{=TBW9E2ao}Bound Crossbow" body_name="bo_cross_bow_heavy" mesh="crossbow_f" culture="Culture.neutral_culture" weight="2.0" appearance="0.8" difficulty="70" Type="Crossbow" AmmoOffset="0.0, 0.02131, 0.22975" item_holsters="crossbow_back:bow_hip:mace_right_hip:bow_hip_2" holster_position_shift="0.02,0,-0.4">
<ItemComponent>
<Weapon weapon_class="Crossbow" ammo_class="Bolt" ammo_limit="1" thrust_speed="95" speed_rating="63" missile_speed="97" weapon_length="90" accuracy="100" thrust_damage="100" thrust_damage_type="Pierce" item_usage="crossbow" physics_material="wood_weapon" center_of_mass="0,0,0.4" item_modifier_group="crossbow">
<WeaponFlags RangedWeapon="true" HasString="true" CantReloadOnHorseback="true" CanPenetrateShield="true" NotUsableWithOneHand="true" TwoHandIdleOnMount="true" />
</Weapon>
</ItemComponent>
<Flags />
</Item>
<!-- #endregion -->

So actually Bound Crossbows can penetrate Shields, but they are the only ones atm

This is only XML staff and will be considered in the Programm. The "CanPenetrateShield" is a Weaponflag in the Programm like the "Crush through".
 
So the game was supposed to be "FUll released" in next semester.
Don't you think we should be getting "2.0/3.0/4.0" patches already? :wink:
 
Back
Top Bottom