moved 0.5 branch to trunk

This commit is contained in:
Magnus Auvinen 2009-05-31 09:44:20 +00:00
parent b28ede2da2
commit 4bb1df3189
22 changed files with 354 additions and 238 deletions

View file

@ -269,20 +269,24 @@ if platform == "macosx" and arch == "ia32" then
debug_settings_ppc.config_ext = "_ppc_d" debug_settings_ppc.config_ext = "_ppc_d"
debug_settings_ppc.cc.flags:Add("-arch ppc") debug_settings_ppc.cc.flags:Add("-arch ppc")
debug_settings_ppc.link.flags:Add("-arch ppc") debug_settings_ppc.link.flags:Add("-arch ppc")
debug_settings_ppc.cc.defines:Add("CONF_DEBUG")
release_settings_ppc = release_settings:Copy() release_settings_ppc = release_settings:Copy()
release_settings_ppc.config_name = "release_ppc" release_settings_ppc.config_name = "release_ppc"
release_settings_ppc.config_ext = "_ppc" release_settings_ppc.config_ext = "_ppc"
release_settings_ppc.cc.flags:Add("-arch ppc") release_settings_ppc.cc.flags:Add("-arch ppc")
release_settings_ppc.link.flags:Add("-arch ppc") release_settings_ppc.link.flags:Add("-arch ppc")
release_settings_ppc.cc.defines:Add("CONF_RELEASE")
debug_settings_x86 = debug_settings:Copy() debug_settings_x86 = debug_settings:Copy()
debug_settings_x86.config_name = "debug_x86" debug_settings_x86.config_name = "debug_x86"
debug_settings_x86.config_ext = "_x86_d" debug_settings_x86.config_ext = "_x86_d"
debug_settings_x86.cc.defines:Add("CONF_DEBUG")
release_settings_x86 = release_settings:Copy() release_settings_x86 = release_settings:Copy()
release_settings_x86.config_name = "release_x86" release_settings_x86.config_name = "release_x86"
release_settings_x86.config_ext = "_x86" release_settings_x86.config_ext = "_x86"
release_settings_x86.cc.defines:Add("CONF_RELEASE")
ppc_d = build(debug_settings_ppc) ppc_d = build(debug_settings_ppc)
x86_d = build(debug_settings_x86) x86_d = build(debug_settings_x86)

View file

