From 38921a0d68b46eb7a70551355d24886139adc20c Mon Sep 17 00:00:00 2001 From: Mario Date: Mon, 28 Sep 2015 15:49:06 +1000 Subject: [PATCH] Port mine layer --- qcsrc/common/weapons/weapon/minelayer.qc | 81 ++++++++++-------------- 1 file changed, 35 insertions(+), 46 deletions(-) diff --git a/qcsrc/common/weapons/weapon/minelayer.qc b/qcsrc/common/weapons/weapon/minelayer.qc index 3bc22a34a..7c8c63bd3 100644 --- a/qcsrc/common/weapons/weapon/minelayer.qc +++ b/qcsrc/common/weapons/weapon/minelayer.qc @@ -1,19 +1,21 @@ #ifndef IMPLEMENTATION -REGISTER_WEAPON( -/* WEP_##id */ MINE_LAYER, -/* function */ W_MineLayer, -/* ammotype */ ammo_rockets, -/* impulse */ 4, -/* flags */ WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH, -/* rating */ BOT_PICKUP_RATING_HIGH, -/* color */ '0.75 1 0', -/* modelname */ "minelayer", -/* model */ MDL_MINELAYER_ITEM, -/* crosshair */ "gfx/crosshairminelayer 0.9", -/* wepimg */ "weaponminelayer", -/* refname */ "minelayer", -/* wepname */ _("Mine Layer") -); +CLASS(MineLayer, Weapon) +/* ammotype */ ATTRIB(MineLayer, ammo_field, .int, ammo_rockets) +/* impulse */ ATTRIB(MineLayer, impulse, int, 4) +/* flags */ ATTRIB(MineLayer, spawnflags, int, WEP_FLAG_MUTATORBLOCKED | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH); +/* rating */ ATTRIB(MineLayer, bot_pickupbasevalue, float, BOT_PICKUP_RATING_HIGH); +/* color */ ATTRIB(MineLayer, wpcolor, vector, '0.75 1 0'); +/* modelname */ ATTRIB(MineLayer, mdl, string, "minelayer"); +#ifndef MENUQC +/* model */ ATTRIB(MineLayer, m_model, Model, MDL_MINELAYER_ITEM); +#endif +/* crosshair */ ATTRIB(MineLayer, w_crosshair, string, "gfx/crosshairminelayer"); +/* crosshair */ ATTRIB(MineLayer, w_crosshair_size, float, 0.9); +/* wepimg */ ATTRIB(MineLayer, model2, string, "weaponminelayer"); +/* refname */ ATTRIB(MineLayer, netname, string, "minelayer"); +/* wepname */ ATTRIB(MineLayer, message, string, _("Mine Layer")); +ENDCLASS(MineLayer) +REGISTER_WEAPON(MINE_LAYER, NEW(MineLayer)); #define MINELAYER_SETTINGS(w_cvar,w_prop) MINELAYER_SETTINGS_LIST(w_cvar, w_prop, MINE_LAYER, minelayer) #define MINELAYER_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ @@ -397,13 +399,7 @@ float W_MineLayer_PlacedMines(float detonate) return minfound; } -bool W_MineLayer(entity thiswep, int req) -{SELFPARAM(); - entity mine; - float ammo_amount; - switch(req) - { - case WR_AIM: + METHOD(MineLayer, wr_aim, bool(entity thiswep)) { // aim and decide to fire if appropriate if(self.minelayer_mines >= WEP_CVAR(minelayer, limit)) @@ -424,7 +420,7 @@ bool W_MineLayer(entity thiswep, int req) teamdamage = 0; enemydamage = 0; targetlist = findchainfloat(bot_attack, true); - mine = find(world, classname, "mine"); + entity mine = find(world, classname, "mine"); while(mine) { if(mine.realowner != self) @@ -503,7 +499,7 @@ bool W_MineLayer(entity thiswep, int req) return true; } - case WR_THINK: + METHOD(MineLayer, wr_think, bool(entity thiswep)) { if(autocvar_g_balance_minelayer_reload_ammo && self.clip_load < WEP_CVAR(minelayer, ammo)) // forced reload { @@ -528,62 +524,57 @@ bool W_MineLayer(entity thiswep, int req) return true; } - case WR_INIT: + METHOD(MineLayer, wr_init, bool(entity thiswep)) { MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); return true; } - case WR_CHECKAMMO1: + METHOD(MineLayer, wr_checkammo1, bool(entity thiswep)) { // don't switch while placing a mine if(ATTACK_FINISHED(self) <= time || self.weapon != WEP_MINE_LAYER.m_id) { - ammo_amount = self.WEP_AMMO(MINE_LAYER) >= WEP_CVAR(minelayer, ammo); + float ammo_amount = self.WEP_AMMO(MINE_LAYER) >= WEP_CVAR(minelayer, ammo); ammo_amount += self.(weapon_load[WEP_MINE_LAYER.m_id]) >= WEP_CVAR(minelayer, ammo); return ammo_amount; } return true; } - case WR_CHECKAMMO2: + METHOD(MineLayer, wr_checkammo2, bool(entity thiswep)) { if(W_MineLayer_PlacedMines(false)) return true; else return false; } - case WR_CONFIG: + METHOD(MineLayer, wr_config, bool(entity thiswep)) { MINELAYER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS); return true; } - case WR_RESETPLAYER: + METHOD(MineLayer, wr_resetplayers, bool(entity thiswep)) { self.minelayer_mines = 0; return true; } - case WR_RELOAD: + METHOD(MineLayer, wr_reload, bool(entity thiswep)) { W_Reload(WEP_CVAR(minelayer, ammo), SND(RELOAD)); return true; } - case WR_SUICIDEMESSAGE: + METHOD(MineLayer, wr_suicidemessage, bool(entity thiswep)) { return WEAPON_MINELAYER_SUICIDE; } - case WR_KILLMESSAGE: + METHOD(MineLayer, wr_killmessage, bool(entity thiswep)) { return WEAPON_MINELAYER_MURDER; } - } - return false; -} + #endif #ifdef CSQC -bool W_MineLayer(entity thiswep, int req) -{SELFPARAM(); - switch(req) - { - case WR_IMPACTEFFECT: + + METHOD(MineLayer, wr_impacteffect, bool(entity thiswep)) { vector org2; org2 = w_org + w_backoff * 12; @@ -593,17 +584,15 @@ bool W_MineLayer(entity thiswep, int req) return true; } - case WR_INIT: + METHOD(MineLayer, wr_init, bool(entity thiswep)) { return true; } - case WR_ZOOMRETICLE: + METHOD(MineLayer, wr_zoomreticle, bool(entity thiswep)) { // no weapon specific image for this weapon return false; } - } - return false; -} + #endif #endif -- 2.39.2