forums wiki races classes cabals religions world history immortals all pages bugs items helps changes calendar map login donate play now

Weapon Height from Battle Stance

What does changing height actually do for you?  Yes, I can feel the difference between a high versus a low weapon, but is the effect a thac0 thing?  Is it a bonus to the number of attacks when high?

I don't know the ins and outs of thac0 so I'll give it to you how I see it. High = more offensive, Middle = no change from another class with that weapon type, Low = more defensive. But as far as the nuts and bolts of what changes.....not a clue.

As I mentioned I notice the difference between high and low for offense v defense and aware when to use each.  Just trying to find out if anyone has any insight on the hidden or how it gives you said bonuses.

Thanks @FatMike that's how I see it too. Anybody know specifics?

I'm fairly certain that high is harder to parry, harder to be parried; low is easier to parry, easier to be parried.  Not sure where it sits with dodge.  In either case, I don't believe it affects damroll at all.

9 minutes ago, FatMike said:

Thanks @FatMike that's how I see it too. Anybody know specifics?

Did you tag yourself?  HAHAHA!  Brilliant.

Multiple personalities maybe!

From the old code, the following is applied to parry_monk, parry, dual_parry, shield_block, blink, block (2h block), dodge, and riposte:

/* check weapon position */
 if (!IS_NPC(ch)){
 /* harder to block for victim if attacker is high */
 if (ch->pcdata->wep_pos == WEPPOS_HIGH)
 chance -= 10;
 /* easier to block for victim if attacker is low */
 else if (ch->pcdata->wep_pos == WEPPOS_LOW)
 chance += 5;
 }
 if (!IS_NPC(victim)){
 /* harder to block for victim if victim is high */
 if (victim->pcdata->wep_pos == WEPPOS_HIGH)
 chance -= 5;
 /* easier to block for victim if victim is low */
 else if (victim->pcdata->wep_pos == WEPPOS_LOW)
 chance += 10;
 }

It doesn't seem to do anything else or apply to any other defense (monk second parry, blur, etc.)

Here is the code behind shield_block:

