X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fturrets%2Fturret%2Fwalker.qc;h=e629ada79853f2a31a96aa27ee334d9f84fa6de0;hp=82fb622384746fe5eb671e1f55af4e9978e826a1;hb=a97b89297fa91ae42b9d56c262662eb34ede3e45;hpb=129cf6ae83fa24855423c8edec3ad2cb072cb4cd diff --git a/qcsrc/common/turrets/turret/walker.qc b/qcsrc/common/turrets/turret/walker.qc index 82fb622384..e629ada798 100644 --- a/qcsrc/common/turrets/turret/walker.qc +++ b/qcsrc/common/turrets/turret/walker.qc @@ -1,19 +1,31 @@ -#ifndef TUR_WALKER_H -#define TUR_WALKER_H -REGISTER_TURRET( -/* TUR_##id */ WALKER, -/* function */ t_walker, -/* spawnflags */ TUR_FLAG_PLAYER | TUR_FLAG_MOVE, -/* mins,maxs */ '-70 -70 0', '70 70 95', -/* model */ "walker_body.md3", -/* head_model */ "walker_head_minigun.md3", -/* netname */ "walker", -/* fullname */ _("Walker Turret") -); +#ifndef TURRET_WALKER_H +#define TURRET_WALKER_H + +//#define WALKER_FANCYPATHING + +#include "walker_weapon.qc" + +CLASS(WalkerTurret, Turret) +/* spawnflags */ ATTRIB(WalkerTurret, spawnflags, int, TUR_FLAG_PLAYER | TUR_FLAG_MOVE); +/* mins */ ATTRIB(WalkerTurret, mins, vector, '-70 -70 0'); +/* maxs */ ATTRIB(WalkerTurret, maxs, vector, '70 70 95'); +/* modelname */ ATTRIB(WalkerTurret, mdl, string, "walker_body.md3"); +/* model */ ATTRIB(WalkerTurret, model, string, strzone(strcat("models/turrets/", this.mdl))); +/* head_model */ ATTRIB(WalkerTurret, head_model, string, strzone(strcat("models/turrets/", "walker_head_minigun.md3"))); +/* netname */ ATTRIB(WalkerTurret, netname, string, "walker"); +/* fullname */ ATTRIB(WalkerTurret, turret_name, string, _("Walker Turret")); + ATTRIB(WalkerTurret, m_weapon, Weapon, WEP_WALKER); +ENDCLASS(WalkerTurret) +REGISTER_TURRET(WALKER, NEW(WalkerTurret)); + #endif #ifdef IMPLEMENTATION + +#include "walker_weapon.qc" + #ifdef SVQC + float autocvar_g_turrets_unit_walker_melee_damage; float autocvar_g_turrets_unit_walker_melee_force; float autocvar_g_turrets_unit_walker_melee_range; @@ -37,18 +49,18 @@ float autocvar_g_turrets_unit_walker_turn_strafe; float autocvar_g_turrets_unit_walker_turn_swim; float autocvar_g_turrets_unit_walker_turn_run; -#define ANIM_NO 0 -#define ANIM_TURN 1 -#define ANIM_WALK 2 -#define ANIM_RUN 3 -#define ANIM_STRAFE_L 4 -#define ANIM_STRAFE_R 5 -#define ANIM_JUMP 6 -#define ANIM_LAND 7 -#define ANIM_PAIN 8 -#define ANIM_MELEE 9 -#define ANIM_SWIM 10 -#define ANIM_ROAM 11 +const int ANIM_NO = 0; +const int ANIM_TURN = 1; +const int ANIM_WALK = 2; +const int ANIM_RUN = 3; +const int ANIM_STRAFE_L = 4; +const int ANIM_STRAFE_R = 5; +const int ANIM_JUMP = 6; +const int ANIM_LAND = 7; +const int ANIM_PAIN = 8; +const int ANIM_MELEE = 9; +const int ANIM_SWIM = 10; +const int ANIM_ROAM = 11; .float animflag; .float idletime; @@ -290,8 +302,6 @@ void walker_move_to(vector _target, float _dist) } } -//#define WALKER_FANCYPATHING - void walker_move_path() {SELFPARAM(); #ifdef WALKER_FANCYPATHING @@ -337,21 +347,9 @@ void walker_move_path() #endif } -void spawnfunc_turret_walker() { SELFPARAM(); if(!turret_initialize(TUR_WALKER.m_id)) remove(self); } - -float t_walker(float req) -{SELFPARAM(); - switch(req) - { - case TR_ATTACK: - { - sound (self, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM); - fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0); - Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1); +spawnfunc(turret_walker) { if(!turret_initialize(TUR_WALKER)) remove(self); } - return true; - } - case TR_THINK: + METHOD(WalkerTurret, tr_think, void(WalkerTurret thistur)) { fixedmakevectors(self.angles); @@ -560,64 +558,60 @@ float t_walker(float req) self.oldorigin = self.origin; turrets_setframe(self.animflag, false); - - return true; } - case TR_DEATH: + METHOD(WalkerTurret, tr_death, void(WalkerTurret this, entity it)) { #ifdef WALKER_FANCYPATHING - if (self.pathcurrent) - pathlib_deletepath(self.pathcurrent.owner); + if (it.pathcurrent) + pathlib_deletepath(it.pathcurrent.owner); #endif - self.pathcurrent = world; - - return true; + it.pathcurrent = NULL; } - case TR_SETUP: + METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it)) { - self.ticrate = 0.05; + it.ticrate = 0.05; entity e; // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn. - if(self.movetype == MOVETYPE_WALK) + if(it.movetype == MOVETYPE_WALK) { - if(self.pos1) - setorigin(self, self.pos1); - if(self.pos2) - self.angles = self.pos2; + if(it.pos1) + setorigin(it, it.pos1); + if(it.pos2) + it.angles = it.pos2; } - self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE; - self.aim_flags = TFL_AIM_LEAD; - self.turret_flags |= TUR_FLAG_HITSCAN; - - self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; - self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; - self.iscreature = true; - self.teleportable = TELEPORT_NORMAL; - self.damagedbycontents = true; - self.solid = SOLID_SLIDEBOX; - self.takedamage = DAMAGE_AIM; - if(self.movetype != MOVETYPE_WALK) + it.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE; + it.aim_flags = TFL_AIM_LEAD; + it.turret_flags |= TUR_FLAG_HITSCAN; + + it.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; + it.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; + it.iscreature = true; + it.teleportable = TELEPORT_NORMAL; + it.damagedbycontents = true; + it.solid = SOLID_SLIDEBOX; + it.takedamage = DAMAGE_AIM; + if(it.movetype != MOVETYPE_WALK) { - setorigin(self, self.origin); - tracebox(self.origin + '0 0 128', self.mins, self.maxs, self.origin - '0 0 10000', MOVE_NORMAL, self); - setorigin(self, trace_endpos + '0 0 4'); - self.pos1 = self.origin; - self.pos2 = self.angles; + setorigin(it, it.origin); + tracebox(it.origin + '0 0 128', it.mins, it.maxs, it.origin - '0 0 10000', MOVE_NORMAL, it); + setorigin(it, trace_endpos + '0 0 4'); + it.pos1 = it.origin; + it.pos2 = it.angles; } - self.movetype = MOVETYPE_WALK; - self.idle_aim = '0 0 0'; - self.turret_firecheckfunc = walker_firecheck; + it.movetype = MOVETYPE_WALK; + it.idle_aim = '0 0 0'; + it.turret_firecheckfunc = walker_firecheck; - if (self.target != "") + if (it.target != "") { - e = find(world, targetname, self.target); + e = find(world, targetname, it.target); if (!e) { LOG_TRACE("Initital waypoint for walker does NOT exsist, fix your map!\n"); - self.target = ""; + it.target = ""; } if (e.classname != "turret_checkpoint") @@ -625,32 +619,22 @@ float t_walker(float req) else { #ifdef WALKER_FANCYPATHING - self.pathcurrent = WALKER_PATH(self.origin, e.origin); - self.pathgoal = e; + it.pathcurrent = WALKER_PATH(it.origin, e.origin); + it.pathgoal = e; #else - self.pathcurrent = e; + it.pathcurrent = e; #endif } } - - return true; - } - case TR_PRECACHE: - { - return true; } - } - - return true; -} #endif // SVQC #ifdef CSQC #include "../../../client/movelib.qh" -void walker_draw() -{SELFPARAM(); +void walker_draw(entity this) +{ float dt; dt = time - self.move_time; @@ -669,29 +653,15 @@ void walker_draw() te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16); } -float t_walker(float req) -{SELFPARAM(); - switch(req) - { - case TR_SETUP: - { - self.gravity = 1; - self.movetype = MOVETYPE_BOUNCE; - self.move_movetype = MOVETYPE_BOUNCE; - self.move_origin = self.origin; - self.move_time = time; - self.draw = walker_draw; - - return true; - } - case TR_PRECACHE: + METHOD(WalkerTurret, tr_setup, void(WalkerTurret this, entity it)) { - return true; + it.gravity = 1; + it.movetype = MOVETYPE_BOUNCE; + it.move_movetype = MOVETYPE_BOUNCE; + it.move_origin = it.origin; + it.move_time = time; + it.draw = walker_draw; } - } - - return true; -} #endif // CSQC -#endif // REGISTER_TURRET +#endif