about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/engine/system.c2
-rw-r--r--src/game/client/cl_skin.cpp2
-rw-r--r--src/game/client/game_client.cpp16
-rw-r--r--src/game/client/menu2.cpp30
-rw-r--r--src/game/game_protocol.h2
-rw-r--r--src/game/game_variables.h2
-rw-r--r--src/game/server/srv_ctf.cpp7
7 files changed, 39 insertions, 22 deletions
diff --git a/src/engine/system.c b/src/engine/system.c
index 4a7670eb..56981022 100644
--- a/src/engine/system.c
+++ b/src/engine/system.c
@@ -31,7 +31,7 @@
 	#include <windows.h>
 	#include <winsock2.h>
 	#include <ws2tcpip.h>
-	#include <shlobj.h> // for SHGetFolderPathAndSubDir
+	#include <shlobj.h> /* for SHGetFolderPathAndSubDir */
 	#include <fcntl.h>
 	#include <direct.h>
 	#include <errno.h>
diff --git a/src/game/client/cl_skin.cpp b/src/game/client/cl_skin.cpp
index fcdd0207..c0e747ac 100644
--- a/src/game/client/cl_skin.cpp
+++ b/src/game/client/cl_skin.cpp
@@ -10,7 +10,7 @@ enum
 	MAX_SKINS=256,
 };
 
-static skin skins[MAX_SKINS] = {0};
+static skin skins[MAX_SKINS] = {{0}};
 static int num_skins = 0;
 
 static void skinscan(const char *name, int is_dir, void *user)
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index 4d81c344..d8a20fa1 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -41,6 +41,7 @@ enum
 
 static int chat_mode = CHATMODE_NONE;
 bool menu_active = false;
+bool menu_game_active = false;
 static bool emoticon_selector_active = false;
 
 static vec2 mouse_pos;
@@ -959,7 +960,7 @@ static void render_flag(const obj_flag *prev, const obj_flag *current)
 
 	vec2 pos = mix(vec2(prev->x, prev->y), vec2(current->x, current->y), client_intratick());
 
-	if(current->local_carry)
+	if(local_info && current->carried_by == local_info->clientid)
 		pos = local_character_pos;
 
     gfx_setcolor(current->team ? 0 : 1,0,current->team ? 1 : 0,1);
@@ -1989,7 +1990,11 @@ void render_game()
 		if (chat_mode)
 			chat_mode = CHATMODE_NONE;
 		else
+		{
 			menu_active = !menu_active;
+			if(menu_active)
+				menu_game_active = true;
+		}
 	}
 
 	// handle chat input
@@ -2610,11 +2615,18 @@ void menu_do_connected();
 extern "C" void modc_statechange(int state, int old)
 {
 	if(state == CLIENTSTATE_OFFLINE)
+	{
 	 	menu_do_disconnected();
+	 	menu_game_active = false;
+	}
 	if(state == CLIENTSTATE_CONNECTING)
 		menu_do_connecting();
 	if (state == CLIENTSTATE_ONLINE)
+	{
+		menu_active = false;
+	 	menu_game_active = true;
 		menu_do_connected();
+	}
 }
 
 extern "C" void modc_message(int msg)
@@ -2703,8 +2715,6 @@ extern "C" void modc_connected()
 		killmsgs[i].tick = -100000;
 		
 	send_info(true);
-	
-	config.ui_page = 5;
 }
 
 extern "C" const char *modc_net_version() { return TEEWARS_NETVERSION; }
diff --git a/src/game/client/menu2.cpp b/src/game/client/menu2.cpp
index d6014b87..f5556bd7 100644
--- a/src/game/client/menu2.cpp
+++ b/src/game/client/menu2.cpp
@@ -30,6 +30,7 @@ extern data_container *data;
 // abit uglyness
 extern const obj_player_info *local_info;
 extern bool menu_active;
+extern bool menu_game_active;
 
 
 //static vec4 gui_color(0.9f,0.78f,0.65f, 0.5f);
@@ -68,7 +69,7 @@ enum
 	PAGE_LAN,
 	PAGE_FAVORITES,
 	PAGE_SETTINGS,
-	PAGE_GAME,
+	//PAGE_GAME, // not a real page
 	PAGE_SYSTEM,
 };
 
@@ -649,13 +650,18 @@ static int menu2_render_menubar(RECT r)
 	RECT box = r;
 	RECT button;
 	