bool check_shield_block( CHAR_DATA *ch, CHAR_DATA *victim, OBJ_DATA* vir_obj, int dt, int h_roll, int level, bool fVirt, int sn)
{
 OBJ_DATA *obj = NULL;
 OBJ_DATA* obj2 = (vir_obj != NULL? vir_obj : get_eq_char(ch,WEAR_WIELD));

 int chance, ini_chance, temp = 0;
 char buf1[MSL], buf2[MSL], buf3[MSL];
 AFFECT_DATA* paf;

//Sure hit
 if ( !IS_AWAKE(victim)
 || ((paf = affect_find(victim->affected, gsn_wlock)) && paf->modifier != 0)
 || is_affected(victim,gsn_ecstacy))
 return FALSE;
//Skill check
 if ( (chance = get_skill(victim,gsn_shield_block) / 2) == 0)
 return FALSE;
//Item check
 if ( !is_affected(victim, skill_lookup("spirit shield")) && (obj = get_eq_char( victim, WEAR_SHIELD )) == NULL )
 return FALSE;

 ini_chance = chance;

//bonus/penalty for blind.
 //we only check if character can see if this is not virtual attack.
 if (!can_see(ch,victim) && !fVirt)
 {
 if (!IS_NPC(ch) && number_percent() get_skill(ch,gsn_blind_fighting)){
 if (!is_affected(ch, gsn_battletrance))
 chance *= 1.1;
 }
 else
 chance *= 1.3;
 }

 if (!can_see(victim,ch))
 {
 if (!IS_NPC(victim) && number_percent() get_skill(victim,gsn_blind_fighting)){
 if (!is_affected(victim, gsn_battletrance))
 chance /= 1.1;
 }
 else
 chance /= 1.3;
 }

/* crusade effects */
 if ( (temp = check_crusade(ch, victim)) != CRUSADE_NONE){
 /* if attacker is on crusade against victim */
 if (temp == CRUSADE_MATCH)
 chance /= 1.3;
 /* if attacker is on crusade but not agaisnt victim */
 else if (temp == CRUSADE_NOTMATCH)
 chance *= 1.1;
 }
 if ( (temp = check_crusade(victim, ch)) != CRUSADE_NONE){
 /* if victim is on crusade against attacker */
 if (temp == CRUSADE_MATCH)
 chance *= 1.3;
 /* if victim is on crusade but not against attacker */
 else if (temp == CRUSADE_NOTMATCH)
 chance /= 1.1;
 }
/* end crusade bonuses */

/* check weapon position */
 if (!IS_NPC(ch)){
 /* harder to block for victim if attacker is high */
 if (ch->pcdata->wep_pos == WEPPOS_HIGH)
 chance -= 10;
 /* easier to block for victim if attacker is low */
 else if (ch->pcdata->wep_pos == WEPPOS_LOW)
 chance += 5;
 }
 if (!IS_NPC(victim)){
 /* harder to block for victim if victim is high */
 if (victim->pcdata->wep_pos == WEPPOS_HIGH)
 chance -= 5;
 /* easier to block for victim if victim is low */
 else if (victim->pcdata->wep_pos == WEPPOS_LOW)
 chance += 10;
 }

 //bonus for bless
 if (obj && IS_GOOD(victim) && IS_OBJ_STAT(obj,ITEM_BLESS))
 chance += 5;
 else if (obj && IS_EVIL(victim) && IS_OBJ_STAT(obj,ITEM_DARK))
 chance += 5;

 chance += get_curr_stat(victim,STAT_STR) - get_curr_stat(ch,STAT_STR);
 chance += get_curr_stat(victim,STAT_DEX) - get_curr_stat(ch,STAT_DEX);
 chance += get_curr_stat(victim,STAT_LUCK) - get_curr_stat(ch,STAT_LUCK);

 if (!IS_NPC(ch) && ch->pcdata->pStallion != NULL && number_percent() get_skill(ch, gsn_mounted)){
 chance -= 3;
 check_improve(ch, gsn_mounted, TRUE, 1);
 }
 if (IS_NPC(ch) && IS_SET(ch->off_flags, CABAL_GUARD))
 chance -= 10;
 else
 chance += victim->level - level;

 if (!IS_NPC(ch)){
 chance = get_dchance(ini_chance, chance, (h_roll - victim->level/5)/4);
 }
 else
 chance -= h_roll/4;

 if (!IS_NPC(victim) && IS_SET(victim->act2,PLR_GIMP) )
 chance /= 2;

 if ( number_percent( ) >= chance )
 return FALSE;

 if (fVirt)
 {
 /* We select two types of origin of the virual attack.
 1) obj
 2) spell
 */

 sprintf(buf1, "You block a %s's %s with your shield.",
 (vir_obj == NULL? get_vir_attack(sn) : "$p"),
 get_vir_attack(dt));

 sprintf(buf2, "$N blocks a %s's %s with $S shield.",
 (vir_obj == NULL? get_vir_attack(sn) : "$p"),
 get_vir_attack(dt));

 sprintf(buf3, "$N blocks a %s's %s with $S shield.",
 (vir_obj == NULL? get_vir_attack(sn) : "$p"),
 get_vir_attack(dt));
 }
 else
 {
 sprintf(buf1, "You block $n's attack with your shield.");
 sprintf(buf2, "$N blocks your attack with $S shield.");
 sprintf(buf3, "$N blocks $n's attack with $S shield.");
 }

 if (!doomsingerCheck(ch)){
 act( buf1, ch, vir_obj, victim, TO_VICT );
 act( buf2, ch, vir_obj, victim, TO_CHAR );
 act( buf3, ch, vir_obj, victim, TO_WATCHROOM );
 }
 check_improve(victim,gsn_shield_block,TRUE, 0);

//SHBLOCK CHECK
 if (SHBLOCK_CHECK(ch, obj2, obj, dt) == -1)
 bug("Error at: BLOCK_CHECK\n\r", 0);

 return TRUE;
}

Keep in mind that both code snippets are out of date and may not apply to today's FL ( @Erelei has already stated that the defense code presented here is outdated). Still, this old code gives good insight into what goes into defense checks. Notice the mounted penalty and effect of bless. You can also see the role of dex in the calculation for shield block.

Edited

@Celerity, may not be exact but the insight is quite good.  I love you as much as an forum avatar can love another forum avatar.