Remember to put these lines into your include/config.h:

#define LIGHTSABERS
#define JEDI
diff -pruN slashem-0.0.7E7F1-orig/dat/Jedi.des slashem-0.0.7E7F1/dat/Jedi.des
--- slashem-0.0.7E7F1-orig/dat/Jedi.des	1970-01-01 01:00:00.000000000 +0100
+++ slashem-0.0.7E7F1/dat/Jedi.des	2005-07-08 10:20:18.326296104 +0200
@@ -0,0 +1,358 @@
+#	SCCS Id: @(#)Knight.des	3.4	1995/04/16
+#	Copyright (c) 1989 by Jean-Christophe Collet
+#	Copyright (c) 1991,92 by M. Stephenson
+# NetHack may be freely redistributed.  See license for details.
+#
+#	The "start" level for the quest.
+#
+#	Here you meet your (besieged) class leader, The Jedi Master
+#	and receive your quest assignment.
+#
+MAZE: "Jed-strt",'.'
+FLAGS: noteleport,hardfloor
+INIT_MAP: '.' , '.' , false , false , unlit , false
+GEOMETRY:center,center
+#         1         2         3         4         5         6         7
+#123456789012345678901234567890123456789012345678901234567890123456789012345
+MAP
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA--------AAAAAAAAAAAAAAAAAAAAAAAAAAA--------AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AAAAAAAAAAAAAAAAAAAAAAAAAAA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA-----------------------AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA|.....................|AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA|.-------------------.|AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA---+----AA|.|.................|.|AA----+---AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAA|.|AAAAA|.|.................|.|AAAAA|.|AAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAA|.------|.|..}...........}..|.|------.|AAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAS.......+.+.................+.+.......SAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAA|.------|.|..}...........}..|.|------.|AAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAA|.|AAAAA|.|.................|.|AAAAA|.|AAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA---+----AA|.|.................|.|AA----+---AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA|.-------------------.|AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA|.....................|AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AA-----------------------AA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA|......|AAAAAAAAAAAAAAAAAAAAAAAAAAA|......|AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA--------AAAAAAAAAAAAAAAAAAAAAAAAAAA--------AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ENDMAP
+RANDOM_PLACES: (57,3), (17,14), (57,14)
+# according to starwars.com the Jedi temple is a tall building high up into
+# the sky. So it seems right to have it being surrounded by Air
+# Dungeon Description
+REGION:(00,00,75,20),unlit,"ordinary"
+REGION:(16,02,23,07),lit,"ordinary"
+REGION:(51,02,63,07),lit,"ordinary"
+REGION:(16,13,23,18),lit,"ordinary"
+REGION:(51,13,63,18),lit,"ordinary"
+REGION:(29,08,45,14),lit,"ordinary"
+# Portal arrival point
+BRANCH:(17,03,0,0),(0,0,0,0)
+# Stairs
+STAIR:place[0],down
+# Doors
+DOOR:closed,(19,07)
+DOOR:closed,(19,13)
+DOOR:locked,(18,10)
+DOOR:locked,(26,10)
+DOOR:locked,(28,10)
+DOOR:locked,(46,10)
+DOOR:locked,(48,10)
+DOOR:locked,(56,10)
+DOOR:closed,(55,13)
+DOOR:closed,(55,07)
+# The Jedi Master
+MONSTER:'@',"The Jedi Master",(37,10)
+# His treasure
+CONTAINER:'(',"chest",place[1]
+OBJECT:'?',"charging",contained
+OBJECT:'?',random,contained
+OBJECT:random,random,contained
+# the remaining Jedi
+MONSTER:'@',"padawan",(38,11),peaceful
+MONSTER:'@',"padawan",(38,09),peaceful
+MONSTER:'@',"padawan",(36,11),peaceful
+MONSTER:'@',"padawan",(36,09),peaceful
+MONSTER:'@',"jedi",(18,4),peaceful
+MONSTER:'@',"jedi",(19,4),peaceful
+MONSTER:'@',"jedi",(18,15),peaceful
+MONSTER:'@',"jedi",(19,15),peaceful
+MONSTER:'@',"jedi",(56,4),peaceful
+MONSTER:'@',"jedi",(57,4),peaceful
+MONSTER:'@',"jedi",(56,15),peaceful
+MONSTER:'@',"jedi",(57,15),peaceful
+MONSTER:'@',"jedi",(33,10),peaceful
+# Non diggable walls
+NON_DIGGABLE:(00,00,75,20)
+# Monsters on siege duty.
+MONSTER: '@',"stormtrooper",(27,05),hostile
+MONSTER: '@',"stormtrooper",(47,05),hostile
+MONSTER: '@',"stormtrooper",(27,15),hostile
+MONSTER: '@',"stormtrooper",(47,15),hostile
+MONSTER: '@',"stormtrooper",(19,10),hostile
+MONSTER: '@',"stormtrooper",(20,10),hostile
+MONSTER: '@',"stormtrooper",(50,10),hostile
+MONSTER: '@',"stormtrooper",(51,10),hostile
+#
+#	The "locate" level for the quest.
+#
+
+MAZE: "Jed-loca",' '
+FLAGS: hardfloor
+INIT_MAP: '.' , '.' , false , false , unlit , false
+GEOMETRY:center,center
+#         1         2         3         4         5         6         7
+#123456789012345678901234567890123456789012345678901234567890123456789012345
+MAP
+................L...........................................................
+...............LLL..........................................................
+..............LLLLL...................  ....................................
+.............LLLLLLL..................  ....................................
+............LLLLLLLLL.............................................. ........
+.............LLLLLLL..............................................   .......
+..............LLLLL..............................................     ......
+...............LLL..............................................   .........
+................L.............................. ...............    .    ....
+...............................................  .............     .     ...
+..............................................     ............    .    ....
+...............................................  ...............       .....
+.............P.................................. ................     ......
+............PPP.....................P.............................   .......
+...........PPPPP...................PPP............................. ........
+............PPP...................PPPPP.....................................
+.............P...................PPPPPPP....................................
+..................................PPPPP.....................................
+...................................PPP......................................
+....................................P.......................................
+............................................................................
+ENDMAP
+# supposed to designate a sun, two water planets, two asteroids and
+# a barren planet made mostly of rock. Yeah, bite me!
+# Stairs
+STAIR:(0,0),up
+STAIR:(67,10),down
+# Objects
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+# Random traps
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+# Random monsters.
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+
+#
+#	The "goal" level for the quest.
+#
+
+MAZE: "Jed-goal", ' '
+INIT_MAP: '.' , '.' , false , false , unlit , false
+GEOMETRY:center,center
+#         1         2         3         4         5         6         7
+#123456789012345678901234567890123456789012345678901234567890123456789012345
+MAP
+.......PP......                                                             
+......P......     .............................    ...............          
+.....P.PP....    .......L................L.....     .......L.......         
+..PPPPP.....   ........L.L..............L.....    ........LL........        
+...P.PP......    ....LL...L..L.....LL..LL....   ........L....L........      
+...PP.P....    ............LLL...L..L.LL....      .....L......L.......      
+...P...P....   ......LL....L..L.L....LL........     ...............         
+...PPPPP..............L...L..L.L....LL........   ......L....LL.....         
+..P.P................L..LL....L....L.L.......     .........L.L......        
+........................L......L..L.L........HHH......L..LL..L.......       
+....P....    ..........LL....L.L.L..L........   ......LL..LL.L.....         
+....PPP...    .........LL...L.L.L..LL........   .....L..LL..LL.....         
+....PP......    ............L.L....L.......   .......LLL.L..........        
+....P..P.....   ........L.....L.....L.....   .......L.L...LLLLL......       
+...PP..PP.....  ........L....L.L..L........   .....LL..LL.L..L......        
+..PP..P.P....    ........L..L...L.L.........   ....LLLLLLLLL.L.........     
+...PPP..P.....     ........LL....L..........  ........LL.LL.........        
+....PP.P.......     .........................    ................           
+....P.PP.......       .........................    ...........              
+..............                                                              
+ENDMAP
+# yeah, it's the slightly modified knight quest
+# Stairs
+STAIR:(03,08),up
+# Non diggable walls
+NON_DIGGABLE:(00,00,75,19)
+# Objects
+OBJECT:'(',"red lightsaber",(60,06),blessed,0,"The Lightsaber Prototype"
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+# Random traps
+TRAP:"spiked pit",(13,07)
+TRAP:"spiked pit",(12,08)
+TRAP:"spiked pit",(12,09)
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+# Random monsters.
+MONSTER:'@',"Lord Sidious",(60,06),hostile
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+MONSTER:'@',"stormtrooper",random,hostile
+
+#
+#	The "fill" levels for the quest.
+#
+#	These levels are used to fill out any levels not occupied by specific
+#	levels as defined above. "filla" is the upper filler, between the
+#	start and locate levels, and "fillb" the lower between the locate
+#	and goal levels.
+#
+
+MAZE: "Jed-fila" , '.'
+INIT_MAP: '.' , '.' , false , true , unlit , false
+NOMAP
+#
+STAIR: random, up
+STAIR: random, down
+#
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+#
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+#
+TRAP: random, random
+TRAP: random, random
+TRAP: random, random
+TRAP: random, random
+
+MAZE: "Jed-filb" , '.'
+INIT_MAP: '.' , '.' , false , true , lit , false
+NOMAP
+#
+STAIR: random, up
+STAIR: random, down
+#
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+OBJECT: random, random, random
+#
+MONSTER:'@',"jedi",random,peaceful
+MONSTER:'@',"jedi",random,peaceful
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+MONSTER: '@', "stormtrooper", random, hostile
+#
+TRAP: random, random
+TRAP: random, random
+TRAP: random, random
+TRAP: random, random
diff -pruN slashem-0.0.7E7F1-orig/dat/quest.txt slashem-0.0.7E7F1/dat/quest.txt
--- slashem-0.0.7E7F1-orig/dat/quest.txt	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/dat/quest.txt	2005-07-08 10:20:25.756166592 +0200
@@ -1588,6 +1588,243 @@ speaks of you.
 "This is all I know, %p.  I hope it will help you."
 %E
 #
