X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fweapon%2Fblaster.qc;h=51eeec3b120ee48f7fdd3a9597308709daefbbce;hp=df54c6b921360c7ad2bcd5045c11cd67bbf8004a;hb=cd141fba8a7c59fef4b0e98eee651943b18cd99d;hpb=45419c41b4da92340152d6fffe1fa429769b6d6a diff --git a/qcsrc/common/weapons/weapon/blaster.qc b/qcsrc/common/weapons/weapon/blaster.qc index df54c6b92..51eeec3b1 100644 --- a/qcsrc/common/weapons/weapon/blaster.qc +++ b/qcsrc/common/weapons/weapon/blaster.qc @@ -13,7 +13,7 @@ CLASS(Blaster, Weapon) /* crosshair */ ATTRIB(Blaster, w_crosshair_size, float, 0.5); /* wepimg */ ATTRIB(Blaster, model2, string, "weaponlaser"); /* refname */ ATTRIB(Blaster, netname, string, "blaster"); -/* wepname */ ATTRIB(Blaster, message, string, _("Blaster")); +/* wepname */ ATTRIB(Blaster, m_name, string, _("Blaster")); ENDCLASS(Blaster) REGISTER_WEAPON(BLASTER, NEW(Blaster)); @@ -50,8 +50,8 @@ BLASTER_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) #endif #ifdef IMPLEMENTATION #ifdef SVQC -void spawnfunc_weapon_blaster(void) { weapon_defaultspawnfunc(WEP_BLASTER.m_id); } -void spawnfunc_weapon_laser(void) { spawnfunc_weapon_blaster(); } +spawnfunc(weapon_blaster) { weapon_defaultspawnfunc(this, WEP_BLASTER); } +spawnfunc(weapon_laser) { spawnfunc_weapon_blaster(this); } void W_Blaster_Touch(void) {SELFPARAM(); @@ -84,6 +84,7 @@ void W_Blaster_Think(void) } void W_Blaster_Attack( + entity actor, float atk_deathtype, float atk_shotangle, float atk_damage, @@ -97,12 +98,11 @@ void W_Blaster_Attack( {SELFPARAM(); vector s_forward = v_forward * cos(atk_shotangle * DEG2RAD) + v_up * sin(atk_shotangle * DEG2RAD); - W_SetupShot_Dir(self, s_forward, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, atk_damage); + W_SetupShot_Dir(actor, s_forward, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, atk_damage); Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1); - entity missile = spawn(); - missile.owner = missile.realowner = self; - missile.classname = "blasterbolt"; + entity missile = new(blasterbolt); + missile.owner = missile.realowner = actor; missile.bot_dodge = true; missile.bot_dodgerating = atk_damage; PROJECTILE_MAKETRIGGER(missile); @@ -139,15 +139,15 @@ void W_Blaster_Attack( missile.think = W_Blaster_Think; missile.nextthink = time + atk_delay; - MUTATOR_CALLHOOK(EditProjectile, self, missile); + MUTATOR_CALLHOOK(EditProjectile, actor, missile); - if(time >= missile.nextthink) + if (time >= missile.nextthink) { WITH(entity, self, missile, missile.think()); } } - METHOD(Blaster, wr_aim, bool(entity thiswep)) + METHOD(Blaster, wr_aim, void(entity thiswep)) { if(WEP_CVAR(blaster, secondary)) { @@ -158,17 +158,16 @@ void W_Blaster_Attack( } else { self.BUTTON_ATCK = bot_aim(WEP_CVAR_PRI(blaster, speed), 0, WEP_CVAR_PRI(blaster, lifetime), false); } - - return true; } - METHOD(Blaster, wr_think, bool(entity thiswep, bool fire1, bool fire2)) + METHOD(Blaster, wr_think, void(Blaster thiswep, entity actor, int slot, int fire)) { - if(fire1) + if(fire & 1) { - if(weapon_prepareattack(false, WEP_CVAR_PRI(blaster, refire))) + if(weapon_prepareattack(thiswep, actor, slot, false, WEP_CVAR_PRI(blaster, refire))) { W_Blaster_Attack( + actor, WEP_BLASTER.m_id, WEP_CVAR_PRI(blaster, shotangle), WEP_CVAR_PRI(blaster, damage), @@ -180,25 +179,26 @@ void W_Blaster_Attack( WEP_CVAR_PRI(blaster, delay), WEP_CVAR_PRI(blaster, lifetime) ); - weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(blaster, animtime), w_ready); + weapon_thinkf(actor, slot, WFRAME_FIRE1, WEP_CVAR_PRI(blaster, animtime), w_ready); } } - else if(fire2) + else if(fire & 2) { switch(WEP_CVAR(blaster, secondary)) { case 0: // switch to last used weapon { - if(self.switchweapon == WEP_BLASTER.m_id) // don't do this if already switching + if(actor.switchweapon == WEP_BLASTER.m_id) // don't do this if already switching W_LastWeapon(); break; } case 1: // normal projectile secondary { - if(weapon_prepareattack(true, WEP_CVAR_SEC(blaster, refire))) + if(weapon_prepareattack(thiswep, actor, slot, true, WEP_CVAR_SEC(blaster, refire))) { W_Blaster_Attack( + actor, WEP_BLASTER.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(blaster, shotangle), WEP_CVAR_SEC(blaster, damage), @@ -210,26 +210,23 @@ void W_Blaster_Attack( WEP_CVAR_SEC(blaster, delay), WEP_CVAR_SEC(blaster, lifetime) ); - weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(blaster, animtime), w_ready); + weapon_thinkf(actor, slot, WFRAME_FIRE2, WEP_CVAR_SEC(blaster, animtime), w_ready); } break; } } } - return true; } - METHOD(Blaster, wr_init, bool(entity thiswep)) + METHOD(Blaster, wr_init, void(entity thiswep)) { BLASTER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); - return true; } - METHOD(Blaster, wr_setup, bool(entity thiswep)) + METHOD(Blaster, wr_setup, void(entity thiswep)) { self.ammo_field = ammo_none; - return true; } METHOD(Blaster, wr_checkammo1, bool(entity thiswep)) @@ -242,18 +239,17 @@ void W_Blaster_Attack( return true; // blaster has infinite ammo } - METHOD(Blaster, wr_config, bool(entity thiswep)) + METHOD(Blaster, wr_config, void(entity thiswep)) { BLASTER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS); - return true; } - METHOD(Blaster, wr_suicidemessage, bool(entity thiswep)) + METHOD(Blaster, wr_suicidemessage, int(entity thiswep)) { return WEAPON_BLASTER_SUICIDE; } - METHOD(Blaster, wr_killmessage, bool(entity thiswep)) + METHOD(Blaster, wr_killmessage, int(entity thiswep)) { return WEAPON_BLASTER_MURDER; } @@ -261,24 +257,12 @@ void W_Blaster_Attack( #endif #ifdef CSQC - METHOD(Blaster, wr_impacteffect, bool(entity thiswep)) + METHOD(Blaster, wr_impacteffect, void(entity thiswep)) { vector org2; org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1); if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); } - return true; - } - - METHOD(Blaster, wr_init, bool(entity thiswep)) - { - return true; - } - - METHOD(Blaster, wr_zoomreticle, bool(entity thiswep)) - { - // no weapon specific image for this weapon - return false; } #endif