remove "gameobj init!" debug message
[mudsync.git] / mudsync / gameobj.scm
index cb844d1e65ab01a983ba81da808bd194c2e08993..0f4d7043e96918251bc1f70d85a63fde16c4566f 100644 (file)
@@ -33,7 +33,9 @@
 
             gameobj-occupants
             gameobj-actions
-            gameobj-self-destruct))
+            gameobj-self-destruct
+
+            dyn-ref))
 
 ;;; Gameobj
 ;;; =======
   (define occupants
     (message-ref replace-reply 'occupants #f))
   ;; Snarf all the occupants!
+  (display "replacing occupant\n")
   (when occupants
     (for-each
      (lambda (occupant)
   (list gameobj-replace-step-occupants))
 
 (define (run-replacement actor message replace-steps)
-  (define replaces (message-ref message 'replaces #f))
+  (define replaces (message-ref message 'replace #f))
   (when replaces
     (let ((replace-reply
            (<-wait actor replaces 'assist-replace)))
          (replace-step actor replace-reply))
        replace-steps))))
 
-
 ;; @@: This could be kind of a messy way of doing gameobj-init
 ;;   stuff.  If only we had generic methods :(
 (define-mhandler (gameobj-init actor message)
@@ -307,3 +309,21 @@ By default, this is whether or not the generally-visible flag is set."
   "Vanilla method for assisting in self-replacement for live hacking"
   (apply <-reply actor message
          (gameobj-replace-data* actor)))
+
+\f
+;;; Utilities every gameobj has
+;;; ---------------------------
+
+(define (dyn-ref gameobj special-symbol)
+  "Dynamically look up a special object from the gm"
+  (match special-symbol
+    ;; if it's a symbol, look it up dynamically
+    ((? symbol? _)
+     (message-ref
+      (<-wait gameobj (slot-ref gameobj 'gm) 'lookup-special
+              #:symbol special-symbol)
+      'val))
+    ;; if it's false, return nothing
+    ((#f #f))
+    ;; otherwise it's probably an address, return it as-is
+    (_ special-symbol)))