about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-04 08:31:44 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-08-04 08:31:44 +0000
commit2fe7f90a73e80050d80687a997547c8332122f44 (patch)
tree22a5b351a4c9dd91907962eb98d8e25492d371d4 /src/game
parent92816367d1fb5833ad341dbd66c80fe696d683b5 (diff)
downloadzcatch-2fe7f90a73e80050d80687a997547c8332122f44.tar.gz
zcatch-2fe7f90a73e80050d80687a997547c8332122f44.zip
ninja now releases all hooks. you can't hook a player for more then 1.5 second
Diffstat (limited to 'src/game')
-rw-r--r--src/game/server/game_server.cpp17
-rw-r--r--src/game/server/game_server.h3
2 files changed, 18 insertions, 2 deletions
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 669b2757..17604794 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -752,7 +752,7 @@ bool player::is_grounded()
 // releases the hooked player
 void player::release_hooked()
 {
-	hook_state = HOOK_IDLE;
+	hook_state = HOOK_RETRACTED;
 	hooked_player = 0x0;
 }
 
@@ -792,6 +792,10 @@ int player::handle_ninja()
 		numobjectshit = 0;
 
 		create_sound(pos, SOUND_NINJA_FIRE);
+		
+		// release all hooks when ninja is activated
+		release_hooked();
+		release_hooks();
 	}
 
 	currentmovetime--;
@@ -1099,6 +1103,7 @@ void player::tick()
 			hook_state = HOOK_FLYING;
 			hook_pos = pos;
 			hook_dir = direction;
+			hook_tick = -1;
 		}
 		else if(hook_state == HOOK_FLYING)
 		{
@@ -1136,20 +1141,30 @@ void player::tick()
 			}
 			
 			if(hook_state == HOOK_GRABBED)
+			{
 				create_sound(pos, SOUND_HOOK_ATTACH);
+				hook_tick = server_tick();
+			}
 		}
 	}
 	else
 	{
 		release_hooked();
+		hook_state = HOOK_IDLE;
 		hook_pos = pos;
 	}
 		
 	if(hook_state == HOOK_GRABBED)
 	{
 		if(hooked_player)
+		{
 			hook_pos = hooked_player->pos;
 			
+			// keep players hooked for a max of 1.5sec
+			if(server_tick() > hook_tick+(server_tickspeed()*3)/2)
+				release_hooked();
+		}
+			
 		/*if(hooked_player)
 			hook_pos = hooked_player->pos;
 
diff --git a/src/game/server/game_server.h b/src/game/server/game_server.h
index 73b08794..2bc7796e 100644
--- a/src/game/server/game_server.h
+++ b/src/game/server/game_server.h
@@ -266,7 +266,8 @@ public:
 		HOOK_GRABBED
 	};
 	
-	int hook_state; 
+	int hook_state;
+	int hook_tick;
 	player *hooked_player;
 	baselib::vec2 hook_pos;
 	baselib::vec2 hook_dir;