Browse Source

- Applied Mpeg's work on GS
( http://gpegon.free.fr/ea/gunslinger_08-29-06_mpeg.txt )
- Fixed a syntax error in @showmobs


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8528 54d463be-8e91-2dee-dedb-b68131a5f0ec

toms 18 năm trước cách đây
mục cha
commit
66158f3bb6

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/08/29
+	* Applied Mpeg's work on GS [Toms]
+	  ( http://gpegon.free.fr/ea/gunslinger_08-29-06_mpeg.txt )
+	* Fixed a syntax error in @showmobs [Toms]
 	* Added @showmobs. It shows selected mobs on your mini-map (excluding
 	  mini-bosses & MVP) thanks to KarLaeda for the command [Lupus]
 2006/08/28

+ 3 - 0
db/Changelog.txt

@@ -19,6 +19,9 @@
 	-----
 
 =========================
+08/29
+	*Applied Mpeg's work on GS [Toms]
+	  ( http://gpegon.free.fr/ea/gunslinger_08-29-06_mpeg.txt )
 08/26
 	* Reduced weapon range of all guns by 1 [Playtester]
 08/25

+ 19 - 25
db/skill_cast_db.txt

@@ -843,41 +843,35 @@
 //-- GS_GLITTERING
 500,0,0,0,600000,0
 //-- GS_FLING
-501,0,1000,0,30000,0
-//-- GS_TRIPLEACTION
-502,0,1000,0,0,0
-//-- GS_BULLSEYE
-503,0,1000,0,0,0
+501,0,0,0,30000,0
 //-- GS_MADNESSCANCEL
-504,0,1000,0,15000,0
+504,0,0,0,15000,0
 //-- GS_ADJUSTMENT
-505,0,1000,0,30000,0
+505,0,0,0,30000,0
 //-- GS_INCREASING
-506,0,1000,0,60000,0
-//-- GS_MAGICALBULLET
-507,0,1000,0,0,0
-//-- GS_CRACKER
-508,0,1000,0,0,5000
-//-- GS_TRACKING
+506,0,0,0,60000,0
+//-- GS_CRACKER // No clue for duration2 (stun time)
+508,0,0,0,0,5000
+//-- GS_TRACKING // Delay unknown
 512,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,0
-//-- GS_DISARM
-513,0,1000,0,30000,0
-//-- GS_PIERCINGSHOT
-514,0,1000,0,0,120000
-//-- GS_RAPIDSHOWER
+//-- GS_DISARM // Cast&Delay unknown (temp values). No clue for Duration1 (Strip time)...
+513,1000,0,0,30000,0
+//-- GS_PIERCINGSHOT // Cast&Delay unknown (temp values). No clue for Duration2 (Bleeding time)
+514,1000,0,0,0,120000
+//-- GS_RAPIDSHOWER // Delay must be checked (maybe 0(ASPD)...)
 515,0,1000,0,0,0
-//-- GS_DESPERADO
+//-- GS_DESPERADO // Delay must be checked (very likely to be 1s though)
 516,0,1000,1000,1000,0
 //-- GS_GATLINGFEVER
 517,0,1000,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0
-//-- GS_DUST
-518,1000,1000,0,0,0
+//-- GS_DUST // Delay must be checked (very long with low agi, still long with full agi, so it must be correct...)
+518,1000,0,0,0,0
 //-- GS_FULLBUSTER
 519,1000,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000
-//-- GS_SPREADATTACK
-520,0,1000,0,0,0
-//-- GS_GROUNDDRIFT
-521,0,1000,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,0
+//-- GS_SPREADATTACK // Delay unknown (if there is one, other that aspd)
+520,1000,0,0,0,0
+//-- GS_GROUNDDRIFT // Delay unknown (if there is one, other that aspd)
+521,1000,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,10000
 //==========================================
 
 

+ 8 - 8
db/skill_db.txt

@@ -524,18 +524,18 @@
 498,0,6,4,0,1,0,1,0,no,0,8,0,none,0	//AM_TWILIGHT3#Twilight Alchemy 3#
 499,-9,8,4,-1,0,0,1,2,no,0,520,0,weapon,0	//HT_POWER#Beast Strafing#
 //Temp Plugs(using bash as base)
-500,0,6,4,0,0,0,5,1,no,0,0,0,none,0	//GS_GLITTERING#Flip the Coin#
-501,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_FLING#Fling#
+500,0,6,4,0,0,0,5,1,no,0,0,0,misc,0	//GS_GLITTERING#Flip the Coin#
+501,-3,6,1,-1,0,0,1,1,no,0,0,0,misc,0	//GS_FLING#Fling#
 502,-3,8,1,-1,0,0,1,3,no,0,0,0,weapon,0	//GS_TRIPLEACTION#Triple Action#
 503,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_BULLSEYE#Bulls Eye#
-504,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_MADNESSCANCEL#Madness Canceler#
-505,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_ADJUSTMENT#AdJustment#
-506,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0	//GS_INCREASING#Increasing Accuracy#
+504,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0	//GS_MADNESSCANCEL#Madness Canceler#
+505,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0	//GS_ADJUSTMENT#AdJustment#
+506,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0	//GS_INCREASING#Increasing Accuracy#
 507,-3,6,1,8,0,0,1,1,no,0,0,0,weapon,0	//GS_MAGICALBULLET#Magical Bullet#
-508,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0	//GS_CRACKER#Cracker#
+508,-3,6,1,-1,1,0,1,1,no,0,0,0,weapon,0	//GS_CRACKER#Cracker#
 509,-3,0,0,0,0,0,10,0,no,0,0,0,none,0	//GS_SINGLEACTION#Single Action#
 510,0,0,0,0,0,0,10,0,no,0,0,0,none,0	//GS_SNAKEEYE#Snake Eye#
-511,-3,8,0,0,0,0,10,2,no,0,0,0,weapon,0	//GS_CHAINACTION#Chain Action#
+511,-3,8,0,-1,0,0,10,2,no,0,0,0,weapon,0	//GS_CHAINACTION#Chain Action#
 512,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_TRACKING#Tracking#
 513,7,6,1,-1,1,0,5,1,no,0,0,0,weapon,0	//GS_DISARM#Disarm#
 514,3,6,1,-1,0,0,5,1,no,0,0,0,weapon,0	//GS_PIERCINGSHOT#Piercing Shot#
@@ -545,7 +545,7 @@
 518,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,5	//GS_DUST#Dust#
 519,3,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0	//GS_FULLBUSTER#Full Buster#
 520,3,6,1,-1,2,1:1:1:2:2:2:3:3:3:4,10,1,no,0,0,0,weapon,0	//GS_SPREADATTACK#Spread Attack#
-521,3,6,2,0,0,0,10,1,no,0,0,0,weapon,0	//GS_GROUNDDRIFT#Ground Drift#
+521,3,6,2,-1,0,0,10,1,no,0,0,0,weapon,0	//GS_GROUNDDRIFT#Ground Drift#
 522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0	//NJ_TOBIDOUGU#NJ_TOBIDOUGU#
 523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0	//NJ_SYURIKEN#NJ_SYURIKEN#
 524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0	//NJ_KUNAI#NJ_KUNAI#

+ 4 - 4
db/skill_require_db.txt

@@ -394,9 +394,9 @@
 498,0,0,200,0,0,0,99,0,0,none,0,7134,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//AM_TWILIGHT3##
 499,0,0,8,0,0,0,11,1,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//HT_POWER##
 500,0,0,2,0,0,1,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	//GS_GLITTERING
-501,0,0,10,0,0,0,17:18:19:20:21,3:5,0,none,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FLING
-502,0,0,20,0,0,0,17:18:19:20:21,3:5,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_TRIPLEACTION
-503,0,0,30,0,0,0,17:18:19:20:21,3:5,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_BULLSEYE
+501,0,0,10,0,0,0,17:18:19:20:21,0,0,none,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FLING
+502,0,0,20,0,0,0,17:18:19:20:21,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_TRIPLEACTION
+503,0,0,30,0,0,0,17:18:19:20:21,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_BULLSEYE
 504,0,0,30,0,0,0,17:18:19:20:21,0,0,none,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_MADNESSCANCEL
 505,0,0,15,0,0,0,17:18:19:20:21,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_ADJUSTMENT
 506,0,0,30,0,0,0,17:18:19:20:21,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_INCREASING
@@ -410,7 +410,7 @@
 517,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,20,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_GATLINGFEVER
 518,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,19,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_DUST
 519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,19,3,2:2:4:4:6:6:8:8:10:10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FULLBUSTER
-520,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,19,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_SPREADATTACK
+520,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,19,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_SPREADATTACK
 521,0,0,4:8:12:16:20:24:28:32:36:40,0,0,0,21,5,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_GROUNDDRIFT
 523,0,0,2,0,0,0,99,6,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_SYURIKEN
 524,0,0,30:25:20:15:10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//NJ_KUNAI

+ 2 - 2
db/skill_unit_db.txt

@@ -89,7 +89,7 @@
 484,0xb8,    ,  2, 0,1000,enemy, 0x808	//HW_GRAVITATION
 488,0xb9,    ,  3, 0,  -1,all,   0x200	//CG_HERMODE
 516,0xba,    ,  0, 3, 100,enemy, 0x000	//GS_DESPERADO
-521,0xc2,    ,  0, 1,1000,enemy, 0x006	//GS_GROUNDDRIFT
+538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x000	//NJ_SUITON
 527,0xbc,    , -1, 0,2000,enemy, 0x000	//NJ_TATAMIGAESHI
 535,0xbd,    , -1, 0, 200,enemy, 0x008	//NJ_KAENSIN
-538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x000	//NJ_SUITON
+521,0xbe,    ,  0, 1,1000,enemy, 0x006	//GS_GROUNDDRIFT

+ 1 - 1
src/map/atcommand.c

@@ -9805,7 +9805,7 @@ int atcommand_mobinfo(
 	return 0;
 }
 
-*==========================================
+/*=========================================
 * @showmobs by KarLaeda
 * => For 5 sec displays the mobs on minimap
 *------------------------------------------

+ 9 - 9
src/map/battle.c

@@ -858,7 +858,6 @@ static struct Damage battle_calc_weapon_attack(
 				}
 				wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG;
 				break;
-			case GS_MAGICALBULLET:
 			case HT_PHANTASMIC:
 				//Since these do not consume ammo, they need to be explicitly set as arrow attacks.
 				flag.arrow = 1;
@@ -882,6 +881,10 @@ static struct Damage battle_calc_weapon_attack(
 			case NPC_GRANDDARKNESS:
 			case NJ_HUUMA:
 			case NJ_TATAMIGAESHI:
+			case GS_FLING:
+			case GS_TRIPLEACTION:
+			case GS_BULLSEYE:
+			case GS_MAGICALBULLET:
 				wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG;
 				break;
 
@@ -1506,13 +1509,10 @@ static struct Damage battle_calc_weapon_attack(
 					break;
 				case GS_BULLSEYE:
 					skillratio += 400;
+					flag.cardfix = 0;
 					break;
 				case GS_TRACKING:
-					skillratio += 60*skill_lv;
-					if (skill_lv == 2) skillratio += 20;
-					if (skill_lv == 3) skillratio += 80;
-					if (skill_lv >= 4) skillratio += 60*(skill_lv-3);
-					if (skill_lv == 10) skillratio += 80;
+					skillratio += 100 *(skill_lv+1);
 					break;
 				case GS_PIERCINGSHOT:
 					skillratio += 20*skill_lv;
@@ -1521,16 +1521,16 @@ static struct Damage battle_calc_weapon_attack(
 					skillratio += 10*skill_lv;
 					break;
 				case GS_DESPERADO:
-					skillratio += 50*skill_lv - 50;
+					skillratio += 50*(skill_lv-1);
 					break;
 				case GS_DUST:
 					skillratio += 50*skill_lv;
 					break;
 				case GS_FULLBUSTER:
-					skillratio += 200 + 100*skill_lv;
+					skillratio += 100*(skill_lv+2);
 					break;
 				case GS_SPREADATTACK:
-					skillratio += 20*skill_lv-20;
+					skillratio += 20*(skill_lv-1);
 					break;
 				case NJ_HUUMA:
 					skillratio += 50 + 150*skill_lv;

+ 3 - 0
src/map/pc.c

@@ -4821,6 +4821,9 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 		npc_script_event(sd,NPCE_DIE);
 	}
 	
+	if ( sd && sd->spiritball && (sd->class_&MAPID_BASEMASK)==MAPID_GUNSLINGER ) // maybe also monks' spiritballs ?
+		pc_delspiritball(sd,sd->spiritball,0);
+
 	if (src)
 	switch (src->type) {
 	case BL_MOB:

+ 59 - 17
src/map/skill.c

@@ -1356,10 +1356,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
 	case GS_BULLSEYE: //0.1% coma rate.
 		status_change_start(bl,SC_COMA,10,skilllv,0,0,0,0,0);
 		break;
-	case GS_CRACKER:
-		if (!dstsd)	// according to latest patch, should not work on players [Reddozen]
-			sc_start(bl,SC_STUN,(100 - 10*distance_bl(src, bl)),skilllv,skill_get_time2(skillid,skilllv)); //Temp stun rate 
-		break;
 	case GS_PIERCINGSHOT:
 		sc_start(bl,SC_BLEEDING,(skilllv*3),skilllv,skill_get_time2(skillid,skilllv));
 		break;
@@ -1528,7 +1524,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
 		sc_start(src,SkillStatusChangeTable(skillid),100,skilllv,skill_get_time2(skillid,skilllv));
 		break;
 	case GS_FULLBUSTER:
-		sc_start(src,SC_BLIND,(2*skilllv),skilllv,skill_get_time2(skillid,skilllv));
+		status_change_start(src,SC_BLIND,200*skilllv,skilllv,0,0,0,skill_get_time2(skillid,skilllv),10);
 		break;
 	}
 
@@ -2762,7 +2758,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 	case TK_COUNTER:
 	case GS_TRIPLEACTION:
 	case GS_MAGICALBULLET:
-	case GS_CRACKER:
 	case GS_TRACKING:
 	case GS_PIERCINGSHOT:
 	case GS_RAPIDSHOWER:
@@ -3145,7 +3140,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
 		break;
 
 	case GS_BULLSEYE:
-		if(tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN)
+		if((tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN) && !(tstatus->mode&MD_BOSS))
 			skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
 		else if (sd)
 			clif_skill_fail(sd,skillid,0,0);
@@ -3727,7 +3722,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 	case GS_MADNESSCANCEL:
 	case GS_ADJUSTMENT:
 	case GS_INCREASING:
-	case GS_CRACKER:
 	case NJ_KASUMIKIRI:
 	case NJ_UTSUSEMI:
 	case NJ_NEN:
@@ -5483,6 +5477,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
 		}
 		break;
 	
+	case GS_CRACKER:
+		if (!dstsd)	// according to latest patch, should not work on players [Reddozen]
+		{
+			int rate=10+(skill_get_range2(src,skillid,skilllv)-distance_bl(src,bl))*20;
+			clif_skill_nodamage(src,bl,skillid,skilllv,1);
+			sc_start(bl,SC_STUN,(rate>100)?100:rate,skilllv,skill_get_time2(skillid,skilllv)); //New temp stun rate (by RockmanEXE)
+		}
+		else
+			clif_skill_fail(sd,skillid,0,0);
+		break;
 	case AM_REST:
 		if (sd)
 		{
@@ -6474,6 +6478,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
 	struct status_data *status;
 	struct status_change *sc;
 	int active_flag=1;
+	int subunt=0;
 
 	nullpo_retr(0, src);
 
@@ -6680,17 +6685,36 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
 		break;
 
 	case GS_GROUNDDRIFT:
-		{	//Take on the base element, not the elemental one.
-			struct status_data *bstatus = status_get_base_status(src);
-			val1 = bstatus?bstatus->rhw.ele:status->rhw.ele;
-			if (sd) sd->state.arrow_atk = 0; //Disable consumption right away.
-			else if (!val1) val1 = ELE_WATER+rand()%(ELE_WIND-ELE_WATER);
-			break;
+		{
+		int element[5]={ELE_WIND,ELE_DARK,ELE_POISON,ELE_WATER,ELE_FIRE};
+
+		if (src->type == BL_PC)
+			val1=sd->arrow_ele;
+		else val1=element[rand()%5];
+
+		switch (val1)
+		{
+			case ELE_FIRE:
+				subunt++;
+			case ELE_WATER:
+				subunt++;
+			case ELE_POISON:
+				subunt++;
+			case ELE_DARK:
+				subunt++;
+			case ELE_WIND:
+				break;
+			default:
+				subunt=rand()%5;
+				break;
+		}
+
+		break;
 		}
 	}
 
 	nullpo_retr(NULL, group=skill_initunitgroup(src,(count > 0 ? count : layout->count),
-		skillid,skilllv,skill_get_unit_id(skillid,flag&1), limit, interval));
+		skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval));
 	group->val1=val1;
 	group->val2=val2;
 	group->val3=val3;
@@ -7284,8 +7308,26 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 				skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
 			break;
 
-		case UNT_GROUNDDRIFT:
+		case UNT_GROUNDDRIFT_WIND:
+		case UNT_GROUNDDRIFT_DARK:
+		case UNT_GROUNDDRIFT_POISON:
+		case UNT_GROUNDDRIFT_WATER:
+		case UNT_GROUNDDRIFT_FIRE:
 			skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,sg->val1);
+
+			switch (sg->val1)
+			{
+				case ELE_WATER:
+					sc_start(bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+					break;
+				case ELE_POISON:
+					sc_start(bl,SC_POISON,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+					break;
+				case ELE_DARK:
+					sc_start(bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+					break;
+			}
+
 			sg->unit_id = UNT_USED_TRAPS;
 			clif_changetraplook(&src->bl, UNT_FIREPILLAR_ACTIVE);
 			sg->limit=DIFF_TICK(tick,sg->tick)+1500;
@@ -7751,7 +7793,7 @@ int skill_isammotype (TBL_PC *sd, int skill)
 {
 	return (
 		(sd->status.weapon == W_BOW || (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE)) &&
-		skill != HT_PHANTASMIC && skill != GS_MAGICALBULLET &&
+		skill != HT_PHANTASMIC &&
 		skill_get_type(skill) == BF_WEAPON &&
 	  	!(skill_get_nk(skill)&NK_NO_DAMAGE) &&
 		!skill_get_spiritball(skill,1) //Assume spirit spheres are used as ammo instead.

+ 5 - 2
src/map/skill.h

@@ -947,8 +947,11 @@ enum {
 	UNT_SUITON = 0xbb,
 	UNT_TATAMIGAESHI,
 	UNT_KAENSIN,
-	//0xbe, 0xc0, 0xc1 //Maybe the other elements of Ground Drift?
-	UNT_GROUNDDRIFT = 0xc2,
+	UNT_GROUNDDRIFT_WIND,
+	UNT_GROUNDDRIFT_DARK,
+	UNT_GROUNDDRIFT_POISON,
+	UNT_GROUNDDRIFT_WATER,
+	UNT_GROUNDDRIFT_FIRE,
 };
 
 #endif