+#       Jedi
+#
+%Cc Jed 00001
+You are back at %H where you were raised and trained during your youth.
+You fondly remember your mentor, %l, and your fellow %g.
+Looking around, to the eye everything looks normal. You wonder why
+%l would call you here without necessity.
+
+Then some stormtroopers jump from the shadows...
+%E
+%Cp Jed 00002
+Once again you are back at %H.
+%E
+%Cp Jed 00003
+Again, you stand before %H.  You vaguely sense that this
+may be the last time you stand before %l.
+%E
+%Cp Jed 00005
+"Hello, %p. May the force be with you!"
+%E
+%Cp Jed 00006
+"%p, it seems the force has left us..."
+%E
+%Cp Jed 00007
+"The dark side is strong, or so they tell us."
+%E
+%Cp Jed 00008
+"If the dark side is so powerful, why not use its power for us?"
+%E
+%Cp Jed 00009
+"What shall we do, %p?"
+%E
+%Cp Jed 00010
+"Hello, %p. May the force be with you!"
+%E
+%Cp Jed 00011
+"The force has led us to victory!"
+%E
+%Cp Jed 00012
+"Will the Sith ever be defeated?"
+%E
+%Cp Jed 00013
+"So you defeated %n?"
+%E
+%Cp Jed 00014
+"Is this the fabled %o?"
+%E
+%Cc Jed 00015
+"It's good to see you again, %p. I'm glad you got our transmission.
+Let me check if you are capable of helping us in this dark hour."
+%E
+%Cp Jed 00016
+"The force is strong in you, %p. But is it strong enough now?"
+%E
+%Cp Jed 00017
+"Again, you are back, %p. Have you enhanced your knowledge of the force
+far enough now?"
+%E
+%Cc Jed 00018
+"You are arrogant, %p. This is the way to the Dark Side. Unfortunately,
+we cannot allow you to walk the halls of %H anymore to protect our %gP.
+Leave, now, and never return here, or we will have to deal with you
+in ways other than words."
+%E
+%Cc Jed 00019
+"The force is strong within you, %p. But sadly, a mere %r could never
+hope to be a help in this dark hour.
+Go and learn more of the way of the force. When you reached the skills
+of a %R, return here.
+
+May the force be with you!"
+%E
+%Cc Jed 00020
+"You have strayed from the light side of the force! Leave, now!
+And return only when you made up your mind about which way to
+follow."
+%E
+%Cc Jed 00021
+"Ah, %p. You have become a fine %r, you have become skilled in using
+the force and the ways of the Jedi. As such, you must help us:"
+
+"As you surely noticed, war has broken out between the Sith and the
+Jedi. Stormtroopers, Sith and Jedi are desperately fighting and
+dying for what they believe in."
+
+"What they are fighting over? A mighty artifact, %o.
+It is the first lightsaber ever made and has powers greater than any
+lightsaber in use today. It never runs out of power and has a built-in
+targeting device."
+
+"It was also thought to be lost forever, but eventually a merchant
+discovered it in the outer rim and announced it for sale. Needless to
+say, that merchant was no longer alive when we got there, slaughtered
+by the Sith, who - despite all their efforts - couldn't get their hands
+on it yet."
+
+"We need your help in this matter. Every man on the front in the outer
+rim counts."
+
+"Oh, and we got word that %n himself has gone to the outer rim to claim
+%o. You better hurry."
+
+"May the force be with you!"
+%E
+%Cp Jed 00025
+"Remember, %p, follow always the path of the %d."
+%E
+%Cp Jed 00026
+"May the force be with you!"
+%E
+%Cp Jed 00027
+"Remember, %p, follow always the path of the %d."
+%E
+%Cp Jed 00028
+"May the force be with you!"
+%E
+%Cp Jed 00029
+"Remember, %p, follow always the path of the %d."
+%E
+%Cp Jed 00030
+"May the force be with you!"
+%E
+%Cp Jed 00031
+"Remember, %p, follow always the path of the %d."
+%E
+%Cp Jed 00032
+"May the force be with you!"
+%E
+%Cp Jed 00033
+"Remember, %p, follow always the path of the %d."
+%E
+%Cp Jed 00034
+"May the force be with you!"
+%E
+%Cc Jed 00035
+You arrive at the %i.
+Following the emanations of the force, you work your way through the
+different planets trying to locate %o.
+%E
+%Cp Jed 00036
+Again, you arrive at the %i.
+%E
+%Cc Jed 00040
+You arrive at an unnamed planet.
+You can feel large disturbances in the force before you, like huge
+armies crossing weapons.
+You know that you must hurry in order to not disappoint %l.
+%E
+%Cp Jed 00041
+Again, you arrive at the unnamed planet.
+%E
+%Cc Jed 00050
+"Again, %l sends a worthless %c to get %o from me?
+Well, I can give you a choice: Join me!"
+%E
+%Cp Jed 00051
+"Again, you challenge me, %r? You can't beat the dark side of the force!"
+%E
+%Cp Jed 00052
+"Haven't you learned your lesson yet? I shall teach it to you now!"
+%E
+%Cp Jed 00053
+"Got your hands on %o, little %c? You will not be able to draw all its
+powers anyway. Now, you wouldn't kill an unarmed, would you?"
+%E
+%Cp Jed 00060
+"Join the dark side and you'll be granted powers beyond your wildest dreams!"
+%E
+%Cp Jed 00061
+"%l's faith in you is his weak point!"
+%E
+%Cp Jed 00062
+"A %c you want to be? I call you a %g!"
+%E
+%Cp Jed 00063
+"Join the dark side and you'll be granted powers beyond your wildest dreams!"
+%E
+%Cp Jed 00064
+"%l's faith in you is his weak point!"
+%E
+%Cp Jed 00065
+"A %c you want to be? I call you a %g!"
+%E
+%Cp Jed 00066
+"Join the dark side and you'll be granted powers beyond your wildest dreams!"
+%E
+%Cp Jed 00067
+"%l's faith in you is his weak point!"
+%E
+%Cp Jed 00068
+"A %c you want to be? I call you a %g!"
+%E
+%Cp Jed 00069
+"Join the dark side and you'll be granted powers beyond your wildest dreams!"
+%E
+%Cc Jed 00070
+You have %o in your hands.
+Force surrounds it like air surrounds a planet. You can see why no
+other lightsaber was made like this one.
+%E
+%Cc Jed 00080
+You finally manage to land the final blow against %n.
+But as you just want to claim your victory, his body dissolves into
+nothingness.
+
+"You can't win against %n! I will be back!"
+
+You feel a shiver run up and down your spine as you head back
+to %l.
+%E
+%Cc Jed 00081
+As you approach %l, he beams at you and says:
+
+	You have not disappointed the halls of %H.
+	The war is over, %o is secured and peace
+	can be restored.
+
+	Though %n escaped us again, we will not rest until he is
+	destroyed. The Sith must never return to power.
+%E
+%Cc Jed 00082
+"Be careful with %o. Though it gives great power, it also requires
+great responsibility from its owner. Use the portal to return to
+%Z and find the Amulet of Yendor.
+%E
+%Cp Jed 00090
+"Welcome back, %p. How is the search for the Amulet of Yendor?"
+%E
+%Cc Jed 00091
+"You really are a %S of %H."
+
+"Ancient Jedi Legends tell us that the amulet must be brought to
+a place called 'The Astral Plane' and offered to %d there."
+
+"May the force be with you, %p."
+%E
+#
 #       Knight
 #
 %Cc Kni 00001
