Changeset 24 for src/map/battle.c

Show
Ignore:
Timestamp:
07/07/08 22:48:26 (17 years ago)
Author:
jinshiro
Message:
 
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/map/battle.c

    r19 r24  
    7373                return 1; 
    7474        } 
    75         return 0; 
     75        return 0;        
    7676} 
    7777 
     
    123123                return 1; 
    124124        } 
    125         return 0; 
     125        return 0;        
    126126} 
    127127 
     
    205205                amotion = 1000; //Aegis places a damage-delay cap of 1 sec to non player attacks. [Skotlex] 
    206206        add_timer(tick+amotion, battle_delay_damage_sub, src->id, (int)dat); 
    207  
     207         
    208208        return 0; 
    209209} 
     
    211211int battle_attr_ratio(int atk_elem,int def_type, int def_lv) 
    212212{ 
    213  
     213         
    214214        if (atk_elem < 0 || atk_elem >= ELE_MAX) 
    215215                return 100; 
     
    222222 
    223223/*========================================== 
    224  * Does attribute fix modifiers. 
     224 * Does attribute fix modifiers.  
    225225 * Added passing of the chars so that the status changes can affect it. [Skotlex] 
    226226 * Note: Passing src/target == NULL is perfectly valid, it skips SC_ checks. 
     
    230230        struct status_change *sc=NULL, *tsc=NULL; 
    231231        int ratio; 
    232  
     232         
    233233        if (src) sc = status_get_sc(src); 
    234234        if (target) tsc = status_get_sc(target); 
    235  
     235         
    236236        if (atk_elem < 0 || atk_elem >= ELE_MAX) 
    237237                atk_elem = rand()%ELE_MAX; 
     
    277277        if (!damage) 
    278278                return 0; 
    279  
     279         
    280280        if( mob_ksprotected(src, bl) ) 
    281281                return 0; 
     
    295295                if(!damage) return 0; 
    296296        } 
    297  
     297         
    298298        if (skill_num == PA_PRESSURE) 
    299299                return damage; //This skill bypass everything else. 
     
    344344                        return 0; 
    345345                } 
    346  
     346                 
    347347                if(sc->data[SC_DODGE] && !sc->opt1 && 
    348348                        (flag&BF_LONG || sc->data[SC_SPURT]) 
     
    372372                        return 0; 
    373373                } 
    374  
    375         //Display red flashing aura effect of Adept Blood Lust [Brain] 
    376         if(sc->data[SC_LUST] && damage > 0){ 
    377                 clif_specialeffect(bl, 548, AREA); 
    378                 if(rand()%100 < 10) clif_specialeffect(bl, 455, AREA); //Red Lightnings, 1/10 attacks will show to prevent spam 
    379         }; 
    380         //Display blue flashing aura effect of Warlock Overwhelming Evil [Brain] 
    381         if(sc->data[SC_OVERWHELMING] && damage > 0) 
    382                 clif_specialeffect(bl, 73, AREA); 
    383  
    384         // AT-Field [Brainstorm] 
    385         if(sc->data[SC_ATFIELD] && 
    386                 rand()%100 < sc->data[SC_ATFIELD]->val2) 
    387         {       //Blocks all skills. 
    388                 clif_specialeffect(bl, 438, AREA); 
    389                 //Shouldn't end until Breaker's non-weapon part connects. 
    390                 if (skill_num == ASC_BREAKER || 
    391                 skill_num == LK_SPIRALPIERCE || 
    392                 skill_num == CG_ARROWVULCAN || 
    393                 skill_num == SN_SHARPSHOOTING) 
    394                 if (--sc->data[SC_ATFIELD]->val3 <= 0) //We make it work like Safety Wall 
    395                 status_change_end(bl, SC_ATFIELD, -1); 
    396                 return 0; 
    397         } 
    398  
     374                 
     375                //Display red flashing aura effect of Adept Blood Lust [Brain] 
     376                if(sc->data[SC_LUST] && damage > 0){ 
     377                        clif_specialeffect(bl, 548, AREA); 
     378                        if(rand()%100 < 10) clif_specialeffect(bl, 455, AREA); //Red Lightnings, 1/10 attacks will show to prevent spam 
     379                }; 
     380                //Display blue flashing aura effect of Warlock Overwhelming Evil [Brain] 
     381                if(sc->data[SC_OVERWHELMING] && damage > 0) 
     382                        clif_specialeffect(bl, 73, AREA); 
     383 //AT Field is Irrelevant, I believe. 
     384                // AT-Field [Brainstorm] 
     385                if(sc->data[SC_ATFIELD] && 
     386                        rand()%100 < sc->data[SC_ATFIELD]->val2) 
     387                {       //Blocks all skills. 
     388                        clif_specialeffect(bl, 438, AREA); 
     389                        //Shouldn't end until Breaker's non-weapon part connects. 
     390                        if (skill_num == ASC_BREAKER || 
     391                                skill_num == LK_SPIRALPIERCE || 
     392                                skill_num == CG_ARROWVULCAN || 
     393                                skill_num == SN_SHARPSHOOTING) 
     394                                if (--sc->data[SC_ATFIELD]->val3 <= 0) //We make it work like Safety Wall 
     395                                status_change_end(bl, SC_ATFIELD, -1); 
     396                        return 0; 
     397                } 
    399398 
    400399                if (((sce=sc->data[SC_UTSUSEMI]) || sc->data[SC_BUNSINJYUTSU]) 
    401                 && 
     400                &&  
    402401                        flag&BF_WEAPON && !(skill_get_nk(skill_num)&NK_NO_CARDFIX_ATK)) 
    403402                { 
     
    501500        } 
    502501        //SC effects from caster side. Currently none. 
    503 /* 
     502/*       
    504503        sc = status_get_sc(src); 
    505504        if (sc && sc->count) { 
    506505        } 
    507 */ 
     506*/       
    508507        if (battle_config.pk_mode && sd && bl->type == BL_PC && damage) 
    509508        { 
     
    553552        if (!damage) //No reductions to make. 
    554553                return 0; 
    555  
     554         
    556555        class_ = status_get_class(bl); 
    557556 
    558557        if (bl->type == BL_MOB) 
    559558                md=(struct mob_data *)bl; 
    560  
     559         
    561560        if(md && md->guardian_data) { 
    562561                if(class_ == MOBID_EMPERIUM && flag&BF_SKILL) 
     
    640639 
    641640        if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && 
    642                 (status->race==RC_UNDEAD || status->race==RC_DEMON) ) 
     641                target->type == BL_MOB && //This bonus doesnt work against players. 
     642                (battle_check_undead(status->race,status->def_ele) || status->race==RC_DEMON) ) 
    643643                damage += (skill*(int)(3+(sd->status.base_level+1)*0.05));      // submitted by orn 
    644644                //damage += (skill * 3); 
     
    649649                        damage += sd->status.str; 
    650650        } 
    651  
     651//AMIDOINITRITE?! V seems okay.  
    652652        //Warlock Touch of Corruption (Mage-Monster Killer passive skill) [Brainstorm] 
    653653        if((skill = pc_checkskill(sd,WL_CORRUPTION)) > 0 && target->type==BL_MOB ) 
    654         damage += (skill * (status->int_/10)); 
     654                damage += (skill * (status->int_/10)); 
    655655 
    656656        if(type == 0) 
     
    737737        {       //Mobs/Pets 
    738738                if(flag&4) 
    739                 { 
     739                {                  
    740740                        atkmin = status->matk_min; 
    741741                        atkmax = status->matk_max; 
     
    753753                {       //Normal attacks 
    754754                        atkmin = status->dex; 
    755  
     755                         
    756756                        if (sd->equip_index[type] >= 0 && sd->inventory_data[sd->equip_index[type]]) 
    757757                                atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[type]]->wlv*20)/100; 
     
    759759                        if (atkmin > atkmax) 
    760760                                atkmin = atkmax; 
    761  
     761                         
    762762                        if(flag&2 && !(flag&16)) 
    763763                        {       //Bows 
     
    768768                } 
    769769        } 
    770  
     770         
    771771        if (sc && sc->data[SC_MAXIMIZEPOWER]) 
    772772                atkmin = atkmax; 
    773  
     773         
    774774        //Weapon Damage calculation 
    775775        if (!(flag&1)) 
    776776                damage = (atkmax>atkmin? rand()%(atkmax-atkmin):0)+atkmin; 
    777         else 
     777        else  
    778778                damage = atkmax; 
    779  
     779         
    780780        if (sd) 
    781781        { 
     
    790790                                sd->right_weapon.atkmods[t_size])/100; 
    791791        } 
    792  
     792         
    793793        //Finally, add baseatk 
    794794        if(flag&4) 
     
    796796        else 
    797797                damage += status->batk; 
    798  
     798         
    799799        //rodatazone says that Overrefine bonuses are part of baseatk 
    800800        //Here we also apply the weapon_atk_rate bonus so it is correctly applied on left/right hands. 
     
    823823        if (!battle_config.arrow_decrement) 
    824824                return; 
    825  
     825         
    826826        if (skill) 
    827827        { 
     
    891891                unsigned idef2 : 1;     //Ignore defense (left weapon) 
    892892                unsigned pdef : 2;      //Pierces defense (Investigate/Ice Pick) 
    893                 unsigned pdef2 : 2;     //1: Use def+def2/100, 2: Use def+def2/50 
     893                unsigned pdef2 : 2;     //1: Use def+def2/100, 2: Use def+def2/50        
    894894                unsigned infdef : 1;    //Infinite defense (plants) 
    895895                unsigned arrow : 1;     //Attack is arrow-based 
     
    897897                unsigned lh : 1;                //Attack considers left hand (wd.damage2) 
    898898                unsigned weapon : 1; //It's a weapon attack (consider VVS, and all that) 
    899         }       flag; 
     899        }       flag;    
    900900 
    901901        memset(&wd,0,sizeof(wd)); 
     
    944944        ) 
    945945                flag.arrow = 1; 
    946  
     946         
    947947        if(skill_num){ 
    948948                wd.flag |= battle_range_type(src, target, skill_num, skill_lv); 
     
    975975                                wd.type = 0x08; 
    976976                                break; 
    977  
     977                                 
    978978                        case GS_GROUNDDRIFT: 
    979979                        case KN_SPEARSTAB: 
     
    994994        } else //Range for normal attacks. 
    995995                wd.flag |= flag.arrow?BF_LONG:BF_SHORT; 
    996  
     996         
    997997        if (!skill_num && tstatus->flee2 && rand()%1000 < tstatus->flee2) 
    998998        {       //Check for Lucky Dodge 
     
    10461046                //Therefore, we use the old value 3 on cases when an sd gets attacked by a mob 
    10471047                cri -= tstatus->luk*(!sd&&tsd?3:2); 
    1048  
     1048                 
    10491049                if(tsc) 
    10501050                { 
     
    11141114                if(battle_config.agi_penalty_type && 
    11151115                        battle_config.agi_penalty_target&target->type) 
    1116                 { 
     1116                {        
    11171117                        unsigned char attacker_count; //256 max targets should be a sane max 
    11181118                        attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); 
     
    11721172                        hitrate += hitrate * ( 2 * skill ) / 100; 
    11731173 
    1174                 hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate); 
     1174                hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate);  
    11751175 
    11761176                if(rand()%100 >= hitrate) 
     
    13231323                                ) 
    13241324                                skillratio += sd->random_attack_increase_add; 
    1325  
     1325                 
    13261326                        ATK_RATE(skillratio); 
    13271327                } else {        //Skills 
     
    13291329                        { 
    13301330                                case NC_DEATHHAND: // Necro Death Hand [Brain] 
    1331                                         skillratio += -25+25*skill_lv; 
     1331                                        skillratio += -25+25*skill_lv; //I wonder if it will accept that? 
    13321332                                        break; 
    13331333                                case SM_BASH: 
     
    13351335                                        break; 
    13361336                                case SM_MAGNUM: 
    1337                                         skillratio += 20*skill_lv; 
     1337                                        skillratio += 20*skill_lv;  
    13381338                                        break; 
    13391339                                case MC_MAMMONITE: 
     
    15921592                                        int k = (wflag-1)/3; //+100% every 3 cells of distance 
    15931593                                        if( k > 2 ) k = 2; // ...but hard-limited to 300%. 
    1594                                         skillratio += 100 * k; 
     1594                                        skillratio += 100 * k;  
    15951595                                        } 
    15961596                                        break; 
     
    16071607                                        skillratio += 100 *(skill_lv-1); 
    16081608                                        break; 
    1609                 /*Mercenary Skills [Brainstorm] 
    1610                 case MS_BASH: 
    1611                         skillratio += 30*skill_lv; 
    1612                         break; 
    1613                 case MER_CRASH: 
    1614                         skillratio += 10*skill_lv; 
    1615                         break;*/ 
    16161609                        } 
    16171610 
     
    16751668                                break; 
    16761669                } 
    1677  
     1670                 
    16781671                if(sd) 
    16791672                { 
     
    17471740                                if(def2 < 1) def2 = 1; 
    17481741                        } 
    1749                         //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def 
     1742                        //Vitality reduction from rodatazone: http://rodatazone.simgaming.net/mechanics/substats.php#def         
    17501743                        if (tsd)        //Sd vit-eq 
    17511744                        {       //[VIT*0.5] + rnd([VIT*0.3], max([VIT*0.3],[VIT^2/150]-1)) 
    17521745                                vit_def = def2*(def2-15)/150; 
    17531746                                vit_def = def2/2 + (vit_def>0?rand()%vit_def:0); 
    1754  
    1755                                 if((sstatus->race==RC_UNDEAD || sstatus->race==RC_DEMON) && 
     1747                                 
     1748                                if((battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesnt work vs players 
    17561749                                        src->type == BL_MOB && (skill=pc_checkskill(tsd,AL_DP)) > 0) 
    17571750                                        vit_def += skill*(int)(3 +(tsd->status.base_level+1)*0.04);   // submitted by orn 
     
    17611754                                vit_def = def2 + (vit_def>0?rand()%vit_def:0); 
    17621755                        } 
    1763  
     1756                         
    17641757                        if (battle_config.weapon_defense_type) { 
    17651758                                vit_def += def1*battle_config.weapon_defense_type; 
     
    17841777                if (sc && skill_num != LK_SPIRALPIERCE) 
    17851778                {       //SC skill damages 
    1786                         if(sc->data[SC_AURABLADE]) 
     1779                        if(sc->data[SC_AURABLADE])  
    17871780                                ATK_ADD(20*sc->data[SC_AURABLADE]->val1); 
    17881781                } 
     
    18211814                        else 
    18221815                        ARR_FIND(0, 3, i, t_class == sd->hate_mob[i]); 
    1823                         if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id))) 
     1816                        if (i < 3 && (skill=pc_checkskill(sd,sg_info[i].anger_id)))  
    18241817                        { 
    18251818                                skillratio = sd->status.base_level + sstatus->dex + sstatus->luk; 
     
    18361829        } //Here ends flag.hit section, the rest of the function applies to both hitting and missing attacks 
    18371830        else if(wd.div_ < 0) //Since the attack missed... 
    1838                 wd.div_ *= -1; 
     1831                wd.div_ *= -1;  
    18391832 
    18401833        if(skill_num == CR_GRANDCROSS || skill_num == NPC_GRANDDARKNESS) 
    18411834                return wd; //Enough, rest is not needed. 
    18421835 
    1843         if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) 
     1836        if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0)  
    18441837                ATK_ADD(skill*2); 
    18451838 
     
    18831876                { 
    18841877                        int cardfix = 1000, cardfix_ = 1000; 
    1885                         int t_race2 = status_get_race2(target); 
     1878                        int t_race2 = status_get_race2(target);  
    18861879                        if(sd->state.arrow_atk) 
    18871880                        { 
     
    19431936                                ATK_RATE2(cardfix/10, cardfix_/10);     //What happens if you use right-to-left and there's no right weapon, only left? 
    19441937                } 
    1945  
     1938                 
    19461939                if (skill_num == CR_SHIELDBOOMERANG || skill_num == PA_SHIELDCHAIN) { //Refine bonus applies after cards and elements. 
    19471940                        short index= sd->equip_index[EQI_HAND_L]; 
     
    19971990                if (flag.lh && (flag.hit || wd.damage2>0)) 
    19981991                        wd.damage2 = 1; 
    1999                 if (!(battle_config.skill_min_damage&1)) 
     1992                if (!(battle_config.skill_min_damage&1))  
    20001993                        //Do not return if you are supposed to deal greater damage to plants than 1. [Skotlex] 
    20011994                        return wd; 
     
    20272020        if (sd) 
    20282021        { 
    2029                 if (!flag.rh && flag.lh) 
     2022                if (!flag.rh && flag.lh)  
    20302023                {       //Move lh damage to the rh 
    20312024                        wd.damage = wd.damage2; 
     
    21182111                                        breakrate[1] += sc->data[SC_MELTDOWN]->val3; 
    21192112                                } 
    2120                         } 
     2113                        }        
    21212114                        if (breakrate[0]) 
    21222115                                skill_break_equip(target, EQP_WEAPON, breakrate[0], BCT_ENEMY); 
     
    21892182        else if (s_ele == -2) //Use status element 
    21902183                s_ele = status_get_attack_sc_element(src,status_get_sc(src)); 
    2191  
     2184         
    21922185        //Set miscellaneous data that needs be filled 
    21932186        if(sd) { 
     
    21992192        ad.flag |= battle_range_type(src, target, skill_num, skill_lv); 
    22002193        flag.infdef=(tstatus->mode&MD_PLANT?1:0); 
    2201  
     2194                 
    22022195        switch(skill_num) 
    22032196        { 
     
    22262219                {       //Calc base damage according to skill 
    22272220                        case AL_HEAL: 
    2228                         case PR_BENEDICTIO: 
     2221                        case PR_BENEDICTIO: //Accidentally deleted the :, replaced it. No difference, so dont worry about this. 
    22292222                        case AD_DARKHEAL: // Adept Dark Heal 
     2223                        //Is this a good place for dark heal, i wonder? Seems fine though. 
    22302224                                ad.damage = skill_calc_heal(src, target, skill_lv)/2; 
    22312225                                break; 
     
    23462340                                                skillratio += 100 +100*skill_lv +100*(skill_lv/2); 
    23472341                                                break; 
    2348                         case NC_DRAINLIFE: // Necro Drain Life [Brain] 
    2349                         skillratio += 25*skill_lv; 
    2350                         break; 
    2351                         case WL_HELLFIRE: // Warlock Hellfire [Brain] 
    2352                         skillratio += 25*skill_lv; 
    2353                         break; 
    2354                         case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
    2355                         skillratio += 20*skill_lv; 
    2356                         break; 
    2357                         case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
    2358                         skillratio += 400 + 300*skill_lv; //max 20*matk dmg after 60 seconds 
    2359                         break; 
    2360                         case WL_SEARING: // Warlock Searing Pain [Brain] 
    2361                         if(status_get_sc(target)->data[SC_SEARING]) 
    2362                                 skillratio = 10*pc_checkskill(sd,WL_SEARING);//10% * skilllv 
    2363                         break; //Else 100% Matk 
    2364                         case WL_IMMOLATE: // Warlock Immolate [Brain] 
    2365                         if(status_get_sc(target)->data[SC_IMMOLATE]) 
    2366                                 skillratio += 10*pc_checkskill(sd,WL_SEARING);//100% +10 * searing lv 
    2367                         else skillratio += -20 + 20*skill_lv;// Else 80% + 20% * skill lv 
    2368                         break; 
    2369                         case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
    2370                         skillratio += 100 + 60*skill_lv + //damage bonus from other fire skills 
    2371                                 10*pc_checkskill(sd,WL_SEARING) + 10*pc_checkskill(sd,WL_IMMOLATE); 
    2372                         break; 
     2342                                                 
     2343//NOTE: All the skills below here did NOT work before, may have been a stupid mistake but this is for reference. 
     2344                                        case NC_DRAINLIFE: // Necro Drain Life [Brain] 
     2345                                                skillratio += 25*skill_lv; 
     2346                                                break; 
     2347                                        case WL_HELLFIRE: // Warlock Hellfire [Brain] 
     2348                                                skillratio += 25*skill_lv; 
     2349                                                break; 
     2350                                        case WL_SHADOWBURN: // Warlock Shadow Burn [Brain] 
     2351                                                skillratio += 20*skill_lv; 
     2352                                                break; 
     2353                                        case WL_CURSEDOOM: // Warlock Curse of Doom [Brain] 
     2354                                                skillratio += 400 + 300*skill_lv; //max 20*matk dmg after 60 seconds 
     2355                                                break; 
     2356                                        case WL_SEARING: // Warlock Searing Pain [Brain] 
     2357                                                if(status_get_sc(target)->data[SC_SEARING]) 
     2358                                                        skillratio = 10*pc_checkskill(sd,WL_SEARING);//10% * skilllv 
     2359                                                break; //Else 100% Matk 
     2360                                        case WL_IMMOLATE: // Warlock Immolate [Brain] 
     2361                                                if(status_get_sc(target)->data[SC_IMMOLATE]) 
     2362                                                        skillratio += 10*pc_checkskill(sd,WL_SEARING);//100% +10 * searing lv 
     2363                                                else skillratio += -20 + 20*skill_lv;// Else 80% + 20% * skill lv 
     2364                                                break; 
     2365                                        case WL_CONFLAGRATE: // Warlock Conflagrate [Brain] 
     2366                                                skillratio += 100 + 60*skill_lv + //damage bonus from other fire skills 
     2367                                                        10*pc_checkskill(sd,WL_SEARING) + 10*pc_checkskill(sd,WL_IMMOLATE); 
     2368                                                break; 
     2369 
    23732370                                } 
    23742371 
    23752372                                MATK_RATE(skillratio); 
    2376  
     2373                         
    23772374                                //Constant/misc additions from skills 
    23782375                                if (skill_num == WZ_FIREPILLAR) 
     
    24262423                        } 
    24272424                } 
    2428  
     2425                 
    24292426                if (skill_num == NPC_EARTHQUAKE) 
    24302427                {       //Adds atk2 to the damage, should be influenced by number of hits and skill-ratio, but not mdef reductions. [Skotlex] 
     
    24412438                if (!(nk&NK_NO_ELEFIX)) 
    24422439                        ad.damage=battle_attr_fix(src, target, ad.damage, s_ele, tstatus->def_ele, tstatus->ele_lv); 
    2443  
    2444  
    2445         if(skill_num == WL_SHADOWBURN) { // Warlock Shadow Burn [Brain] 
    2446                 // This is where we calculate the secondary damage 
    2447                 if(ad.damage<1) ad.damage=1; 
    2448                 struct Damage md = battle_calc_misc_attack(src,target,skill_num,skill_lv, mflag); 
    2449                 if(md.damage<1) md.damage=1; //Changed MD = WD 
    2450                 ad.damage += md.damage; // Same as above 
    2451         } 
    2452  
     2440//Take this into account for errors. It looks out of place/outdated but I will not look further into it until I know. 
     2441                if(skill_num == WL_SHADOWBURN) { // Warlock Shadow Burn [Brain] 
     2442                        // This is where we calculate the secondary damage 
     2443                        if(ad.damage<1) ad.damage=1; 
     2444                        struct Damage md = battle_calc_misc_attack(src,target,skill_num,skill_lv, mflag); 
     2445                        if(md.damage<1) md.damage=1; 
     2446                        ad.damage += md.damage; 
     2447                } 
    24532448                if (sd && !(nk&NK_NO_CARDFIX_ATK)) { 
    24542449                        short t_class = status_get_class(target); 
     
    25052500 
    25062501        damage_div_fix(ad.damage, ad.div_); 
    2507  
     2502         
    25082503        if (flag.infdef && ad.damage) 
    25092504                ad.damage = ad.damage>0?1:-1; 
    2510  
     2505                 
    25112506        ad.damage=battle_calc_damage(src,target,ad.damage,ad.div_,skill_num,skill_lv,ad.flag); 
    25122507        if (map_flag_gvg2(target->m)) 
     
    25452540 
    25462541        nk = skill_get_nk(skill_num); 
    2547  
     2542         
    25482543        sd = BL_CAST(BL_PC, src); 
    25492544        tsd = BL_CAST(BL_PC, target); 
    2550  
     2545         
    25512546        if(sd) { 
    25522547                sd->state.arrow_atk = 0; 
     
    25792574                if(mflag > 1) //Autocasted Blitz. 
    25802575                        nk|=NK_SPLASHSPLIT; 
    2581  
     2576                 
    25822577                if (skill_num == SN_FALCONASSAULT) 
    25832578                { 
    25842579                        //Div fix of Blitzbeat 
    25852580                        skill = skill_get_num(HT_BLITZBEAT, 5); 
    2586                         damage_div_fix(md.damage, skill); 
     2581                        damage_div_fix(md.damage, skill);  
    25872582 
    25882583                        //Falcon Assault Modifier 
     
    26502645        case NPC_EVILLAND: 
    26512646                md.damage = (skill_lv>6)?666:skill_lv*100; 
    2652                 //break; 
     2647//Why the hell is this supposed to be above the break? 
    26532648        case WL_SHADOWBURN: // Warlock ShadowBurn dark element damage [Brain] 
    26542649                s_ele = ELE_DARK; 
    26552650                md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 
    26562651                break; 
     2652                 
     2653// Wouldn't this work better? 
     2654 
     2655/*      case WL_SHADOWBURN: // Warlock ShadowBurn dark element damage [Brain] 
     2656                s_ele = ELE_DARK; 
     2657                md.damage = ((300 + 20*skill_lv)/100)*((sstatus->int_*(rand()%300+500))/100); //Fixed between min and max matk for now 
     2658break;*/ 
    26572659        } 
    26582660 
     
    26652667 
    26662668        damage_div_fix(md.damage, md.div_); 
    2667  
     2669         
    26682670        if (!(nk&NK_IGNORE_FLEE)) 
    26692671        { 
     
    26772679                                hitrate=80; //Default hitrate 
    26782680 
    2679                         if(battle_config.agi_penalty_type && 
     2681                        if(battle_config.agi_penalty_type &&  
    26802682                                battle_config.agi_penalty_target&target->type) 
    2681                         { 
     2683                        {        
    26822684                                unsigned char attacker_count; //256 max targets should be a sane max 
    26832685                                attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv); 
     
    28142816                if (*damage <= 0) continue; 
    28152817                //First and Third iterations: race, other two boss/nonboss state 
    2816                 if (i == 0 || i == 2) 
     2818                if (i == 0 || i == 2)  
    28172819                        type = race; 
    28182820                else 
    28192821                        type = boss?RC_BOSS:RC_NONBOSS; 
    2820  
     2822                 
    28212823                hp = wd->hp_drain[type].value; 
    28222824                if (wd->hp_drain[type].rate) 
     
    28412843        if (sd->sp_vanish_rate && rand()%1000 < sd->sp_vanish_rate) 
    28422844                status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->sp_vanish_per, false); 
    2843 // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 
     2845//I don't know about this. But it looks like it fits fine 
     2846        // Adept Blood Pact drains 5% damage per hit [FlavioJS/Brain] 
    28442847        if( pc_checkskill(sd, AD_BLOODPACT) > 0 ) 
    2845         thp += battle_calc_drain(rdamage,1000,5); 
     2848                thp += battle_calc_drain(rdamage,1000,5); 
    28462849 
    28472850        // Warlock Soul Steal drains 1%*skilllv damage per hit [Brain] 
    28482851        if( pc_checkskill(sd, WL_SOULSTEAL) > 0 ) 
    2849         tsp += battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_SOULSTEAL)); 
     2852                tsp += battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_SOULSTEAL)); 
    28502853        // Warlock Touch of Corruption burns 1%*skilllv damage as SP per hit [Brain] 
    2851         if( pc_checkskill(sd, WL_CORRUPTION) > 0 ) { 
    2852         int corrupt_sp; 
    2853         corrupt_sp = battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_CORRUPTION)); 
    2854         if(status_damage(NULL, tbl, 0, corrupt_sp, 0, 3)) 
    2855                 rhp += corrupt_sp;//If SP damage was caused, increase HP damage too 
    2856         } 
     2854        if( pc_checkskill(sd, WL_CORRUPTION) > 0 ) {// This is the opener, whoops lol. 
     2855                int corrupt_sp; 
     2856                corrupt_sp = battle_calc_drain(rdamage,1000,pc_checkskill(sd,WL_CORRUPTION)); 
     2857                if(status_damage(NULL, tbl, 0, corrupt_sp, 0, 3)) 
     2858                        rhp += corrupt_sp;//If SP damage was caused, increase HP damage too 
     2859        }// Where does this bracket open? 
     2860 
    28572861        if (!thp && !tsp) return; 
    28582862 
    28592863        status_heal(&sd->bl, thp, tsp, battle_config.show_hp_sp_drain?3:1); 
    2860  
     2864         
    28612865        if (rhp || rsp) 
    28622866                status_zap(tbl, rhp, rsp); 
     
    28942898        if (tsc && !tsc->count) 
    28952899                tsc = NULL; 
    2896  
     2900         
    28972901        if (sd) 
    28982902        { 
     
    30573061 
    30583062        if (tsc) { 
    3059                 if (tsc->data[SC_POISONREACT] && 
     3063                if (tsc->data[SC_POISONREACT] &&  
    30603064                        (rand()%100 < tsc->data[SC_POISONREACT]->val3 
    30613065                        || sstatus->def_ele == ELE_POISON) && 
     
    30783082        return wd.dmg_lv; 
    30793083} 
    3080  
     3084//new battle check code, i speculate it. But it looks like it just calls other races and elements into one big one. 
    30813085int battle_check_living(int race,int element)// Living creature check [Brain] 
    30823086{ 
    30833087        if(element == ELE_UNDEAD || race == RC_UNDEAD // Undead element and race check 
    3084         || race == RC_DEMON             // Demon race check 
    3085         || race == RC_FORMLESS          // Formless race check 
    3086         || element == ELE_GHOST){       // Ghost element check 
    3087         return 0; 
     3088                || race == RC_DEMON                     // Demon race check 
     3089                || race == RC_FORMLESS                  // Formless race check 
     3090                || element == ELE_GHOST){               // Ghost element check 
     3091                return 0; 
    30883092        } 
    30893093        else { 
     
    30913095        } 
    30923096} 
    3093  
    30943097int battle_check_undead(int race,int element) 
    30953098{ 
     
    32193222                        break; 
    32203223                //All else not specified is an invalid target. 
    3221                 default: 
     3224                default:         
    32223225                        return 0; 
    32233226        } 
     
    33363339                        break; 
    33373340        } 
    3338  
    3339         if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars 
     3341         
     3342        if ((flag&BCT_ALL) == BCT_ALL) { //All actually stands for all attackable chars  
    33403343                if (target->type&BL_CHAR) 
    33413344                        return 1; 
     
    33453348        if (flag == BCT_NOONE) //Why would someone use this? no clue. 
    33463349                return -1; 
    3347  
     3350         
    33483351        if (t_bl == s_bl) 
    33493352        {       //No need for further testing. 
     
    33533356                return (flag&state)?1:-1; 
    33543357        } 
    3355  
     3358         
    33563359        if (map_flag_vs(m)) { //Check rivalry settings. 
    33573360                if (flag&(BCT_PARTY|BCT_ENEMY)) { 
     
    34033406                } 
    34043407        } 
    3405  
     3408         
    34063409        if (!state) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral. 
    34073410                state = BCT_NEUTRAL; 
     
    37333736        { "require_glory_guild",                &battle_config.require_glory_guild,             0,      0,      1,              }, 
    37343737        { "idle_no_share",                      &battle_config.idle_no_share,                   0,      0,      INT_MAX,        }, 
    3735         { "party_even_share_bonus",             &battle_config.party_even_share_bonus,          0,      0,      INT_MAX,        }, 
     3738        { "party_even_share_bonus",             &battle_config.party_even_share_bonus,          0,      0,      INT_MAX,        },  
    37363739        { "delay_battle_damage",                &battle_config.delay_battle_damage,             1,      0,      1,              }, 
    37373740        { "hide_woe_damage",                    &battle_config.hide_woe_damage,                 0,      0,      1,              }, 
     
    38063809        { "auction_feeperhour",                 &battle_config.auction_feeperhour,              12000,  0,      INT_MAX,        }, 
    38073810        { "auction_maximumprice",               &battle_config.auction_maximumprice,            500000000, 0,   MAX_ZENY,       }, 
     3811//battle conf declarations, does this mean we add new lines to battle.conf? 
    38083812        //Vanaheim battle settings [Brainstorm] 
    3809         { "necro_retaliation",            &battle_config.necro_retaliation,                1,     0,      1,              }, 
    3810         { "disp_summon_stats",            &battle_config.disp_summon_stats,                0,     0,      1,              }, 
    3811  
     3813        { "necro_retaliation",                  &battle_config.necro_retaliation,               1,      0,      1,              }, 
     3814        { "disp_summon_stats",                  &battle_config.disp_summon_stats,               0,      0,      1,              }, 
    38123815        { "gm_viewequip_min_lv",                &battle_config.gm_viewequip_min_lv,             0,      0,      99,             }, 
     3816        { "homunculus_auto_vapor",              &battle_config.homunculus_auto_vapor,           0,      0,      1,              }, 
    38133817}; 
    38143818 
     
    38543858        battle_config.monster_max_aspd = 2000 - battle_config.monster_max_aspd*10; 
    38553859        battle_config.max_aspd = 2000 - battle_config.max_aspd*10; 
    3856         battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed; 
     3860        battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed;      
    38573861        battle_config.max_cart_weight *= 10; 
    3858  
     3862         
    38593863        if(battle_config.max_def > 100 && !battle_config.weapon_defense_type)    // added by [Skotlex] 
    38603864                battle_config.max_def = 100; 
     
    38623866        if(battle_config.min_hitrate > battle_config.max_hitrate) 
    38633867                battle_config.min_hitrate = battle_config.max_hitrate; 
    3864  
     3868                 
    38653869        if(battle_config.pet_max_atk1 > battle_config.pet_max_atk2)     //Skotlex 
    38663870                battle_config.pet_max_atk1 = battle_config.pet_max_atk2; 
    3867  
     3871         
    38683872        if (battle_config.day_duration && battle_config.day_duration < 60000) // added by [Yor] 
    38693873                battle_config.day_duration = 60000; 
    38703874        if (battle_config.night_duration && battle_config.night_duration < 60000) // added by [Yor] 
    38713875                battle_config.night_duration = 60000; 
    3872  
     3876         
    38733877#ifndef CELL_NOSTACK 
    38743878        if (battle_config.cell_stack_limit != 1)