+	int current_page = config.ui_page;
+	int active_page = config.ui_page;
+	if(menu_game_active)
+		active_page = -1;
+	
 	if(client_state() == CLIENTSTATE_OFFLINE)
 	{
 		if(0) // this is not done yet
 		{
 			ui2_vsplit_l(&box, 90.0f, &button, &box);
 			static int news_button=0;
-			if (ui2_do_button(&news_button, "News", config.ui_page==PAGE_NEWS, &button, ui2_draw_menu_tab_button, 0))
+			if (ui2_do_button(&news_button, "News", active_page==PAGE_NEWS, &button, ui2_draw_menu_tab_button, 0))
 				config.ui_page = PAGE_NEWS;
 			ui2_vsplit_l(&box, 30.0f, 0, &box); 
 		}
@@ -664,14 +670,15 @@ static int menu2_render_menubar(RECT r)
 	{
 		ui2_vsplit_l(&box, 90.0f, &button, &box);
 		static int game_button=0;
-		if (ui2_do_button(&game_button, "Game", config.ui_page==PAGE_GAME, &button, ui2_draw_menu_tab_button, 0))
-			config.ui_page = PAGE_GAME;
+		if (ui2_do_button(&game_button, "Game", menu_game_active, &button, ui2_draw_menu_tab_button, 0))
+			menu_game_active = true;
+			
 		ui2_vsplit_l(&box, 30.0f, 0, &box);
 	}
 		
 	ui2_vsplit_l(&box, 110.0f, &button, &box);
 	static int internet_button=0;
-	if (ui2_do_button(&internet_button, "Internet", config.ui_page==PAGE_INTERNET, &button, ui2_draw_menu_tab_button, 0))
+	if (ui2_do_button(&internet_button, "Internet", active_page==PAGE_INTERNET, &button, ui2_draw_menu_tab_button, 0))
 	{
 		client_serverbrowse_refresh(0);
 		config.ui_page = PAGE_INTERNET;
@@ -680,7 +687,7 @@ static int menu2_render_menubar(RECT r)
 	ui2_vsplit_l(&box, 4.0f, 0, &box);
 	ui2_vsplit_l(&box, 90.0f, &button, &box);
 	static int lan_button=0;
-	if (ui2_do_button(&lan_button, "LAN", config.ui_page==PAGE_LAN, &button, ui2_draw_menu_tab_button, 0))
+	if (ui2_do_button(&lan_button, "LAN", active_page==PAGE_LAN, &button, ui2_draw_menu_tab_button, 0))
 	{
 		client_serverbrowse_refresh(1);
 		config.ui_page = PAGE_LAN;
@@ -691,7 +698,7 @@ static int menu2_render_menubar(RECT r)
 		ui2_vsplit_l(&box, 4.0f, 0, &box);
 		ui2_vsplit_l(&box, 120.0f, &button, &box);
 		static int favorites_button=0;
-		if (ui2_do_button(&favorites_button, "Favorites", config.ui_page==PAGE_FAVORITES, &button, ui2_draw_menu_tab_button, 0))
+		if (ui2_do_button(&favorites_button, "Favorites", active_page==PAGE_FAVORITES, &button, ui2_draw_menu_tab_button, 0))
 			config.ui_page = PAGE_FAVORITES;
 	}
 
@@ -705,8 +712,11 @@ static int menu2_render_menubar(RECT r)
 	*/
 	ui2_vsplit_r(&box, 110.0f, &box, &button);
 	static int settings_button=0;
-	if (ui2_do_button(&settings_button, "Settings", config.ui_page==PAGE_SETTINGS, &button, ui2_draw_menu_tab_button, 0))
+	if (ui2_do_button(&settings_button, "Settings", active_page==PAGE_SETTINGS, &button, ui2_draw_menu_tab_button, 0))
 		config.ui_page = PAGE_SETTINGS;
+	
+	if(current_page != config.ui_page)
+		menu_game_active = false;
 		
 	return 0;
 }
@@ -1380,8 +1390,6 @@ static void menu2_render_game(RECT main_view)
 	if(ui2_do_button(&disconnect_button, "Disconnect", 0, &button, ui2_draw_menu_button, 0))
 		client_disconnect();
 
-
-
 	if(local_info)
 	{
 		if(local_info->team != -1)
@@ -1487,7 +1495,7 @@ int menu2_render()
 	//ui2_hsplit_b(&main_view, 26.0f, &main_view, &bottom_bar);
 		
 	// render current page
-	if(config.ui_page == PAGE_GAME)
+	if(menu_game_active)
 		menu2_render_game(main_view);
 	else if(config.ui_page == PAGE_NEWS)
 		menu2_render_news(main_view);
diff --git a/src/game/game_protocol.h b/src/game/game_protocol.h
index d2f2b6e5..eb59590a 100644
--- a/src/game/game_protocol.h
+++ b/src/game/game_protocol.h
@@ -160,7 +160,7 @@ struct obj_flag
 {
 	int x, y;
 	int team;
-	int local_carry; // is set if the local player has the flag
+	int carried_by; // is set if the local player has the flag
 };
 
 // core object needed for physics
diff --git a/src/game/game_variables.h b/src/game/game_variables.h
index e183658e..fb617214 100644
--- a/src/game/game_variables.h
+++ b/src/game/game_variables.h
@@ -46,7 +46,7 @@ MACRO_CONFIG_STR(player_skin, 64, "default")
 
 MACRO_CONFIG_INT(dbg_new_gui, 0, 0, 1)
 
-MACRO_CONFIG_INT(ui_page, 0, 0, 5)
+MACRO_CONFIG_INT(ui_page, 1, 0, 5)
 MACRO_CONFIG_STR(ui_server_address, 128, "localhost:8303")
 
 
diff --git a/src/game/server/srv_ctf.cpp b/src/game/server/srv_ctf.cpp
index c4cbd574..42061a5c 100644
--- a/src/game/server/srv_ctf.cpp
+++ b/src/game/server/srv_ctf.cpp
@@ -129,9 +129,8 @@ void flag::snap(int snapping_client)
 	flag->x = (int)pos.x;
 	flag->y = (int)pos.y;
 	flag->team = team;
+	flag->carried_by = -1;
 	
-	if(carrying_player && carrying_player->client_id == snapping_client)
-		flag->local_carry = 1;
-	else
-		flag->local_carry = 0;
+	if(carrying_player)
+		flag->carried_by = carrying_player->client_id;
 }