diff -pruN slashem-0.0.7E7F1-orig/include/artilist.h slashem-0.0.7E7F1/include/artilist.h
--- slashem-0.0.7E7F1-orig/include/artilist.h	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/include/artilist.h	2005-07-08 10:20:25.758166288 +0200
@@ -427,6 +427,13 @@ A("The Crown of Saint Edward", HELM_OF_T
 	0,  A_LAWFUL, PM_YEOMAN, NON_PM, 5000L ),
 #endif
 
+#ifdef JEDI
+A("The Lightsaber Prototype", RED_LIGHTSABER,
+	(SPFX_NOGEN|SPFX_RESTR|SPFX_INTEL|SPFX_REFLECT), 0, 0,
+	PHYS(5, 10),	NO_DFNS, NO_CARY,
+	ENERGY_BOOST,	A_LAWFUL, PM_JEDI, NON_PM, 3500L ),
+#endif
+
 /*
  *  terminator; otyp must be zero
  */
diff -pruN slashem-0.0.7E7F1-orig/include/extern.h slashem-0.0.7E7F1/include/extern.h
--- slashem-0.0.7E7F1-orig/include/extern.h	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/include/extern.h	2005-07-08 10:20:25.764165376 +0200
@@ -2061,6 +2061,13 @@ E int FDECL(tech_inuse, (int));
 E void NDECL(tech_timeout);
 E boolean FDECL(tech_known, (SHORT_P));
 E void FDECL(learntech, (SHORT_P,long,int));
+E int FDECL(disarm_holdingtrap, (struct trap *));
+E int FDECL(disarm_rust_trap, (struct trap *));
+E int FDECL(disarm_fire_trap, (struct trap *));
+E int FDECL(disarm_landmine, (struct trap *));
+E int FDECL(disarm_squeaky_board, (struct trap *));
+E int FDECL(disarm_shooting_trap, (struct trap *, int));
+
 
 /* ### teleport.c ### */
 
diff -pruN slashem-0.0.7E7F1-orig/include/tech.h slashem-0.0.7E7F1/include/tech.h
--- slashem-0.0.7E7F1-orig/include/tech.h	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/include/tech.h	2005-07-08 10:20:25.767164920 +0200
@@ -88,8 +88,14 @@ struct blitz_tab {
 #define T_POWER_SURGE 	39
 #define T_SPIRIT_BOMB 	40
 #define T_DRAW_BLOOD	41
+#ifdef JEDI
+#define T_JEDI_JUMP	42
+#define T_TELEKINESIS	43
 
+#define MAXTECH 43
+#else /* JEDI */
 #define MAXTECH 41
+#endif /* JEDI */
 
 
 #endif /* TECH_H */
diff -pruN slashem-0.0.7E7F1-orig/src/apply.c slashem-0.0.7E7F1/src/apply.c
--- slashem-0.0.7E7F1-orig/src/apply.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/apply.c	2005-07-08 10:20:25.772164160 +0200
@@ -1145,7 +1145,15 @@ struct obj *obj;
 			    return;
 			} else obj->altmode = FALSE;
 		    }
-		    lightsaber_deactivate(obj, TRUE);
+#ifdef JEDI
+		    if (obj->oartifact == ART_LIGHTSABER_PROTOTYPE){
+			You("cannot deactivate %s.", yname(obj));
+		    } else {
+#endif
+		    	lightsaber_deactivate(obj, TRUE);
+#ifdef JEDI
+		    }
+#endif
 		    return;
 #endif
 		} else if (artifact_light(obj)) {
@@ -3542,7 +3550,8 @@ doapply()
 #endif
 	case RED_LIGHTSABER:
 	case RED_DOUBLE_LIGHTSABER:
-		if (uwep != obj && !wield_tool(obj, (const char *)0)) break;
+		if (!(uswapwep == obj && u.twoweap))
+		  if (uwep != obj && !wield_tool(obj, (const char *)0)) break;
 		/* Fall through - activate via use_lamp */
 #endif
 	case OIL_LAMP:
diff -pruN slashem-0.0.7E7F1-orig/src/artifact.c slashem-0.0.7E7F1/src/artifact.c
--- slashem-0.0.7E7F1-orig/src/artifact.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/artifact.c	2005-07-08 10:20:25.775163704 +0200
@@ -1883,7 +1883,11 @@ artifact_light(obj)
     struct obj *obj;
 {
     return get_artifact(obj) && (get_artifact(obj)->inv_prop == LIGHT_AREA
-        || obj->oartifact == ART_CANDLE_OF_ETERNAL_FLAME);
+        || obj->oartifact == ART_CANDLE_OF_ETERNAL_FLAME
+#ifdef JEDI
+	|| obj->oartifact == ART_LIGHTSABER_PROTOTYPE
+#endif
+	);
 }
 
 /* KMH -- Talking artifacts are finally implemented */
diff -pruN slashem-0.0.7E7F1-orig/src/attrib.c slashem-0.0.7E7F1/src/attrib.c
--- slashem-0.0.7E7F1-orig/src/attrib.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/attrib.c	2005-07-08 10:20:25.778163248 +0200
@@ -52,6 +52,13 @@ const struct innate {
 		     {  13, &(HFire_resistance), "cool", "warmer" },
 		     {   0, 0, 0, 0 } },
 
+#ifdef JEDI
+	jed_abil[] = { {   1, &(HStealth), "", ""},
+		       {   3, &(HTelepat), "disturbances in the force", "your grip on the force lessen" },
+		       {   5, &(HSee_invisible), "your vision sharpen", "your vision blurring" },
+		       {   7, &(HFast), "quick", "slow" } },
+#endif
+			
 	kni_abil[] = { {	 7, &(HFast), "quick", "slow" },
 		     {	 0, 0, 0, 0 } },
 
@@ -631,6 +638,9 @@ int oldlevel, newlevel;
 	case PM_FLAME_MAGE:	abil = fla_abil;	break;
 	case PM_HEALER:         abil = hea_abil;	break;
 	case PM_ICE_MAGE:	abil = ice_abil;	break;
+#ifdef JEDI
+	case PM_JEDI:		abil = jed_abil;	break;
+#endif
 	case PM_KNIGHT:         abil = kni_abil;	break;
 	case PM_MONK:           abil = mon_abil;	break;
 	case PM_NECROMANCER:	abil = nec_abil;	break;
diff -pruN slashem-0.0.7E7F1-orig/src/dothrow.c slashem-0.0.7E7F1/src/dothrow.c
--- slashem-0.0.7E7F1-orig/src/dothrow.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/dothrow.c	2005-07-08 10:20:25.781162792 +0200
@@ -1059,6 +1059,19 @@ int thrown;
             else setuqwep(obj);*/
 		return;
 	    }
+#ifdef JEDI
+	    if (u.dz < 0 && Role_if(PM_JEDI) &&
+		    is_lightsaber(obj) && obj->lamplit && !impaired &&
+		    P_SKILL(weapon_type(obj)) >= P_SKILLED) {
+		pline("%s the %s and returns to your hand!",
+		      Tobjnam(obj, "hit"), ceiling(u.ux,u.uy));
+		obj = addinv(obj);
+		(void) encumber_msg();
+		setuwep(obj, TRUE);
+		u.twoweap = twoweap;
+		return;
+	    }
+#endif
 #ifdef FIREARMS
 	    /* [ALI]
 	     * Grenades are armed but are then processed by toss_up/hitfloor
@@ -1219,9 +1232,23 @@ int thrown;
 		if (obj != uball) (void) mpickobj(u.ustuck,obj);
 	} else {
 		/* the code following might become part of dropy() */