@ -22,6 +22,7 @@ SDL = {
if platform == "macosx" then if platform == "macosx" then
option.value = 1 option.value = 1
option.use_osxframework = 1 option.use_osxframework = 1
option.use_sdlconfig = nil
end end
end end

View file

@ -1362,6 +1362,7 @@ static void client_pump_network()
if(client_state() != CLIENTSTATE_OFFLINE && netclient_state(net) == NETSTATE_OFFLINE) if(client_state() != CLIENTSTATE_OFFLINE && netclient_state(net) == NETSTATE_OFFLINE)
{ {
client_set_state(CLIENTSTATE_OFFLINE); client_set_state(CLIENTSTATE_OFFLINE);
client_disconnect();
dbg_msg("client", "offline error='%s'", netclient_error_string(net)); dbg_msg("client", "offline error='%s'", netclient_error_string(net));
} }
@ -1972,6 +1973,7 @@ static void con_serverdummy(void *result, void *user_data)
static void client_register_commands() static void client_register_commands()
{ {
MACRO_REGISTER_COMMAND("quit", "", CFGFLAG_CLIENT, con_quit, 0x0, "Quit Teeworlds"); MACRO_REGISTER_COMMAND("quit", "", CFGFLAG_CLIENT, con_quit, 0x0, "Quit Teeworlds");
MACRO_REGISTER_COMMAND("exit", "", CFGFLAG_CLIENT, con_quit, 0x0, "Quit Teeworlds");
MACRO_REGISTER_COMMAND("connect", "s", CFGFLAG_CLIENT, con_connect, 0x0, "Connect to the specified host/ip"); MACRO_REGISTER_COMMAND("connect", "s", CFGFLAG_CLIENT, con_connect, 0x0, "Connect to the specified host/ip");
MACRO_REGISTER_COMMAND("disconnect", "", CFGFLAG_CLIENT, con_disconnect, 0x0, "Disconnect from the server"); MACRO_REGISTER_COMMAND("disconnect", "", CFGFLAG_CLIENT, con_disconnect, 0x0, "Disconnect from the server");
MACRO_REGISTER_COMMAND("ping", "", CFGFLAG_CLIENT, con_ping, 0x0, "Ping the current server"); MACRO_REGISTER_COMMAND("ping", "", CFGFLAG_CLIENT, con_ping, 0x0, "Ping the current server");

View file

@ -252,11 +252,24 @@ int gfx_init()
if(config.dbg_stress) if(config.dbg_stress)
no_gfx = 1; no_gfx = 1;
if(SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0) {
int systems = 0;
if(!no_gfx)
systems |= SDL_INIT_VIDEO;
if(config.snd_enable)
systems |= SDL_INIT_AUDIO;
if(config.cl_eventthread)
systems |= SDL_INIT_EVENTTHREAD;
if(SDL_Init(systems) < 0)
{ {
dbg_msg("gfx", "unable to init SDL: %s", SDL_GetError()); dbg_msg("gfx", "unable to init SDL: %s", SDL_GetError());
return -1; return -1;
} }
}
atexit(SDL_Quit); atexit(SDL_Quit);

View file

@ -16,26 +16,16 @@ static unsigned char input_state[2][1024] = {{0}, {0}};
static int input_current = 0; static int input_current = 0;
static int input_grabbed = 0; static int input_grabbed = 0;
static int input_use_grab = 0;
static unsigned int last_release = 0; static unsigned int last_release = 0;
static unsigned int release_delta = -1; static unsigned int release_delta = -1;
void inp_mouse_relative(int *x, int *y) void inp_mouse_relative(int *x, int *y)
{ {
static int last_x = 0, last_y = 0;
static int last_sens = 100.0f;
int nx = 0, ny = 0; int nx = 0, ny = 0;
float sens = config.inp_mousesens/100.0f; float sens = config.inp_mousesens/100.0f;
if(last_sens != config.inp_mousesens) if(config.inp_grab)
{
last_x = (last_x/(float)last_sens)*(float)config.inp_mousesens;
last_y = (last_y/(float)last_sens)*(float)config.inp_mousesens;
last_sens = config.inp_mousesens;
}
if(input_use_grab)
SDL_GetRelativeMouseState(&nx, &ny); SDL_GetRelativeMouseState(&nx, &ny);
else else
{ {
@ -101,7 +91,7 @@ void inp_mouse_mode_absolute()
{ {
SDL_ShowCursor(1); SDL_ShowCursor(1);
input_grabbed = 0; input_grabbed = 0;
if(input_use_grab) if(config.inp_grab)
SDL_WM_GrabInput(SDL_GRAB_OFF); SDL_WM_GrabInput(SDL_GRAB_OFF);
} }
@ -109,7 +99,7 @@ void inp_mouse_mode_relative()
{ {
SDL_ShowCursor(0); SDL_ShowCursor(0);
input_grabbed = 1; input_grabbed = 1;
if(input_use_grab) if(config.inp_grab)
SDL_WM_GrabInput(SDL_GRAB_ON); SDL_WM_GrabInput(SDL_GRAB_ON);
} }

View file

@ -166,6 +166,22 @@ static void client_serverbrowse_filter()
filtered = 1; filtered = 1;
else if(config.b_filter_pure && (strcmp(serverlist[i]->info.gametype, "DM") != 0 && strcmp(serverlist[i]->info.gametype, "TDM") != 0 && strcmp(serverlist[i]->info.gametype, "CTF") != 0)) else if(config.b_filter_pure && (strcmp(serverlist[i]->info.gametype, "DM") != 0 && strcmp(serverlist[i]->info.gametype, "TDM") != 0 && strcmp(serverlist[i]->info.gametype, "CTF") != 0))
filtered = 1; filtered = 1;
else if(config.b_filter_pure_map &&
!(strcmp(serverlist[i]->info.map, "dm1") == 0 ||
strcmp(serverlist[i]->info.map, "dm2") == 0 ||
strcmp(serverlist[i]->info.map, "dm6") == 0 ||
strcmp(serverlist[i]->info.map, "dm7") == 0 ||
strcmp(serverlist[i]->info.map, "dm8") == 0 ||
strcmp(serverlist[i]->info.map, "dm9") == 0 ||
strcmp(serverlist[i]->info.map, "ctf1") == 0 ||
strcmp(serverlist[i]->info.map, "ctf2") == 0 ||
strcmp(serverlist[i]->info.map, "ctf3") == 0 ||
strcmp(serverlist[i]->info.map, "ctf4") == 0 ||
strcmp(serverlist[i]->info.map, "ctf5") == 0)
)
{
filtered = 1;
}
else if(config.b_filter_ping < serverlist[i]->info.latency) else if(config.b_filter_ping < serverlist[i]->info.latency)
filtered = 1; filtered = 1;
else if(config.b_filter_compatversion && strncmp(serverlist[i]->info.version, modc_net_version(), 3) != 0) else if(config.b_filter_compatversion && strncmp(serverlist[i]->info.version, modc_net_version(), 3) != 0)
@ -229,6 +245,7 @@ static int client_serverbrowse_sorthash()
i |= config.b_sort_order<<7; i |= config.b_sort_order<<7;
i |= config.b_filter_compatversion<<8; i |= config.b_filter_compatversion<<8;
i |= config.b_filter_pure<<9; i |= config.b_filter_pure<<9;
i |= config.b_filter_pure_map<<10;
i |= config.b_filter_ping<<16; i |= config.b_filter_ping<<16;
return i; return i;
} }

View file

@ -12,6 +12,10 @@ MACRO_CONFIG_STR(logfile, 128, "", CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filename to log
MACRO_CONFIG_INT(cl_cpu_throttle, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "") MACRO_CONFIG_INT(cl_cpu_throttle, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "")
MACRO_CONFIG_INT(cl_editor, 0, 0, 1, CFGFLAG_CLIENT, "") MACRO_CONFIG_INT(cl_editor, 0, 0, 1, CFGFLAG_CLIENT, "")
MACRO_CONFIG_INT(cl_eventthread, 0, 0, 1, CFGFLAG_CLIENT, "Enables the usage of a thread to pump the events")
MACRO_CONFIG_INT(inp_grab, 0, 0, 1, CFGFLAG_CLIENT, "Use forceful input grabbing method")
MACRO_CONFIG_STR(b_filter_string, 64, "", CFGFLAG_SAVE|CFGFLAG_CLIENT, "Server browser filtering string") MACRO_CONFIG_STR(b_filter_string, 64, "", CFGFLAG_SAVE|CFGFLAG_CLIENT, "Server browser filtering string")
MACRO_CONFIG_INT(b_filter_full, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out full server in browser") MACRO_CONFIG_INT(b_filter_full, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out full server in browser")
@ -19,7 +23,8 @@ MACRO_CONFIG_INT(b_filter_empty, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter o
MACRO_CONFIG_INT(b_filter_pw, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out password protected servers in browser") MACRO_CONFIG_INT(b_filter_pw, 0, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out password protected servers in browser")
MACRO_CONFIG_INT(b_filter_ping, 999, 0, 999, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Ping to filter by in the server browser") MACRO_CONFIG_INT(b_filter_ping, 999, 0, 999, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Ping to filter by in the server browser")
MACRO_CONFIG_STR(b_filter_gametype, 128, "", CFGFLAG_SAVE|CFGFLAG_CLIENT, "Game types to filter") MACRO_CONFIG_STR(b_filter_gametype, 128, "", CFGFLAG_SAVE|CFGFLAG_CLIENT, "Game types to filter")
MACRO_CONFIG_INT(b_filter_pure, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-pure servers in browser") MACRO_CONFIG_INT(b_filter_pure, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-standard servers in browser")
MACRO_CONFIG_INT(b_filter_pure_map, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-standard maps in browser")
MACRO_CONFIG_INT(b_filter_compatversion, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-compatible servers in browser") MACRO_CONFIG_INT(b_filter_compatversion, 1, 0, 1, CFGFLAG_SAVE|CFGFLAG_CLIENT, "Filter out non-compatible servers in browser")
MACRO_CONFIG_INT(b_sort, 0, 0, 256, CFGFLAG_SAVE|CFGFLAG_CLIENT, "") MACRO_CONFIG_INT(b_sort, 0, 0, 256, CFGFLAG_SAVE|CFGFLAG_CLIENT, "")
@ -60,6 +65,7 @@ MACRO_CONFIG_INT(sv_max_clients, 8, 1, MAX_CLIENTS, CFGFLAG_SERVER, "Maximum num
MACRO_CONFIG_INT(sv_high_bandwidth, 0, 0, 1, CFGFLAG_SERVER, "Use high bandwidth mode. Doubles the bandwidth required for the server. LAN use only") MACRO_CONFIG_INT(sv_high_bandwidth, 0, 0, 1, CFGFLAG_SERVER, "Use high bandwidth mode. Doubles the bandwidth required for the server. LAN use only")
MACRO_CONFIG_INT(sv_register, 1, 0, 1, CFGFLAG_SERVER, "Register server with master server for public listing") MACRO_CONFIG_INT(sv_register, 1, 0, 1, CFGFLAG_SERVER, "Register server with master server for public listing")
MACRO_CONFIG_STR(sv_rcon_password, 32, "", CFGFLAG_SERVER, "Remote console password") MACRO_CONFIG_STR(sv_rcon_password, 32, "", CFGFLAG_SERVER, "Remote console password")
MACRO_CONFIG_INT(sv_map_reload, 0, 0, 1, CFGFLAG_SERVER, "Reload the current map")
MACRO_CONFIG_INT(debug, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Debug mode") MACRO_CONFIG_INT(debug, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Debug mode")
MACRO_CONFIG_INT(dbg_stress, 0, 0, 0, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Stress systems") MACRO_CONFIG_INT(dbg_stress, 0, 0, 0, CFGFLAG_CLIENT|CFGFLAG_SERVER, "Stress systems")
@ -69,5 +75,3 @@ MACRO_CONFIG_INT(dbg_graphs, 0, 0, 1, CFGFLAG_CLIENT, "Performance graphs")
MACRO_CONFIG_INT(dbg_hitch, 0, 0, 0, CFGFLAG_SERVER, "Hitch warnings") MACRO_CONFIG_INT(dbg_hitch, 0, 0, 0, CFGFLAG_SERVER, "Hitch warnings")
MACRO_CONFIG_STR(dbg_stress_server, 32, "localhost", CFGFLAG_CLIENT, "Server to stress") MACRO_CONFIG_STR(dbg_stress_server, 32, "localhost", CFGFLAG_CLIENT, "Server to stress")
MACRO_CONFIG_INT(dbg_resizable, 0, 0, 0, CFGFLAG_CLIENT, "Enables window resizing") MACRO_CONFIG_INT(dbg_resizable, 0, 0, 0, CFGFLAG_CLIENT, "Enables window resizing")
MACRO_CONFIG_INT(sv_map_reload, 0, 0, 1, CFGFLAG_SERVER, "Reload the current map")

View file

@ -224,6 +224,12 @@ int unpack_packet(unsigned char *buffer, int size, NETPACKETCONSTRUCT *packet)
if(packet->flags&NET_PACKETFLAG_CONNLESS) if(packet->flags&NET_PACKETFLAG_CONNLESS)
{ {
if(size < 6)
{
dbg_msg("", "connection less packet too small, %d", size);
return -1;
}
packet->flags = NET_PACKETFLAG_CONNLESS; packet->flags = NET_PACKETFLAG_CONNLESS;
packet->ack = 0; packet->ack = 0;
packet->num_chunks = 0; packet->num_chunks = 0;

View file

@ -70,6 +70,7 @@ static int snap_id_inited = 0;
enum enum
{ {
SRVCLIENT_STATE_EMPTY = 0, SRVCLIENT_STATE_EMPTY = 0,
SRVCLIENT_STATE_AUTH,
SRVCLIENT_STATE_CONNECTING, SRVCLIENT_STATE_CONNECTING,
SRVCLIENT_STATE_READY, SRVCLIENT_STATE_READY,
SRVCLIENT_STATE_INGAME, SRVCLIENT_STATE_INGAME,
@ -211,9 +212,42 @@ const char *server_clientname(int client_id)
return clients[client_id].name; return clients[client_id].name;
} }
static const char *str_ltrim(const char *str)
{
while(*str && *str <= 32)
str++;
return str;
}
static void str_rtrim(char *str)
{
int i = str_length(str);
while(i >= 0)
{
if(str[i] > 32)
break;
str[i] = 0;
i--;
}
}
static int server_try_setclientname(int client_id, const char *name) static int server_try_setclientname(int client_id, const char *name)
{ {
int i; int i;
char trimmed_name[64];
/* trim the name */
str_copy(trimmed_name, str_ltrim(name), sizeof(trimmed_name));
str_rtrim(trimmed_name);
dbg_msg("", "'%s' -> '%s'", name, trimmed_name);
name = trimmed_name;
/* check for empty names */
if(!name[0])
return -1;
/* make sure that two clients doesn't have the same name */
for(i = 0; i < MAX_CLIENTS; i++) for(i = 0; i < MAX_CLIENTS; i++)
if(i != client_id && clients[i].state >= SRVCLIENT_STATE_READY) if(i != client_id && clients[i].state >= SRVCLIENT_STATE_READY)
{ {
@ -221,6 +255,7 @@ static int server_try_setclientname(int client_id, const char *name)
return -1; return -1;
} }
/* set the client name */
str_copy(clients[client_id].name, name, MAX_NAME_LENGTH); str_copy(clients[client_id].name, name, MAX_NAME_LENGTH);
return 0; return 0;
} }
@ -544,7 +579,7 @@ static void reset_client(int cid)
static int new_client_callback(int cid, void *user) static int new_client_callback(int cid, void *user)
{ {
clients[cid].state = SRVCLIENT_STATE_CONNECTING; clients[cid].state = SRVCLIENT_STATE_AUTH;
clients[cid].name[0] = 0; clients[cid].name[0] = 0;
clients[cid].clan[0] = 0; clients[cid].clan[0] = 0;
clients[cid].authed = 0; clients[cid].authed = 0;
@ -608,10 +643,9 @@ static void server_process_client_packet(NETCHUNK *packet)
int sys; int sys;
int msg = msg_unpack_start(packet->data, packet->data_size, &sys); int msg = msg_unpack_start(packet->data, packet->data_size, &sys);
if(sys) if(clients[cid].state == SRVCLIENT_STATE_AUTH)
{ {
/* system message */ if(sys && msg == NETMSG_INFO)
if(msg == NETMSG_INFO)
{ {
char version[64]; char version[64];
const char *password; const char *password;
@ -636,15 +670,26 @@ static void server_process_client_packet(NETCHUNK *packet)
return; return;
} }
clients[cid].state = SRVCLIENT_STATE_CONNECTING;
server_send_map(cid); server_send_map(cid);
} }
else if(msg == NETMSG_REQUEST_MAP_DATA) }
else
{
if(sys)
{
/* system message */
if(msg == NETMSG_REQUEST_MAP_DATA)
{ {
int chunk = msg_unpack_int(); int chunk = msg_unpack_int();
int chunk_size = 1024-128; int chunk_size = 1024-128;
int offset = chunk * chunk_size; int offset = chunk * chunk_size;
int last = 0; int last = 0;
/* drop faulty map data requests */
if(chunk < 0 || offset > current_map_size)
return;
if(offset+chunk_size >= current_map_size) if(offset+chunk_size >= current_map_size)
{ {
chunk_size = current_map_size-offset; chunk_size = current_map_size-offset;
@ -816,6 +861,7 @@ static void server_process_client_packet(NETCHUNK *packet)
mods_message(msg, cid); mods_message(msg, cid);
} }
} }
}
int server_ban_add(NETADDR addr, int seconds) int server_ban_add(NETADDR addr, int seconds)

View file

@ -10,13 +10,16 @@
#include "chat.hpp" #include "chat.hpp"
void CHAT::on_reset() void CHAT::on_statechange(int new_state, int old_state)
{
if(old_state <= CLIENTSTATE_CONNECTING)
{ {
mode = MODE_NONE; mode = MODE_NONE;
for(int i = 0; i < MAX_LINES; i++) for(int i = 0; i < MAX_LINES; i++)
lines[i].time = -1000000; lines[i].time = 0;
current_line = 0; current_line = 0;
} }
}
void CHAT::con_say(void *result, void *user_data) void CHAT::con_say(void *result, void *user_data)
{ {

View file

@ -47,7 +47,7 @@ public:
void say(int team, const char *line); void say(int team, const char *line);
virtual void on_console_init(); virtual void on_console_init();
virtual void on_reset(); virtual void on_statechange(int new_state, int old_state);
virtual void on_render(); virtual void on_render();
virtual void on_message(int msgtype, void *rawmsg); virtual void on_message(int msgtype, void *rawmsg);
virtual bool on_input(INPUT_EVENT e); virtual bool on_input(INPUT_EVENT e);

View file

@ -277,7 +277,10 @@ void CONSOLE::on_render()
progress = 1.0f; progress = 1.0f;
} }
if (console_state == CONSOLE_CLOSED || config.cl_editor) if (console_state == CONSOLE_OPEN && config.cl_editor)
toggle(0);
if (console_state == CONSOLE_CLOSED)
return; return;
if (console_state == CONSOLE_OPEN) if (console_state == CONSOLE_OPEN)

View file

@ -171,7 +171,7 @@ void HUD::render_teambalancewarning()
{ {
// render prompt about team-balance // render prompt about team-balance
bool flash = time_get()/(time_freq()/2)%2 == 0; bool flash = time_get()/(time_freq()/2)%2 == 0;
if (gameclient.snap.gameobj && gameclient.snap.gameobj->flags&GAMEFLAG_TEAMS != 0) if (gameclient.snap.gameobj && (gameclient.snap.gameobj->flags&GAMEFLAG_TEAMS) != 0)
{ {
if (config.cl_warning_teambalance && abs(gameclient.snap.team_size[0]-gameclient.snap.team_size[1]) >= 2) if (config.cl_warning_teambalance && abs(gameclient.snap.team_size[0]-gameclient.snap.team_size[1]) >= 2)
{ {

View file

@ -373,9 +373,14 @@ void MENUS::render_serverbrowser_filters(RECT view)
config.b_filter_compatversion ^= 1; config.b_filter_compatversion ^= 1;
ui_hsplit_t(&view, 20.0f, &button, &view); ui_hsplit_t(&view, 20.0f, &button, &view);
if (ui_do_button((char *)&config.b_filter_pure, "Only pure", config.b_filter_pure, &button, ui_draw_checkbox, 0)) if (ui_do_button((char *)&config.b_filter_pure, "Standard gametype", config.b_filter_pure, &button, ui_draw_checkbox, 0))
config.b_filter_pure ^= 1; config.b_filter_pure ^= 1;
ui_hsplit_t(&view, 20.0f, &button, &view);
/*ui_vsplit_l(&button, 20.0f, 0, &button);*/
if (ui_do_button((char *)&config.b_filter_pure_map, "Standard map", config.b_filter_pure_map, &button, ui_draw_checkbox, 0))
config.b_filter_pure_map ^= 1;
ui_hsplit_t(&view, 20.0f, &button, &view); ui_hsplit_t(&view, 20.0f, &button, &view);
ui_do_label(&button, "Game types: ", 14.0f, -1); ui_do_label(&button, "Game types: ", 14.0f, -1);
ui_vsplit_l(&button, 95.0f, 0, &button); ui_vsplit_l(&button, 95.0f, 0, &button);

View file

@ -95,7 +95,7 @@ void PLAYERS::render_player(
bool is_teamplay = false; bool is_teamplay = false;
bool new_tick = gameclient.new_tick; bool new_tick = gameclient.new_tick;
if(gameclient.snap.gameobj) if(gameclient.snap.gameobj)
is_teamplay = gameclient.snap.gameobj->flags&GAMEFLAG_TEAMS != 0; is_teamplay = (gameclient.snap.gameobj->flags&GAMEFLAG_TEAMS) != 0;
// check for ninja // check for ninja
if (player.weapon == WEAPON_NINJA) if (player.weapon == WEAPON_NINJA)

View file

@ -113,7 +113,7 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
gfx_texture_set(-1); gfx_texture_set(-1);
gfx_quads_begin(); gfx_quads_begin();
gfx_setcolor(0,0,0,0.5f); gfx_setcolor(0,0,0,0.5f);
draw_round_rect(x-10.f, y-10.f, w, h, 40.0f); draw_round_rect(x-10.f, y-10.f, w, h, 17.0f);
gfx_quads_end(); gfx_quads_end();
// render title // render title
@ -157,10 +157,14 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
if(item.type == NETOBJTYPE_PLAYER_INFO) if(item.type == NETOBJTYPE_PLAYER_INFO)
{ {
players[num_players] = (const NETOBJ_PLAYER_INFO *)data; const NETOBJ_PLAYER_INFO *info = (const NETOBJ_PLAYER_INFO *)data;
if(info->team == team)
{
players[num_players] = info;
num_players++; num_players++;
} }
} }
}
// sort players // sort players
for(int k = 0; k < num_players; k++) // ffs, bubblesort for(int k = 0; k < num_players; k++) // ffs, bubblesort
@ -182,24 +186,34 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
gfx_text(0, x+w-70, y, 24.0f, "Ping", -1); gfx_text(0, x+w-70, y, 24.0f, "Ping", -1);
y += 29.0f; y += 29.0f;
float font_size = 35.0f;
float line_height = 50.0f;
float tee_sizemod = 1.0f;
float tee_offset = 0.0f;
if(num_players > 13)
{
font_size = 30.0f;
line_height = 40.0f;
tee_sizemod = 0.8f;
tee_offset = -5.0f;
}
// render player scores // render player scores
for(int i = 0; i < num_players; i++) for(int i = 0; i < num_players; i++)
{ {
const NETOBJ_PLAYER_INFO *info = players[i]; const NETOBJ_PLAYER_INFO *info = players[i];
// make sure that we render the correct team // make sure that we render the correct team
if(team == -1 || info->team != team)
continue;
char buf[128]; char buf[128];
float font_size = 35.0f;
if(info->local) if(info->local)
{ {
// background so it's easy to find the local player // background so it's easy to find the local player
gfx_texture_set(-1); gfx_texture_set(-1);
gfx_quads_begin(); gfx_quads_begin();
gfx_setcolor(1,1,1,0.25f); gfx_setcolor(1,1,1,0.25f);
draw_round_rect(x, y, w-20, 48, 20.0f); draw_round_rect(x, y, w-20, line_height*0.95f, 17.0f);
gfx_quads_end(); gfx_quads_end();
} }
@ -228,10 +242,12 @@ void SCOREBOARD::render_scoreboard(float x, float y, float w, int team, const ch
gfx_quads_end(); gfx_quads_end();
} }
render_tee(ANIMSTATE::get_idle(), &gameclient.clients[info->cid].render_info, EMOTE_NORMAL, vec2(1,0), vec2(x+90, y+28)); TEE_RENDER_INFO teeinfo = gameclient.clients[info->cid].render_info;
teeinfo.size *= tee_sizemod;
render_tee(ANIMSTATE::get_idle(), &teeinfo, EMOTE_NORMAL, vec2(1,0), vec2(x+90, y+28+tee_offset));
y += 50.0f; y += line_height;
} }
} }

View file

@ -37,9 +37,9 @@ enum
TILERENDERFLAG_EXTEND=4, TILERENDERFLAG_EXTEND=4,
}; };
typedef struct SPRITE; //typedef struct SPRITE;
void select_sprite(SPRITE *spr, int flags=0, int sx=0, int sy=0); void select_sprite(struct SPRITE *spr, int flags=0, int sx=0, int sy=0);
void select_sprite(int id, int flags=0, int sx=0, int sy=0); void select_sprite(int id, int flags=0, int sx=0, int sy=0);
void draw_sprite(float x, float y, float size); void draw_sprite(float x, float y, float size);

View file

@ -1168,14 +1168,14 @@ static void do_map_editor(RECT view, RECT toolbar)
ui_set_hot_item(editor_id); ui_set_hot_item(editor_id);
// do global operations like pan and zoom // do global operations like pan and zoom
if(ui_active_item() == 0 && ui_mouse_button(0)) if(ui_active_item() == 0 && (ui_mouse_button(0) || ui_mouse_button(2)))
{ {
start_wx = wx; start_wx = wx;
start_wy = wy; start_wy = wy;
start_mx = mx; start_mx = mx;
start_my = my; start_my = my;
if(inp_key_pressed(KEY_LCTRL) || inp_key_pressed(KEY_RCTRL)) if(inp_key_pressed(KEY_LCTRL) || inp_key_pressed(KEY_RCTRL) || ui_mouse_button(2))
{ {
if(inp_key_pressed(KEY_LSHIFT)) if(inp_key_pressed(KEY_LSHIFT))
operation = OP_PAN_EDITOR; operation = OP_PAN_EDITOR;
@ -2416,6 +2416,7 @@ static int popup_menu_file(RECT view)
static int save_as_button = 0; static int save_as_button = 0;
static int open_button = 0; static int open_button = 0;
static int append_button = 0; static int append_button = 0;
static int exit_button = 0;
RECT slot; RECT slot;
ui_hsplit_t(&view, 2.0f, &slot, &view); ui_hsplit_t(&view, 2.0f, &slot, &view);
@ -2457,6 +2458,14 @@ static int popup_menu_file(RECT view)
return 1; return 1;
} }
ui_hsplit_t(&view, 10.0f, &slot, &view);
ui_hsplit_t(&view, 12.0f, &slot, &view);
if(do_editor_button(&exit_button, "Exit", 0, &slot, draw_editor_button_menuitem, 0, "Exits from the editor"))
{
config.cl_editor = 0;
return 1;
}
return 0; return 0;
} }

View file

@ -546,10 +546,10 @@ void CHARACTER::tick()
float phys_size = 28.0f; float phys_size = 28.0f;
// handle death-tiles // handle death-tiles
if(col_get((int)(pos.x+phys_size/2), (int)(pos.y-phys_size/2))&COLFLAG_DEATH || if(col_get((int)(pos.x+phys_size/3), (int)(pos.y-phys_size/3))&COLFLAG_DEATH ||
col_get((int)(pos.x+phys_size/2), (int)(pos.y+phys_size/2))&COLFLAG_DEATH || col_get((int)(pos.x+phys_size/3), (int)(pos.y+phys_size/3))&COLFLAG_DEATH ||
col_get((int)(pos.x-phys_size/2), (int)(pos.y-phys_size/2))&COLFLAG_DEATH || col_get((int)(pos.x-phys_size/3), (int)(pos.y-phys_size/3))&COLFLAG_DEATH ||
col_get((int)(pos.x-phys_size/2), (int)(pos.y+phys_size/2))&COLFLAG_DEATH) col_get((int)(pos.x-phys_size/3), (int)(pos.y+phys_size/3))&COLFLAG_DEATH)
{ {
die(player->client_id, WEAPON_WORLD); die(player->client_id, WEAPON_WORLD);
} }

View file

@ -216,11 +216,8 @@ void FLAG::reset()
void FLAG::snap(int snapping_client) void FLAG::snap(int snapping_client)
{ {
NETOBJ_FLAG *flag = (NETOBJ_FLAG *)snap_new_item(NETOBJTYPE_FLAG, team, sizeof(NETOBJ_FLAG)); NETOBJ_FLAG *flag = (NETOBJ_FLAG *)snap_new_item(NETOBJTYPE_FLAG, team, sizeof(NETOBJ_FLAG));
if(!networkclipped(snapping_client, pos))
{
flag->x = (int)pos.x; flag->x = (int)pos.x;
flag->y = (int)pos.y; flag->y = (int)pos.y;
}
flag->team = team; flag->team = team;
flag->carried_by = -1; flag->carried_by = -1;

View file

@ -257,7 +257,7 @@ void mods_message(int msgtype, int client_id)
return; return;
} }
str_format(chatmsg, sizeof(chatmsg), "Vote called to kick '%s'", server_clientname(kick_id)); str_format(chatmsg, sizeof(chatmsg), "%s called for vote to kick '%s'", server_clientname(client_id), server_clientname(kick_id));
str_format(desc, sizeof(desc), "Kick '%s'", server_clientname(kick_id)); str_format(desc, sizeof(desc), "Kick '%s'", server_clientname(kick_id));
str_format(cmd, sizeof(cmd), "kick %d", kick_id); str_format(cmd, sizeof(cmd), "kick %d", kick_id);
if (!config.sv_vote_kick_bantime) if (!config.sv_vote_kick_bantime)

View file

@ -1,4 +1,4 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include "generated/nethash.c" #include "generated/nethash.c"
#define GAME_VERSION "0.5.1" #define GAME_VERSION "trunk"
#define GAME_NETVERSION "0.5 " GAME_NETVERSION_HASH #define GAME_NETVERSION "0.5 " GAME_NETVERSION_HASH