alias bsp "ls maps/*.bsp"
alias chmap "changelevel ${* ?}"
alias clearmap "disconnect"
+alias devmap "set _developer_save $developer; set developer 1; changelevel ${* ?}; set developer $_developer_save"
alias ply "playdemo $1"
alias rec "record demos/${1 !}"
alias search "apropos ${* ?}"
set con_completion_tdem *.dem
set con_completion_exec *.cfg
set con_completion_chmap map
+set con_completion_devmap map
set con_completion_gotomap map
set con_completion_vmap map
set con_completion_vnextmap map
--- /dev/null
+1 8 20 0 // fire
+9 5 20 0 // fire2
+15 200 20 1 // idle
+215 40 20 0 // reload
border = max(8, panel_bg_border); // FORCED border so a small border size doesn't mean you can't resize
// move
- if(allow_move && mousepos_x >= panel_pos_x && mousepos_y >= panel_pos_y && mousepos_x <= panel_pos_x + panel_size_x && mousepos_y <= panel_pos_y + panel_size_y)
+ if(allow_move && mousepos_x > panel_pos_x && mousepos_y > panel_pos_y && mousepos_x < panel_pos_x + panel_size_x && mousepos_y < panel_pos_y + panel_size_y)
{
return 1;
}
border = max(8, panel_bg_border); // FORCED border so a small border size doesn't mean you can't resize
// move
- if(allow_move && mousepos_x >= panel_pos_x && mousepos_y >= panel_pos_y && mousepos_x <= panel_pos_x + panel_size_x && mousepos_y <= panel_pos_y + panel_size_y)
+ if(allow_move && mousepos_x > panel_pos_x && mousepos_y > panel_pos_y && mousepos_x < panel_pos_x + panel_size_x && mousepos_y < panel_pos_y + panel_size_y)
{
highlightedPanel = i;
HUD_Panel_FirstInDrawQ(i);
#define TUBA_MIN -18
#define TUBA_MAX 27
-#define TUBA_INSTRUMENTS 2
+#define TUBA_INSTRUMENTS 3
#define TUBA_STARTNOTE(i,n) strcat("weapons/tuba", (i ? ftos(i) : ""), "_loopnote", ftos(n), ".wav")
.float note; // note
string parm;
string cmdstr;
- sp = strstrofs(cmdstr, " ", 0);
- if(sp < 0)
+ sp = strstrofs(cmdstring, " ", 0);
+ if(sp >= 0)
{
- parm = "";
- }
- else
- {
- parm = substring(cmdstr, sp + 1, -1);
- cmdstr = substring(cmdstr, 0, sp);
+ parm = substring(cmdstring, sp + 1, -1);
+ cmdstr = substring(cmdstring, 0, sp);
if(cmdstr == "sound")
- precache_sound(cmdstr);
+ {
+ // find the LAST word
+ for(;;)
+ {
+ sp = strstrofs(parm, " ", 0);
+ if(sp < 0)
+ break;
+ parm = substring(parm, sp + 1, -1);
+ }
+ precache_sound(parm);
+ }
}
}
string f;
f = bot_cmd.bot_cmd_parm_string;
+ float n = tokenizebyseparator(f, " ");
+
+ string sample = f;
+ float chan = CH_WEAPON_B;
+ float vol = VOL_BASE;
+ float atten = ATTN_MIN;
+
+ if(n >= 1)
+ sample = argv(n - 1);
+ if(n >= 2)
+ chan = stof(argv(0));
+ if(n >= 3)
+ vol = stof(argv(1));
+ if(n >= 4)
+ atten = stof(argv(2));
+
precache_sound(f);
- sound(self, CH_WEAPON_B, f, VOL_BASE, ATTN_MIN);
+ sound(self, chan, sample, vol, atten);
return CMD_STATUS_FINISHED;
}
take = damage;
}
+ if(attacker == self)
+ {
+ // don't reset pushltime for self damage as it may be an attempt to
+ // escape a lava pit or similar
+ //self.pushltime = 0;
+ self.istypefrag = 0;
+ }
+ else if(attacker.classname == "player")
+ {
+ self.pusher = attacker;
+ self.pushltime = time + autocvar_g_maxpushtime;
+ self.istypefrag = self.BUTTON_CHAT;
+ }
+ else if(time < self.pushltime)
+ {
+ attacker = self.pusher;
+ self.pushltime = max(self.pushltime, time + 0.6);
+ }
+ else
+ {
+ self.pushltime = 0;
+ self.istypefrag = 0;
+ }
+
frag_inflictor = inflictor;
frag_attacker = attacker;
frag_target = self;
self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
self.dmg_inflictor = inflictor;
- if(attacker == self)
- {
- // don't reset pushltime for self damage as it may be an attempt to
- // escape a lava pit or similar
- //self.pushltime = 0;
- self.istypefrag = 0;
- }
- else if(attacker.classname == "player")
- {
- self.pusher = attacker;
- self.pushltime = time + autocvar_g_maxpushtime;
- self.istypefrag = self.BUTTON_CHAT;
- }
- else if(time < self.pushltime)
- {
- attacker = self.pusher;
- self.pushltime = max(self.pushltime, time + 0.6);
- }
- else
- {
- self.pushltime = 0;
- self.istypefrag = 0;
- }
+ if(g_ca && self != attacker && attacker.classname == "player")
+ PlayerScore_Add(attacker, SP_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier);
float abot, vbot, awep;
abot = (clienttype(attacker) == CLIENTTYPE_BOT);
}
}
+void GameCommand_animbench(float request, float argc)
+{
+ switch(request)
+ {
+ case CMD_REQUEST_COMMAND:
+ {
+ entity tmp_entity;
+ float i;
+ vector v;
+
+ if(argc >= 4)
+ {
+ tmp_entity = spawn();
+ if(argv(1) == "w")
+ setmodel(tmp_entity, (nextent(world)).weaponentity.model);
+ else
+ {
+ precache_model(argv(1));
+ setmodel(tmp_entity, argv(1));
+ }
+ float f1 = stof(argv(2));
+ float f2 = stof(argv(3));
+ float t0;
+ float t1 = 0;
+ float t2 = 0;
+ float n = 0;
+
+ while(t1 + t2 < 1)
+ {
+ tmp_entity.frame = f1;
+ t0 = gettime(GETTIME_HIRES);
+ getsurfacepoint(tmp_entity, 0, 0);
+ t1 += gettime(GETTIME_HIRES) - t0;
+ tmp_entity.frame = f2;
+ t0 = gettime(GETTIME_HIRES);
+ getsurfacepoint(tmp_entity, 0, 0);
+ t2 += gettime(GETTIME_HIRES) - t0;
+ n += 1;
+ }
+ print("model ", tmp_entity.model, " frame ", ftos(f1), " animtime ", ftos(n / t1), "/s\n");
+ print("model ", tmp_entity.model, " frame ", ftos(f2), " animtime ", ftos(n / t2), "/s\n");
+
+ remove(tmp_entity);
+ return;
+ }
+ }
+
+ default:
+ print("Incorrect parameters for ^2gettaginfo^7\n");
+ case CMD_REQUEST_USAGE:
+ {
+ print("\nUsage:^3 sv_cmd gettaginfo model frame index [command one] [command two]\n");
+ print("See also: ^2bbox, trace^7\n");
+ return;
+ }
+ }
+}
+
void GameCommand_gotomap(float request, float argc)
{
switch(request)
SERVER_COMMAND("allready", GameCommand_allready(request), "Restart the server and reset the players") \
SERVER_COMMAND("allspec", GameCommand_allspec(request, arguments), "Force all players to spectate") \
SERVER_COMMAND("anticheat", GameCommand_anticheat(request, arguments), "Create an anticheat report for a client") \
+ SERVER_COMMAND("animbench", GameCommand_animbench(request, arguments), "Benchmark model animation (LAGS)") \
SERVER_COMMAND("bbox", GameCommand_bbox(request), "Print detailed information about world size") \
SERVER_COMMAND("bot_cmd", GameCommand_bot_cmd(request, arguments, command), "Control and send commands to bots") \
SERVER_COMMAND("cointoss", GameCommand_cointoss(request, arguments), "Flip a virtual coin and give random result") \
if(deathtype & HITTYPE_HEADSHOT)
headshot = 1;
}
- if(g_ca)
- PlayerScore_Add(attacker, SP_SCORE, damage * autocvar_g_ca_damage2score_multiplier);
}
}
else
else
{
// otherwise: each hit gets damage back
- frag_attacker.health += damage_take;
+ frag_attacker.health = frag_attacker.health + bound(0, damage_take, self.health);
}
return 0;
}
if(!self.wp00 && !self.wp01 && !self.wp02 && !self.wp03)
objerror("No reference entity found, so there is nothing to move. Aborting.");
- self.destvec = self.origin - func_vectormamamam_origin(self.owner, 0);
+ self.destvec = self.origin - func_vectormamamam_origin(self, 0);
entity controller;
controller = spawn();
case 1:
bprint(strcat("\{1}\{13}* ^3", self.owner.netname, "^3 played on the @!#%'n Accordeon: ^7", s, "\n"));
break;
+ case 2:
+ bprint(strcat("\{1}\{13}* ^3", self.owner.netname, "^3 played on the @!#%'n Klein Bottle: ^7", s, "\n"));
+ break;
}
}
}
precache_model ("models/weapons/g_tuba.md3");
precache_model ("models/weapons/v_tuba.md3");
precache_model ("models/weapons/h_tuba.iqm");
- precache_model ("models/weapons/g_akordeon.md3");
precache_model ("models/weapons/v_akordeon.md3");
precache_model ("models/weapons/h_akordeon.iqm");
+ precache_model ("models/weapons/v_kleinbottle.md3");
+ precache_model ("models/weapons/h_kleinbottle.iqm");
//float i;
//for(i = -18; i <= +27; ++i)
self.weaponname = "akordeon";
break;
case 1:
+ self.tuba_instrument = 2;
+ self.weaponname = "kleinbottle";
+ break;
+ case 2:
self.tuba_instrument = 0;
self.weaponname = "tuba";
break;
case 1: // Accordeon
w_deathtypestring = _("%s hurt his own ears with the @!#%%'n Accordeon");
break;
+ case 2: // Klein Bottle
+ w_deathtypestring = _("%s hurt his own ears with the @!#%%'n Klein Bottle");
+ break;
}
}
else if (req == WR_KILLMESSAGE)
case 1: // Accordeon
w_deathtypestring = _("%s died of %s's great playing on the @!#%%'n Accordeon");
break;
+ case 2: // Klein Bottle
+ w_deathtypestring = _("%s died of %s's great playing on the @!#%%'n Klein Bottle");
+ break;
}
}
return TRUE;