diff options
author | Michieru <Michieru@users.noreply.github.com> | 2014-09-19 15:28:56 +0200 |
---|---|---|
committer | Michieru <Michieru@users.noreply.github.com> | 2014-09-19 15:28:56 +0200 |
commit | acc4d2eb875ddf67898ae0ac443e76de2d640daa (patch) | |
tree | 72a2c649d6c8c434abe7cb05a0d6c00e667e07d9 | |
parent | 0b617096e7c81a0861b362769a835f23118431dc (diff) | |
download | hercules-acc4d2eb875ddf67898ae0ac443e76de2d640daa.tar.gz hercules-acc4d2eb875ddf67898ae0ac443e76de2d640daa.tar.bz2 hercules-acc4d2eb875ddf67898ae0ac443e76de2d640daa.tar.xz hercules-acc4d2eb875ddf67898ae0ac443e76de2d640daa.zip |
Update official Homunculus renewal stats (bug:6970) http://hercules.ws/board/tracker/issue-6970-homunculus-renewal-stats/
Follow up (bug 8348): https://github.com/HerculesWS/Hercules/commit/ddc52570a9bf694cdba6445bc02350a94856a583
Update official overbrand damage (special thanks to Rytech)
The skill damage is no longer affected by your base level. It is now affected by the enemy's base level (special thanks to Rytech)
Updated the list of skills usable while mounted on a mado. (special thanks to Rytech)
-rw-r--r-- | db/homunculus_db.txt | 33 | ||||
-rw-r--r-- | db/pre-re/homunculus_db.txt | 33 | ||||
-rw-r--r-- | db/re/homunculus_db.txt | 33 | ||||
-rw-r--r-- | src/map/atcommand.c | 4 | ||||
-rw-r--r-- | src/map/battle.c | 10 | ||||
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/homunculus.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 27 | ||||
-rw-r--r-- | src/map/status.c | 57 |
9 files changed, 139 insertions, 62 deletions
diff --git a/db/homunculus_db.txt b/db/homunculus_db.txt deleted file mode 100644 index d099db173..000000000 --- a/db/homunculus_db.txt +++ /dev/null @@ -1,33 +0,0 @@ -// Homunculus Database -// -// Structure of Database: -// Class,EvoClass,Name,FoodID,HungryDelay,BaseSize,EvoSize,Race,Element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK -// -// 01. Class Homunculus ID. -// 02. EvoClass Homunculus ID of the evolved version. -// 03. Name Name of the homunculus. -// 04. FoodID Item ID of the homunuclus food. -// 05. HungryDelay Time interval in milliseconds after which the homunculus' hunger value is altered. -// 06. BaseSize Size of the base homunculus class (0 = small, 1 = normal, 2 = large). -// 07. EvoSize Size of the evolved homunculus class (0 = small, 1 = normal, 2 = large). -// 08. Race Race of the homunculus (0 = formless, 1 = undead, 2 = brute, 3 = plant, 4 = insect, 5 = fish, 6 = demon, 7 = demi-human, 8 = angel, 9 = dragon). -// 09. Element Element of the homunculus (0 = neutral, 1 = water, 2 = earth, 3 = fire, 4 = wind, 5 = poison, 6 = holy, 7 = dark, 8 = ghost, 9 = undead). -// The element level is always 1. -// ... -// -// Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max -// NOTE: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi) - -6001,6009,Lif,537,60000,0,1,7,0,700,150,40,17,20,15,35,24,12,60,100,4,9,5,19,5,19,5,19,4,20,6,20,6,20,1,10,10,20,1,5,1,4,1,5,4,10,1,10,1,3 -6002,6010,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,12,80,130,1,4,8,20,4,20,4,20,1,10,3,19,3,19,10,20,1,10,1,10,1,5,4,10,1,3,1,4,1,5 -6003,6011,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,8,20,1,10,3,19,4,20,3,19,5,15,5,15,4,10,1,10,1,3,1,4,1,5,1,5 -6004,6012,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,10,1,10,1,10,1,10,1,10,1,10 -6005,6013,Lif,537,60000,0,1,7,0,700,150,40,17,20,15,35,24,12,60,100,4,9,5,19,5,19,5,19,4,20,6,20,6,20,1,10,10,20,1,5,1,4,1,5,4,10,1,10,1,3 -6006,6014,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,12,80,130,1,4,8,20,4,20,4,20,1,10,3,19,3,19,10,20,1,10,1,10,1,5,4,10,1,3,1,4,1,5 -6007,6015,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,8,20,1,10,3,19,4,20,3,19,5,15,5,15,4,10,1,10,1,3,1,4,1,5,1,5 -6008,6016,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,10,1,10,1,10,1,10,1,10,1,10 -6048,6048,Eira,6098,60000,1,1,7,0,700,150,40,17,20,15,35,24,12,60,100,4,9,5,19,5,19,5,19,4,20,6,20,6,20,1,10,10,20,1,5,1,4,1,5,4,10,1,10,1,3 -6049,6049,Bayeri,6112,60000,1,1,2,0,700,320,10,20,17,35,11,24,12,80,130,1,4,8,20,4,20,4,20,1,10,3,19,3,19,10,20,1,10,1,10,1,5,4,10,1,3,1,4,1,5 -6050,6050,Sera,6108,60000,1,1,4,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,8,20,1,10,3,19,4,20,3,19,5,15,5,15,4,10,1,10,1,3,1,4,1,5,1,5 -6051,6051,Dieter,6104,60000,1,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,10,1,10,1,10,1,10,1,10,1,10 -6052,6052,Eleanor,6115,60000,1,1,2,0,700,320,10,20,17,35,11,24,12,80,130,1,4,8,20,4,20,4,20,1,10,3,19,3,19,10,20,1,10,1,10,1,5,4,10,1,3,1,4,1,5 diff --git a/db/pre-re/homunculus_db.txt b/db/pre-re/homunculus_db.txt new file mode 100644 index 000000000..5c74b70f7 --- /dev/null +++ b/db/pre-re/homunculus_db.txt @@ -0,0 +1,33 @@ +// Homunculus Database +// +// Structure of Database: +// Class,EvoClass,Name,FoodID,HungryDelay,BaseSize,EvoSize,Race,Element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK +// +// 01. Class Homunculus ID. +// 02. EvoClass Homunculus ID of the evolved version. +// 03. Name Name of the homunculus. +// 04. FoodID Item ID of the homunuclus food. +// 05. HungryDelay Time interval in milliseconds after which the homunculus' hunger value is altered. +// 06. BaseSize Size of the base homunculus class (0 = small, 1 = normal, 2 = large). +// 07. EvoSize Size of the evolved homunculus class (0 = small, 1 = normal, 2 = large). +// 08. Race Race of the homunculus (0 = formless, 1 = undead, 2 = brute, 3 = plant, 4 = insect, 5 = fish, 6 = demon, 7 = demi-human, 8 = angel, 9 = dragon). +// 09. Element Element of the homunculus (0 = neutral, 1 = water, 2 = earth, 3 = fire, 4 = wind, 5 = poison, 6 = holy, 7 = dark, 8 = ghost, 9 = undead). +// The element level is always 1. +// ... +// +// Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max +// NOTE: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi) + +6001,6009,Lif,537,60000,0,1,7,0,700,150,40,12,20,15,35,24,14,60,100,4,9,5,19,4,20,5,19,6,20,5,19,6,20,800,2400,220,480,10,30,30,50,20,40,20,40,10,30,10,20 +6002,6010,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,13,80,130,1,4,8,20,1,10,4,20,3,19,4,20,3,19,1600,3600,120,360,20,50,20,50,20,50,10,30,10,30,10,30 +6003,6011,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,3,19,1,10,4,20,8,20,3,19,1200,3200,200,400,10,30,10,30,10,30,20,50,20,50,10,20 +6004,6012,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1200,4800,480,640,10,30,20,50,10,30,10,50,10,30,10,100 +6005,6013,Lif,537,60000,0,1,7,0,700,150,40,12,20,15,35,24,14,60,100,4,9,5,19,4,20,5,19,6,20,5,19,6,20,800,2400,220,480,10,30,30,50,20,40,20,40,10,30,10,20 +6006,6014,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,13,80,130,1,4,8,20,1,10,4,20,3,19,4,20,3,19,1600,3600,120,360,20,50,20,50,20,50,10,30,10,30,10,30 +6007,6015,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,3,19,1,10,4,20,8,20,3,19,1200,3200,200,400,10,30,10,30,10,30,20,50,20,50,10,20 +6008,6016,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1200,4800,480,640,10,30,20,50,10,30,10,50,10,30,10,100 +6048,6048,Eira,6098,60000,1,1,8,0,700,450,120,36,60,45,105,86,42,40,160,20,42,13,39,14,48,15,25,16,36,28,42,9,18,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6049,6049,Bayeri,6112,60000,1,1,2,0,700,1060,30,60,51,105,33,86,39,90,360,48,52,18,36,22,44,16,32,12,24,8,36,20,36,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6050,6050,Sera,6108,60000,1,1,4,0,700,330,80,87,90,55,24,126,9,60,240,36,64,10,25,7,35,5,25,28,40,16,32,20,40,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6051,6051,Dieter,6104,60000,1,1,0,0,700,300,44,44,44,44,44,53,44,240,480,40,120,20,40,15,40,18,36,16,32,13,26,4,16,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6052,6052,Eleanor,6115,60000,1,1,7,0,700,310,60,87,115,27,24,108,27,60,300,10,20,20,40,5,15,24,48,12,36,10,50,2,10,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 diff --git a/db/re/homunculus_db.txt b/db/re/homunculus_db.txt new file mode 100644 index 000000000..5c74b70f7 --- /dev/null +++ b/db/re/homunculus_db.txt @@ -0,0 +1,33 @@ +// Homunculus Database +// +// Structure of Database: +// Class,EvoClass,Name,FoodID,HungryDelay,BaseSize,EvoSize,Race,Element,bASPD,bHP,bSP,bSTR,bAGI,bVIT,bINT,bDEX,bLUK,gnHP,gxHP,gnSP,gxSP,gnSTR,gxSTR,gnAGI,gxAGI,gnVIT,gxVIT,gnINT,gxINT,gnDEX,gxDEX,gnLUK,gxLUK,enHP,exHP,enSP,exSP,enSTR,exSTR,enAGI,exAGI,enVIT,exVIT,enINT,exINT,enDEX,exDEX,enLUK,exLUK +// +// 01. Class Homunculus ID. +// 02. EvoClass Homunculus ID of the evolved version. +// 03. Name Name of the homunculus. +// 04. FoodID Item ID of the homunuclus food. +// 05. HungryDelay Time interval in milliseconds after which the homunculus' hunger value is altered. +// 06. BaseSize Size of the base homunculus class (0 = small, 1 = normal, 2 = large). +// 07. EvoSize Size of the evolved homunculus class (0 = small, 1 = normal, 2 = large). +// 08. Race Race of the homunculus (0 = formless, 1 = undead, 2 = brute, 3 = plant, 4 = insect, 5 = fish, 6 = demon, 7 = demi-human, 8 = angel, 9 = dragon). +// 09. Element Element of the homunculus (0 = neutral, 1 = water, 2 = earth, 3 = fire, 4 = wind, 5 = poison, 6 = holy, 7 = dark, 8 = ghost, 9 = undead). +// The element level is always 1. +// ... +// +// Legend: b: base, gn: growth min, gx: growth max, en: evolution min, ex: evolution max +// NOTE: Only the growth values are in a 1/10 scale, the other stats are 1/1 (eg: 5 gmAGI means 0.5 agi) + +6001,6009,Lif,537,60000,0,1,7,0,700,150,40,12,20,15,35,24,14,60,100,4,9,5,19,4,20,5,19,6,20,5,19,6,20,800,2400,220,480,10,30,30,50,20,40,20,40,10,30,10,20 +6002,6010,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,13,80,130,1,4,8,20,1,10,4,20,3,19,4,20,3,19,1600,3600,120,360,20,50,20,50,20,50,10,30,10,30,10,30 +6003,6011,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,3,19,1,10,4,20,8,20,3,19,1200,3200,200,400,10,30,10,30,10,30,20,50,20,50,10,20 +6004,6012,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1200,4800,480,640,10,30,20,50,10,30,10,50,10,30,10,100 +6005,6013,Lif,537,60000,0,1,7,0,700,150,40,12,20,15,35,24,14,60,100,4,9,5,19,4,20,5,19,6,20,5,19,6,20,800,2400,220,480,10,30,30,50,20,40,20,40,10,30,10,20 +6006,6014,Amistr,912,60000,0,1,2,0,700,320,10,20,17,35,11,24,13,80,130,1,4,8,20,1,10,4,20,3,19,4,20,3,19,1600,3600,120,360,20,50,20,50,20,50,10,30,10,30,10,30 +6007,6015,Filir,910,60000,0,1,2,0,700,90,25,29,35,9,8,30,9,45,75,3,6,4,20,3,19,1,10,4,20,8,20,3,19,1200,3200,200,400,10,30,10,30,10,30,20,50,20,50,10,20 +6008,6016,Vanilmirth,911,60000,0,1,0,0,700,80,11,11,11,11,11,11,11,30,150,0,7,1,30,1,30,1,30,1,30,1,30,1,30,1200,4800,480,640,10,30,20,50,10,30,10,50,10,30,10,100 +6048,6048,Eira,6098,60000,1,1,8,0,700,450,120,36,60,45,105,86,42,40,160,20,42,13,39,14,48,15,25,16,36,28,42,9,18,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6049,6049,Bayeri,6112,60000,1,1,2,0,700,1060,30,60,51,105,33,86,39,90,360,48,52,18,36,22,44,16,32,12,24,8,36,20,36,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6050,6050,Sera,6108,60000,1,1,4,0,700,330,80,87,90,55,24,126,9,60,240,36,64,10,25,7,35,5,25,28,40,16,32,20,40,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6051,6051,Dieter,6104,60000,1,1,0,0,700,300,44,44,44,44,44,53,44,240,480,40,120,20,40,15,40,18,36,16,32,13,26,4,16,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 +6052,6052,Eleanor,6115,60000,1,1,7,0,700,310,60,87,115,27,24,108,27,60,300,10,20,20,40,5,15,24,48,12,36,10,50,2,10,1000,2000,10,200,1,10,1,10,1,10,1,10,1,10,1,10 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 8e50de781..b788c6c37 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -1915,11 +1915,11 @@ ACMD(monster) number = battle_config.atc_spawn_quantity_limit; if (strcmpi(info->command, "monstersmall") == 0) - size = SZ_SMALL; + size = SZ_MEDIUM; else if (strcmpi(info->command, "monsterbig") == 0) size = SZ_BIG; else - size = SZ_MEDIUM; + size = SZ_SMALL; if (battle_config.etc_log) ShowInfo("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, sd->bl.x, sd->bl.y); diff --git a/src/map/battle.c b/src/map/battle.c index bf683e3d1..fa388fc19 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2295,15 +2295,15 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block RE_LVL_DMOD(100); break; case LG_OVERBRAND: - skillratio += -100 + 50 * (((sd) ? pc->checkskill(sd,CR_SPEARQUICKEN) : 1) + 8 * skill_lv); - RE_LVL_DMOD(150); + skillratio += -100 + 400 * skill_lv + 50 * ((sd) ? pc->checkskill(sd,CR_SPEARQUICKEN) : 1); + RE_LVL_DMOD(100); break; case LG_OVERBRAND_BRANDISH: skillratio += -100 + 300 * skill_lv + status_get_str(src) + status_get_dex(src); - RE_LVL_DMOD(150); + RE_LVL_DMOD(100); break; case LG_OVERBRAND_PLUSATK: - skillratio += -100 + 100 * skill_lv; + skillratio = 200 * skill_lv + rnd_value( 10, 100); RE_LVL_DMOD(100); break; case LG_RAYOFGENESIS: @@ -3917,7 +3917,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.damage = 100 + 200 * skill_lv + sstatus->int_; break; case GN_HELLS_PLANT_ATK: - md.damage = skill_lv * status->get_lv(src) * 10 + sstatus->int_ * 7 / 2 * (18 + (sd ? sd->status.job_level : 0) / 4) * (5 / (10 - (sd ? pc->checkskill(sd, AM_CANNIBALIZE) : 0))); + md.damage = skill_lv * status->get_lv(target) * 10 + sstatus->int_ * 7 / 2 * (18 + (sd ? sd->status.job_level : 0) / 4) * (5 / (10 - (sd ? pc->checkskill(sd, AM_CANNIBALIZE) : 0))); md.damage = md.damage*(1000 + tstatus->mdef) / (1000 + tstatus->mdef * 10) - tstatus->mdef2; break; case KO_HAPPOKUNAI: diff --git a/src/map/clif.c b/src/map/clif.c index 18cc987d4..308f419a7 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1368,7 +1368,7 @@ bool clif_spawn(struct block_list *bl) TBL_MOB *md = ((TBL_MOB*)bl); if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris] clif->specialeffect(&md->bl,423,AREA); - else if(md->special_state.size==SZ_SMALL) + else if(md->special_state.size==SZ_MEDIUM) clif->specialeffect(&md->bl,421,AREA); } break; diff --git a/src/map/homunculus.c b/src/map/homunculus.c index 0f76fcf5f..f4ffc62a6 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -1126,7 +1126,7 @@ bool homunculus_read_db_sub(char* str[], int columns, int current) { void homunculus_read_db(void) { int i; - const char *filename[]={"homunculus_db.txt","homunculus_db2.txt"}; + const char *filename[]={DBPATH"homunculus_db.txt","homunculus_db2.txt"}; memset(homun->db,0,sizeof(homun->db)); for(i = 0; i<ARRAYLENGTH(filename); i++) { diff --git a/src/map/skill.c b/src/map/skill.c index 814fb1999..1420997b9 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -12830,6 +12830,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case RA_WUGSTRIKE: // Other case BS_GREED: + case ALL_FULL_THROTTLE: break; default: // in official there is no message. return 0; @@ -12839,12 +12840,26 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id // Check the skills that can be used whiled using mado if( pc_ismadogear(sd) ) { - if( !(skill_id > NC_MADOLICENCE && skill_id <= NC_DISJOINT) - && skill_id != NC_MAGMA_ERUPTION - && skill_id != BS_GREED ) { - clif->skill_fail(sd,skill_id,USESKILL_FAIL_MADOGEAR,0); - return 0; - } + switch ( skill_id ) { + case BS_GREED: case NC_BOOSTKNUCKLE: + case NC_PILEBUNKER: case NC_VULCANARM: + case NC_FLAMELAUNCHER: case NC_COLDSLOWER: + case NC_ARMSCANNON: case NC_ACCELERATION: + case NC_HOVERING: case NC_F_SIDESLIDE: + case NC_B_SIDESLIDE: case NC_SELFDESTRUCTION: + case NC_SHAPESHIFT: case NC_EMERGENCYCOOL: + case NC_INFRAREDSCAN: case NC_ANALYZE: + case NC_MAGNETICFIELD: case NC_NEUTRALBARRIER: + case NC_STEALTHFIELD: case NC_REPAIR: + case NC_AXEBOOMERANG: case NC_POWERSWING: + case NC_AXETORNADO: case NC_SILVERSNIPER: + case NC_MAGICDECOY: case NC_DISJOINT: + case NC_MAGMA_ERUPTION: case ALL_FULL_THROTTLE: + case NC_MAGMA_ERUPTION_DOTDAMAGE: + break; + default: + return 0; + } } if( skill_lv < 1 || skill_lv > MAX_SKILL_LEVEL ) diff --git a/src/map/status.c b/src/map/status.c index ceaf01f1f..8393a6c26 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1969,8 +1969,17 @@ unsigned short status_base_atk(const struct block_list *bl, const struct status_ //Normally only players have base-atk, but homunc have a different batk // equation, hinting that perhaps non-players should use this for batk. // [Skotlex] + if (bl->type == BL_HOM) { +#ifdef RENEWAL + str = (int)(floor((rstr + dex + st->luk) / 3) + floor(((TBL_HOM*)bl)->homunculus.level / 10)); +#else dstr = str/10; str += dstr*dstr; +#endif + } else if (bl->type != BL_PC) { + dstr = str/10; + str += dstr*dstr; + } else if (bl->type == BL_PC) #ifdef RENEWAL str = (int)(rstr + (float)dex/5 + (float)st->luk/3 + (float)((TBL_PC*)bl)->status.base_level/4); @@ -2005,11 +2014,16 @@ void status_calc_misc(struct block_list *bl, struct status_data *st, int level) st->cri = st->flee2 = 0; #ifdef RENEWAL // renewal formulas - st->matk_min = st->matk_max = bl->type == BL_PC ? status->base_matk(st, level) : level + st->int_; - st->hit += level + st->dex + (bl->type == BL_PC ? st->luk/3 + 175 : 150); //base level + ( every 1 dex = +1 hit ) + (every 3 luk = +1 hit) + 175 - st->flee += level + st->agi + (bl->type == BL_PC ? st->luk/5 : 0) + 100; //base level + ( every 1 agi = +1 flee ) + (every 5 luk = +1 flee) + 100 - st->def2 += (int)(((float)level + st->vit)/2 + ( bl->type == BL_PC ? ((float)st->agi/5) : 0 )); //base level + (every 2 vit = +1 def) + (every 5 agi = +1 def) - st->mdef2 += (int)( bl->type == BL_PC ?(st->int_ + ((float)level/4) + ((float)(st->dex+st->vit)/5)):((float)(st->int_ + level)/4)); //(every 4 base level = +1 mdef) + (every 1 int = +1 mdef) + (every 5 dex = +1 mdef) + (every 5 vit = +1 mdef) + if (bl->type == BL_HOM) { + st->hit = level + st->dex + 150; //base level + dex + 150 + st->flee = level + st->agi + level/10; //base level + agi + base level/10 + } else { + st->matk_min = st->matk_max = bl->type == BL_PC ? status->base_matk(st, level) : level + st->int_; + st->hit += level + st->dex + (bl->type == BL_PC ? st->luk/3 + 175 : 150); //base level + ( every 1 dex = +1 hit ) + (every 3 luk = +1 hit) + 175 + st->flee += level + st->agi + (bl->type == BL_PC ? st->luk/5 : 0) + 100; //base level + ( every 1 agi = +1 flee ) + (every 5 luk = +1 flee) + 100 + st->def2 += (int)(((float)level + st->vit)/2 + ( bl->type == BL_PC ? ((float)st->agi/5) : 0 )); //base level + (every 2 vit = +1 def) + (every 5 agi = +1 def) + st->mdef2 += (int)( bl->type == BL_PC ?(st->int_ + ((float)level/4) + ((float)(st->dex+st->vit)/5)):((float)(st->int_ + level)/4)); //(every 4 base level = +1 mdef) + (every 1 int = +1 mdef) + (every 5 dex = +1 mdef) + (every 5 vit = +1 mdef) + } #else // not RENEWAL st->matk_min = status_base_matk_min(st); st->matk_max = status_base_matk_max(st); @@ -2476,7 +2490,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) { if (battle_config.character_size&SZ_BIG) bstatus->size++; } else - if(battle_config.character_size&SZ_SMALL) + if(battle_config.character_size&SZ_MEDIUM) bstatus->size++; } bstatus->aspd_rate = 1000; @@ -3288,11 +3302,26 @@ int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt opt) { hstatus->hp = 1; hstatus->sp = 1; } + + hstatus->aspd_rate = 1000; + +#ifdef RENEWAL + hstatus->def = (hstatus->vit + (hom->level / 10)) + ((hstatus->agi + (hom->level / 10)) / 2); + hstatus->mdef = hstatus->int_ + ((hstatus->int_ + hstatus->dex + hstatus->luk) / 3) + (hom->level / 10) * 2; + + amotion = (1000 -2*hstatus->agi -hstatus->dex) * hd->homunculusDB->baseASPD/1000; +#else skill_lv = hom->level/10 + hstatus->vit/5; hstatus->def = cap_value(skill_lv, 0, 99); skill_lv = hom->level/10 + hstatus->int_/5; hstatus->mdef = cap_value(skill_lv, 0, 99); + amotion = (1000 -4*status->agi -status->dex) * hd->homunculusDB->baseASPD/1000; +#endif + + hstatus->amotion = cap_value(amotion,battle_config.max_aspd,2000); + hstatus->adelay = hstatus->amotion; //It seems adelay = amotion for Homunculus. + hstatus->max_hp = hom->max_hp; hstatus->max_sp = hom->max_sp; @@ -3318,14 +3347,10 @@ int status_calc_homunculus_(struct homun_data *hd, enum e_status_calc_opt opt) { hd->battle_status.sp = hom->sp; } +#ifndef RENEWAL hstatus->rhw.atk = hstatus->dex; hstatus->rhw.atk2 = hstatus->str + hom->level; - - hstatus->aspd_rate = 1000; - - amotion = (1000 -4*hstatus->agi -hstatus->dex) * hd->homunculusDB->baseASPD/1000; - hstatus->amotion = cap_value(amotion,battle_config.max_aspd,2000); - hstatus->adelay = hstatus->amotion; //It seems adelay = amotion for Homunculus. +#endif status->calc_misc(&hd->bl, hstatus, hom->level); @@ -3694,12 +3719,12 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { } } - if( bl->type&BL_HOM ) { + /*if( bl->type&BL_HOM ) { st->rhw.atk += (st->dex - bst->dex); st->rhw.atk2 += (st->str - bst->str); if( st->rhw.atk2 < st->rhw.atk ) st->rhw.atk2 = st->rhw.atk; - } + }*/ } if(flag&SCB_HIT) { @@ -3912,7 +3937,11 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) { st->adelay = 2*st->amotion; } else if( bl->type&BL_HOM ) { +#ifdef RENEWAL + amotion = (1000 - 2*st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD/1000; +#else amotion = (1000 - 4*st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD/1000; +#endif st->aspd_rate = status->calc_aspd_rate(bl, sc, bst->aspd_rate); if(st->aspd_rate != 1000) |