All pastes #2073913 Raw Edit

Stuff

public text v1 · immutable
#2073913 ·published 2011-06-02 23:24 UTC
rendered paste body

 public Disable(id, skill, prop)
 {
	new aid = PokeSkillTarget(id);

	if( ValidPlayer(aid) && Pokemod_Alive(aid) && !Pokemod_FF(id, aid) ){
		bind_used(aid,_,DISABLE_TIME)
		sound_cast(id)
		sound_cast(aid)
		set_pev(aid, pev_gaitsequence, 6)
		poke_print(id, print_center, "You disabled somebody")
		poke_print(aid, print_center, "You have been disabled")
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Spike_Cannon(id, skill, prop)
 {
	static bool:Firing[MAX_PLAYERS];
	if( prop & SI_RELEASE || prop & SI_RESET ){
		Firing[id] = false;
		return SKILL_READY;
	}
	else if( prop & SI_BIND ){
		if( !Firing[id] ){
			Firing[id] = true;
			CallSkill(id, skill, SI_SKILLCALL);
		}
		return SKILL_READY;
	}
	else if( prop & SI_SKILLCALL ){
		if( !Firing[id] )
			return SKILL_READY;
	}

	new Float:origin[3], Float:aim[3], Float:velocity[3], Ent

	pev(id, pev_origin, origin)
	pev(id, pev_v_angle, aim)

	//move it a little in front of them
	velocity_by_aim(id, 20, velocity)
	origin[0] += velocity[0];
	origin[1] += velocity[1];
	origin[2] += velocity[2];

	Ent = fm_create_entity("info_target")
	if(!Ent) return SKILL_READY;

	set_pev(Ent, pev_classname, "poke_attack")
	set_pev(Ent, pev_iuser1, SPIKE_DAMAGE)
	set_pev(Ent, pev_iuser2, skill)
	fm_entity_set_model(Ent, MODELS[MDL_HAIR])

	new Float:MinBox[3] = {-5.0, -5.0, -5.0}
	new Float:MaxBox[3] = {5.0, 5.0, 5.0}
	set_pev(Ent, pev_mins, MinBox)
	set_pev(Ent, pev_maxs, MaxBox)

	fm_entity_set_origin(Ent, origin)

	aim[0] += 270;
	while( aim[0] < -90.0 )
		aim[0] += 180.0;
	while( aim[0] > 90.0 )
		aim[0] -= 180.0;
	aim[0] *= -1;

	if( aim[0] > 0.0 )
		aim[2] = 180.0;

	set_pev(Ent, pev_angles, aim)

	set_pev(Ent, pev_solid, SOLID_TRIGGER)
	set_pev(Ent, pev_movetype, MOVETYPE_BOUNCEMISSILE)
	set_pev(Ent, pev_owner, id)

	velocity_by_aim(id, 2000 , velocity)
	set_pev(Ent, pev_velocity, velocity)

	poke_sound(id,CHAN_VOICE,SND_TU_FIRE)

	DelayedCallSkill(0.25, id, skill, SI_SKILLCALL)

	return SKILL_USED;
 }
 public Roar(id, skill, prop)
 {
	poke_sound(id, CHAN_VOICE, SND_AG_DIE)

	new Float:energy
	new ammo, bpammo, wpnid;
	new players[MAX_PLAYERS], pnum, aid, Float:totake;
	poke_get_players(players, pnum, PLAYER_ALIVE);
	new iWPNidx, wpn[32];

	for ( new i = 0; i < pnum; i++ )
	{
		aid = players[i]
		if( Pokemod_FF(id, aid) ) continue;

		if( MOD == CS ){
			wpnid = get_user_weapon(aid, ammo, bpammo)
			if(!wpnid)
				continue

			//can't do anything with these weapons
			if(knife_weapon(wpnid) || grenade_weapon(wpnid) || wpnid==CSW_C4)
				continue

			get_weaponname(wpnid,wpn,31)
			totake = float(SkillClamp(id, skill, ammo/4, ammo*3/4))

			iWPNidx = -1
			while ((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)) != 0) {
				if (aid == pev(iWPNidx, pev_owner)) {
					cs_set_weapon_ammo(iWPNidx, floatround(ammo-totake))
					break
				}
			}
			cs_set_user_bpammo(aid, wpnid, floatround(bpammo+totake))
		}
		else if( MOD == DOD ){
			wpnid = get_user_weapon(aid,ammo,bpammo)
			if(!wpnid)
				continue
			if(knife_weapon(wpnid) || grenade_weapon(wpnid))
				continue
			ammo = dod_get_user_ammo(aid,wpnid)
			totake = float(SkillClamp(id, skill, ammo/4, ammo*3/4))
			dod_set_user_ammo(aid, wpnid, floatround(ammo-totake))
		}
		else if( MOD == NS ){
			if(Pokemod_Team(aid)==1){//Marines
				wpnid = get_user_weapon(aid, ammo, bpammo)
				if(!wpnid)
					continue
				get_weaponname(wpnid,wpn,31)

				//can't do anything with these weapons
				if(knife_weapon(wpnid) || grenade_weapon(wpnid))
					continue

				totake = float(SkillClamp(id, skill, ammo/4, ammo*3/4))

				iWPNidx = -1
				while ((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)) != 0) {
					if (aid == pev(iWPNidx, pev_owner)) {
						ns_set_weap_clip(iWPNidx, floatround(ammo-totake))
						break
					}
				}
				ns_set_weap_reserve(aid, wpnid, floatround(bpammo+totake))
			}
			else{//Aliens
				energy = ns_get_energy(aid)
				totake = (energy*SkillLevel(id, skill))*0.01
				ns_set_energy(aid, energy-totake)
			}
		}
		poke_print(aid, print_center, "Someone roared at you")
		poke_sound(aid, CHAN_VOICE, SND_AG_DIE)
	}
	return SKILL_USED;
 }
 public Growl(id, skill, prop)
 {
	poke_sound(id, CHAN_VOICE, SND_AG_DIE)

	new players[MAX_PLAYERS], pnum, aid
	poke_get_players(players, pnum, PLAYER_ALIVE)

	for ( new i = 0; i < pnum; i++ )
	{
		aid = players[i]
		if( Pokemod_FF(id, aid) ) continue;

		Pokemod_Repair(aid, -1*SkillPercent(id, skill, Pokemod_Armor(aid)) );

		poke_print(aid, print_center, "Someone growled at you")
		poke_sound(aid, CHAN_VOICE, SND_AG_DIE)
	}
	return SKILL_USED;
 }
 public Smokescreen(id, skill, prop)
 {
	new smokecount = 1

	new Float:fOrigin[3], Float:fVelocity[3]
	pev(id, pev_origin, fOrigin)
	velocity_by_aim(id, 35, fVelocity)
	
	new Float:fTemp[3], iFireOrigin[3]
	xs_vec_add(fOrigin, fVelocity, fTemp)
	FVecIVec(fTemp, iFireOrigin)

	new Float:fFireVelocity[3], iFireVelocity[3]
	velocity_by_aim(id, 100, fFireVelocity)
	FVecIVec(fFireVelocity, iFireVelocity)

	new parm[7]
	parm[0] = iFireOrigin[0]
	parm[1] = iFireOrigin[1]
	parm[2] = iFireOrigin[2]
	parm[3] = iFireVelocity[0]
	parm[4] = iFireVelocity[1]
	parm[5] = iFireVelocity[2]
	parm[6] = SPRITE_INDEX[SPR_BALLSMOKE]

	poke_sound(id, CHAN_VOICE, SND_FLAME)

	create_sprite_spray( parm )
	if( smokecount-1 )
		set_task(0.1, "create_sprite_spray", 0, parm, 7, "a", smokecount-1)

	parm[0] = id
	parm[1] = 0
	parm[2] = skill
	spray_check( parm )
	if( smokecount-1 )
		set_task(0.1, "spray_check", 0, parm, 3, "a", smokecount-1)

	return SKILL_USED;
 }
 public Sand_Attack(id, skill, prop)
 {
	new smokecount = 1

	new Float:fOrigin[3], Float:fVelocity[3]
	pev(id, pev_origin, fOrigin)
	velocity_by_aim(id, 35, fVelocity)
	
	new Float:fTemp[3], iFireOrigin[3]
	xs_vec_add(fOrigin, fVelocity, fTemp)
	FVecIVec(fTemp, iFireOrigin)

	new Float:fFireVelocity[3], iFireVelocity[3]
	velocity_by_aim(id, 100, fFireVelocity)
	FVecIVec(fFireVelocity, iFireVelocity)

	new parm[7]
	parm[0] = iFireOrigin[0]
	parm[1] = iFireOrigin[1]
	parm[2] = iFireOrigin[2]
	parm[3] = iFireVelocity[0]
	parm[4] = iFireVelocity[1]
	parm[5] = iFireVelocity[2]
	parm[6] = SPRITE_INDEX[SPR_XPLODE]

	poke_sound(id, CHAN_VOICE, SND_JUMPLAND)

	create_sprite_spray( parm )
	if( smokecount-1 )
		set_task(0.1, "create_sprite_spray", 0, parm, 7, "a", smokecount-1)

	parm[0] = id
	parm[1] = 2
	parm[2] = skill
	spray_check( parm )
	if( smokecount-1 )
		set_task(0.1, "spray_check", 0, parm, 3, "a", smokecount-1)

	return SKILL_USED;
 }
 public Recover(id, skill, prop)
 {
	new heal

	sound_cure(id)
	screenflash(id, 128, 0, 128, 50)

	heal = SkillClamp(id, skill, 25, 150)
	Pokemod_Heal(id, heal)

	return SKILL_USED;
 }
 public Pay_Day(id, skill, prop)
 {
	new damage;
	PokeSkillTarget(id, damage);

	AddLvl(id, damage);
	Pokemod_Pay(id, damage);

	return SKILL_USED;
 }
 public Swift(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && PassTest(id, 1) ){
		get_user_origin(id, origin[id]);
		get_user_origin(victim, aim[id]);
		set_user_origin(id, aim[id]);

		MakeLine(0,origin[id],aim[id],SPRITE_INDEX[SPR_ROPE],0,0,10,15,0,255,255,255,255,0)

		sound_cast(id)
		poke_UnStuck(id)

		return SKILL_USED;
	}
	else{
		sound_deny(id)
		g_StopSkill[id] = true;
	}
	return SKILL_READY;
 }
 public Cut(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( pev_valid(victim) ){
		new Float:takedamage;
		pev(victim, pev_takedamage, takedamage)
		if( takedamage != 0.0 ){
			MakeLine_Ent(0,id,victim,SPRITE_INDEX[SPR_ROPE],1,1,10,5,100,0,255,0,100,0);
			if( skilldamage(victim, id, SkillClamp(id, skill, 10, 50), skill) )
				return SKILL_USED;
		}
	}
	return SKILL_READY;
 }
 public Scratch(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		set_pev(victim, pev_velocity, Float:{0.0,0.0,0.0});
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Fury_Attack(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		new edamage = (PlayerStat[id][STAT_MAXAP] - get_user_armor(id)) / FURY_ATTACK_FACTOR
		poke_print(id,print_center,"%s did %d extra damage", SkillToName(skill), skilldamage( victim, id, edamage, skill) );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Fury_Swipes(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		new edamage = (PlayerStat[id][STAT_MAXHP] - Health(id)) / FURY_SWIPES_FACTOR
		poke_print(id,print_center,"%s did %d extra damage", SkillToName(skill), skilldamage( victim, id, edamage, skill) );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Vice_Grip(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		ApplyStatus( id, victim, STATUS_PARALYZE, VICE_GRIP );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Thrash(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		skilldamage(victim, id, THRASH_DAMAGE, skill);
		screenshake(victim, THRASH, 5.0, THRASH);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Slash(id, skill, prop)
 {
	new damage, weapon, victim = PokeSkillTarget(id, damage, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		new Float:victim_origin[3];
		pev( victim, pev_origin, victim_origin );
		skillAoEdamage(id, victim_origin, SkillLevel(id, skill)*5+100, damage, skill, AOE_IGNORE|AOE_MAXDAM);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Egg_Bomb(id, skill, prop)
 {
	if( !PlayerEnt[id] ){
		if( !Find_EggBomb(id) ){
			give_grenade(id)
			return SKILL_USED;
		}
		g_StopSkill[id] = true;
	}
	else if( PlayerEnt[id]!=id && pev_valid(PlayerEnt[id]) ){
		//stop them from geting a nade immediately
		sound_cast(id)
		set_pev(PlayerEnt[id], pev_dmgtime, 0.1)
		set_pev(PlayerEnt[id], pev_nextthink, 0.1)
		set_pev(PlayerEnt[id], pev_owner, id)
		PlayerEnt[id] = 0
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 Find_EggBomb(id)
 {
	new iGrenade = -1, model[72]
	while ( (iGrenade = fm_find_ent_by_class(iGrenade, "grenade")) > 0 ) {
		pev(iGrenade, pev_model, model, 71)
		if ( id == pev(iGrenade, pev_owner) && !equali(model, MODELS[MDL_POKEBALL]) && !equali(model, "models/w_c4.mdl")){
			PlayerEnt[id] = iGrenade
			egg_bomb_change(id)
			return true;
		}
	}
	if( MOD == DOD ){
		iGrenade = -1
		while ( (iGrenade = fm_find_ent_by_class(iGrenade, "stickgrenade")) > 0 ) {
			pev(iGrenade, pev_model, model, 71)
			if ( id == pev(iGrenade, pev_owner) && !equali(model, MODELS[MDL_POKEBALL])){
				PlayerEnt[id] = iGrenade
				egg_bomb_change(id)
				return true;
			}
		}
	}
	else if( MOD == NS ){
		iGrenade = -1
		while ( (iGrenade = fm_find_ent_by_class(iGrenade, "handgrenade")) > 0 ) {
			pev(iGrenade, pev_model, model, 71)
			if ( id == pev(iGrenade, pev_owner) && !equali(model, MODELS[MDL_POKEBALL])){
				PlayerEnt[id] = iGrenade
				egg_bomb_change(id)
				return true;
			}
		}
	}
	return false;
 }
 public egg_bomb_nade(id)
 {
	if( !PlayerEnt[id] )
		return
	if(!PMon() || !Pokemod_Alive(id)){
		set_pev(PlayerEnt[id], pev_dmgtime, 0.1)
		set_pev(PlayerEnt[id], pev_nextthink, 0.1)
		set_pev(PlayerEnt[id], pev_owner, id)
		PlayerEnt[id] = 0
	}
	else if( pev_valid(PlayerEnt[id]) ){
		new Float:timer
		pev(PlayerEnt[id], pev_nextthink, timer)
		timer += 2.0
		set_pev(PlayerEnt[id], pev_nextthink, timer)
		set_task(1.0, "egg_bomb_nade", id)
	}
 }
 egg_bomb_change(id)
 {
	new nade = PlayerEnt[id];

	fm_entity_set_model(nade, MODELS[MDL_POKEBALL])
	set_pev(nade, pev_solid, SOLID_BBOX)
	set_pev(nade, pev_owner, 0)
	fm_entity_set_size(nade,Float:{-5.0,-5.0,-5.0},Float:{5.0,5.0,5.0})

	egg_bomb_nade(id)
 }
 public Growth(id, skill, prop)
 {
	if( BindTime(id) && BindUsed[id] != WAIT_TIME ){
		new Float:reduce = f_SkillPercent(id, skill, GROWTH_REDUCE);
		BindUsed[id] -= reduce;
		poke_print(id, print_center, "%s is reducing your skill time", SkillToName(skill));
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Rage(id, skill, prop)
 {
	static rage[MAX_PLAYERS];
	if( prop & SI_ROUNDRESET )
		rage[id] = 0;

	new damage, victim = PokeSkillTarget(id, damage);
	if( prop & SI_DAMAGED || prop & SI_PDAMAGED ){
		new ragenums = damage / RAGE_FACTOR
		rage[id] += ragenums

		if(rage[id] > RAGE_MAX)
			rage[id] = RAGE_MAX

		poke_print(id,print_center,"Your rage is at %d extra damage", rage[id])
	}
	else if( rage[id] && Pokemod_Alive(victim) ){
		poke_print(id,print_center,"Your rage did %d extra damage", skilldamage( victim, id, rage[id], skill))
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 
 public Wrap(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( Pokemod_Alive(victim) && SkillChance(id,skill) ){
		ApplyStatus( id, victim, STATUS_PARALYZE, 1.0 );
		poke_print( id, print_center, "You wrapped someone up" );
		poke_print( victim, print_center, "You have been wrapped" );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Constrict(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && MaxSkillChance(id,skill,50) && !g_Status[victim][STATUS_PARALYZE] ){
		ApplyStatus( id, victim, STATUS_PARALYZE, CONSTRICT_TIME )
		poke_print(id,print_center,"You constricted an enemy")
		poke_print(victim,print_center,"You have been constricted")
		MakeLine_Ent(0,id,victim,SPRITE_INDEX[SPR_ROPE],1,1,5,20,0, 0,200,150, 100, 0)
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Bide(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	new edamage = (PlayerStat[id][STAT_MAXHP] - Health(id)) / BIDE_FACTOR
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && edamage>0 && MaxSkillChance(id,skill,edamage) ){
		MakeLine_Ent(0,id,victim,SPRITE_INDEX[SPR_ROPE],1,1,10,5,10, 139,59,19, 255,0)
		poke_print(id,print_center,"Your bide did %d extra damage", skilldamage( victim, id, edamage, skill) )
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Defense_Curl(id, skill, prop)
 {
	new damage;
	PokeSkillTarget(id, damage);
	Pokemod_Repair(id, damage / DEFENSE_CURL)
	return SKILL_USED
 }
 public Harden(id, skill, prop)
 {
	new armr = get_user_armor(id);
	if( !armr ){
		sound_deny(id);
		poke_print(id, print_center, "You need to have armor to swap");
		g_StopSkill[id] = true;
		return SKILL_READY;
	}

	new hp = Health(id);

	PlayerStat[id][STAT_MAXHP] = armr;
	set_user_health(id, PlayerStat[id][STAT_MAXHP]);
	set_user_armor(id, hp);
	return SKILL_USED;
 }
 public Flash(id, skill, prop)
 {
	new damage, victim = PokeSkillTarget(id, damage);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && MaxSkillChance(id,skill,damage) ){
		new alpha = SkillClamp(id, skill, FLASH_ALPHA_MIN, FLASH_ALPHA_MAX);
		screenflash(victim, 255,255,255, alpha, FLASH_TIME);
		poke_print(id,print_center,"You hit someone with flash");
		poke_print(victim,print_center,"You were hit by a flash of light");
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Reflect(id, skill, prop)
 {
	new damage, weapon;
	PokeSkillTarget(id, damage, weapon);
	new max = damage
	if( MaxSkillChance(id,skill, max) && grenade_weapon(weapon) ){
		screenflash(id, 255, 0, 255, 50)
		Pokemod_Heal(id,damage)
		poke_print(id,print_center,"You reflected shrapnel from a grenade")
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Guillotine(id, skill, prop)
 {
	new damage, weapon, victim = PokeSkillTarget(id, damage, weapon);
	if( ValidPlayer(victim) && Pokemod_Alive(victim) && MaxSkillChance(id,skill, damage) && knife_weapon(weapon) ){
		skilldamage( victim, id, AUTO_KILL, skill)
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Glare(id, skill, prop)
 {
	new aid = PokeSkillTarget(id)
	if( ValidPlayer(aid) && Pokemod_Alive(aid) && !Pokemod_FF(id, aid) ){
		poke_print(id, print_center, "You Glared at someone")
		poke_print(aid, print_center, "Someone Glared at you")
		ApplyStatus( id, aid, STATUS_PARALYZE, 1.0 )
		set_pev(aid, pev_velocity, Float:{0.0,0.0,0.0} );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Bite(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !Pokemod_Alive(victim) || !ValidPlayer(victim) )
		return SKILL_READY;
	poke_print(victim, print_center, "Someone is biting you");
	new damage = skilldamage(victim, id, BITE, skill);
	if( !damage )
		return SKILL_READY;
	Pokemod_Heal(id, damage );
	return SKILL_USED;
 }
 public Hyper_Fang(id, skill, prop)
 {
	new damage, weapon, victim = PokeSkillTarget(id, damage, weapon);
	new div = PlayerStat[victim][STAT_MAXHP] / HYPER_FANG
	if( Pokemod_Alive(victim) && damage < div && knife_weapon( weapon ) ){
		skilldamage(victim, id, div-damage, skill);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Super_Fang(id, skill, prop)
 {
	new damage, weapon, victim = PokeSkillTarget(id, damage, weapon);
	new div = PlayerStat[victim][STAT_MAXHP] / SUPER_FANG
	if( Pokemod_Alive(victim) && damage < div && knife_weapon( weapon ) ){
		skilldamage(victim, id, div-damage, skill)
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Double_Edge(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if(Pokemod_Alive(victim) || knife_weapon(weapon))
		return SKILL_READY;

	new amount
	new level = SkillLevel(id, skill)

	if( MOD == CS ){
		if( weapon == 2 || weapon <= 0 || weapon > 30 )
			return SKILL_READY;
		amount = cs_get_user_bpammo(id, weapon)
		if(amount==0 && grenade_weapon(weapon)){
			give_grenade(id)
			amount = 1
		}
		cs_set_user_bpammo(id, weapon, amount+level)
	}
	else if( MOD == DOD ){
		amount = dod_get_user_ammo(id, weapon)
		if(amount==0 && grenade_weapon(weapon)){
			give_grenade(id)
			amount = 1
		}
		dod_set_user_ammo(id, weapon, amount+level)
	}
	else if( MOD == NS ){
		amount = ns_get_weap_reserve(id, weapon)
		if(amount==0 && grenade_weapon(weapon)){
			give_grenade(id)
			amount = 1
		}
		ns_set_weap_reserve(id, weapon, amount+level)
	}

	return SKILL_USED;
 }
 public Tri_Attack(id, skill, prop)
 {
	new weapon;
	PokeSkillTarget(id, _, weapon);
	if(knife_weapon(weapon)) return SKILL_READY;

	new wpn[32], ammo, bpammo
	get_user_weapon(id, ammo, bpammo)
	get_weaponname(weapon,wpn,31)
	new addition = 1

	if( SkillChanceClamp(id, skill, 50, 100) ){

		screenflash(id, 255, 255, 255, 50)

		//can't do anything with these weapons
		if(grenade_weapon(weapon)){
			new parm[3];
			parm[0] = id;
			parm[1] = addition;
			parm[2] = 1;
			set_task(0.1, "delayed_grenade", 0, parm, 3);
			return SKILL_USED;
		}
		else if( MOD == CS ){
			new iWPNidx = -1
			while ((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)) != 0) {
				if (id == pev(iWPNidx, pev_owner)) {
					cs_set_weapon_ammo(iWPNidx, ammo+addition)
				}
			}
		}
		else if( MOD == DOD ){
			new amount = dod_get_user_ammo(id, weapon)
			dod_set_user_ammo(id, weapon, amount+addition)
		}
		else if( MOD == NS ){
			new iWPNidx = -1
			while ((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)) != 0) {
				if (id == pev(iWPNidx, pev_owner)) {
					ns_set_weap_clip(iWPNidx, ammo+addition)
				}
			}
		}

		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Splash(id, skill, prop)
 {
	if( entity_on_ground(id) ){
		InWater(id);
		poke_sound(id, CHAN_VOICE, SND_WADE);
		new Float:velo[3];
		pev(id, pev_velocity, velo);
		velo[0] = velo[1] = 0.0;
		set_pev(id, pev_velocity, velo );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Substitute(id, skill, prop)
 {
	if( Health(id) < PlayerStat[id][STAT_MAXHP]/SUBSTITUTE){
		EscapeRope(id, 0)
		return SKILL_USED;
	}
	else if( prop & SI_BIND )
		poke_print(id, print_center, "Your HP is not low enough (%d)",PlayerStat[id][STAT_MAXHP]/SUBSTITUTE)
	return SKILL_READY;
 }
 public Gust(id, skill, prop)
 {
	new gust = SkillLevel(id, skill) / GUST_FACTOR
	new Float:velocity[3], Float:Cvelocity[3]

	poke_sound(id, CHAN_VOICE, SND_JUMPLAND)

	velocity_by_aim(id, gust*GUST_VELOCITY, velocity)

	new players[MAX_PLAYERS], pnum, aid
	poke_get_players(players, pnum, PLAYER_ALIVE|PLAYER_MORTAL)

	for(new i=0; i<pnum; i++){
		aid = players[i]
		if(fm_is_ent_visible(id, aid)){
			pev(aid, pev_velocity, Cvelocity)
			Cvelocity[0] += velocity[0]
			Cvelocity[1] += velocity[1]
			Cvelocity[2] += velocity[2]
			set_pev(aid, pev_velocity ,Cvelocity)

			if( id != aid ) skilldamage(aid, id, gust, skill)

			poke_print(aid, print_center, "You were hit by a %s", SkillToName(skill) )
			poke_sound(aid, CHAN_VOICE, SND_JUMPLAND)
		}
	}
	return SKILL_USED;
 }
 public Whirlwind(id, skill, prop)
 {
	new whirlwind = SkillLevel(id, skill) / WHIRLWIND_FACTOR
	new Float:velocity[3], Float:Cvelocity[3]

	poke_sound(id, CHAN_VOICE, SND_JUMPLAND)

	velocity_by_aim(id, whirlwind*WHIRLWIND_VELOCITY, velocity)

	new players[MAX_PLAYERS], pnum, aid
	poke_get_players(players, pnum, PLAYER_ALIVE|PLAYER_MORTAL)

	for(new i=0; i<pnum; i++){
		aid = players[i]
		if(fm_is_ent_visible(id, aid)){
			pev(aid, pev_velocity, Cvelocity)
			Cvelocity[0] += velocity[0]
			Cvelocity[1] += velocity[1]
			Cvelocity[2] += velocity[2]
			set_pev(aid, pev_velocity ,Cvelocity)

			if( id != aid ) skilldamage(aid, id, whirlwind, skill)

			poke_print(aid, print_center, "You were hit by a %s", SkillToName(skill) )
			poke_sound(aid, CHAN_VOICE, SND_JUMPLAND)
		}
	}
	return SKILL_USED;
 }
 public Double_Slap(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !ValidPlayer(victim) || !Pokemod_Alive(victim) )
		return SKILL_READY;

	new slap = SLAP * SkillLevel(id, skill)
	new damage = slap/DOUBLE_SLAP

	if(damage<1)
		damage = 1

	new Float:velocity[3]
	velocity[0] = random_float(-1.0*slap, 1.0*slap)
	velocity[1] = random_float(-1.0*slap, 1.0*slap)
	velocity[2] = random_float(-1.0*slap, 1.0*slap)

	set_pev(victim, pev_velocity, velocity)
	skilldamage(victim, id, damage, skill)
	return SKILL_USED;
 }
 public Skullbash(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !ValidPlayer(victim) || !Pokemod_Alive(victim) )
		return SKILL_READY;

	new slap = SLAP * SkillLevel(id, skill)
	new damage = slap/SKULLBASH

	if(damage<1)
		damage = 1

	new Float:velocity[3]
	velocity[0] = random_float(-1.0*slap, 1.0*slap)
	velocity[1] = random_float(-1.0*slap, 1.0*slap)
	velocity[2] = random_float(-1.0*slap, 1.0*slap)

	set_pev(victim, pev_velocity, velocity)
	skilldamage(victim, id, damage, skill)
	return SKILL_USED;
 }
 public Body_Slam(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !Pokemod_Alive(victim) )
		return SKILL_READY;

	new slap = SLAP * SkillLevel(id, skill)
	new damage = slap/BODY_SLAM

	if(damage<1)
		damage = 1

	if( ValidPlayer(victim) ){
		new Float:velocity[3]
		velocity[0] = random_float(-1.0*slap, 1.0*slap)
		velocity[1] = random_float(-1.0*slap, 1.0*slap)
		velocity[2] = random_float(-1.0*slap, 1.0*slap)

		set_pev(victim, pev_velocity, velocity)
	}

	skilldamage(victim, id, damage, skill)

	return SKILL_USED;
 }
 public Double_Team(id, skill, prop)
 {
	if(!PassTest(id, 0))
		return SKILL_READY;

	new aid, Float:lastpercent = 0.0, lastid = 0, Float:percentage
	new players[MAX_PLAYERS], pnum
	poke_get_players(players, pnum, PLAYER_ALIVE|PLAYER_MORTAL)
	for( new i=0; i<pnum; i++ ){
		aid = players[i]
		if( Pokemod_FF(id, aid) != 1 )	//don't want to know about them
			continue

		percentage = float(Health(aid))/float(PlayerStat[aid][STAT_MAXHP])
		if(percentage > lastpercent){
			lastpercent = percentage
			lastid = aid
		}
	}
	if( Pokemod_Alive(lastid) ){
		new Float:origin[3]
		pev(lastid, pev_origin, origin)
		origin[2] += 40	//set them above the player
		set_pev(id, pev_origin, origin)
		pev(lastid, pev_angles, origin)
		set_pev(id, pev_angles, origin)
		set_pev(id, pev_fixangle, 1)

		poke_UnStuck(id)
		sound_cast(id)
		Pokemod_Heal(id, Health(aid)-Health(id));

		new name[32]
		get_user_name(lastid, name, 31)
		poke_print(id, print_center, "You are double teaming with %s",name)
		return SKILL_USED;
	}
	else{
		sound_deny(id)
		poke_print(id, print_center, "You have no injured teammates")
		g_StopSkill[id] = true;
	}
	return SKILL_READY;
 }
 public Quick_Attack(id, skill, prop)
 {
	new Float:velocity[3], Float:add_to[3]
	pev(id, pev_velocity, velocity)
	velocity_by_aim(id, QUICK_ATTACK+SkillLevel(id, skill), add_to)
	velocity[0] += add_to[0]
	velocity[1] += add_to[1]

	if( entity_on_ground(id) )
		velocity[2] = add_to[2]		//add some just so they get a little boost into the air
	else
		velocity[2] += floatclamp(add_to[2],0.0,40.0)	//if theyre in the air, dont force them upward
	set_pev(id, pev_velocity, velocity)

	return SKILL_USED;
 }
 public Hyper_Beam(id, skill, prop)
 {
	new level = SkillLevel(id, skill)
	new Float:f_origin[3], Float:f_aimvec[3]

	get_user_origin(id, origin[id]);
	get_user_origin(id, aim[id], 2);
	IVecFVec(origin[id], f_origin);
	IVecFVec(aim[id], f_aimvec);

	skillLinedamage(id, f_origin, f_aimvec, level*2, level, skill)
	MakeLine(0,origin[id],aim[id],SPRITE_INDEX[SPR_ZBEAM6],1,1,1,level*20,0,255,255,255,255,0)
	poke_sound(id, CHAN_VOICE, SND_AG_DIE)
	set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})

	return SKILL_USED;
 }
 public Conversion(id, skill, prop)
 {
	if( prop & SI_RELEASE ){
		if( Pokemod_Alive(id) )
			fm_set_rendering(id);
		SetSpeed(id);
		return SKILL_READY;
	}
	if( prop & SI_SPEED ){
		if( ActiveSkill(id) == skill && prop & SI_SKILLCALL ){
			new slowdown = SkillClamp(id, skill, CONVERSION_SPEED_MIN, CONVERSION_SPEED_MAX)
			PlayerStat[id][STAT_SPEED] += slowdown;
		}
		return SKILL_READY;
	}

	fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, CONVERSION_ALPHA);
	screenflash(id, 128, 128, 128, 128);
	SetSpeed(id, true);

	return SKILL_USED;
 }
 public Strength(id, skill, prop)
 {
	if( prop & SI_RELEASE ){
		if( ValidPlayer(PlayerEnt[id]) && Pokemod_Alive(PlayerEnt[id]) )
			poke_UnStuck(PlayerEnt[id], false);
		PlayerEnt[id] = 0;
		return SKILL_READY;
	}

	new ent;
	if( !pev_valid(PlayerEnt[id]) ){
		new body;
		get_user_aiming(id, ent, body, STRENGTH_DIST);
		if( pev_valid(ent) ){
			new class[32];
			pev(ent, pev_classname, class, 31);

			#if STRENGTH_NPC == 0
			if( equal(class, "npc", 3) ){
				poke_print(id, print_center, "You cannot move this object");
				return SKILL_READY;
			}
			#endif

			if(!equal(class, "worldspawn")
			&& containi(class, "grenade") == -1
			&& !equal(class, "func_", 5)){
				PlayerEnt[id] = ent;
			}
			else{
				return SKILL_READY;
			}
		}
		else
			return SKILL_READY;
	}
	else{
		ent = PlayerEnt[id];
	}

	new player_weight, object_weight;
	player_weight = str_to_num(FilePokeInfo(PlayersPoke[id][PlayersActive[id]], "Weight"));

	if( ValidPlayer(ent) )
		object_weight = str_to_num(FilePokeInfo(PlayersPoke[ent][PlayersActive[ent]], "Weight"));
	if( !object_weight )
		object_weight = 100;

	//10 uses at level 1
	//100 uses at top level
	new uses;
	uses = ( SkillClamp(id, skill, 10, 100) * player_weight )/ object_weight ;

	if( uses < 2 ){
		poke_print(id, print_center, "This object is too heavy for you");
		Strength(id, skill, SI_RELEASE);
		return SKILL_READY;
	}

	new Float:player_origin[3];
	new Float:ent_origin[3], Float:velocity[3];

	pev(id, pev_origin, player_origin);
	ent_origin[0] = player_origin[0];
	ent_origin[1] = player_origin[1];
	ent_origin[2] = player_origin[2];
	velocity_by_aim(id, STRENGTH_DIST/2, velocity);

	ent_origin[0] += velocity[0];
	ent_origin[1] += velocity[1];
	ent_origin[2] += velocity[2];

	engfunc(EngFunc_SetOrigin, ent, ent_origin);

	#if STRENGTH_DAMAGE > 0
	if( ValidPlayer(ent) && Pokemod_Alive(ent) )
		skilldamage(ent, id, STRENGTH_DAMAGE, skill);
	#endif

	if( end_rep_use(id, skill, uses) ){
		poke_print(id, print_center, "The object got too heavy for you");
		Strength(id, skill, SI_RELEASE);
		return SKILL_USED;
	}

	return SKILL_READY;
 }
 public Supersonic(id, skill, prop)
 {
	new players[32], pnum, aid, apple_count
	new bool:in_water = entity_in_water(id);

	poke_get_players( players, pnum, PLAYER_ALIVE|PLAYER_MORTAL )
	for( new i=0; i<pnum; i++)
	{
		aid = players[i];
		if( Pokemod_FF(id, aid) ) continue;

		if( (in_water && entity_in_water(aid))
		|| fm_is_ent_visible(id, aid) ){
			Flinch(aid)
			apple_count++;
		}
	}
	if( ActionPrint(id, print_center, apple_count, "confused") ){
		sound_cast(id);
		return SKILL_USED;
	}
	else{
		g_StopSkill[id] = true;
		sound_deny(id);
	}
	return SKILL_READY;
 }
 public Tackle(id, skill, prop)
 {
	if( entity_on_ground(id) ){
		new Float:velocity[3], kick = 250+SkillLevel(id, skill)/2;

		velocity_by_aim(id, kick, velocity);
		velocity[2] = floatmax(velocity[2], float(kick));

		set_pev(id, pev_velocity, velocity);
		poke_sound(id,CHAN_VOICE, SND_STEP);
		set_pev(id, pev_gaitsequence, 6);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Double_Kick(id, skill, prop)
 {
	if( entity_on_ground(id) ){
		new Float:velocity[3], kick = (250+SkillLevel(id, skill)/2)*2;

		velocity_by_aim(id, kick, velocity);
		velocity[2] = floatmax(velocity[2], float(kick));

		set_pev(id, pev_velocity, velocity);
		poke_sound(id,CHAN_VOICE, SND_STEP);
		set_pev(id, pev_gaitsequence, 6);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Tail_Whip(id, skill, prop)
 {
	//make players fly away, and remove their armor
	new players[32], pnum, aid, level = SkillLevel(id, skill), apple_count;
	new Float:start_origin[3], Float:velocity[3];

	poke_get_players( players, pnum, PLAYER_ALIVE|PLAYER_MORTAL )
	for( new i=0; i<pnum; i++)
	{
		aid = players[i];

		if( Pokemod_FF(id, aid) || !fm_is_ent_visible(id,aid) )
			continue;

		pev(id, pev_origin, start_origin);
		pev(aid, pev_origin, velocity);

		start_origin[0] = velocity[0] - start_origin[0];
		start_origin[1] = velocity[1] - start_origin[1];
		start_origin[2] = velocity[2] - start_origin[2];
		xs_vec_normalize( start_origin, velocity );

		velocity[0] *= TAIL_WHIP;
		velocity[1] *= TAIL_WHIP;
		velocity[2] *= TAIL_WHIP;

		set_pev(aid, pev_velocity, velocity);
		set_user_armor(aid, max(get_user_armor(aid) - level, 0) );
		apple_count++;
	}
	if( ActionPrint(id, print_center, apple_count, "tail whipped") ){
		sound_cast(id);
		return SKILL_USED;
	}
	else{
		g_StopSkill[id] = true;
		sound_deny(id);
	}
	return SKILL_READY;
 }
 public Self_Destruct(id, skill, prop)
 {
	if( Pokemod_Alive(id) )
		if( !skilldamage(id, id, AUTO_KILL, skill) )
			return;
	BlowUp(id);
	new parm[2]
	parm[0] = id
	parm[1] = skill
	set_task(0.5, "DestructDamage", 0, parm, 2)
 }
 public Explosion(id, skill, prop)
 {
	if( Pokemod_Alive(id) )
		if( !skilldamage(id, id, AUTO_KILL, skill) )
			return;
	BlowUp(id);
	new parm[2]
	parm[0] = id
	parm[1] = skill
	set_task(0.5, "DestructDamage", 0, parm, 2)
 }
 public DestructDamage(parm[])
 {
	new id = parm[0], skill = parm[1], Float:f_explode[3];
	IVecFVec(origin[id], f_explode);

	new level = SkillLevel(id, skill)
	new maxdamage = EXPLOSION_DAMAGE+level;
	new damradius = EXPLOSION_RADIUS+level;

	skillAoEdamage(id, f_explode, damradius, maxdamage, skill);
 }
 public Barrage(id, skill, prop)
 {
	new eggs;
	eggs = random_num( BARRAGE_MIN, BARRAGE_MAX );
	new parm[3];
	parm[0] = id;
	parm[1] = eggs;
	parm[2] = 0;
	set_task(0.1,"delayed_grenade",0,parm,3);
 }
 public Horn_Attack(id, skill, prop)
 {
	new Float: origin[3], Float: aim[3], Float: velocity[3], Ent

	pev(id, pev_origin, origin)
	pev(id, pev_v_angle, aim)

	//move it a little in front of them
	velocity_by_aim(id, 20, velocity)
	origin[0] += velocity[0];
	origin[1] += velocity[1];
	origin[2] += velocity[2];

	Ent = fm_create_entity("info_target")

	if (!Ent) return SKILL_READY;

	set_pev(Ent, pev_classname, "poke_attack")
	set_pev(Ent, pev_iuser1, HORN_ATTACK_DAMAGE)
	set_pev(Ent, pev_iuser2, skill)
	fm_entity_set_model(Ent, MODELS[MDL_ROCKET])

	new Float:MinBox[3] = {-3.0, -3.0, -3.0}
	new Float:MaxBox[3] = {3.0, 3.0, 3.0}
	set_pev(Ent, pev_mins, MinBox)
	set_pev(Ent, pev_maxs, MaxBox)

	fm_entity_set_origin(Ent, origin)

	set_pev(Ent, pev_angles, aim)

	set_pev(Ent, pev_solid, SOLID_TRIGGER)
	set_pev(Ent, pev_movetype, MOVETYPE_FLY)
	set_pev(Ent, pev_owner, id)

	velocity_by_aim(id, HORN_VEC , velocity)
	set_pev(Ent, pev_velocity, velocity)

	// Trail on enity.
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)		// TE_BEAMFOLLOW
	write_short(Ent)	// entity:attachment to follow
	write_short(SPRITE_INDEX[SPR_STEAM1])	// sprite index
	write_byte(5)	// life in 0.1's
	write_byte(5)		// line width in 0.1's
	write_byte(255)	//r,g,b
	write_byte(255)
	write_byte(255)
	write_byte(255)	// brightness
	message_end()

	poke_sound(id,CHAN_VOICE,SND_TU_FIRE)
	return SKILL_USED;
 }
 public Horn_Drill(id, skill, prop)
 {
	new Float: origin[3], Float: aim[3], Float: velocity[3], Ent

	pev(id, pev_origin, origin)
	pev(id, pev_v_angle, aim)

	//move it a little in front of them
	velocity_by_aim(id, 20, velocity)
	origin[0] += velocity[0];
	origin[1] += velocity[1];
	origin[2] += velocity[2];

	Ent = fm_create_entity("info_target")

	if (!Ent) return SKILL_READY;

	set_pev(Ent, pev_classname, "poke_attack")
	set_pev(Ent, pev_iuser1, HORN_DRILL_DAMAGE)
	set_pev(Ent, pev_iuser2, skill)
	fm_entity_set_model(Ent, MODELS[MDL_ROCKET])

	new Float:MinBox[3] = {-3.0, -3.0, -3.0}
	new Float:MaxBox[3] = {3.0, 3.0, 3.0}
	set_pev(Ent, pev_mins, MinBox)
	set_pev(Ent, pev_maxs, MaxBox)

	fm_entity_set_origin(Ent, origin)

	set_pev(Ent, pev_angles, aim)

	set_pev(Ent, pev_solid, SOLID_TRIGGER)
	set_pev(Ent, pev_movetype, MOVETYPE_FLY)
	set_pev(Ent, pev_owner, id)

	velocity_by_aim(id, HORN_VEC , velocity)
	set_pev(Ent, pev_velocity, velocity)

	// Trail on enity.
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)		// TE_BEAMFOLLOW
	write_short(Ent)	// entity:attachment to follow
	write_short(SPRITE_INDEX[SPR_BIGSPIT])	// sprite index
	write_byte(5)	// life in 0.1's
	write_byte(5)		// line width in 0.1's
	write_byte(255)	//r,g,b
	write_byte(255)
	write_byte(255)
	write_byte(255)	// brightness
	message_end()

	poke_sound(id,CHAN_VOICE,SND_TU_FIRE)
	return SKILL_USED;
 }
 public Leer(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !ValidPlayer(victim) || !Pokemod_Alive(victim) || !get_user_armor(victim) )
		return SKILL_READY;

	set_user_armor(victim, 0);
	return SKILL_USED;
 }
 public Aurora_Beam(id, skill, prop)
 {
	new level = SkillLevel(id, skill)
	new Float:f_origin[3], Float:f_aimvec[3];

	get_user_origin(id, origin[id]);
	get_user_origin(id, aim[id], 2);
	IVecFVec(origin[id], f_origin);
	IVecFVec(aim[id], f_aimvec);

	skillLinedamage(id, f_origin, f_aimvec, floatround(level*AURORA_BEAM_RADIUS), floatround(AURORA_BEAM_DAMAGE*level), skill);
	MakeLine(0,origin[id],aim[id],SPRITE_INDEX[SPR_BIGSPIT],1,1,1,level,0,255,255,255,255,0);

	new sprites = get_distance(origin[id], aim[id])/75
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)	//message begin
	write_byte(15)
	write_coord(origin[id][0])		// start position
	write_coord(origin[id][1])
	write_coord(origin[id][2])
	write_coord(aim[id][0])	// end position
	write_coord(aim[id][1])
	write_coord(aim[id][2])
	write_short(SPRITE_INDEX[SPR_MUZZLEFLASH1])		// sprite index
	write_byte(sprites)		// count
	write_byte(1)		// life in 0.1's
	write_byte(level/15)		// scale in 0.1's
	write_byte(5)		// velocity along vector in 10's
	write_byte(5)	// randomness of velocity in 10's
	message_end()

	poke_sound(id,CHAN_VOICE, SND_CAST);

	return SKILL_USED;
 }
 public Sonic_Boom(id, skill, props)
 {
	poke_sound(id, CHAN_VOICE, SND_BIGGUN)

	new level = SONIC_BOOM_DAMAGE*SkillLevel(id, skill)
	new radius = SONIC_BOOM_RADIUS + level

	new Float:attack_origin[3];
	pev(id, pev_origin, attack_origin);
	skillAoEdamage(id, attack_origin, radius, level, skill, AOE_IGNORE);

	FVecIVec( attack_origin, origin[id] );

	// blast circles
	message_begin( MSG_PAS, SVC_TEMPENTITY, origin[id] )
	write_byte(TE_BEAMCYLINDER)
	write_coord( origin[id][0])
	write_coord( origin[id][1])
	write_coord( origin[id][2] - 16)
	write_coord( origin[id][0])
	write_coord( origin[id][1])
	write_coord( origin[id][2] - 16 + radius)
	write_short( SPRITE_INDEX[SPR_SHOCKWAVE] )
	write_byte( 0 )		// startframe
	write_byte( 0 )		// framerate
	write_byte( 10 )		// life
	write_byte( 16 )	// width
	write_byte( 0 )		// noise
	write_byte( 188 )
	write_byte( 220 )
	write_byte( 255 )
	write_byte( 255 )	//brightness
	write_byte( 0 )		// speed
	message_end()

	// blast circles
	message_begin( MSG_PAS, SVC_TEMPENTITY, origin[id] )
	write_byte(TE_BEAMCYLINDER)
	write_coord( origin[id][0])
	write_coord( origin[id][1])
	write_coord( origin[id][2] - 16)
	write_coord( origin[id][0])
	write_coord( origin[id][1])
	write_coord( origin[id][2] - 16 + radius/2)
	write_short( SPRITE_INDEX[SPR_LGTNING] )
	write_byte( 0 )		// startframe
	write_byte( 0 )		// framerate
	write_byte( 10 )		// life
	write_byte( 16 )	// width
	write_byte( 0 )		// noise
	write_byte( 188 )
	write_byte( 220 )
	write_byte( 255 )
	write_byte( 255 )	//brightness
	write_byte( 0 )		// speed
	message_end()

	return SKILL_USED;
 }
 public Stomp(id, skill, props)
 {
	poke_sound(id, CHAN_VOICE, SND_BIGGUN);

	new level = SkillLevel(id, skill)
	new radius = STOMP_RADIUS + level;

	new Float:attack_origin[3];
	pev(id, pev_origin, attack_origin);
	skillAoEdamage(id, attack_origin, radius, max(10,level), skill, AOE_IGNORE|AOE_MAXDAM, _, STATUS_PARALYZE, -1);

	FVecIVec( attack_origin, origin[id] );

	for( new i=1; i<4; i++ ){
		// blast circles
		message_begin( MSG_PAS, SVC_TEMPENTITY, origin[id] )
		write_byte(TE_BEAMCYLINDER)
		write_coord( origin[id][0])
		write_coord( origin[id][1])
		write_coord( origin[id][2] - 16)
		write_coord( origin[id][0])
		write_coord( origin[id][1])
		write_coord( origin[id][2] - 16 + radius/i)
		write_short( SPRITE_INDEX[SPR_SHOCKWAVE] )
		write_byte( 0 )		// startframe
		write_byte( 0 )		// framerate
		write_byte( 10 )		// life
		write_byte( 16 )	// width
		write_byte( 0 )		// noise
		write_byte( 188 )
		write_byte( 220 )
		write_byte( 255 )
		write_byte( 255 )	//brightness
		write_byte( 0 )		// speed
		message_end()
	}

	return SKILL_USED;
 }
 public Transform(id, skill, prop)
 {
	new Ent = 0;
	if( prop & SI_RESET || prop & SI_SKILLCALL ){

		while( (Ent = fm_find_ent_by_owner(Ent, "transform_ent", id) ) )
			fm_remove_entity(Ent);

		fm_set_rendering(id);

		if( prop & SI_SKILLCALL ){
			poke_print(id, print_center, "Transformed back to normal.");
			return SKILL_USED;
		}

		return SKILL_READY;
	}

	new bool:found_ent = false;
	while( (Ent = fm_find_ent_by_owner(Ent, "transform_ent", id) ) ){
		found_ent = true;
		break;
	}

	new model[32], Float:origin[3];
	new aiment, body;
	get_user_aiming(id, aiment, body);
	pev(aiment, pev_origin, origin);

	if(	!pev_valid(aiment)
	||	(origin[0] == 0.0 && origin[1] == 0.0 && origin[2] == 0.0)
	){
		aiment = -1;
		new Float:f_aimvec[3], counter;

		get_user_origin(id, aim[id], 2);
		IVecFVec(aim[id], f_aimvec);

		while( (aiment = fm_find_ent_in_sphere(aiment,f_aimvec,50.0)) && counter++ < 50 ){
			if( aiment == id )
				continue;
			pev(aiment, pev_origin, origin);
			pev(aiment, pev_model, model, 31);
			if(origin[0] != 0.0 && origin[1] != 0.0 && origin[2] != 0.0 && !equal(model,EMPTY) )
				break;
		}
	}

	if( pev_valid(aiment) && aiment != id ){
		pev(aiment, pev_origin, origin);
		if( origin[0] != 0.0 && origin[1] != 0.0 && origin[2] != 0.0 ){

			if( !found_ent ){
				Ent = fm_create_entity("info_target")
				if( !Ent ) return SKILL_READY;

				set_pev(Ent, pev_classname, "transform_ent");
				set_pev(Ent, pev_owner, id);

				set_pev(Ent, pev_movetype, MOVETYPE_FOLLOW);
				set_pev(Ent, pev_aiment, id);
			}

			if( Pokemod_Alive(aiment) )
				fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0);
			else
				fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, TRANSFORM_ALPHA);

			new char_helper;
			pev(aiment, pev_model, model, 31);
			fm_entity_set_model(Ent, model);

			while( (char_helper=containi(model,"/")) > -1 )
				copy(model, 31, model[char_helper+1]);
			if( (char_helper=containi(model,"w_")) == 0 )
				replace(model, 31, "w_", "");
			if( (char_helper=containi(model,".")) > -1 )
				model[char_helper] = '\0';

			poke_print(id, print_center, "Transformed into %s.",model);

			g_StopSkill[id] = true;
			DelayedCallSkill( f_SkillClamp(id,skill,10.0,40.0), id, skill, SI_SKILLCALL );
			set_bind(id, WAIT_TIME);
			return SKILL_READY;
		}
		else poke_print(id, print_center, "This is not a valid object to transform into.");
	}
	else poke_print(id, print_center, "You must aim at an object to transform into it.");

	return SKILL_READY;
 }
 public Sing(id, skill, prop)
 {
	new players[MAX_PLAYERS], pnum, aid;
	poke_get_players(players, pnum, PLAYER_ALIVE);

	new radius = SING_RADIUS + SkillLevel(id, skill)
	new affected;

	for ( new i = 0; i < pnum; i++ )
	{
		aid = players[i];
		poke_sound(aid, CHAN_VOICE, SND_SING);

		if( !Pokemod_FF(id, aid) && fm_entity_range(id,aid) < radius ) {
			poke_print(aid, print_center, "You fell asleep to someone's singing.");
			ApplyStatus( id, aid, STATUS_ASLEEP, SING_SLEEP );
			affected++;
		}
	}
	ActionPrint(id, print_center, affected, "sang to");
	return SKILL_USED;
 }
 public Screech(id, skill, prop)
 {
	new players[MAX_PLAYERS], pnum, aid;
	poke_get_players(players, pnum, PLAYER_ALIVE);

	new level = SkillLevel(id, skill)
	new radius = SCREECH_RADIUS + level;
	new Float:delay = 0.5 + level/TotalLevels;

	poke_sound(id, CHAN_VOICE, SND_SUCK);
	for ( new i = 0; i < pnum; i++ )
	{
		aid = players[i];
		if( Pokemod_FF(id, aid) ) continue;

		if( fm_entity_range(id,aid) < radius ) {
			poke_print(aid, print_center, "Someone screeched at you.");
			bind_used(aid, _, delay);
			poke_sound(aid, CHAN_VOICE, SND_SUCK);
			set_pev(aid, pev_velocity, Float:{0.0,0.0,0.0});
		}
	}

	return SKILL_USED;
 }
 public Bind(id, skill, prop)
 {
	new aid = PokeSkillTarget(id);

	if( ValidPlayer(aid) && Pokemod_Alive(aid) && !Pokemod_FF(id, aid) ){
		sound_cast(id)

		ApplyStatus( id, aid, STATUS_PARALYZE, 5.0 )
		set_pev(aid, pev_velocity, Float:{0.0,0.0,0.0});

		// 1--------2			-++ +++
		// |        | 
		// |        |  
		// |  3--------4		--+ +-+
		// |  |     |  |
		// 5--|-----6  |		-+- ++-
		//    |        |
		//    |        |
		//    7--------8		--- +--
		// point1 = 1,4,6,7

		new Float:maxs[3];
		pev(aid, pev_maxs, maxs);
		new origin[3], point1[3], point2[3][3], i;
		get_user_origin(aid, origin);

		point1[0] = origin[0]-floatround(maxs[0])
		point1[1] = origin[1]+floatround(maxs[1])
		point1[2] = origin[2]+floatround(maxs[2])
		point2[0][0] = origin[0]+floatround(maxs[0])
		point2[0][1] = origin[1]+floatround(maxs[1])
		point2[0][2] = origin[2]+floatround(maxs[2])
		point2[1][0] = origin[0]-floatround(maxs[0])
		point2[1][1] = origin[1]-floatround(maxs[1])
		point2[1][2] = origin[2]+floatround(maxs[2])
		point2[2][0] = origin[0]-floatround(maxs[0])
		point2[2][1] = origin[1]+floatround(maxs[1])
		point2[2][2] = origin[2]-floatround(maxs[2])
		for( i=0; i<3; i++ )
			MakeLine(0,point1,point2[i],SPRITE_INDEX[SPR_BIGSPIT],10,10,50,50,0,255,255,255,255,0)
		point1[0] = origin[0]+floatround(maxs[0])
		point1[1] = origin[1]-floatround(maxs[1])
		point1[2] = origin[2]+floatround(maxs[2])
		point2[0][0] = origin[0]+floatround(maxs[0])
		point2[0][1] = origin[1]+floatround(maxs[1])
		point2[0][2] = origin[2]+floatround(maxs[2])
		point2[1][0] = origin[0]-floatround(maxs[0])
		point2[1][1] = origin[1]-floatround(maxs[1])
		point2[1][2] = origin[2]+floatround(maxs[2])
		point2[2][0] = origin[0]+floatround(maxs[0])
		point2[2][1] = origin[1]-floatround(maxs[1])
		point2[2][2] = origin[2]-floatround(maxs[2])
		for( i=0; i<3; i++ )
			MakeLine(0,point1,point2[i],SPRITE_INDEX[SPR_BIGSPIT],10,10,50,50,0,255,255,255,255,0)
		point1[0] = origin[0]+floatround(maxs[0])
		point1[1] = origin[1]+floatround(maxs[1])
		point1[2] = origin[2]-floatround(maxs[2])
		point2[0][0] = origin[0]+floatround(maxs[0])
		point2[0][1] = origin[1]+floatround(maxs[1])
		point2[0][2] = origin[2]+floatround(maxs[2])
		point2[1][0] = origin[0]-floatround(maxs[0])
		point2[1][1] = origin[1]+floatround(maxs[1])
		point2[1][2] = origin[2]-floatround(maxs[2])
		point2[2][0] = origin[0]+floatround(maxs[0])
		point2[2][1] = origin[1]-floatround(maxs[1])
		point2[2][2] = origin[2]-floatround(maxs[2])
		for( i=0; i<3; i++ )
			MakeLine(0,point1,point2[i],SPRITE_INDEX[SPR_BIGSPIT],10,10,50,50,0,255,255,255,255,0)
		point1[0] = origin[0]-floatround(maxs[0])
		point1[1] = origin[1]-floatround(maxs[1])
		point1[2] = origin[2]-floatround(maxs[2])
		point2[0][0] = origin[0]-floatround(maxs[0])
		point2[0][1] = origin[1]-floatround(maxs[1])
		point2[0][2] = origin[2]+floatround(maxs[2])
		point2[1][0] = origin[0]-floatround(maxs[0])
		point2[1][1] = origin[1]+floatround(maxs[1])
		point2[1][2] = origin[2]-floatround(maxs[2])
		point2[2][0] = origin[0]+floatround(maxs[0])
		point2[2][1] = origin[1]-floatround(maxs[1])
		point2[2][2] = origin[2]-floatround(maxs[2])
		for( i=0; i<3; i++ )
			MakeLine(0,point1,point2[i],SPRITE_INDEX[SPR_BIGSPIT],10,10,50,50,0,255,255,255,255,0)

		poke_print(id, print_center, "You bound someone")
		poke_print(aid, print_center, "You have been bound")
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 
 public Punch(id, skill, prop)
 {
	if( prop & SI_BIND ){
		new Float:velocity[3], Float:play_velocity[3], punch = 200+SkillLevel(id, skill)/2;

		pev(id, pev_velocity, play_velocity);
		velocity_by_aim(id, punch, velocity);
		if( entity_on_ground(id) )
			velocity[2] = floatclamp(velocity[2], 10.0, 50.0);
		else
			velocity[2] = floatmin(play_velocity[2]+velocity[2], 0.0);

		set_pev(id, pev_velocity, velocity);
		poke_sound(id,CHAN_VOICE, SND_STEP);
		return SKILL_READY;
	}
	else{
		new victim = PokeSkillTarget(id);
		if( ValidPlayer(victim) && Pokemod_Alive(victim) ){
			skilldamage( victim, id, SkillClamp(id, skill, 5, 50), skill);
			return SKILL_USED;
		}
	}
	return SKILL_READY;
 }
 public Comet_Punch(id, skill, prop)
 {
	if( prop & SI_BIND ){
		new Float:velocity[3], Float:play_velocity[3], punch = 300+SkillLevel(id, skill)/2;

		pev(id, pev_velocity, play_velocity);
		velocity_by_aim(id, punch, velocity);
		if( entity_on_ground(id) )
			velocity[2] = floatclamp(velocity[2], 10.0, 50.0);
		else
			velocity[2] = floatmin(play_velocity[2]+velocity[2], 0.0);

		set_pev(id, pev_velocity, velocity);
		poke_sound(id,CHAN_VOICE, SND_STEP);
		return SKILL_READY;
	}
	else{
		new victim = PokeSkillTarget(id);
		if( ValidPlayer(victim) && Pokemod_Alive(victim) ){
			skilldamage( victim, id, SkillClamp(id, skill, 5, 20), skill);
			return SKILL_USED;
		}
	}
	return SKILL_READY;
 }
 public Dizzy_Punch(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) ){
		skilldamage(victim, id, DIZZY_PUNCH, skill);
		if( ValidPlayer(victim) )
			screenshake(victim, DIZZY_PUNCH_DIZZY, 5.0, DIZZY_PUNCH_DIZZY);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Mega_Punch(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !Pokemod_Alive(victim) || !fm_is_ent_visible(id, victim) )
		return SKILL_READY;

	if( ValidPlayer(victim) ){
		new Float:velocity[3];
		velocity_by_aim(id, MEGA_PUNCH, velocity);
		velocity[2] = floatclamp(velocity[2], 10.0, 50.0);

		set_pev(victim, pev_velocity, velocity);
	}
	skilldamage(victim, id, MEGA_PUNCH_DAMAGE, skill);
	return SKILL_USED;
 }
 public Mega_Kick(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( !Pokemod_Alive(victim) || !fm_is_ent_visible(id, victim) )
		return SKILL_READY;

	if( ValidPlayer(victim) ){
		new Float:velocity[3];
		velocity_by_aim(id, MEGA_KICK, velocity);
		velocity[2] = floatmax(velocity[2], float(MEGA_KICK_UP));

		set_pev(victim, pev_velocity, velocity);
	}
	skilldamage(victim, id, MEGA_KICK_DAMAGE, skill);
	return SKILL_USED;
 }
 public Metronome(id, skill, prop)
 {
	static metro_skill[MAX_PLAYERS];
	if( prop & SI_ROUNDRESET || prop & SI_RESET ){
		if( !g_Charge[id] ){
			do metro_skill[id] = random_num(1,SkillsCreated);
			while( !ValidSkill(metro_skill[id]) || !(SkillInfo[metro_skill[id]] & SI_BIND) );

			poke_print(id, print_center, "Metronome: %s", SkillToName(metro_skill[id]) );
		}
	}

	if( !ValidSkill(metro_skill[id]) || !(SkillInfo[metro_skill[id]] & prop) )
		return SKILL_READY;

	new temp_return;
	ExecuteForward( ValidSkillForward(skill), temp_return, id, metro_skill[id], prop );

	if( temp_return == SKILL_USED ){
		new charges = str_to_num(FileSkillInfo(skill, "Charges"));
		if( end_rep_use(id, skill, charges ) )
			bind_used(id, metro_skill[id], _, f_SkillClamp(id, skill, 1.0, 0.5) );
	}

	return SKILL_READY;
 }

 public Focus_Energy(id, skill, prop)
 {
	static energy_charge[MAX_PLAYERS];
	if( prop & SI_ROUNDRESET )
		energy_charge[id] = 0;
	else if( prop & SI_BIND ){
		screenflash(id, 255, 255, 255, 50);
		if( energy_charge[id] < 100 ){
			if( energy_charge[id] < 0 )
				energy_charge[id] = 1;
			else
				energy_charge[id]++;
			poke_print(id, print_center, "Energy Focused %d", (20*energy_charge[id])/(100) );
		}
		else
			poke_print(id, print_center, "Energy Focused MAX");
	}
	else{

		new aid = PokeSkillTarget(id);

		if( ValidPlayer(aid) && Pokemod_Alive(aid) && !Pokemod_FF(id, aid) && energy_charge[id] ){
			new release_amount = skilldamage(aid, id, (20*energy_charge[id])/(100), skill);
			energy_charge[id] = 0;

			sound_cast(id);
			poke_print(id, print_center, "Your Focused Energy did %d damage", release_amount);
			return SKILL_USED;
		}
	}
	return SKILL_READY;
 }
 public Head_Butt(id, skill, prop)
 {
	new weapon, victim = PokeSkillTarget(id, _, weapon);
	if( Pokemod_Alive(victim) && knife_weapon( weapon ) && ValidPlayer(victim) ){
		Flinch(victim);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Lovely_Kiss(id, skill, prop)
 {
	new victim = PokeSkillTarget(id);
	if( Pokemod_Alive(victim) && ValidPlayer(victim) ){
		screenflash(victim, random_num(200,250), random_num(0,100), random_num(0,100), 200, 0.5);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 
 public Minimize(id, skill, prop)
 {
	new damage, victim = PokeSkillTarget(id, damage);
	new heal;
	if( prop & SI_ATTACK && Pokemod_Alive(victim) ){
		heal = SkillClamp(id, skill, damage/2, damage);
		Pokemod_Heal(victim, heal );
		poke_print(id, print_center, "Minimized Attack by %d", heal);
	}
	else if( prop & SI_DAMAGED ){
		heal = damage/2;
		Pokemod_Heal(id, heal );
		poke_print(id, print_center, "Minimized Damage by %d", heal);
		return SKILL_USED;
	}
	return SKILL_READY;
 }

 public Mirror_Move(id, skill, prop)
 {
	new damage, victim = PokeSkillTarget(id, damage);
	if( prop & SI_ATTACK || prop & SI_PATTACK ){
		skilldamage(victim, id, SkillClamp(id, skill, damage/2, damage), skill);
		poke_print(id, print_center, "Mirrored %d Damage", damage);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 
 public Sharpen(id, skill, prop)
 {
	static sharp_charge[MAX_PLAYERS];
	if( prop & SI_ROUNDRESET )
		sharp_charge[id] = 0;
	else if( prop & SI_BIND ){
		if( sharp_charge[id] < 20 ){
			if( sharp_charge[id] < 0 )
				sharp_charge[id] = 1;
			else
				sharp_charge[id]++;
			screenflash(id, 255, 255, 255, 50);
			poke_print(id, print_center, "Sharpening..." );
			return SKILL_USED;
		}
		else
			poke_print(id, print_center, "Fully Sharpened");
	}
	else{
		new aid = PokeSkillTarget(id);
		if( ValidPlayer(aid) && Pokemod_Alive(aid) && !Pokemod_FF(id, aid) && sharp_charge[id] ){
			new release_amount = skilldamage(aid, id, sharp_charge[id], skill);
			sound_cast(id);
			poke_print(id, print_center, "Your Blade did %d damage", release_amount);
			sharp_charge[id] /= 2;
		}
	}
	return SKILL_READY;
 }
 public Soft_Boiled(id, skill, prop)
 {
	new ap = get_user_armor(id);
	new hp = Health(id);

	if( ap < hp ){
		Pokemod_Repair(id, (hp-ap)/10 );
		sound_cast(id);
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Struggle(id, skill, prop)
 {
	if( entity_on_ground(id) ){
		new Float:velo[3];
		pev(id, pev_velocity, velo);
		velo[0] = velo[1] = 0.0;
		velo[2] = 20.0;
		set_pev(id, pev_velocity, velo );
		return SKILL_USED;
	}
	return SKILL_READY;
 }
 public Swords_Dance(id, skill, prop)
 {
	new players[MAX_PLAYERS], pnum, aid;
	poke_get_players(players, pnum, PLAYER_ALIVE|PLAYER_MORTAL|PLAYER_NOTEAM, Pokemod_Team(id));

	if( !pnum )
		return SKILL_READY;

	new swords = SkillClamp(id, skill, 5, 20)
	new play_swords[MAX_PLAYERS], total_damage;

	while( swords > 0 ){
		aid = random_num(0, pnum);
		swords--;
		play_swords[aid]++;
	}

	new location[2][3], randomness;
	new level = SkillLevel(id, skill);
	for( new i=0; i<pnum; i++ ){
		aid = players[i];

		if( !play_swords[i] )
			continue;

		total_damage += skilldamage(aid, id, play_swords[i]*random_num(1,5), skill);

		get_user_origin(aid, origin[aid]);

		for( swords=0; swords<play_swords[i]; swords++ ){
			randomness = random_num(0, 50);

			location[0][0] = origin[aid][0] + randomness
			location[0][1] = origin[aid][1] + (50-randomness)
			location[0][2] = origin[aid][2]
			location[1][0] = origin[aid][0] - randomness
			location[1][1] = origin[aid][1] - (50-randomness)
			location[1][2] = origin[aid][2]

			MakeLine(0,location[0],location[1],SPRITE_INDEX[SPR_ZBEAM6],1,1,1,50+level,0,255,255,255,255,0)
		}
	}

	if( total_damage ){
		sound_cast(id);
		poke_print(id, print_center, "Swords Dance dealt %d Damage", total_damage );
		return SKILL_USED;
	}
	return SKILL_READY;
 }