Index: common.bas
===================================================================
--- common.bas	(revision 190)
+++ common.bas	(working copy)
@@ -1114,6 +1114,12 @@
  RETURN readbadgenericname(index, game + ".dt6", 80, 24, 10, 1)
 END FUNCTION
 
+FUNCTION readattackcaption (byval index as integer) as string
+ DIM buf(40 + dimbinsize(binATTACK)) as integer
+ loadattackdata buf(), index
+ RETURN readbinstring(buf(), 37, 38)
+END FUNCTION
+
 FUNCTION readenemyname (byval index as integer) as string
  RETURN readbadgenericname(index, game + ".dt1", getbinsize(binDT1), 0, 16, 0)
 END FUNCTION
Index: common.bi
===================================================================
--- common.bi	(revision 190)
+++ common.bi	(working copy)
@@ -117,6 +117,7 @@
 DECLARE SUB dump_master_palette_as_hex (master_palette() as RGBColor)
 
 DECLARE FUNCTION readattackname (byval index as integer) as string
+DECLARE FUNCTION readattackcaption (byval index as integer) as string
 DECLARE FUNCTION readenemyname (byval index as integer) as string
 DECLARE FUNCTION readitemname (byval index as integer) as string
 DECLARE FUNCTION readitemdescription (byval index as integer) as string
Index: docs/plotdict.xml
===================================================================
--- docs/plotdict.xml	(revision 190)
+++ docs/plotdict.xml	(working copy)
@@ -488,6 +488,32 @@
 			<shortname>use door</shortname>
 			<description>Instantly uses the numbered door, just as if you had stepped into it. <note>An automatic <ref>wait</ref>(1) occurs immediately after this command.</note></description>
 		</command>
+		<command id="getdoorx">
+			<canon>get door x (number)</canon>
+			<shortname>get door x</shortname>
+			<description>Returns the x coordinate (in tiles) of the numbered door.</description>
+		</command>
+                <command id="getdoory">
+                        <canon>get door y (number)</canon>
+                        <shortname>get door y</shortname>
+                        <description>Returns the y coordinate (in tiles) of the numbered door.</description>
+                </command>
+                <command id="getdoordestinationid">
+                        <canon>get door destination id (number)</canon>
+                        <shortname>get door destination id</shortname>
+                        <description>Returns the door id of the door linked to by the numbered door. To get the door's location, use <ref>getdoorx</ref> and <ref>getdoory</ref> when the player is on the destination map. <note>A door's destination can vary depending on the current game state. Check your doorlinks if you get unexpected results!</note></description>
+			<seealso>
+				<ref>getdoorx</ref>
+				<ref>getdoory</ref>
+				<ref>getdoordestinationmap</ref>
+			</seealso>
+                </command>
+                <command id="getdoordestinationmap">
+                        <canon>get door destination map (number)</canon>
+                        <shortname>get door destination map</shortname>
+                        <description>Returns the map id of the door linked to by the numbered door. <note>A door's destination can vary depending on the current game state. Check your doorlinks if you get unexpected results!</note></description>
+                </command>
+
 		<command id="teleporttomap">
 			<canon>teleport to map (map, x, y)</canon>
 			<shortname>teleport to map</shortname>
@@ -1455,6 +1481,13 @@
 			<note>This command replaces the old <p>get attack name</p> which required you to use <p>atk:name -- 2</p> or the attack id number <p>-- 1</p></note>
 			</description>
 		</command>
+		<command id="readattackcaption">
+			<canon>read attack caption (ID, attack)</canon>
+			<shortname>read attack caption</shortname>
+			<description>This command will take the caption of <p>attack</p> and stick it in string #<p>ID</p>, overwriting its contents. Use the <p>atk:name</p> constants from your HSI file.
+                        <note>If you want to use this command with attack ID numbers, you must add 1 to the ID number.</note>
+			</description>
+		</command>
 		<command id="getglobalstring">
 			<canon>get global string (ID, global)</canon>
 			<shortname>get global string</shortname>
Index: plotscr.hsd
===================================================================
--- plotscr.hsd	(revision 190)
+++ plotscr.hsd	(working copy)
@@ -529,6 +529,12 @@
 518,menuitemtrueslot,1,0         #slot no. of a menu item as it appears in Custom (menu item handle)
 519,getheroslice,1,0             #get the slice representing a hero walkabout
 520,getNPCslice,1,0              #get the slice representing an NPC walkabout
+521,getdoorx,1,0                 #x coordinate of given door
+522,getdoory,1,0                 #y coordinate of given door
+523,getdoordestinationid,1,0     #door id of given door's exit
+524,getdoordestinationmap,1,0    #map number of given door's exit
+525,doorisactive,1,0             #returns true if the given door has an active link
+526,readattackcaption,2,0,0      #puts an attack's caption in a string (string id, attack id+1 / attack .hsi constant)
 end
 
 #--------------------------------------------------------------------------
Index: yetmore.bas
===================================================================
--- yetmore.bas	(revision 190)
+++ yetmore.bas	(working copy)
@@ -2882,6 +2882,49 @@
   IF npcref >= 0 THEN
    scriptret = find_plotslice_handle(npc(npcref).sl)
   END IF
+ CASE 521 '--get door x
+  IF bound_arg(retvals(0), 0, 99) THEN
+   scriptret = gam.map.door(retvals(0)).x
+  END IF
+ CASE 522 '--get door y
+  IF bound_arg(retvals(0), 0, 99) THEN
+   scriptret = gam.map.door(retvals(0)).y
+  END IF
+ CASE 523 '--get door destination id
+  IF bound_arg(retvals(0), 0, 99) THEN
+   FOR i = 0 TO 199
+    WITH gam.map.doorlinks(i)
+     IF retvals(0) = .source THEN
+      IF istag(.tag1, -1) AND istag(.tag2, -1) THEN 'Check tags to make sure this door is okay
+       scriptret = .dest
+       EXIT FOR
+      END IF
+     END IF
+    END WITH
+   NEXT i
+  END IF
+ CASE 524 '--get door destination map
+  IF bound_arg(retvals(0), 0, 99) THEN
+   FOR i = 0 TO 199
+    WITH gam.map.doorlinks(i)
+     IF retvals(0) = .source THEN
+      IF istag(.tag1, -1) AND istag(.tag2, -1) THEN 'Check tags to make sure this door is okay
+       scriptret = .dest_map
+       EXIT FOR
+      END IF
+     END IF
+    END WITH
+   NEXT i
+  END IF
+ CASE 525 '--door is active
+  IF bound_arg(retvals(0), 0, 99) THEN
+   scriptret = readbit(gam.map.door(retvals(0)).bits(),0,0)
+  END IF
+ CASE 526 '--read attack caption
+  IF valid_plotstr(retvals(0)) AND bound_arg(retvals(1), 1, gen(genMaxAttack)+1, "attack ID") THEN
+   plotstr(retvals(0)).s = readattackname(retvals(1) + 1)
+   scriptret = 1
+  END IF
 END SELECT
 
 END SUB
