Raised This Month: $32 Target: $400
 8% 

FF2 [Boss]General Serpentine


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 03-04-2015 , 10:39   [Boss]General Serpentine
Reply With Quote #1

This boss requires at least FF2 1.10.8 and SM 1.7.

Thx to friagram for making model(even though I did pay for it).

This boss is a viper with robotic arms. He can dash, rain grenades on you poor reds while invunerable, fire 3 rockets every 10 seconds. Even terrifying, he has 6 lives and every life he looses the more angry he gets to the point where it can get to RAGE HELL!.

Download here.
Download subplugin here.
Serpentine's voice and bgm copyright to GalaxyTrail, so is Serpentine himself.
Friagram's screenshot of him(from hlmv I believe):

Demostration video(video making credit to: http://steamcommunity.com/id/kaptainprodex)

For those of you who want to use the subplugin for other bosses, here's the abilities you can use(replace "X" with a number):
PHP Code:
    "abilityX"
    
{
        
"name"    "faster_raging"
        "arg1" "0.15" 
//What percentage should boss's rage damage be lowered by each life?
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name"    "ability_dash"
        "arg0"    "-20" 
//Note, set arg0 to any number BELOW -1 as FF2 seems to complain when it's over the programmed numbers > 0.
        
"arg1" "2000.0" //Velocity hale should get to for dash.
        
"arg2" "0.5" //How long should pistol stay in boss's hand. Note: If your boss needs a dash anime, MAKE IT PLAY WHEN HOLDING A SECONDARY.
        
"arg3" "2.0" //Cooldown of dash.
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name" "ability_blaster"
        "arg0" "-21"
        "arg1" "8.0" 
//Reload cooldown.
        
"arg2" "3" //Number of bullets blaster should have(max).
        
"arg3" "3000.0" //Blaster bullet speed.
        
"arg4" "15.0" //Blaster dmg(ATM, seems to only randomize dmg).
        
"arg5" "3.0" //Blaster shot cooldown.
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name" "rage_bulletrain"
        "arg1" "0.1" 
//Time between bullet shots.
        
"arg2" "20" //Number of bullets.
        
"arg3" "6000.0" //Z velocity
        
"arg4" "15.0" //Blaster dmg(ATM, seems to only randomize dmg).
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name" "life_sounds"
        "arg1" "1.0" 
//Sound between ff2 playing sound_nextlife and sound set in ability's args.
        //All args from 2 and up are OPTIONAL. To use them properly, take # of lives boss should get to before activating a sound + 1, in english: arg2 value(if set) plays a sound at 1 life left.
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name" "charge_truepower"
        
//Arg1 is charge time.
        //Arg2 is cooldown.
        
"arg3" "50" //Number of lazers.
        
"arg4" "20" //How many iterations before lazers can deal damage.
        
"arg5" "5.0" //Time between each iteration while lazers charge.
        
"plugin_name" "freedom_abilities"
    
}
    
"abilityX"
    
{
        
"name" "ability_dash_ghost" //THIS ABILITY DEPENDS ON ability_dash as it will NEVER BE ACTIVATED WITHOUT THE DASH!
        
"arg1" "0.2" //Time between each ghost creation.
        
"arg2" "" //MANDATORY ARG! Must be a valid model path that ghost is to be set as.
        
"arg3" "10" //Number of after images.
        
"arg4" "2.0" //How long should ghost stay in world.
        
"plugin_name" "freedom_abilities"
    

Note: Subplugin has 2 ability names reserved but do nothing at the moment.
__________________

Last edited by WildCard65; 05-05-2016 at 19:40.
WildCard65 is offline
sarysa
Senior Member
Join Date: Mar 2014
Old 03-04-2015 , 23:19   Re: [Boss]General Serpentine
Reply With Quote #2

I noticed the comment for your grenade damage. That would be because FF2 triples any base damage <= 160.0.

This stock will prove useful:
Code:
stock Float:fixDamageForFF2(Float:damage)
{
	if (damage <= 160.0)
		return damage / 3.0;
	return damage;
}
It's useful for damage that doesn't come from direct SDKHooks_TakeDamage() calls. Use it when you're setting the damage for your grenades.
__________________
sarysa is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 03-05-2015 , 06:49   Re: [Boss]General Serpentine
Reply With Quote #3

Quote:
Originally Posted by sarysa View Post
I noticed the comment for your grenade damage. That would be because FF2 triples any base damage <= 160.0.

This stock will prove useful:
Code:
stock Float:fixDamageForFF2(Float:damage)
{
	if (damage <= 160.0)
		return damage / 3.0;
	return damage;
}
It's useful for damage that doesn't come from direct SDKHooks_TakeDamage() calls. Use it when you're setting the damage for your grenades.
I set the damage through netprops and I remember trying 0.25 and still no success. Might be because I set m_hThrower to be boss's melee
__________________

Last edited by WildCard65; 03-05-2015 at 06:50.
WildCard65 is offline
friagram
Veteran Member
Join Date: Sep 2012
Location: Silicon Valley
Old 03-05-2015 , 08:10   Re: [Boss]General Serpentine
Reply With Quote #4

Why sm 1.7
__________________
Profile - Plugins
Add me on steam if you are seeking sp/map/model commissions.
friagram is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 03-05-2015 , 08:41   Re: [Boss]General Serpentine
Reply With Quote #5

Cause it's released and the FF2 version it requires doesn't crash servers running 1.7
__________________
WildCard65 is offline
Chdata
Veteran Member
Join Date: Aug 2012
Location: Computer Chair, Illinois
Old 03-05-2015 , 08:56   Re: [Boss]General Serpentine
Reply With Quote #6

Because they're never going back [not even the few things they made more tedious] so may as well get used to it.
__________________

Last edited by Chdata; 03-05-2015 at 08:56.
Chdata is offline
sarysa
Senior Member
Join Date: Mar 2014
Old 03-05-2015 , 20:58   Re: [Boss]General Serpentine
Reply With Quote #7

Quote:
Originally Posted by WildCard65 View Post
I set the damage through netprops and I remember trying 0.25 and still no success. Might be because I set m_hThrower to be boss's melee
When I made my projectile turret nearly a year ago I never set m_hThrower. Here's a cut version of that spawning code which only supports grenades:

Code:
#define TURRET_TYPE_PIPE 0
#define TURRET_TYPE_LOOSE_CANNON 1
public FireTurretProjectile(turretEntity, Float:spawnPos[3], Float:angles[3], type, bossClientIdx, Float:baseDamage, Float:speed, reskinModelIdx)
{
	new Float:damage = fixDamageForFF2(baseDamage);
	new String:entname[MAX_ENTITY_CLASSNAME_LENGTH] = "tf_projectile_pipe";

	new projectileEntity = CreateEntityByName(entname);
	if (!IsValidEntity(projectileEntity))
	{
		PrintToServer("[projectile_turret] Error: Invalid entity %s. Won't spawn projectile.", entname);
		return -1;
	}
	
	static Float:velocity[3];
	GetAngleVectors(angles, velocity, NULL_VECTOR, NULL_VECTOR);
	ScaleVector(velocity, speed);
	
	// I tend to give a Z boost to grenades since they arc. you may decide otherwise.
	velocity[2] += 75.0;
	
	if (type == TURRET_TYPE_LOOSE_CANNON)
		SetEntProp(projectileEntity, Prop_Send, "m_iType", 3); // type 0 is grenade, type 3 is loose cannon. 1 is probably sticky and 2 is probably scottish resistance.
	
	SetEntProp(projectileEntity, Prop_Send, "m_bCritical", false); // I have no idea if this overrides random crits. I hope it does. (later note: it appears to)

	// only grenade has a simple convenient netprop to set
	SetEntPropFloat(projectileEntity, Prop_Send, "m_flDamage", damage);
	SetEntProp(projectileEntity, Prop_Send, "m_nSkin", 1); // set skin to blue team's
	SetEntPropEnt(projectileEntity, Prop_Send, "m_hOwnerEntity", bossClientIdx);
	
	SetVariantInt(BossTeam);
	AcceptEntityInput(projectileEntity, "TeamNum", -1, -1, 0);

	SetVariantInt(BossTeam);
	AcceptEntityInput(projectileEntity, "SetTeam", -1, -1, 0); 
	
	DispatchSpawn(projectileEntity);
	
	// must reskin after spawn
	if (reskinModelIdx != -1)
		SetEntProp(projectileEntity, Prop_Send, "m_nModelIndex", reskinModelIdx);
	
	// grenade must be moved after it spawns
	TeleportEntity(projectileEntity, spawnPos, angles, velocity);
	
	return projectileEntity;
}
__________________
sarysa is offline
WildCard65
Veteran Member
Join Date: Aug 2013
Location: Canada
Old 03-05-2015 , 21:09   Re: [Boss]General Serpentine
Reply With Quote #8

Quote:
Originally Posted by sarysa View Post
When I made my projectile turret nearly a year ago I never set m_hThrower. Here's a cut version of that spawning code which only supports grenades:

Code:
#define TURRET_TYPE_PIPE 0
#define TURRET_TYPE_LOOSE_CANNON 1
public FireTurretProjectile(turretEntity, Float:spawnPos[3], Float:angles[3], type, bossClientIdx, Float:baseDamage, Float:speed, reskinModelIdx)
{
	new Float:damage = fixDamageForFF2(baseDamage);
	new String:entname[MAX_ENTITY_CLASSNAME_LENGTH] = "tf_projectile_pipe";

	new projectileEntity = CreateEntityByName(entname);
	if (!IsValidEntity(projectileEntity))
	{
		PrintToServer("[projectile_turret] Error: Invalid entity %s. Won't spawn projectile.", entname);
		return -1;
	}
	
	static Float:velocity[3];
	GetAngleVectors(angles, velocity, NULL_VECTOR, NULL_VECTOR);
	ScaleVector(velocity, speed);
	
	// I tend to give a Z boost to grenades since they arc. you may decide otherwise.
	velocity[2] += 75.0;
	
	if (type == TURRET_TYPE_LOOSE_CANNON)
		SetEntProp(projectileEntity, Prop_Send, "m_iType", 3); // type 0 is grenade, type 3 is loose cannon. 1 is probably sticky and 2 is probably scottish resistance.
	
	SetEntProp(projectileEntity, Prop_Send, "m_bCritical", false); // I have no idea if this overrides random crits. I hope it does. (later note: it appears to)

	// only grenade has a simple convenient netprop to set
	SetEntPropFloat(projectileEntity, Prop_Send, "m_flDamage", damage);
	SetEntProp(projectileEntity, Prop_Send, "m_nSkin", 1); // set skin to blue team's
	SetEntPropEnt(projectileEntity, Prop_Send, "m_hOwnerEntity", bossClientIdx);
	
	SetVariantInt(BossTeam);
	AcceptEntityInput(projectileEntity, "TeamNum", -1, -1, 0);

	SetVariantInt(BossTeam);
	AcceptEntityInput(projectileEntity, "SetTeam", -1, -1, 0); 
	
	DispatchSpawn(projectileEntity);
	
	// must reskin after spawn
	if (reskinModelIdx != -1)
		SetEntProp(projectileEntity, Prop_Send, "m_nModelIndex", reskinModelIdx);
	
	// grenade must be moved after it spawns
	TeleportEntity(projectileEntity, spawnPos, angles, velocity);
	
	return projectileEntity;
}
I set it because when I didn't I had issues with grenades not doing ANY damage. I'm planning on changing it to spawn him a temp grenade launcher to set m_hThrower to(with attributes to use with arg5 and arg6)
__________________
WildCard65 is offline
sarysa
Senior Member
Join Date: Mar 2014
Old 03-05-2015 , 21:13   Re: [Boss]General Serpentine
Reply With Quote #9

You don't need one. Hell, here's a blurry demonstration of the WIP version of the turret:
https://www.youtube.com/watch?v=U-WLhYl511Q

My spawning code works, and it's used by an engineer with a wrench. Those are LC projectiles in the demo but pipes also work.
__________________

Last edited by sarysa; 03-05-2015 at 21:14.
sarysa is offline
MaloModo
Veteran Member
Join Date: Aug 2008
Old 03-12-2015 , 12:57   Re: [Boss]General Serpentine
Reply With Quote #10

I may be trolling some....but doesn't this freak as is sound OP? Thx for sharing and all I was just wondering how balanced he is in a game play setting.

Last edited by MaloModo; 03-12-2015 at 12:58.
MaloModo is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:54.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode