summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/pre-re/skill_cast_db.txt15
-rw-r--r--db/pre-re/skill_db.txt11
-rw-r--r--db/pre-re/skill_require_db.txt7
-rw-r--r--db/pre-re/skill_unit_db.txt3
-rw-r--r--db/re/skill_cast_db.txt17
-rw-r--r--db/re/skill_db.txt13
-rw-r--r--db/re/skill_require_db.txt7
-rw-r--r--db/re/skill_unit_db.txt4
-rw-r--r--src/map/battle.c91
-rw-r--r--src/map/skill.c32
-rw-r--r--src/map/status.c3
-rw-r--r--src/map/status.h13
12 files changed, 191 insertions, 25 deletions
diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt
index 3d79c5bae..d381e6374 100644
--- a/db/pre-re/skill_cast_db.txt
+++ b/db/pre-re/skill_cast_db.txt
@@ -1639,6 +1639,21 @@
//2537,5000,5000,0,60000,0,60000
//==========================================
+//==== Kagerou & Oboro skills ==============
+//-- KO_YAMIKUMO
+3001,0,0,0,60000,0,0,0
+//-- KO_JYUMONJIKIRI
+3004,0,2500,0,5000,0,0,0
+//-- KO_SETSUDAN
+3005,0,2000,0,0,0,0,0
+//-- KO_BAKURETSU
+3006,1000:1500:2000:2500:3000,1000,0,100,0,3000,0
+//-- KO_HAPPOKUNAI
+3007,0,1000,0,0,0,0,0
+//-- KO_MUCHANAGE
+3008,0,0,0,100,0,10000,0
+//==========================================
+
//===== Homunculus Skills ==================
//-- HLIF_HEAL
8001,0,2000,0,0,0,0
diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt
index a8e2547ce..5e7b6bdf8 100644
--- a/db/pre-re/skill_db.txt
+++ b/db/pre-re/skill_db.txt
@@ -1007,6 +1007,17 @@
2536,0,0,4,0,0x1,0,1,0,no,0,0,0,none,0, ALL_GUARDIAN_RECALL,Guardian's Recall
//2537,9,6,16,0,0x1,0,2,1,yes,0,0,0,magic,0, ALL_ODINS_POWER,Odin's Power
+//****
+// Kagerou & Oboro
+3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0, KO_YAMIKUMO,Yamikumo
+3002,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, KO_RIGHT,Right Hand Mastery
+3003,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, KO_LEFT,Left Hand Mastery
+3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0, KO_JYUMONJIKIRI,Cross Strike
+3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, KO_SETSUDAN,Soul Sever
+3006,7:8:9:10:11,6,2,0,0x2,0,5,0,no,0,0,0,weapon,0, KO_BAKURETSU,Bakuretsu Kunai
+3007,0,6,4,-1,0x42,4:4:4:4:5,5,0,no,0,0,0,misc,0, KO_HAPPOKUNAI,Happo Kunai
+3008,9,8,2,0,0x52,0,10,-10,no,0,0,0,misc,0, KO_MUCHANAGE,Mucha Nage
+
8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0, HLIF_HEAL,Healing Touch
8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0, HLIF_AVOID,Avoid
8003,0,0,0,0,0,1,5,0,no,0,0,0,none,0, HLIF_BRAIN,Brain Surgery
diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt
index 5e0dc1926..8bda054cd 100644
--- a/db/pre-re/skill_require_db.txt
+++ b/db/pre-re/skill_require_db.txt
@@ -785,6 +785,13 @@
2536,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_GUARDIAN_RECALL#Guardian's Recall#
//2537,0,0,70:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_ODINS_POWER#Odin's Power#
+3001,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_YAMIKUMO#Yamikumo#
+3004,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI#Cross Strike#
+3005,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_SETSUDAN#Soul Sever#
+3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_BAKURETSU#Bakuretsu Kunai#
+3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI#Happo Kunai#
+3008,0,0,50,0,0,10000:20000:30000:40000:50000:60000:70000:80000:90000:100000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_MUCHANAGE#Mucha Nage#
+
10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER##
10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION##
10012,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_RESTORE##
diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt
index 724370952..d2348d568 100644
--- a/db/pre-re/skill_unit_db.txt
+++ b/db/pre-re/skill_unit_db.txt
@@ -148,6 +148,9 @@
2488,0xe9, , 0, 3,1000,enemy, 0x000 //GN_FIRE_EXPANSION_TEAR_GAS
2490,0xea, , 0, 1,1000,enemy, 0x000 //GN_HELLS_PLANT
+3006,0x86, , 0, 2, 100,enemy, 0x018 //KO_BAKURETSU
+3008,0x86, , 0, 2, 100,enemy, 0x018 //KO_MUCHANAGE
+
8208,0x86, , 0, 2,1000,enemy, 0x080 //MA_SHOWER
8209,0x90, , 0, 1,1000,enemy, 0x006 //MA_SKIDTRAP
8210,0x93, , 0, 0,1000,enemy, 0x006 //MA_LANDMINE
diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt
index a8bb7a74a..0ef12eeb9 100644
--- a/db/re/skill_cast_db.txt
+++ b/db/re/skill_cast_db.txt
@@ -875,7 +875,7 @@
//-- NJ_KUNAI
524,0,1000,0,0,0,0,0
//-- NJ_HUUMA
-525,3000,2000,0,0,0,0,0
+525,3000,2000,0,100,0,0,0
//-- NJ_ZENYNAGE
526,0,5000,0,0,0,0,0
//-- NJ_TATAMIGAESHI
@@ -1640,6 +1640,21 @@
2537,5000,5000,0,60000,0,60000,0
//==========================================
+//==== Kagerou & Oboro skills ==============
+//-- KO_YAMIKUMO
+3001,0,0,0,60000,0,0,0
+//-- KO_JYUMONJIKIRI
+3004,0,2500,0,5000,0,0,0
+//-- KO_SETSUDAN
+3005,0,2000,0,0,0,0,0
+//-- KO_BAKURETSU
+3006,1000:1500:2000:2500:3000,1000,0,100,0,3000,0
+//-- KO_HAPPOKUNAI
+3007,0,1000,0,0,0,0,0
+//-- KO_MUCHANAGE
+3008,0,0,0,100,0,10000,0
+//==========================================
+
//===== Homunculus Skills ==================
//-- HLIF_HEAL
8001,0,2000,0,0,0,0,0
diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt
index fbb8945b3..ee30b369d 100644
--- a/db/re/skill_db.txt
+++ b/db/re/skill_db.txt
@@ -568,7 +568,7 @@
522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0, NJ_TOBIDOUGU,Shuriken Training
523,9,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0, NJ_SYURIKEN,Throw Shuriken
524,9,8,1,-1,0x40,0,5,3,no,0,0,0,weapon,0, NJ_KUNAI,Throw Kunai
-525,9,8,1,-1,0x6,1,5,-3:-3:-4:-4:-5,no,0,0,0,weapon,0, NJ_HUUMA,Throw Huuma Shuriken
+525,9,8,2,-1,0x2,0,5,-3:-3:-4:-4:-5,no,0,0,0,weapon,0, NJ_HUUMA,Throw Huuma Shuriken
526,9,6,1,0,0x50,0,10,1,no,0,0,0,misc,0, NJ_ZENYNAGE,Throw Zeny
527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3, NJ_TATAMIGAESHI,Improvised Defense
528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0, NJ_KASUMIKIRI,Vanishing Slash
@@ -1008,6 +1008,17 @@
2536,0,0,4,0,0x1,0,1,0,no,0,0,0,none,0, ALL_GUARDIAN_RECALL,Guardian's Recall
2537,9,6,16,0,0x1,0,2,1,yes,0,0,0,magic,0, ALL_ODINS_POWER,Odin's Power
+//****
+// Kagerou & Oboro
+3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0, KO_YAMIKUMO,Yamikumo
+3002,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, KO_RIGHT,Right Hand Mastery
+3003,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, KO_LEFT,Left Hand Mastery
+3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0, KO_JYUMONJIKIRI,Cross Strike
+3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, KO_SETSUDAN,Soul Sever
+3006,7:8:9:10:11,6,2,0,0x2,0,5,0,no,0,0,0,weapon,0, KO_BAKURETSU,Bakuretsu Kunai
+3007,0,6,4,-1,0x42,4:4:4:4:5,5,0,no,0,0,0,misc,0, KO_HAPPOKUNAI,Happo Kunai
+3008,9,8,2,0,0x52,0,10,-10,no,0,0,0,misc,0, KO_MUCHANAGE,Mucha Nage
+
8001,9,6,4,0,0x1,0,5,1,no,0,0,0,magic,0, HLIF_HEAL,Healing Touch
8002,0,6,4,0,0x3,-1,5,1,no,0,0,0,none,0, HLIF_AVOID,Avoid
8003,0,0,0,0,0,1,5,0,no,0,0,0,none,0, HLIF_BRAIN,Brain Surgery
diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt
index e7f620517..7d92abae0 100644
--- a/db/re/skill_require_db.txt
+++ b/db/re/skill_require_db.txt
@@ -786,6 +786,13 @@
2535,0,0,1,0,0,0,99,0,0,none,0,6377,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store
2536,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_GUARDIAN_RECALL#Guardian's Recall#
//2537,0,0,70:100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_ODINS_POWER#Odin's Power#
+
+3001,0,0,10,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_YAMIKUMO#Yamikumo#
+3004,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_JYUMONJIKIRI#Cross Strike#
+3005,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_SETSUDAN#Soul Sever#
+3006,0,0,5:6:7:8:9,0,0,0,99,0,0,none,0,13294,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_BAKURETSU#Bakuretsu Kunai#
+3007,0,0,8:9:10:11:12,0,0,0,99,7,8,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_HAPPOKUNAI#Happo Kunai#
+3008,0,0,50,0,0,10000:20000:30000:40000:50000:60000:70000:80000:90000:100000,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KO_MUCHANAGE#Mucha Nage#
10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER##
10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION##
diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt
index 5d260298f..2c94386b1 100644
--- a/db/re/skill_unit_db.txt
+++ b/db/re/skill_unit_db.txt
@@ -91,6 +91,7 @@
488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE
516,0x86, , 3, 0, 100,enemy, 0x000 //GS_DESPERADO
521,0xbe, , 0, 1,1000,enemy, 0x000 //GS_GROUNDDRIFT
+525,0x86, , 0, 2, 100,enemy, 0x018 //NJ_HUUMA
527,0xbc, , -1, 0,2000,enemy, 0x018 //NJ_TATAMIGAESHI
535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON
@@ -148,6 +149,9 @@
2488,0xe9, , 0, 3,1000,enemy, 0x000 //GN_FIRE_EXPANSION_TEAR_GAS
2490,0xea, , 0, 1,1000,enemy, 0x000 //GN_HELLS_PLANT
+3006,0x86, , 0, 2, 100,enemy, 0x018 //KO_BAKURETSU
+3008,0x86, , 0, 2, 100,enemy, 0x018 //KO_MUCHANAGE
+
8020,0xf5, , 0, 3,2300:2100:1900:1700:1500,enemy, 0x018 //MH_POISON_MIST
8033,0x7e, , 0, 0, -1,all, 0x003 //MH_STEINWAND
8025,0x86, , 0, 2:2:3:3:4,1000,enemy, 0x018 //MH_XENO_SLASHER
diff --git a/src/map/battle.c b/src/map/battle.c
index 6cc0ae044..5e051f6bd 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -865,6 +865,7 @@ int battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int dam
case PA_PRESSURE:
case HW_GRAVITATION:
case NJ_ZENYNAGE:
+ case KO_MUCHANAGE:
break;
default:
if( flag&BF_SKILL )
@@ -930,6 +931,7 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
case PA_PRESSURE:
case HW_GRAVITATION:
case NJ_ZENYNAGE:
+ case KO_MUCHANAGE:
break;
default:
/* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka]
@@ -2098,7 +2100,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
short index = sd->equip_index[EQI_HAND_R];
if( index >= 0 && sd->inventory_data[index]
&& sd->inventory_data[index]->type == IT_WEAPON )
- skillratio += max(10000 - sd->inventory_data[index]->weight, 0);
+ skillratio += max(10000 - sd->inventory_data[index]->weight, 0) / 10;
skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE);
} // (1 + [(Caster’s Base Level - 100) / 200])
skillratio = skillratio * (100 + (status_get_lv(src)-100) / 2) / 100;
@@ -2478,6 +2480,19 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
case EL_ROCK_CRUSHER:
skillratio += 700;
break;
+ case KO_JYUMONJIKIRI:
+ if( tsc && tsc->data[SC_JYUMONJIKIRI] )
+ wd.div_ = wd.div_ * -1;// needs more info
+ skillratio += -100 + 150 * skill_lv;
+ case KO_HUUMARANKA:
+ skillratio += -100 + 150 * skill_lv + sstatus->dex/2 + sstatus->agi/2; // needs more info
+ break;
+ case KO_SETSUDAN:
+ skillratio += 100 * (skill_lv-1);
+ break;
+ case KO_BAKURETSU:
+ skillratio = 50 * skill_lv * (sd?pc_checkskill(sd,NJ_TOBIDOUGU):10);
+ break;
case MH_STAHL_HORN:
skillratio += 500 + 100 * skill_lv;
break;
@@ -2552,6 +2567,12 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
ATK_ADD( status_get_lv(target) * 50 ); //mobs
}
break;
+ case KO_SETSUDAN:
+ if( tsc && tsc->data[SC_SPIRIT] ){
+ ATK_ADDRATE(10*tsc->data[SC_SPIRIT]->val1);// +10% custom value.
+ status_change_end(target,SC_SPIRIT,INVALID_TIMER);
+ }
+ break;
}
}
//Div fix.
@@ -3117,14 +3138,18 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
{ //Dual-wield
if (wd.damage)
{
- skill = pc_checkskill(sd,AS_RIGHT);
- wd.damage = wd.damage * (50 + (skill * 10))/100;
+ if( skill = pc_checkskill(sd,AS_RIGHT) )
+ wd.damage = wd.damage * (50 + (skill * 10))/100;
+ else if( skill = pc_checkskill(sd,KO_RIGHT) )
+ wd.damage = wd.damage * (70 + (skill * 10))/100;
if(wd.damage < 1) wd.damage = 1;
}
if (wd.damage2)
{
- skill = pc_checkskill(sd,AS_LEFT);
- wd.damage2 = wd.damage2 * (30 + (skill * 10))/100;
+ if( skill = pc_checkskill(sd,AS_LEFT) )
+ wd.damage2 = wd.damage2 * (30 + (skill * 10))/100;
+ else if( skill = pc_checkskill(sd,KO_LEFT) )
+ wd.damage2 = wd.damage2 * (50 + (skill * 10))/100;
if(wd.damage2 < 1) wd.damage2 = 1;
}
} else if(sd->status.weapon == W_KATAR && !skill_num)
@@ -3505,9 +3530,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case WZ_SIGHTRASHER:
skillratio += 20*skill_lv;
break;
- case WZ_VERMILION:
- skillratio += 20*skill_lv-20;
- break;
case WZ_WATERBALL:
skillratio += 30*skill_lv;
break;
@@ -3541,11 +3563,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case NJ_RAIGEKISAI:
skillratio += 60 + 40*skill_lv;
break;
- #ifdef RENEWAL
- case NJ_HUUJIN:
- skillratio += 50;
- break;
- #endif
case NJ_KAMAITACHI:
case NPC_ENERGYDRAIN:
skillratio += 100*skill_lv;
@@ -3553,6 +3570,31 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case NPC_EARTHQUAKE:
skillratio += 100 +100*skill_lv +100*(skill_lv/2);
break;
+ #ifdef RENEWAL
+ case WZ_HEAVENDRIVE:
+ case WZ_METEOR:
+ skillratio += 25;
+ break;
+ case WZ_VERMILION:
+ {
+ int interval = 0, per = interval , ratio = per;
+ while( (per++) < skill_lv ){
+ ratio += interval;
+ if(per%3==0) interval += 20;
+ }
+ if( skill_lv > 9 )
+ ratio -= 10;
+ skillratio += ratio;
+ }
+ break;
+ case NJ_HUUJIN:
+ skillratio += 50;
+ break;
+ #else
+ case WZ_VERMILION:
+ skillratio += 20*skill_lv-20;
+ break;
+ #endif
/**
* Arch Bishop
**/
@@ -4068,13 +4110,14 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = INT_MAX>>1;
break;
case NJ_ZENYNAGE:
- md.damage = skill_get_zeny(skill_num ,skill_lv);
- if (!md.damage) md.damage = 2;
- md.damage = md.damage + rnd()%md.damage;
- if (is_boss(target))
- md.damage=md.damage/3;
- else if (tsd)
- md.damage=md.damage/2;
+ case KO_MUCHANAGE:
+ md.damage = skill_get_zeny(skill_num ,skill_lv);
+ if (!md.damage) md.damage = 2;
+ md.damage = rand()%md.damage + md.damage / (skill_num==NJ_ZENYNAGE?1:2) ;
+ if (is_boss(target))
+ md.damage=md.damage / (skill_num==NJ_ZENYNAGE?3:2);
+ else if (tsd) // need confirmation for KO_MUCHANAGE
+ md.damage=md.damage/2;
break;
case GS_FLING:
md.damage = sd?sd->status.job_level:status_get_lv(src);
@@ -4128,6 +4171,14 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
//[{( Hell Plant Skill Level x Caster’s Base Level ) x 10 } + {( Caster’s INT x 7 ) / 2 } x { 18 + ( Caster’s Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
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)) );
break;
+ case KO_HAPPOKUNAI:
+ {
+ struct Damage wd = battle_calc_weapon_attack(src,target,skill_num,skill_lv,mflag);
+ short totaldef = tstatus->def2 + (short)status_get_def(target);
+ md.damage = wd.damage * 60 * (5 + skill_lv) / 100;
+ md.damage -= totaldef;
+ }
+ break;
}
if (nk&NK_SPLASHSPLIT){ // Divide ATK among targets
diff --git a/src/map/skill.c b/src/map/skill.c
index 8eab672c7..5ca31bca0 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1342,6 +1342,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
case MH_STAHL_HORN:
sc_start(bl,SC_STUN,(20 + 4 * skilllv),skilllv,skill_get_time2(skillid,skilllv));
break;
+ case KO_JYUMONJIKIRI: // needs more info
+ sc_start(bl,SC_JYUMONJIKIRI,25,skilllv,skill_get_time(skillid,skilllv));
+ break;
}
if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai)
@@ -2334,6 +2337,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
break;
case WL_SOULEXPANSION:
case WL_COMET:
+ case KO_MUCHANAGE:
+ case NJ_HUUMA:
dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skillid,skilllv,8);
break;
case WL_CHAINLIGHTNING_ATK:
@@ -2365,6 +2370,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
case EL_HURRICANE_ATK:
case EL_TYPOON_MIS:
case EL_TYPOON_MIS_ATK:
+ case KO_BAKURETSU:
dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skillid,-1,5);
break;
case GN_SLINGITEM_RANGEMELEEATK:
@@ -2399,6 +2405,11 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
default:
if( flag&SD_ANIMATION && dmg.div_ < 2 ) //Disabling skill animation doesn't works on multi-hit.
type = 5;
+ if( bl->type == BL_SKILL ){
+ TBL_SKILL *su = (TBL_SKILL*)bl;
+ if( su->group && skill_get_inf2(su->group->skill_id)&INF2_TRAP )// show damage on trap targets
+ clif_skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, flag&SD_LEVEL?-1:skilllv, 5);
+ }
dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skillid, flag&SD_LEVEL?-1:skilllv, type);
break;
}
@@ -3417,6 +3428,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case WM_GREAT_ECHO:
case GN_SLINGITEM_RANGEMELEEATK:
case MH_STAHL_HORN:
+ case KO_JYUMONJIKIRI:
+ case KO_SETSUDAN:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
break;
@@ -3648,6 +3661,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case GN_CART_TORNADO:
case GN_CARTCANNON:
case MH_LAVA_SLIDE:
+ case KO_HAPPOKUNAI:
+ case KO_HUUMARANKA:
if( flag&1 ) {//Recursive invocation
// skill_area_temp[0] holds number of targets in area
// skill_area_temp[1] holds the id of the original target
@@ -5457,11 +5472,12 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case SR_SKYNETBLOW:
case SR_RAMPAGEBLASTER:
case SR_HOWLINGOFLION:
+ case KO_HAPPOKUNAI:
skill_area_temp[1] = 0;
clif_skill_nodamage(src,bl,skillid,skilllv,1);
i = map_foreachinrange(skill_area_sub, bl, skill_get_splash(skillid, skilllv), splash_target(src),
src, skillid, skilllv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
- if( !i && ( skillid == NC_AXETORNADO || skillid == SR_SKYNETBLOW ) )
+ if( !i && ( skillid == NC_AXETORNADO || skillid == SR_SKYNETBLOW || skillid == KO_HAPPOKUNAI ) )
clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skillid, skilllv, 6);
break;
@@ -5614,6 +5630,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case TF_HIDING:
case ST_CHASEWALK:
+ case KO_YAMIKUMO:
if (tsce)
{
clif_skill_nodamage(src,bl,skillid,-1,status_change_end(bl, type, INVALID_TIMER)); //Hide skill-scream animation.
@@ -9326,6 +9343,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
case NJ_HYOUSYOURAKU:
case NJ_RAIGEKISAI:
case NJ_KAMAITACHI:
+#ifdef RENEWAL
+ case NJ_HUUMA:
+#endif
case NPC_EVILLAND:
case RA_ELECTRICSHOCKER:
case RA_CLUSTERBOMB:
@@ -9356,6 +9376,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
case SO_WIND_INSIGNIA:
case SO_EARTH_INSIGNIA:
case MH_POISON_MIST:
+ case KO_HUUMARANKA:
+ case KO_MUCHANAGE:
+ case KO_BAKURETSU:
flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
case GS_GROUNDDRIFT: //Ammo should be deleted right away.
skill_unitsetting(src,skillid,skilllv,x,y,0);
@@ -10934,6 +10957,8 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
default:
skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
}
+ if( skill_get_unit_interval(sg->skill_id) >= skill_get_time(sg->skill_id,sg->skill_lv) )
+ sg->unit_id = UNT_USED_TRAPS;
break;
case UNT_FIREPILLAR_WAITING:
@@ -11894,7 +11919,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
case ML_AUTOGUARD: case CR_DEFENDER: case ML_DEFENDER: case ST_CHASEWALK: case PA_GOSPEL:
case CR_SHRINK: case TK_RUN: case GS_GATLINGFEVER: case TK_READYCOUNTER: case TK_READYDOWN:
- case TK_READYSTORM: case TK_READYTURN: case SG_FUSION: case RA_WUGDASH:
+ case TK_READYSTORM: case TK_READYTURN: case SG_FUSION: case RA_WUGDASH: case KO_YAMIKUMO:
if( sc && sc->data[status_skill2sc(skill)] )
return 1;
}
@@ -12203,6 +12228,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
break;
case NJ_ZENYNAGE:
+ case KO_MUCHANAGE:
if(sd->status.zeny < require.zeny) {
clif_skill_fail(sd,skill,USESKILL_FAIL_MONEY,0);
return 0;
@@ -12822,7 +12848,7 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, short
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
case ML_AUTOGUARD: case CR_DEFENDER: case ML_DEFENDER: case ST_CHASEWALK: case PA_GOSPEL:
case CR_SHRINK: case TK_RUN: case GS_GATLINGFEVER: case TK_READYCOUNTER: case TK_READYDOWN:
- case TK_READYSTORM: case TK_READYTURN: case SG_FUSION:
+ case TK_READYSTORM: case TK_READYTURN: case SG_FUSION: case KO_YAMIKUMO:
if( sc && sc->data[status_skill2sc(skill)] )
return req;
}
diff --git a/src/map/status.c b/src/map/status.c
index 1c9a2d830..94ffc403e 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -706,6 +706,8 @@ void initChangeTables(void) {
set_sc( EL_TIDAL_WEAPON , SC_TIDAL_WEAPON_OPTION , SI_TIDAL_WEAPON_OPTION , SCB_ALL );
set_sc( EL_ROCK_CRUSHER , SC_ROCK_CRUSHER , SI_ROCK_CRUSHER , SCB_DEF );
set_sc( EL_ROCK_CRUSHER_ATK, SC_ROCK_CRUSHER_ATK , SI_ROCK_CRUSHER_ATK , SCB_SPEED );
+ add_sc( KO_YAMIKUMO , SC_HIDING );
+ set_sc( KO_JYUMONJIKIRI , SC_JYUMONJIKIRI , SI_KO_JYUMONJIKIRI , SCB_NONE );
add_sc( MH_STAHL_HORN , SC_STUN );
set_sc( MH_ANGRIFFS_MODUS , SC_ANGRIFFS_MODUS , SI_ANGRIFFS_MODUS , SCB_BATK|SCB_WATK|SCB_DEF|SCB_FLEE );
@@ -1637,6 +1639,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
case RG_RAID:
case NJ_SHADOWJUMP:
case NJ_KIRIKAGE:
+ case KO_YAMIKUMO:
break;
default:
//Non players can use all skills while hidden.
diff --git a/src/map/status.h b/src/map/status.h
index 41010a34b..8b27af328 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -621,6 +621,19 @@ typedef enum sc_type {
SC_INCMHP,
SC_INCMSP,
SC_PARTYFLEE, // 531
+ /**
+ * Kagerou & Oboro [malufett]
+ **/
+ SC_MEIKYOUSISUI,
+ SC_JYUMONJIKIRI,
+ SC_KYOUGAKU,
+ SC_IZAYOI,
+ SC_KAGEHUMI,
+ SC_KYOMU,
+ SC_KAGEMUSYA,
+ SC_ZANGETSU,
+ SC_OBOROGENSOU,
+
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
} sc_type;