Michieru's Renewal Update

Related to Bug issue 8029

In /db/re/skill_db.txt you set RK_DRAGONBREATH as weapon from misc.  I wonder whether md.damage (a misc damage variable) has anything to do with it?
Note that there is no wd.damage variable in /src/map/battle.c for RK_DRAGONBREATH.  The damage of RK_DRAGONBREATH is determined by the variable md.damage.
Also note that wd.damage and md.damage exists in two different functions.  

This in the function battle_calc_misc_attack
https://github.com/HerculesWS/Hercules/blob/master/src/map/battle.c
 case RK_DRAGONBREATH:
  case RK_DRAGONBREATH_WATER:
md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
RE_LVL_MDMOD(150);
if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;
md.flag |= BF_LONG|BF_WEAPON;
break;
 
End of this function has
return md;
 
A lot of skills that I checked with in this very function were labelled as misc in /db/re/skill_db.txt instead of weapon.  Examples include CR_ACIDDEMONSTRATION, NJ_ZENYNAGE, trap skills .etc.

Maybe we should test this out by changing NJ_ZENYNAGE in /db/re/skill_db.txt from misc to weapon and see whether it still works.

_____________
My suggestion:
Move dragon breath coding in battle.c to battle_calc_weapon_attack from battle_calc_misc_attack function and rename md.damage as wd.damage instead.  Also, I think md.flag would become wd.flag.

   

 
Last edited by a moderator:
Related to Bug issue 8029

In /db/re/skill_db.txt you set RK_DRAGONBREATH as weapon from misc.  I wonder whether md.damage (a misc damage variable) has anything to do with it?

Note that there is no wd.damage variable in /src/map/battle.c for RK_DRAGONBREATH.  The damage of RK_DRAGONBREATH is determined by the variable md.damage.

Also note that wd.damage and md.damage exists in two different functions.  

This in the function battle_calc_misc_attackhttps://github.com/HerculesWS/Hercules/blob/master/src/map/battle.c
 case RK_DRAGONBREATH:
  case RK_DRAGONBREATH_WATER:
md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
RE_LVL_MDMOD(150);
if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;
md.flag |= BF_LONG|BF_WEAPON;
break;
 
End of this function has
return md;
 
A lot of skills that I checked with in this very function were labelled as misc in /db/re/skill_db.txt instead of weapon.  Examples include CR_ACIDDEMONSTRATION, NJ_ZENYNAGE, trap skills .etc.
Maybe we should test this out by changing NJ_ZENYNAGE in /db/re/skill_db.txt from misc to weapon and see whether it still works.

_____________

My suggestion:

Move dragon breath coding in battle.c to battle_calc_weapon_attack from battle_calc_misc_attack function and rename md.damage as wd.damage instead.  Also, I think md.flag would become wd.flag.

   
Can you post the fixed text ?? and the .txt they belong in.

so i can manage it to
default_tongue.png


this is all bit to steep for me
default_tongue.png


thnx

 
The skill_db.txt change was correct.

So we'll move onto /src/map/battle.c (link provided but this including the matching line numbers can change at any time).

First Step:
Remove the part I just bolded in red out.  You can ctrl+f that.

case RK_DRAGONBREATH:
case RK_DRAGONBREATH_WATER:
md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
RE_LVL_MDMOD(150);
if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;
md.flag |= BF_LONG|BF_WEAPON;
break;
 
