11 vector force_xyzscale =
'1 1 1';
12 force_xyzscale.z =
WEP_CVAR_PRI(WEP_BLASTER, force_zscale);
15 bool zero_damageforcescale =
false;
19 zero_damageforcescale =
true;
40 if (zero_damageforcescale)
59 int atk_deathtype = WEP_BLASTER.m_id;
64 entity missile =
new(blasterbolt);
65 missile.owner = missile.realowner = actor;
66 missile.bot_dodge =
true;
67 missile.bot_dodgerating = atk_damage;
71 setsize(missile,
'0 0 0',
'0 0 0');
87 missile.projectiledeathtype = atk_deathtype;
88 missile.weaponentity_fld = weaponentity;
94 if (
time >= missile.nextthink)
118 if(actor.(weaponentity).m_switchweapon == WEP_BLASTER)
135 return WEAPON_BLASTER_SUICIDE;
140 return WEAPON_BLASTER_MURDER;
145 if (!key_pressed || (
time < actor.jump_interval))
172 PAR(_(
"The %s is one of the two main default weapons, firing a relatively weak but high speed laser, dealing some splash damage but importantly a lot of knockback."),
COLORED_NAME(
this));
173 PAR(_(
"It has no secondary fire, instead switching to the previously selected weapon."));
174 PAR(_(
"It doesn't require ammo, meaning it is a great choice if you are running low on ammo and need to preserve some."));
175 PAR(_(
"The %s is always available so ends up being used a lot when players spawn in, but it's difficult to master when used over a medium to long range. "
177 PAR(_(
"One of the most common uses of the %s is \"laser jumping,\" where you can gain height by aiming down, jumping, then firing to boost yourself up. "
178 "Because it does a lot of knockback, another common usage is alternating between a high damage weapon and the %s to throw the enemy's aim off."),
COLORED_NAME(
this),
COLORED_NAME(
this));
bool bot_aim(entity this,.entity weaponentity, float shotspeed, float shotspeedupward, float maxshottime, float applygravity, bool shot_accurate)
IntrusiveList g_bot_dodge
#define MUTATOR_CALLHOOK(id,...)
void W_Blaster_Think(entity this)
void W_Blaster_Attack(entity actor,.entity weaponentity)
void W_Blaster_Touch(entity this, entity toucher)
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define COLORED_NAME(this)
#define PHYS_INPUT_BUTTON_ATCK(s)
float W_WeaponRateFactor(entity this)
void CSQCProjectile(entity e, float clientanimate, int type, float docull)
float RadiusDamageForSource(entity inflictor, vector inflictororigin, vector inflictorvelocity, entity attacker, float coredamage, float edgedamage, float rad, entity cantbe, entity mustbe, float inflictorselfdamage, float forceintensity, vector forcexyzscale, int deathtype,.entity weaponentity, entity directhitentity)
void SUB_Remove(entity this)
Remove entity.
#define pointparticles(effect, org, vel, howmany)
ERASEABLE entity IL_PUSH(IntrusiveList this, entity it)
Push to tail.
void set_movetype(entity this, int mt)
entity Notification
always last
#define METHOD(cname, name, prototype)
const int PROJECTILE_BLASTER
void W_LastWeapon(entity this,.entity weaponentity)
#define PROJECTILE_TOUCH(e, t)
IntrusiveList g_projectiles
#define PROJECTILE_MAKETRIGGER(e)
int autocvar_g_projectiles_interact
#define sound(e, c, s, v, a)
#define PAR(...)
Adds an individually translatable paragraph to PAGE_TEXT without having to deal with strcat and sprin...
void W_SetupProjVelocity_Explicit(entity proj, vector dir, vector upDir, float pSpeed, float pUpSpeed, float pZSpeed, float spread, float forceAbsolute)
#define W_SetupShot_Dir(ent, wepent, s_forward, antilag, recoil, snd, chan, maxdamage, deathtype)
string W_Guide_Keybinds(Weapon wep)
void W_MuzzleFlash(Weapon thiswep, entity actor,.entity weaponentity, vector shotorg, vector shotdir)
string W_Guide_DPS_onlyOne(string name, string fire)
#define WEP_CVAR_PRI(wep, name)
entity weaponentities[MAX_WEAPONSLOTS]
void weapon_thinkf(entity actor,.entity weaponentity, WFRAME fr, float t, void(Weapon thiswep, entity actor,.entity weaponentity, int fire) func)
bool weapon_prepareattack(Weapon thiswep, entity actor,.entity weaponentity, bool secondary, float attacktime)
void w_ready(Weapon thiswep, entity actor,.entity weaponentity, int fire)