+#ifndef JEDI
 		if (obj->oartifact == ART_MJOLLNIR &&
 			Role_if(PM_VALKYRIE) && rn2(100)) {
 		    /* we must be wearing Gauntlets of Power to get here */
+#else
+		if ((obj->oartifact == ART_MJOLLNIR &&
+			Role_if(PM_VALKYRIE) && rn2(100)) ||
+		    (is_lightsaber(obj) && obj->lamplit && Role_if(PM_JEDI) &&
+		     P_SKILL(weapon_type(obj)) >= P_SKILLED)){
+		    /* we must be wearing Gauntlets of Power to get here */
+		    /* or a Jedi with a lightsaber */
+		    if (Role_if(PM_JEDI) && u.uen < 5){
+			You("don't have enough force to call %s.", the(xname(obj)));
+		    } else {
+		      if (Role_if(PM_JEDI))
+			u.uen -= 5;
+#endif
 		    sho_obj_return_to_u(obj);	    /* display its flight */
 
 		    if (!impaired && rn2(100)) {
@@ -1259,6 +1286,9 @@ int thrown;
 		    }
 		    thrownobj = (struct obj*)0;
 		    return;
+#ifdef JEDI
+		    }
+#endif
 		}
 
 		if (!IS_SOFT(levl[bhitpos.x][bhitpos.y].typ) &&
diff -pruN slashem-0.0.7E7F1-orig/src/engrave.c slashem-0.0.7E7F1/src/engrave.c
--- slashem-0.0.7E7F1-orig/src/engrave.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/engrave.c	2005-07-08 10:20:25.784162336 +0200
@@ -55,6 +55,9 @@ static const char *random_mesg[] = {
 	"Silly rabbit, Trix are for kids!", /* Trix */
  	"I'll be back!", /* Terminator */
  	"That is not dead which can eternal lie.", /* HPL */
+#ifdef JEDI
+	"May the force be with you!",
+#endif
 };
 
 char *
@@ -845,12 +848,6 @@ doengrave()
 		break;
 
 	    case WEAPON_CLASS:
-#ifdef LIGHTSABERS
-		if (is_lightsaber(otmp)) {
-			if (otmp->lamplit) type = BURN;
-			else Your("%s is deactivated!", aobjnam(otmp,"are"));
-		} else
-#endif
 		if(is_blade(otmp)) {
 		    if ((int)otmp->spe > -3)
 			type = ENGRAVE;
@@ -860,6 +857,12 @@ doengrave()
 		break;
 
 	    case TOOL_CLASS:
+#ifdef LIGHTSABERS
+		if (is_lightsaber(otmp)) {
+			if (otmp->lamplit) type = BURN;
+			else Your("%s is deactivated!", aobjnam(otmp,"are"));
+		} else
+#endif
 		if(otmp == ublindf) {
 		    pline(
 		"That is a bit difficult to engrave with, don't you think?");
diff -pruN slashem-0.0.7E7F1-orig/src/lock.c slashem-0.0.7E7F1/src/lock.c
--- slashem-0.0.7E7F1-orig/src/lock.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/lock.c	2005-07-08 10:20:25.787161880 +0200
@@ -666,6 +666,12 @@ doforce()		/* try to force a chest with 
 			&& mtmp->m_ap_type != M_AP_OBJECT) {
 
 		if (mtmp->isshk || mtmp->data == &mons[PM_ORACLE])		
+#ifdef JEDI
+		  if (Role_if(PM_JEDI))
+		    verbalize("Your puny Jedi tricks won't work on me!"); /* Return of the Jedi */
+		  else
+#endif
+
 		    verbalize("What do you think you are, a Jedi?"); /* Phantom Menace */
 		else
 		    pline("I don't think %s would appreciate that.", mon_nam(mtmp));
diff -pruN slashem-0.0.7E7F1-orig/src/makemon.c slashem-0.0.7E7F1/src/makemon.c
--- slashem-0.0.7E7F1-orig/src/makemon.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/makemon.c	2005-07-08 10:20:25.790161424 +0200
@@ -245,6 +245,9 @@ register struct monst *mtmp;
 #ifdef YEOMAN
 				|| mm == PM_CHIEF_YEOMAN_WARDER || mm == PM_YEOMAN_WARDER
 #endif
+#ifdef JEDI
+				|| mm == PM_JEDI || mm == PM_PADAWAN
+#endif
 		) {
 		    int w1 = 0, w2 = 0;
 		    switch (mm) {
@@ -347,6 +350,33 @@ register struct monst *mtmp;
 #endif
 			  w1 = rn2(2) ? BROADSWORD : LONG_SWORD;
 			  break;
+#ifdef JEDI
+			case PM_PADAWAN:
+			case PM_JEDI:
+			  switch(rnd(3)){
+			    case 1: mongets(mtmp, RED_LIGHTSABER); break;
+			    case 2: mongets(mtmp, BLUE_LIGHTSABER); break;
+			    case 3: mongets(mtmp, GREEN_LIGHTSABER); break;
+			    default: break;
+			  }
+			  break;
+			case PM_THE_JEDI_MASTER:
+			  mongets(mtmp, BLUE_LIGHTSABER);
+			  mongets(mtmp, SPEED_BOOTS);
+			  mongets(mtmp, AMULET_OF_REFLECTION);
+			  break;
+			case PM_STORMTROOPER:
+#ifdef FIREARMS
+			  if (rn2(2)) {
+			  	w1 = HEAVY_MACHINE_GUN;
+			  	m_initthrow(mtmp, BULLET, 50);
+			  } else {
+			  	w1 = SUBMACHINE_GUN;
+			  	m_initthrow(mtmp, BULLET, 30);
+			  }
+			  break;
+#endif // FIREARMS
+#endif // JEDI
 			case PM_SHOPKEEPER:
 #ifdef FIREARMS
 			  (void) mongets(mtmp,SHOTGUN);
@@ -991,6 +1021,9 @@ register struct	monst	*mtmp;
 				mongets(mtmp, TALLOW_CANDLE);
 #endif
 			case PM_WATCH_CAPTAIN: mac = -2; break;
+#ifdef JEDI
+			case PM_STORMTROOPER: mac = 4; break;
+#endif
 			default: impossible("odd mercenary %d?", monsndx(ptr));
 				mac = 0;
 				break;
diff -pruN slashem-0.0.7E7F1-orig/src/mon.c slashem-0.0.7E7F1/src/mon.c
--- slashem-0.0.7E7F1-orig/src/mon.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/mon.c	2005-07-08 10:20:25.796160512 +0200
@@ -1386,6 +1386,33 @@ struct monst *magr,	/* monster that is c
 	if(magr->data == &mons[PM_WOODCHUCK] && mdef->data == &mons[PM_ORACLE])
 		return ALLOW_M|ALLOW_TM;
 
+#ifdef JEDI
+	/* Stormtroopers vs. Padawans */
+	if(magr->data == &mons[PM_STORMTROOPER] && mdef->data == &mons[PM_PADAWAN])
+		return ALLOW_M|ALLOW_TM;
+	/* and vice versa */
+	if(mdef->data == &mons[PM_STORMTROOPER] && magr->data == &mons[PM_PADAWAN])
+		return ALLOW_M|ALLOW_TM;
+	/* Stormtroopers vs. Jedi */
+	if(magr->data == &mons[PM_STORMTROOPER] && mdef->data == &mons[PM_JEDI])
+		return ALLOW_M|ALLOW_TM;
+	/* and vice versa */
+	if(mdef->data == &mons[PM_STORMTROOPER] && magr->data == &mons[PM_JEDI])
+		return ALLOW_M|ALLOW_TM;
+	/* Stormtroopers vs. The Jedi Master */
+	if(magr->data == &mons[PM_STORMTROOPER] && mdef->data == &mons[PM_THE_JEDI_MASTER])
+		return ALLOW_M|ALLOW_TM;
+	/* and vice versa */
+	if(mdef->data == &mons[PM_STORMTROOPER] && magr->data == &mons[PM_THE_JEDI_MASTER])
+		return ALLOW_M|ALLOW_TM;
+	/* Jedi vs. Lord Sidious */
+	if(magr->data == &mons[PM_LORD_SIDIOUS] && mdef->data == &mons[PM_JEDI])
+		return ALLOW_M|ALLOW_TM;
+	/* and vice versa */
+	if(mdef->data == &mons[PM_LORD_SIDIOUS] && magr->data == &mons[PM_JEDI])
+		return ALLOW_M|ALLOW_TM;
+#endif
+
 	return 0L;
 }
 
diff -pruN slashem-0.0.7E7F1-orig/src/monst.c slashem-0.0.7E7F1/src/monst.c
--- slashem-0.0.7E7F1-orig/src/monst.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/monst.c	2005-07-08 10:20:25.808158688 +0200
@@ -3935,6 +3935,16 @@ struct permonst _mons2[] = {
 	M1_HUMANOID|M1_OMNIVORE,
 	M2_NOPOLY|M2_HUMAN|M2_MERC|M2_STALK|M2_PEACEFUL|M2_STRONG|M2_COLLECT,
 	M3_INFRAVISIBLE, CLR_GREEN),
+#ifdef JEDI
+    MON("stormtrooper", S_HUMAN,
+	LVL(8, 10, 5, 25, -5), (G_NOGEN|G_LGROUP),
+	A(ATTK(AT_WEAP, AD_PHYS, 2, 4), ATTK(AT_WEAP, AD_PHYS, 2, 4),
+	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+	SIZ(WT_HUMAN, 400, 0, MS_SOLDIER, MZ_HUMAN), 0, 0,
+	M1_HUMANOID|M1_OMNIVORE,
+	M2_NOPOLY|M2_HUMAN|M2_MERC|M2_HOSTILE|M2_STRONG|M2_COLLECT,
+	M3_INFRAVISIBLE, CLR_WHITE),
+#endif
 	/* Unique humans not tied to quests.
 	 */
     MON("Medusa", S_HUMAN,
@@ -4764,6 +4774,24 @@ struct permonst _mons2[] = {
 	M2_NOPOLY|M2_HUMAN|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE,
 	HI_DOMESTIC),
 #endif
+#ifdef JEDI
+    MON("padawan", S_HUMAN,
+	LVL(10, 10, 10, 1, 3), G_NOGEN,
+	A(ATTK(AT_WEAP, AD_PHYS, 2, 6), ATTK(AT_WEAP, AD_PHYS, 2, 6),
+	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+	SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0,
+	M1_HUMANOID|M1_OMNIVORE,
+	M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE,
+	HI_DOMESTIC),
+    MON("jedi", S_HUMAN,
+	LVL(10, 10, 10, 1, 3), G_NOGEN,
+	A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_WEAP, AD_PHYS, 4, 6),
+	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+	SIZ(WT_HUMAN, 400, 0, MS_GUARDIAN, MZ_HUMAN), 0, 0,
+	M1_HUMANOID|M1_OMNIVORE,
+	M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_COLLECT, M3_INFRAVISIBLE,
+	HI_DOMESTIC),
+#endif
 	/* Wizard should be last.  Sigh. */
     MON("wizard", S_HUMAN,
 	LVL(10, 12, 10, 3, 0), G_NOGEN,
@@ -5013,6 +5041,16 @@ struct permonst _mons2[] = {
 	M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_MALE|M2_COLLECT|M2_MAGIC,
 	M3_CLOSE, HI_LORD),
 #endif
+#ifdef JEDI
+    MON("The Jedi Master", S_HUMAN,
+	LVL(20, 18, -5, 50, 10), (G_NOGEN|G_UNIQ|G_NOCORPSE),
+	A(ATTK(AT_WEAP, AD_PHYS, 1, 6), ATTK(AT_WEAP, AD_PHYS, 1, 6),
+	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+	SIZ(WT_HUMAN, 400, 0, MS_LEADER, MZ_HUMAN), 0, 0,
+	M1_HUMANOID|M1_OMNIVORE,
+	M2_NOPOLY|M2_HUMAN|M2_PEACEFUL|M2_STRONG|M2_MALE|M2_COLLECT|M2_MAGIC,
+	M3_CLOSE, HI_LORD),
+#endif
 
 /*
  * quest nemeses
@@ -5264,6 +5302,18 @@ struct permonst _mons2[] = {
 	  M2_NASTY|M2_COLLECT|M2_MAGIC,
 	M3_WANTSARTI|M3_WAITFORU, HI_LORD),
 #endif
+#ifdef JEDI
+    MON("Lord Sidious", S_HUMAN,
+	LVL(20, 10, 5, 10, -10), (G_NOGEN|G_UNIQ),
+	A(ATTK(AT_WEAP, AD_PHYS, 4, 6), ATTK(AT_MAGC, AD_MAGM, 0, 0),
+	  ATTK(AT_MAGC, AD_SPEL, 0, 0), ATTK(AT_MAGC, AD_SPEL, 0, 0),
+	  NO_ATTK, NO_ATTK),
+	SIZ(WT_HUMAN, 400, 0, MS_NEMESIS, MZ_HUMAN), MR_POISON, 0,
+	M1_HUMANOID|M1_OMNIVORE,
+	M2_NOPOLY|M2_HUMAN|M2_PNAME|M2_STRONG|M2_MALE|M2_HOSTILE|
+	  M2_NASTY|M2_COLLECT|M2_MAGIC,
+	M3_WANTSARTI|M3_WAITFORU, HI_LORD),
+#endif
 
 /*
  * quest "guardians"
diff -pruN slashem-0.0.7E7F1-orig/src/mplayer.c slashem-0.0.7E7F1/src/mplayer.c
--- slashem-0.0.7E7F1-orig/src/mplayer.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/mplayer.c	2005-07-08 10:20:25.811158232 +0200
@@ -230,6 +230,20 @@ register boolean special;
 		    if (rn2(4)) helm = HELM_OF_BRILLIANCE;
 		    shield = STRANGE_OBJECT;
 		    break;
+#ifdef JEDI
+		case PM_JEDI:
+		case PM_PADAWAN:
+		    switch(rnd(3)){
+		      case 1: weapon = RED_LIGHTSABER; break;
+		      case 2: weapon = BLUE_LIGHTSABER; break;
+		      case 3: weapon = GREEN_LIGHTSABER; break;
+		    }
+		    cloak = STRANGE_OBJECT;
+		    armor = rn2(2) ? ROBE : ROBE_OF_POWER;
+		    helm = STRANGE_OBJECT;
+		    shield = STRANGE_OBJECT;
+		    break;
+#endif
 		default: impossible("bad mplayer monster");
 		    weapon = 0;
 		    break;
diff -pruN slashem-0.0.7E7F1-orig/src/mthrowu.c slashem-0.0.7E7F1/src/mthrowu.c
--- slashem-0.0.7E7F1-orig/src/mthrowu.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/mthrowu.c	2005-07-08 10:20:25.813157928 +0200
@@ -65,6 +65,14 @@ const char *name;	/* if null, then forma
 		if(Blind || !flags.verbose) pline("It misses.");
 		else You("are almost hit by %s.", onm);
 		return(0);
+#ifdef JEDI
+	} else if (Role_if(PM_JEDI) && uwep && is_lightsaber(uwep) &&
+		uwep->lamplit && P_SKILL(weapon_type(uwep)) >= P_SKILLED &&
+		rn2(5)){ // dodge four of five missiles, even when blind
+			 // see "A new hope" for blindness reference
+		You("dodge %s with %s.", onm, yname(uwep));
+		return(0);
+#endif
 	} else {
 		if(Blind || !flags.verbose) You("are hit!");
 		else You("are hit by %s%s", onm, exclam(dam));
diff -pruN slashem-0.0.7E7F1-orig/src/role.c slashem-0.0.7E7F1/src/role.c
--- slashem-0.0.7E7F1-orig/src/role.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/role.c	2005-07-08 10:20:25.816157472 +0200
@@ -201,6 +201,38 @@ const struct Role roles[] = {
 	0, 1, 0, 
 	2, 10, A_INT, SPE_CONE_OF_COLD,    -4 /* From old role.c */
 },
+#ifdef JEDI
+{	{"Jedi", 0}, {
+	{"Youngling",     0},
+	//{"Padawan",       0},
+	{"Padawan",       0},
+	//{"Jedi Apprentice", 0},
+	{"Jedi Apprentice", 0},
+	//{"Jedi Knight",    0},
+	{"Jedi Knight",    0},
+	{"Jedi Hero",      0},
+	{"Jedi Master",    0} },
+	"the Light Side", "the Force", "the Dark Side",
+	"Jed", "the Jedi Temple", "the Outer Rim",
+	PM_JEDI, NON_PM, PM_LITTLE_DOG,
+	PM_THE_JEDI_MASTER, PM_PADAWAN, PM_LORD_SIDIOUS,
+	PM_STORMTROOPER, PM_STORMTROOPER, S_HUMAN, S_HUMAN,
+#if 0
+	???
+#endif
+	ART_LIGHTSABER_PROTOTYPE,
+	MH_HUMAN|MH_ELF|MH_HOBBIT| 
+	ROLE_MALE|ROLE_FEMALE|ROLE_LAWFUL,
+	/* Str Int Wis Dex Con Cha */
+	{  10,  7, 14, 12, 10, 14 },
+	{  30, 15, 15, 10, 20, 10 },
+	/* Init   Lower  Higher */
+	{ 15, 4,  0, 8,  2, 4 },	/* Hit points */
+	{  1, 4,  0, 1,  0, 4 },10,	/* Energy */
+	0, 12 , -1, 
+	2, 10, A_INT, SPE_CHARM_MONSTER,    -4
+},
+#endif
 {	{"Knight", 0}, {
 	{"Gallant",     0},
 	{"Esquire",     0},
diff -pruN slashem-0.0.7E7F1-orig/src/tech.c slashem-0.0.7E7F1/src/tech.c
--- slashem-0.0.7E7F1-orig/src/tech.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/tech.c	2005-07-08 10:20:25.819157016 +0200
@@ -80,6 +80,10 @@ STATIC_OVL NEARDATA const char *tech_nam
 	"power surge",
 	"spirit bomb",
 	"draw blood",
+#ifdef JEDI
+	"jedi jump",
+	"telekinesis",
+#endif
 	""
 };
 
@@ -106,6 +110,11 @@ static const struct innate_tech 
 		       {  12, T_POWER_SURGE, 1},
 		       {  20, T_SIGIL_DISCHARGE, 1},
 		       {   0, 0, 0} },
+#ifdef JEDI
+	jed_tech[] = { {   1, T_JEDI_JUMP, 1},
+		       {   8, T_TELEKINESIS, 1},
+		       {   0, 0, 0,} },
+#endif
 	kni_tech[] = { {   1, T_TURN_UNDEAD, 1},
 		       {   1, T_HEAL_HANDS, 1},
 		       {   0, 0, 0} },
@@ -1480,6 +1489,89 @@ int tech_no;
 			(const char *)0);
 		t_timeout = rn1(1000, 500);
 		break;
+#ifdef JEDI
+	    case T_JEDI_JUMP:
+		if (u.uen < 25){
+			You("can't channel the force around you.");
+			break;
+		}
+		u.uen -= 25;
+		jump((techlev(tech_no)/5)+1);
+		t_timeout = 50;
+		break;
+	    case T_TELEKINESIS:
+	      {
+		coord cc;
+		struct trap *ttrap;
+		cc.x=u.ux;
+		cc.y=u.uy;
+		pline("Where do you want to apply telekinesis?");
+		if (getpos(&cc, TRUE, "apply telekinesis where") < 0)
+			break;
+		if (!cansee(cc.x, cc.y)){
+			You("can't see what's there!");
+			break;
+		}
+		if ((ttrap=t_at(cc.x, cc.y)) && ttrap->tseen){
+		  if (yn("Disarm the trap?") == 'y'){
+		    techt_inuse(tech_no) = 1;
+		    /* copied from trap.c */
+		switch(ttrap->ttyp) {
+			case BEAR_TRAP:
+			case WEB:
+				return disarm_holdingtrap(ttrap);
+			case LANDMINE:
+				return disarm_landmine(ttrap);
+			case SQKY_BOARD:
+				return disarm_squeaky_board(ttrap);
+			case DART_TRAP:
+				return disarm_shooting_trap(ttrap, DART);
+			case ARROW_TRAP:
+				return disarm_shooting_trap(ttrap, ARROW);
+			case RUST_TRAP:
+				return disarm_rust_trap(ttrap);
+			case FIRE_TRAP:
+				return disarm_fire_trap(ttrap);
+			default:
+				You("cannot disable %s trap.", (u.dx || u.dy) ? "that" : "this");
+				return 1;
+		    }
+		  } else if(yn("Spring this trap?")=='y') {
+		    switch(ttrap->ttyp) {
+		      case LANDMINE: 
+			You("trigger the landmine.");
+			pline("KABLAAAM!");
+			blow_up_landmine(ttrap);
+			fill_pit(cc.x, cc.y);
+			newsym(cc.x, cc.y);
+			break;
+		      case ROLLING_BOULDER_TRAP:
+		      {
+			int style = ROLL | (ttrap->tseen ? LAUNCH_KNOWN : 0);
+			You("trigger the trap!");
+			if(!launch_obj(BOULDER, ttrap->launch.x, ttrap->launch.y, ttrap->launch2.x, ttrap->launch2.y, style)){
+			  deltrap(ttrap);
+			  newsym(cc.x, cc.y);
+			  pline("But no boulder was released.");
+		        }
+		      }
+		      default:
+		        You("can't spring this trap.");
+		        break;
+		    }
+		  }
+		} else if ((otmp = level.objects[cc.x][cc.y]) != 0) {
+		  You("pick up an object from the %s.", surface(cc.x,cc.y));
+		  (void) pickup_object(otmp, 1L, TRUE);
+		  newsym(cc.x, cc.y);
+		} else {
+		  You("can't do anything there");
+		  break;
+		}
+		t_timeout = 250;
+		break;
+	      }
+#endif
 	    default:
 	    	pline ("Error!  No such effect (%i)", tech_no);
 		break;
@@ -1628,6 +1720,9 @@ role_tech()
 		case PM_FLAME_MAGE:	return (fla_tech);
 		case PM_HEALER:		return (hea_tech);
 		case PM_ICE_MAGE:	return (ice_tech);
+#ifdef JEDI
+		case PM_JEDI:		return (jed_tech);
+#endif
 		case PM_KNIGHT:		return (kni_tech);
 		case PM_MONK: 		return (mon_tech);
 		case PM_NECROMANCER:	return (nec_tech);
diff -pruN slashem-0.0.7E7F1-orig/src/trap.c slashem-0.0.7E7F1/src/trap.c
--- slashem-0.0.7E7F1-orig/src/trap.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/trap.c	2005-07-08 10:20:25.825156104 +0200
@@ -14,12 +14,14 @@ STATIC_DCL void FDECL(cnv_trap_obj, (int
 STATIC_DCL void FDECL(move_into_trap, (struct trap *));
 STATIC_DCL int FDECL(try_disarm, (struct trap *,BOOLEAN_P));
 STATIC_DCL void FDECL(reward_untrap, (struct trap *, struct monst *));
+/*
 STATIC_DCL int FDECL(disarm_holdingtrap, (struct trap *));
 STATIC_DCL int FDECL(disarm_rust_trap, (struct trap *));
 STATIC_DCL int FDECL(disarm_fire_trap, (struct trap *));
 STATIC_DCL int FDECL(disarm_landmine, (struct trap *));
 STATIC_DCL int FDECL(disarm_squeaky_board, (struct trap *));
 STATIC_DCL int FDECL(disarm_shooting_trap, (struct trap *, int));
+*/
 STATIC_DCL int FDECL(try_lift, (struct monst *, struct trap *, int, BOOLEAN_P));
 STATIC_DCL int FDECL(help_monster_out, (struct monst *, struct trap *));
 STATIC_DCL boolean FDECL(thitm, (int,struct monst *,struct obj *,int,BOOLEAN_P));
@@ -3333,6 +3335,11 @@ boolean force_failure;
 	int ttype = ttmp->ttyp;
 	boolean under_u = (!u.dx && !u.dy);
 	boolean holdingtrap = (ttype == BEAR_TRAP || ttype == WEB);
+
+#ifdef JEDI
+	if (tech_inuse(T_TELEKINESIS) && !force_failure)
+		return 2;
+#endif
 	
 	/* Test for monster first, monsters are displayed instead of trap. */
 	if (mtmp && (!mtmp->mtrapped || !holdingtrap)) {
@@ -3433,7 +3440,7 @@ struct monst *mtmp;
 	}
 }
 
-STATIC_OVL int
+int
 disarm_holdingtrap(ttmp) /* Helge Hafting */
 struct trap *ttmp;
 {
@@ -3465,7 +3472,7 @@ struct trap *ttmp;
 	return 1;
 }
 
-STATIC_OVL int
+int
 disarm_landmine(ttmp) /* Helge Hafting */
 struct trap *ttmp;
 {
@@ -3477,7 +3484,7 @@ struct trap *ttmp;
 	return 1;
 }
 
-STATIC_OVL int
+int
 disarm_rust_trap(ttmp) /* Paul Sonier */
 struct trap *ttmp;
 {
@@ -3499,7 +3506,7 @@ static NEARDATA const char oil[] = { ALL
 static NEARDATA const char disarmpotion[] = { ALL_CLASSES, POTION_CLASS, 0 };
 
 /* water disarms, oil will explode */
-STATIC_OVL int
+int
 disarm_fire_trap(ttmp) /* Paul Sonier */
 struct trap *ttmp;
 {
@@ -3533,7 +3540,7 @@ struct trap *ttmp;
 }
 
 /* it may not make much sense to use grease on floor boards, but so what? */
-STATIC_OVL int
+int
 disarm_squeaky_board(ttmp)
 struct trap *ttmp;
 {
@@ -3566,7 +3573,7 @@ struct trap *ttmp;
 }
 
 /* removes traps that shoot arrows, darts, etc. */
-STATIC_OVL int
+int
 disarm_shooting_trap(ttmp, otyp)
 struct trap *ttmp;
 int otyp;
diff -pruN slashem-0.0.7E7F1-orig/src/u_init.c slashem-0.0.7E7F1/src/u_init.c
--- slashem-0.0.7E7F1-orig/src/u_init.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/u_init.c	2005-07-08 10:20:25.830155344 +0200
@@ -102,6 +102,25 @@ static struct trobj Ice_Mage[] = {
 	{ UNDEF_TYP, UNDEF_SPE, SPBOOK_CLASS, 1, 1 },
 	{ 0, 0, 0, 0, 0 }
 };
+#ifdef JEDI
+static struct trobj Jedi[] = {
+	{ ROBE, 1, ARMOR_CLASS, 1, UNDEF_BLESS },
+	{ LEATHER_GLOVES, 0, ARMOR_CLASS, 1, UNDEF_BLESS },
+	{ 0, 0, 0, 0, 0 }
+};
+static struct trobj GreenSaber[] = {
+	{ GREEN_LIGHTSABER, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
+	{ 0, 0, 0, 0, 0, }
+};
+static struct trobj BlueSaber[] = {
+	{ BLUE_LIGHTSABER, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
+	{ 0, 0, 0, 0, 0, }
+};
+static struct trobj RedSaber[] = {
+	{ RED_LIGHTSABER, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
+	{ 0, 0, 0, 0, 0, }
+};
+#endif
 static struct trobj Knight[] = {
 	{ LONG_SWORD, 1, WEAPON_CLASS, 1, UNDEF_BLESS },
 	{ LANCE, 0, WEAPON_CLASS, 1, UNDEF_BLESS },
@@ -532,6 +551,19 @@ static const struct def_skill Skill_I[] 
     { P_NONE, 0 }
 };
 
+#ifdef JEDI
+static const struct def_skill Skill_J[] = {
+    { P_LIGHTSABER, P_EXPERT },
+    { P_SHORT_SWORD, P_BASIC }, { P_BROAD_SWORD, P_BASIC },
+    { P_LONG_SWORD, P_SKILLED }, { P_SABER, P_SKILLED },
+    { P_HEALING_SPELL, P_BASIC },
+#ifdef STEED
+    { P_RIDING, P_SKILLED },
+#endif
+    { P_TWO_WEAPON_COMBAT, P_BASIC }, { P_BARE_HANDED_COMBAT, P_EXPERT },
+    { P_NONE, 0 }
+};
+#endif
 static const struct def_skill Skill_K[] = {
     { P_DAGGER, P_BASIC },		{ P_KNIFE, P_BASIC },
     { P_AXE, P_SKILLED },		{ P_PICK_AXE, P_BASIC },
@@ -1095,6 +1127,19 @@ u_init()
 		else if(!rn2(5)) ini_inv(Magicmarker);
 		skill_init(Skill_I);
 		break;
+#ifdef JEDI
+	case PM_JEDI:
+		ini_inv(Jedi);
+		switch(rnd(3)) {
+			case 1: ini_inv(RedSaber); break;
+			case 2: ini_inv(BlueSaber); break;
+			case 3: ini_inv(GreenSaber); break;
+			default: break;
+		}
+		if(!rn2(2)) ini_inv(Blindfold);
+		skill_init(Skill_J);
+		break;
+#endif
 	case PM_KNIGHT:
 		ini_inv(Knight);
 		knows_class(WEAPON_CLASS);
diff -pruN slashem-0.0.7E7F1-orig/src/uhitm.c slashem-0.0.7E7F1/src/uhitm.c
--- slashem-0.0.7E7F1-orig/src/uhitm.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/uhitm.c	2005-07-08 10:20:25.834154736 +0200
@@ -282,7 +282,14 @@ register struct monst *mtmp;
 	    You("dishonorably attack the innocent!");
 	    adjalign(-1);
 	}
-
+#ifdef JEDI
+/* as well as for the way of the Jedi */
+	if (Role_if(PM_JEDI) && mtmp->mpeaceful &&
+	    u.ualign.record > -10) {
+	    You("violate the way of the Jedi!");
+	    adjalign(-1);
+	}
+#endif
 /*	Adjust vs. (and possibly modify) monster state.		*/
 
 	if(mtmp->mstun) tmp += 2;
@@ -326,6 +333,18 @@ register struct monst *mtmp;
 		   tmp += (u.ulevel / 9) + 1;
 		}
 	}
+#ifdef JEDI
+	if(Role_if(PM_JEDI) && !Upolyd) {
+		if (((uwep && is_lightsaber(uwep) && uwep->lamplit) ||
+		    (uswapwep && u.twoweap && is_lightsaber(uswapwep) && uswapwep->lamplit)) &&
+		   (uarm &&
+		   (uarm->otyp < ROBE || uarm->otyp > ROBE_OF_WEAKNESS))){
+		    char yourbuf[BUFSZ];
+		    You("can't use %s %s effectively in this armor...", shk_your(yourbuf, uwep), xname(uwep));
+		    tmp-=20; // sorry
+		}
+	}
+#endif
 	/* special class effect uses... */
 	if (tech_inuse(T_KIII)) tmp += 4;
 	if (tech_inuse(T_BERSERK)) tmp += 2;
@@ -894,7 +913,6 @@ int thrown;
 		ispoisoned = TRUE;
 
 	    noeffect = objenchant < canhitmon && !ispoisoned;
-
 	    Strcpy(saved_oname, cxname(obj));
 	    if(obj->oclass == WEAPON_CLASS || is_weptool(obj) ||
 	       obj->oclass == GEM_CLASS) {
@@ -994,6 +1012,30 @@ int thrown;
 			}
 			hittxt = TRUE;
 		    }
+#ifdef JEDI
+		    else if (obj == uwep &&
+			  (Role_if(PM_JEDI) && is_lightsaber(obj)) &&
+			  ((wtype = uwep_skill_type()) != P_NONE &&
+			    P_SKILL(wtype) >= P_SKILLED) &&
+			  ((monwep = MON_WEP(mon)) != 0 &&
+			   !is_lightsaber(monwep) && // no cutting other lightsabers :)
+			   !monwep->oartifact && // no cutting artifacts either
+			   !obj_resists(monwep,
+				 50 + 15 * greatest_erosion(obj), 100))) {
+			setmnotwielded(mon,monwep);
+			MON_NOWEP(mon);
+			mon->weapon_check = NEED_WEAPON;
+			Your("%s cuts %s %s in half!",
+			      xname(obj),
+			      s_suffix(mon_nam(mon)), xname(monwep));
+			m_useup(mon, monwep);
+			/* If someone just shattered MY weapon, I'd flee! */
+			if (rn2(4)) {
+			    monflee(mon, d(2,3), TRUE, TRUE);
+			}
+			hittxt = TRUE;
+		    }
+#endif
 
 		    if (obj->oartifact &&
 			artifact_hit(&youmonst, mon, obj, &tmp, dieroll)) {
diff -pruN slashem-0.0.7E7F1-orig/src/weapon.c slashem-0.0.7E7F1/src/weapon.c
--- slashem-0.0.7E7F1-orig/src/weapon.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/weapon.c	2005-07-08 10:20:25.838154128 +0200
@@ -1462,6 +1462,11 @@ struct obj *weapon;
 		if (type == P_LANCE) bonus++;
 	}
 #endif
+#ifdef JEDI
+	/* Jedi are trained in lightsabers, no to-hit penalty for them */
+	if (Role_if(PM_JEDI) && is_lightsaber(weapon))
+		bonus-=objects[weapon->otyp].oc_hitbon;
+#endif
 
     return bonus;
 }
@@ -1542,6 +1547,19 @@ struct obj *weapon;
 	}
 #endif
 
+#ifdef JEDI
+	/* Jedi are simply better */
+	if (Role_if(PM_JEDI) && weapon && is_lightsaber(weapon)){
+		switch (P_SKILL(type)){
+			case P_EXPERT: bonus +=3; /* fall through */
+			case P_SKILLED: bonus +=2; break;
+			case P_BASIC: break;
+			case P_UNSKILLED: break;
+			default: impossible("unknown lightsaber skill for a jedi"); break;
+		}
+	}
+#endif
+
     return bonus;
 }
 
diff -pruN slashem-0.0.7E7F1-orig/src/wield.c slashem-0.0.7E7F1/src/wield.c
--- slashem-0.0.7E7F1-orig/src/wield.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/src/wield.c	2005-07-08 10:20:25.841153672 +0200
@@ -903,6 +903,14 @@ boolean put_away;
 	You("extinguish %s before putting it away.", yname(obj));
 	end_burn(obj, TRUE);
     }
+#ifdef JEDI
+    else if (put_away && is_lightsaber(obj) && obj->lamplit &&
+	!artifact_light(obj)){
+	    char yourbuf[BUFSZ];
+	    You("deactivate %s %s before putting it away.", shk_your(yourbuf, obj), xname(obj));
+	    end_burn(obj, TRUE);
+    }
+#endif
 }
 
 /*wield.c*/
diff -pruN slashem-0.0.7E7F1-orig/sys/unix/Makefile.dat slashem-0.0.7E7F1/sys/unix/Makefile.dat
--- slashem-0.0.7E7F1-orig/sys/unix/Makefile.dat	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/sys/unix/Makefile.dat	2005-07-08 10:20:25.747167960 +0200
@@ -297,7 +297,7 @@ spec_levs: ../util/lev_comp \
 	touch spec_levs
 
 quest_levs: ../util/lev_comp \
-	Arch.des Barb.des Caveman.des Flame.des Healer.des Ice.des Knight.des \
+	Arch.des Barb.des Caveman.des Flame.des Healer.des Ice.des Jedi.des Knight.des \
 	Monk.des Necro.des Priest.des Ranger.des Rogue.des Samurai.des \
 	Tourist.des Slayer.des Valkyrie.des Wizard.des Yeoman.des
 	../util/lev_comp Arch.des
@@ -306,6 +306,7 @@ quest_levs: ../util/lev_comp \
 	../util/lev_comp Flame.des
 	../util/lev_comp Healer.des
 	../util/lev_comp Ice.des
+	../util/lev_comp Jedi.des
 	../util/lev_comp Knight.des
 	../util/lev_comp Monk.des
 	../util/lev_comp Necro.des
diff -pruN slashem-0.0.7E7F1-orig/util/makedefs.c slashem-0.0.7E7F1/util/makedefs.c
--- slashem-0.0.7E7F1-orig/util/makedefs.c	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/util/makedefs.c	2005-07-08 10:20:25.844153216 +0200
@@ -859,6 +859,9 @@ static const char *build_opts[] = {
 # else
 		"lightsabers",
 # endif
+# ifdef JEDI
+		"Jedi",
+# endif
 #endif
 #ifdef P_SPOON
 		"Houchou",
diff -pruN slashem-0.0.7E7F1-orig/win/share/monsters.txt slashem-0.0.7E7F1/win/share/monsters.txt
--- slashem-0.0.7E7F1-orig/win/share/monsters.txt	2005-07-02 09:24:44.000000000 +0200
+++ slashem-0.0.7E7F1/win/share/monsters.txt	2005-07-08 10:20:25.879147896 +0200
@@ -8925,6 +8925,25 @@ P = (108, 145, 182)
   MMMMJJJMJJJMMMMM
   MMMMMMMMMMMMMMMM
 }
+# tile 469 (stormtrooper)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMNNNNMMMMMMM
+  MMMMNNNNNNMMMMMM
+  MMMNNAAAANNMMMMM
+  MMMNNAMMMNNAMMMM
+  MMMMAAMMMNNAMMMM
+  MMMMMMMMNNAAMMMM
+  MMMMMMMNNAAMMMMM
+  MMMMMMNNAAMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMNNMMMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
 # tile 469 (Medusa)
 {
   MMMMMMMMMMMMMMMM
@@ -10692,6 +10711,44 @@ P = (108, 145, 182)
   MMMMMDDAMDDAMMMM
   MMMMMMMMMMMMMMMM
 }
+# tile 562 (padawan)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMNNNNMMMMMMM
+  MMMMNNNNNNMMMMMM
+  MMMNNAAAANNMMMMM
+  MMMNNAMMMNNAMMMM
+  MMMMAAMMMNNAMMMM
+  MMMMMMMMNNAAMMMM
+  MMMMMMMNNAAMMMMM
+  MMMMMMNNAAMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMNNMMMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
+# tile 562 (jedi)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMNNNNMMMMMMM
+  MMMMNNNNNNMMMMMM
+  MMMNNAAAANNMMMMM
+  MMMNNAMMMNNAMMMM
+  MMMMAAMMMNNAMMMM
+  MMMMMMMMNNAAMMMM
+  MMMMMMMNNAAMMMMM
+  MMMMMMNNAAMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMNNMMMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
 # tile 562 (wizard)
 {
   MMMMMMMMMMMMMMMM
@@ -11186,6 +11243,25 @@ P = (108, 145, 182)
   MMMMMHHAMHHAMMMM
   MMMMMMMMMMMMMMMM
 }
+# tile 562 (The Jedi Master)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMNNNNMMMMMMM
+  MMMMNNNNNNMMMMMM
+  MMMNNAAAANNMMMMM
+  MMMNNAMMMNNAMMMM
+  MMMMAAMMMNNAMMMM
+  MMMMMMMMNNAAMMMM
+  MMMMMMMNNAAMMMMM
+  MMMMMMNNAAMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMNNMMMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
 # tile 588 (Minion of Huhetotl)
 {
   MMMOPMMMMMMPOMMM
@@ -11623,6 +11699,25 @@ P = (108, 145, 182)
   MMMMKKJPMCJJMMMM
   MMMMMMMMMMMMMMMM
 }
+# tile 562 (Lord Sidious)
+{
+  MMMMMMMMMMMMMMMM
+  MMMMMMMMMMMMMMMM
+  MMMMMNNNNMMMMMMM
+  MMMMNNNNNNMMMMMM
+  MMMNNAAAANNMMMMM
+  MMMNNAMMMNNAMMMM
+  MMMMAAMMMNNAMMMM
+  MMMMMMMMNNAAMMMM
+  MMMMMMMNNAAMMMMM
+  MMMMMMNNAAMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMNNMMMMMMMM
+  MMMMMMNNAMMMMMMM
+  MMMMMMMAAMMMMMMM
+  MMMMMMMMMMMMMMMM
+}
 # tile 611 (student)
 {
   MMMMMMMMMMMMMMMM