Ok, now in
struct Damage battle_calc_weapon_attack(
Under the boolean
if (flag.hit && !flag.infdef) //No need to do the math for plants
{ //Hitting attack
In the switch statement


          //Constant/misc additions from skills
switch (skill_id) {     <-- line 4679
 
 

          case KO_MAKIBISHI:
wd.damage = 20 * skill_lv;
break;

          case KO_SETSUDAN:
if( tsc && tsc->data[sC_SOULLINK] ){
ATK_ADDRATE(200*tsc->data[sC_SOULLINK]->val1);
status_change_end(target,SC_SOULLINK,INVALID_TIMER);
}
break;   <-- line 4763
          case RK_DRAGONBREATH:
          case RK_DRAGONBREATH_WATER:
wd.damage = ((status_get_hp(src)/50) + (status_get_max_sp(src) / 4)) * skill_lv;
                RE_LVL_MDMOD(150);

                if (sd) wd.damage = wd.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;


break;
      }    <--line 4764





#ifndef RENEWAL
//Div fix.
damage_div_fix(wd.damage, wd.div_);
 
The blue bit is what you add. Like I said this is only a temporary fix (not even perfect) as I don't know how size/ele/race codes will modify it by putting it there.
The skill_db.txt already states that dragon breath has a range of 9 hence it should be ranged/LONG skill without needed to change it in the source.  Otherwise alternatively change that to -9 (that's what AC_SHOWER looks like) and see whether it'll work.

 
Last edited by a moderator:
The skill_db.txt change was correct.

So we'll move onto /src/map/battle.c (link provided but this including the matching line numbers can change at any time).

First Step:

Remove the part I just bolded in red out.  You can ctrl+f that.

case RK_DRAGONBREATH:
case RK_DRAGONBREATH_WATER:
md.damage = ((status_get_hp(src) / 50) + (status_get_max_sp(src) / 4)) * skill_lv;
RE_LVL_MDMOD(150);
if (sd) md.damage = md.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;
md.flag |= BF_LONG|BF_WEAPON;
break;
 
Ok, now instruct Damage battle_calc_weapon_attack(
Under the boolean
if (flag.hit && !flag.infdef) //No need to do the math for plants
{ //Hitting attack
In the switch statement


          //Constant/misc additions from skills
switch (skill_id) {     <-- line 4679
 
 

          case KO_MAKIBISHI:
wd.damage = 20 * skill_lv;
break;

          case KO_SETSUDAN:
if( tsc && tsc->data[sC_SOULLINK] ){
ATK_ADDRATE(200*tsc->data[sC_SOULLINK]->val1);
status_change_end(target,SC_SOULLINK,INVALID_TIMER);
}
break;   <-- line 4763
          case RK_DRAGONBREATH:
          case RK_DRAGONBREATH_WATER:
wd.damage = ((status_get_hp(src)/50) + (status_get_max_sp(src) / 4)) * skill_lv;
                RE_LVL_MDMOD(150);

                if (sd) wd.damage = wd.damage * (95 + 5 * pc->checkskill(sd,RK_DRAGONTRAINING)) / 100;


break;
      }    <--line 4764





#ifndef RENEWAL
//Div fix.
damage_div_fix(wd.damage, wd.div_);
 
The blue bit is what you add. Like I said this is only a temporary fix (not even perfect) as I don't know how size/ele/race codes will modify it by putting it there.The skill_db.txt already states that dragon breath has a range of 9 hence it should be ranged/LONG skill without needed to change it in the source.  Otherwise alternatively change that to -9 (that's what AC_SHOWER looks like) and see whether it'll work.
did that and i get this when recompile..

2>d:git serverherculessrcmapbattle.c(4761): error C2065: 'md' : undeclared identifier
2>d:git serverherculessrcmapbattle.c(4761): error C2224: left of '.damage' must have struct/union type
2>d:git serverherculessrcmapbattle.c(4761): error C2065: 'md' : undeclared identifier
2>d:git serverherculessrcmapbattle.c(4761): error C2224: left of '.damage' must have struct/union type 

 
RE_LVL_MDMOD(150);
Replace that with

RE_LVL_DMOD(150); 

I forgotten that the RE_LVL_MDMOD relied on the md.damage variable instead of wd.damage.

 
Last edited by a moderator:
Ok, good luck testing it with regards to the following!

Damage - Hopefully it does over 10000 damage now with all stats at 120 for a RK.
Size

Racial (test with hydra and thara frog cards.)

Elemental

Defense

Flee/Hit

Perfect Dodge
Range (Test with defending aura, horn card and pneuma).
Base level (100% at level 150)

 
Last edited by a moderator:
Back
Top