diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/client.qc flashlt/client.qc
--- v101qc/client.qc	Thu Jul 25 01:51:22 1996
+++ flashlt/client.qc	Mon Aug  5 19:53:31 1996
@@ -466,6 +466,7 @@
 	self.invincible_finished = 0;
 	self.effects = 0;
 	self.invincible_time = 0;
+	self.impulsehandler=DefaultImpulseCommands;
 
 	DecodeLevelParms ();
 	
diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/config.cfg flashlt/config.cfg
--- v101qc/config.cfg	Wed Dec 31 18:00:00 1969
+++ flashlt/config.cfg	Mon Aug  5 19:53:32 1996
@@ -0,0 +1,89 @@
+bind TAB "+showscores                     "
+bind ENTER "+jump                     "
+bind ESCAPE "togglemenu                     "
+bind SPACE "+jump                     "
+bind + "sizeup                     "
+bind , "+moveleft                     "
+bind - "sizedown                     "
+bind . "+moveright                     "
+bind / "impulse 10                     "
+bind 0 "impulse 12    "
+bind 1 "impulse 1                     "
+bind 2 "impulse 2                     "
+bind 3 "impulse 3                     "
+bind 4 "impulse 4                     "
+bind 5 "impulse 5                     "
+bind 6 "impulse 6                     "
+bind 7 "impulse 7                     "
+bind 8 "impulse 8                     "
+bind = "give h 100               "
+bind [ "out11            "
+bind \ "+mlook                     "
+bind ] "in45            "
+bind ` "toggleconsole                     "
+bind a "centerview                     "
+bind b "+movedown                "
+bind c "+movedown                     "
+bind d "+moveup                     "
+bind e "+forward                "
+bind f "+right                "
+bind g "+jump                "
+bind o "bf            "
+bind p "zoom45            "
+bind q "+lookup                     "
+bind r "               "
+bind s "+left                "
+bind t "messagemode                     "
+bind v "+moveright                "
+bind x "+moveleft                "
+bind z "+lookdown                     "
+bind ~ "toggleconsole                     "
+bind UPARROW "+forward                     "
+bind DOWNARROW "+back                     "
+bind LEFTARROW "+left                     "
+bind RIGHTARROW "+right                     "
+bind ALT "+strafe                     "
+bind CTRL "+attack                     "
+bind SHIFT "+speed                     "
+bind F1 "help                     "
+bind F2 "menu_save                     "
+bind F3 "menu_load                     "
+bind F4 "menu_options                     "
+bind F5 "menu_multiplayer                     "
+bind F6 "echo Quicksaving...; wait; save quick                     "
+bind F9 "echo Quickloading...; wait; load quick                     "
+bind F10 "quit                     "
+bind F11 "zoom_in                 "
+bind F12 "screenshot                     "
+bind INS "+klook                     "
+bind DEL "+mlook                 "
+bind PGDN "+moveright                     "
+bind END "+moveleft                     "
+bind MOUSE1 "+attack                     "
+bind MOUSE2 "+forward                     "
+bind MOUSE3 "+mlook                     "
+bind PAUSE "pause                     "
+joybuttons "4"
+m_pitch "0.022"
+sensitivity "5.00"
+lookstrafe "0"
+lookspring "0.000000"
+cl_backspeed "400.000000"
+cl_forwardspeed "400.000000"
+_cl_color "51.000000"
+_cl_name "Synger"
+bgmvolume "1"
+volume "1.000000"
+viewsize "100"
+_vid_default_mode "0.000000"
+_vid_wait_override "0"
+vid_nopageflip "0"
+_config_modem_hangup "AT H"
+_config_modem_init ""
+_config_modem_clear "ATZ"
+_config_modem_dialtype "T"
+_config_com_modem "1.000000"
+_config_com_baud "57600.000000"
+_config_com_irq "4.000000"
+_config_com_port "1016.000000"
+gamma "0.950000"
diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/defs.qc flashlt/defs.qc
--- v101qc/defs.qc	Thu Jul 25 01:51:22 1996
+++ flashlt/defs.qc	Mon Aug  5 19:53:32 1996
@@ -690,4 +690,6 @@
 
 float(entity targ, entity inflictor) CanDamage;
 
-
+.void() impulsehandler;
+.float it_flashlight_on;
+.entity it_flashlight_entity;
diff -ur --new-file -x progs.dat -x progdefs.h -x *.bak -x *~ -x *.rej v101qc/weapons.qc flashlt/weapons.qc
--- v101qc/weapons.qc	Thu Jul 25 01:51:24 1996
+++ flashlt/weapons.qc	Mon Aug  5 19:53:33 1996
@@ -1130,6 +1130,66 @@
 
 };
 
+void() it_flashlight_aim = {
+	local vector direction, src;
+	local entity pl;
+	local float temp;
+	pl=self.owner;
+//	if(pl.ammo_cells < 0 || ! pl.flags & FL_GODMODE) {
+//		pl.it_flashlight_on=0;
+//		pl.it_flashlight_entity=world;
+//		remove(self);
+//		return;
+//	}
+	makevectors(pl.v_angle);
+	
+	src = pl.origin + v_forward*10;
+	src_z = pl.absmin_z + pl.size_z * 0.7;
+
+	direction=aim(pl, 100000);
+	traceline(src, src + direction * 2048, FALSE, pl);
+	src=0.1*src+0.9*trace_endpos;
+	setorigin(self, src);
+
+//	dprint(vtos(trace_endpos));
+//	dprint("\n");
+
+	self.nextthink=time+0.05;
+//	if(pl.ammo_cells==0) return; /* God mode */
+//	temp=pl.ammo_cells;
+//	if(pl.currentammo==temp) /* FIXME */
+//		pl.currentammo=temp - 1;
+//	pl.ammo_cells=temp - 1;
+};
+
+void() I_FlashlightToggle =
+{
+	local entity oldself;
+	if(self.it_flashlight_on) {
+		if(self.it_flashlight_entity) remove(self.it_flashlight_entity);
+		self.it_flashlight_entity=world;
+		self.it_flashlight_on=0;
+	} else {
+		self.it_flashlight_on=1;
+		oldself=self;
+		self.it_flashlight_entity=spawn();
+		self=self.it_flashlight_entity;
+
+		self.movetype= MOVETYPE_NONE;
+		self.solid = SOLID_NOT;
+		setmodel(self, "progs/eyes.mdl");
+		setsize (self, '0 0 0', '0 0 0');		
+		
+		self.effects=self.flags=EF_DIMLIGHT;
+		self.owner=oldself;
+		self.nextthink=time+1;
+		self.think=it_flashlight_aim;
+		it_flashlight_aim();
+		self=oldself;
+	}
+		
+};
+
 /*
 ============
 ServerflagsCommand
@@ -1158,7 +1218,8 @@
 
 ============
 */
-void() ImpulseCommands =
+void() ExtendedImpulseCommands;
+void() DefaultImpulseCommands =
 {
 	if (self.impulse >= 1 && self.impulse <= 8)
 		W_ChangeWeapon ();
@@ -1169,11 +1230,49 @@
 		CycleWeaponCommand ();
 	if (self.impulse == 11)
 		ServerflagsCommand ();
+	if(self.impulse==12)
+		I_FlashlightToggle ();
 
+	if (self.impulse == 254)
+		self.impulsehandler=ExtendedImpulseCommands;
 	if (self.impulse == 255)
 		QuadCheat ();
 		
 	self.impulse = 0;
+};
+
+void() WeaponImpulseCommands =
+{
+	self.impulsehandler=DefaultImpulseCommands;
+	if (self.impulse >= 1 && self.impulse <= 8)
+		W_ChangeWeapon ();
+
+	if (self.impulse == 9)
+		CheatCommand ();
+	if (self.impulse == 10)
+		CycleWeaponCommand ();
+};
+
+void() ItemImpulseCommands =
+{
+	self.impulsehandler=DefaultImpulseCommands;
+	if(self.impulse==1)
+		I_FlashlightToggle();
+};
+
+void() ExtendedImpulseCommands =
+{
+	if(self.impulse==254)
+		self.impulsehandler=DefaultImpulseCommands;
+	else if(self.impulse==1)
+		self.impulsehandler=WeaponImpulseCommands;
+	else if(self.impulse==2)
+		self.impulsehandler=ItemImpulseCommands;
+};
+
+void() ImpulseCommands =
+{
+	self.impulsehandler();
 };
 
 /*
